Docsの目次

0.2.0への移行

Nagi 0.2.0は2026-10-20に公開しました。このページはHTTP、認証・認可、応答・rate予算、SQLite APIの変更点をまとめます。0.1.xのバイナリには新APIがありません。旧HTTP/issuerの併存によるpolicy省略・無期限proofの維持を避けるための変更です。

旧API/動作 checker診断と移行 同等業務の検証
@get/@post/@put/@delete SF01 migration。Appへmethod/path/明示Policy/handlerを登録 http_entrypoint、http_route_conflicts、error_routes、Python route/CRUD integration
serve(Db, port) SF01 migration。http.serve(app,port,options)。DBなしでも起動可能 High/保存Low nativeの起動・不正portとエラー処理
旧4引数route/5引数route_mapped SF01 migration。handlerの前へPolicyを追加し、第3引数をunit/AuthScope/Grantへ 既存HTTP checker/native、security_sf01_nativeの3経路
Principal、生subjectのissuer、unchecked parts SF01 migration/Rust API削除。verifier→dispatcher AuthScope→authorizer Grant→native submit 認証・認可サンプル、lease失効、失効/permit順序、marker/対象一回consume
組み込み/health 明示public routeへ登録。未登録は404 native High/Low・socket
組み込み/stream・/ws 暗黙注入を廃止。有限bytes応答は明示route。一般streaming/WSは未実装 暗黙routeがない検査。WS同等業務は未完了
raw html/Html/http.html 標準入口を拒否。textは文字列として返し、対応するtyped HTML subsetはHTTP APIのhttp.html_responseで構築。任意active HTMLは未対応 raw入口拒否、octet-stream/text・nosniff。旧HTML画面の移行はtyped subsetの範囲に限ります
任意Set-Cookie/CORS/CSP/cache/challenge/framing header appendでInvalid。CORS policy/finalizerを含む専用security層が所有 managed-header/wire回帰、release CIでのSession/CSRF/CORS browser/proxy受入
任意Host/未設定Optionsでの起動 起動前にtry http.authority(options, https_origin, wire_list, count_limit, byte_limit)。未設定・重複canonical・不正設定は起動Err。設定とproxy ACLの再上書きもErr parser/config、全route前拒否と実socket/peerのHost slice。全Cargo/4 OS・TLS/browser受入は別
HTTP/1.0・absolute/authority-form・*・Forwarded解釈 HTTP/1.1 origin-formへ。省略portと明示portを別登録し、proxyはForwarded系を除去しtrusted_proxyへ実peer IPを登録。runtime拒否400、1.0は505。404/405より先 有限通常requestのHost/port/IPv6/重複/peer負例と次の正常requestの容量復帰

Host変更は0.2.0に含まれます。旧任意Host、末尾dot、特殊port表記、proxy内部Hostは明示登録/書換えへ移行します。設定setterはmove+Resultで、先のOptionsを失敗時に復活させません。新APIは既resource registry/checked facts/sealed emissionを通り、High・保存Low・手書きLowで同じ契約を使います。

ローカル例ではlistener portとwire Hostを同じ値に設定します。既定supervised-serviceは8090とlocalhost:8090を使います。portを変える場合はNAGI_HTTP_AUTHORITYも合わせます。NAGI_HTTP_AUTHORITYは一つのHTTP Host authorityで、HTTPS external originとは別です。Unix:

NAGI_SAMPLE_PORT=8090 NAGI_HTTP_AUTHORITY=localhost:8090 nagic run --project test-nagi-code/library-examples/supervised-service

PowerShell:

$env:NAGI_SAMPLE_PORT = '8090'
$env:NAGI_HTTP_AUTHORITY = 'localhost:8090'
nagic run --project test-nagi-code/library-examples/supervised-service

HTTPS originとbackend Hostは別の起動情報です。serveの平文loopback HTTPだけでbrowser認証を完成と呼びません。ローカルTLS frontendならorigin https://localhost:8443、wire localhost:8080、実peer 127.0.0.1を設定し、証明書のtrust・Forwarded除去・HTTP/1.1終端を配置側で確認します。Secure Cookie例外やHost一致によるCSRF免除はありません。このHost移行の説明単独ではOrigin/CSRF/pre-loginの最終受入を示しません。

handlerは常にasync (http.Request,shared[S],A)->Result[http.Response,E]です。旧自動body/query/path抽出はhandlerで明示的にparse/decodeし、JSON応答をhttp.jsonへ変換します。既存CRUD/Resultの業務動作は移行後のnativeテストへ対応付けています。ルート登録はfallibleです。重複method/pathや曖昧なcapture patternはruntime登録Errになり、起動しません。動的pathの既存標準APIを維持し、旧decorator専用の静的path検査を新しい文字列推論仕様へ置き換えません。

AuthScope/Grantの所有Option/Resultと同task async呼出しは維持します。別Task/Actorへのowned delegationは破壊的変更でSameTask違反です。長い仕事はrequestと独立した業務commandを設計し、request proofをqueueへ保持して後で使うことはできません。容量待機後の保護operationは失効と同じgateでpermitを発行します。発行済みcommandの取消・rollbackは保証しません。

最小HTTP · 認証・認可と失敗表 · API reference · 移行テスト対応表

move/Task/spawnの意味論、SQLite Pool/Txの取得予算・close・actual join・Outcomeを変更しません。旧Db/dynamic SQLの一本化は独立SF05で行います。custom Rust/Axum hostは標準dispatcherの保証外のtrusted境界として残す理由を明記します。旧standard入口をそこへ自動fallbackする互換層はありません。

このページの目次

SF07の応答・rate移行

  • status先頭のempty/text/bytes/json/html_responseは、http.response_context(view(request))から借りたContextを第1引数へ追加します。すべてResult[Response, Error]なので直接返すかtryで処理し、factoryのResultをさらにokで包まないでください。
  • Appとroute固有のmapperは、どちらもfn(view[http.ResponseContext], E) -> Result[http.Response, Error]へ変更します。業務エラーEとmapper自身のErrorは別の失敗です。
  • Optionsへresponse_limits/with_response_limitsとrate_limits/with_rate_limitsを明示し、全routeにrate_policy/rate_routeを設定します。rate_subjectは認証済みsubjectを得るprofileだけで使います。新予算の暗黙defaultや、実行可能な無制限の旧factoryは設けません。
  • 引数順・process内の支持範囲・拒否時動作はAPIリファレンスを参照してください。release CIは4 OSとbrowser受入に成功しました。サンプル予算は説明用で、実運用の容量や遅延を保証しません。

SQLite SF05

旧入口 checker/Rust APIと移行 同等業務の検証
Db、db_open/exec/all/query/insert/update/write SF05 migration。runtime public Db/Sql削除。explicit Options、Pool/Tx、literal Query、Parametersへ security_sf05のHigh/保存Low/手書きLow元位置、native NULL/owned/manual row
query/all/execへstring/view 直接literalの sqlite.literal("...") が返すQueryを渡す Query保存/選択/関数返却とnative bind
constructorへ変数・連結・format・動的str 引数の元位置で拒否。値はbind、構造はreview済み有限Queryから選ぶ alias/直接import/同名ユーザー関数の拒否・positive
INSERT/UPDATE RETURNING、複数文exec 同Txのexec+readonly query。匿名?のSQL出現順へParametersを並べる。bootstrapはtrusted固定管理処理へ CRUD/inventory/task/device-settings/result API native
protected SQL 実Grant subject/targetをowner/tenant predicateへbind。予約後Grant.submitで実queueへ同期enqueue 別tenant/target0、失効先行enqueue0、受理先行の実SQL、capacity待ち中失効

通常checkへSQL engineを必須にしません。opt-in SQLは直接QueryとParameters builder列をprepare-onlyで検査し、不明構造と実値型/NULLはruntimeへ残します。FromRowとRust固定SQLはtrusted adapter境界で、request用動的factoryを再exportしません。Session世代管理はSF02に含まれます。保護された業務更新には引き続き同じSQLite file・同じTxの世代/owner predicateまたは再確認が必要で、任意adapterを自動検証する保証はありません。汎用queryへGrantを足すだけのtenant保証はありません。

SQLite · 保護操作 · SF05契約

Nagi 0.2.0 · Docsこのページのソース