Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/p28-01/gate/SPEC.md
T

15 KiB
Raw Blame History

P28-01-GATE 仕様(原 P28-01 whole-unit 受入ゲート、spec_ref の草案 r02)

  • 状態: 草案です。Root が原本の条件と受入を照合し、この文書を docs/plans/original-completion-2026-10-02/execution/p28-01/gate/SPEC.md として main に commit します。その実 SHA を base にしてから、通常の登録をします。数値や条件を独自に変えるものではありません。
  • 前提: Desktop の計画(P28-01_WHOLE_UNIT_GATE_PLAN_DESKTOP_233.md、bc222542…)と、Root の対応表(P28_WHOLE_UNIT_GATE_BINDING_FOLLOWUP_954528A.json)を、現在の正式記録に合わせて具体化したものです。

1. 原本の条件(変更しない)

  • 成果単位 P28-01「現HEADの性能基準」(work_packages.json の P28.remaining_deliverables[0])
    • work: 実Runtimeの20,000マス・200客・50職員・150施設を基準にTick、経路、snapshot、描画、保存を測る。
    • acceptance: 機種、ビルド、シード、速度、測定区間、平均・P95・最大を残す。
  • P28 の横断条件6件(cross_cutting_acceptance の原文):
    1. 原本条件とUI操作が一致
    2. Runtimeの実利用・会計・行動へ接続
    3. 途中保存・再起動で再現
    4. 異常/境界/中断を検証
    5. 関連回帰PASS
    6. 要件別ログとソースハッシュを保存
  • 分母は 30/88 で、部分点はありません。このゲートが完了した場合に限り、P28-01 を 22→23 とします。P28 パッケージは in_progress のままです。

2. baseline(9件。原本の原文は G0 と G1〜G6 の7件。U1/U2 は証拠の品質を保つための補助)

id 内容
G0 原 work と原 acceptance(§1 の原文)
G1〜G6 横断条件1〜6(§1 の原文)
U1 未達と、実施していない分岐を、合格に数えずに開示する
U2 再利用する各証拠が、それ自身の source・設定・engine・marker・入力・範囲に正確に適用できること(全証拠に共通の1つの入力を仮定しない)

U1 と U2 は原本の条件ではありません。「原本の9条件」として扱ってはいけません。

3. 結合する証拠(path は repository からの相対。SHA256 は完全な値)

Root は E1〜E7 の全ファイルを、bytes をそのまま $BUILD_OUTPUT_DIR/p28-01-gate-evidence/<repository からの相対 path> に読取専用で置きます。docs/ の下のものは、validation の checkout から直接読みます。

E1 collector の正式完了

  • docs/plans/original-completion-2026-10-02/execution/p28-01/COLLECTOR_FORMAL_COMPLETION_0F53A67.json 2886547ae2ccd000a85cf8374304f292f85ed2899d9ebe9818833600dc9ff55f
  • docs/plans/original-completion-2026-10-02/execution/p28-01/COLLECTOR_INDEPENDENT_REVIEW_5DB97D7.json 23eed6741996a7b9327fcceda2e852104315954105c9c09f0dfcdf35c88c8d41
  • 検査: task が completed で、4つの gate がすべて pass。Q 0f53a67210227207efa63045de88a9a7c6e45409。collector の4ファイル(execution/p28-01/collector/*)が、base の bytes と一致すること。

E2 統合版の全9 phase(実際の commit は db9d6132a8349928560dc4a4a99306d27a81e332。新しい Q での実測ではない)

  • artifacts/original-completion-2026-10-02/p28-01-runner-preflight-r01/full-measurement-db9d613-r01/run/execution.json a4d10e9b1a75a17b981792265338d64fac61178cb6f87dd646c5b486292db73c
  • 同じ dir の run/admission.json c4a3b5ba7a2b6427e55a6f85f037ded08e0c6bfd8c0a766647747ea9cc94378d
  • 同じ dir の ROOT_RAW_ACCEPTANCE_JOIN.json a76082f767e0a0d52cb70e2f66fa371b62a88754e9be319da3c08d4b48e78ba0(docs/…/INTEGRATED_FULL9_MEASUREMENT_DB9D613.json も同じ SHA)
  • 検査:
    • admission の commit と source map は1407件(651f7036…)。
    • R0/P1/P2/O0/P3/P4 の各 report に、metadata.machine、metadata.build、seed、speed、区間(開始/終了のゲーム分、wall 時刻、frame 数)、平均・P95・最大・標本数がある。
    • R の登録は 20,000/200/50/150 で、稼働は100施設。P2 の warm は 31分(150分と書き換えない)。
    • 描画の CPU は P1〜P4 だけで取得されている(件数 P1 150、P2 50、P3 2398、P4 745)。R0 と O0 は、CPU も GPU も null で、理由は zero_from_api_on_gl_compatibility_unsupported_or_unmeasured。GPU は全 phase で null と同じ理由。

E3 r02(経路・snapshot・保存・読込。headless・Ops OFF・x1 の観測だけ)

  • dir artifacts/original-completion-2026-10-02/p14-03-representative-perf-r01/:
    • run-r02/execution.json 553971f55635e529b48634ef86ad7d4198c8bafe04d5a6a5ef778a4de0439fc1
    • run-r02/readiness.json da93aecdd2c1648952e2a80382acb7e3f30cfe48a7e5df982315791161fedde2
    • run-r02/after/evidence/report.json f1d447937158a884a1b287c3b5be38b6e73b73c5d748f9576401877402dabe1b
    • run-r02/after/measure.stdout.log 294730160536fc862ca657654fbae290b874acc65b77a6d24aaccd9a859907f7
    • run-r02/before/evidence/report.json a070c061ca783aaec37152bf66ad6b6e6dc69b80d9c4c024eceab916d4c5d4e9
    • 実行した script: run-r02/measure.gd 95e5967835cb05ad96e8e6f257689d0bd831792aa9c228c022e3af81448ff76a、run-r02/guarded.gd c9deebb39ee643d312a77bae64f74cf6851697bb31036fc56d67dd7c4037ee09、run-r02/profile_guard.gd 597696c705cc8f0e79a35265ca3ef8df55f7fc3c4e0e5a2ce9a4e20e29e29a6f、collect_perf.py 43f3e42900a670957a01cfcaca7e485809527b79912a358917c935c57ea9c063
  • 入力: artifacts/original-completion-2026-10-02/p28-current1299-runtime-scale-build-candidate-native-r01/fixture/reference.variant eb4f770071eb07cd7e136fe54c3f78768cc8de7a4264e62a9af1f06a8f90f9bd
  • 検査(1407 の source の一致だけで済ませない):
    • execution の after/measure phase の report の SHA が f1d44793… で、PID が 46264。report は raw の stdout の P14_03_PERF_REPORT= の行と同じ。
    • report の input_sha256 が入力の SHA と同じ。prepared_state_sha256(9ca8f809…)、migrated_input_state_sha256、running_state_sha256 を記録する。counts_prepared は 20,000/200/50/150。
    • engine は readiness の engine_sha256 c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf(4.7.2-stable official)。probe は 95e59678…、runner は 43f3e429…。hardware は Mac16,10・10・10・25769803776。
    • source: readiness の after 83b170a4c7176761b0b18d8e9292017d990e80a9(1407件)の source map が、E4 の selected_source_map と一致し、それが現在の source map とも一致する。
    • speed は x1(advance_one_minute_wall_ms_x1)。区間と標本数は、各統計の count(x1 300、経路 cold 245 など)。統計は平均・P95・最大。
    • seed: r02 の report には seed の欄がありません。値を作らず、入力の SHA が E2 の R と同じであることと、E2 の R の report の seed(28012026)を根拠として記録します。
    • marker: r02 は回帰ではないので、marker 契約は適用外。理由を記録します。

E4 正式192(関連回帰)

  • dir artifacts/original-completion-2026-10-02/p14-03-formal-regression-83b170a-r01/: runner-input.json 5bc9760c0c114a80a3c9e93634e733fc8fa93d4eeea5d8bcfda85d8e4eebd094、runner-ended.json 705fb2c12007bab125548742dc8d9b07918e30cae3a63c7d89e965c43b8b5f7b、all-tests.json 31da4c4672f4321469183996e12fb23064b3772a69e8330052ab3e2ea66044f1
  • marker 契約: docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json 0ff86a20891da66d84295f0c66ae7517ef586b54a1a668acb7778a450d473cd2
  • 検査: 192/192、22,198 checks、失敗0。input の marker_contract_sha256 と engine_sha256 が一致する。selected_source_map が、validation の checkout の現在の product source map(tools/run_all_tests.source_refs)と完全一致する。

E5 RESTART の正式完了

  • artifacts/original-completion-2026-10-02/p28-01-runner-preflight-r01/RESTART_3AC2CED_FORMAL_DB_JOIN.json 5c9b82a70f6bdb972d720aaa64f5d27aa54130f27f9d1f7cea1c7b02524f84be
  • artifacts/original-completion-2026-10-02/p28-01-runner-preflight-r01/ROOT_CANDIDATE_3AC2CED_QUALIFICATION.json 5bd8030acddc385eb728441286f6a740ec1ee966125474b60ef4b1efe2a2c343
  • 検査: completed 8/8、4つの gate がすべて pass。S 954528a7c5a0e27e2e50b642373168fa0a550aba、Q 3ac2cedc8dc977778fd5a3ba152197cc6cf00fa2、M 3086af2ccd970ddee271a184214dad037bd1d6af。承認は、既存の委任に基づくもの(新しい人間の発言ではない)。

E6 RESTART の native(最終 S)

  • artifacts/original-completion-2026-10-02/p28-01-runner-preflight-r01/native-restart-954528a-r01/run/execution.json c1ec566402896f9f3fdefdfc268de6ed0bc46b8a37a9eb6bfb252b0cc4ebb514
  • 同じ dir の ROOT_RAW_ACCEPTANCE_JOIN.json 6dbb3cbb4ac1838b66034323cab22a9c5a968c1da0efe8d34676073b3f980cfb
  • 検査:
    • 7 phase とも PASS。writer と reader の PID がすべて異なる。
    • restart/probe/* の4ファイルが、base(= Q 3ac2ced 以降の main)の bytes と一致する(再利用の条件)。
    • R/O とも K=30 で、毎分の typed SHA が一致。改ざんは CHECKSUM_MISMATCH で拒否される。O の390分の記録は ID 9〜24 が連番で、counter 24。

E7 独立レビュー

  • artifacts/original-completion-2026-10-02/p28-01-runner-preflight-r01/restart-independent-review-954528a-r01/DESKTOP_RESULT.json b8fff13e8789797a4a50a5e2900f3d84ef20a6682a8f25feca225edc7fe00300(delivery 90b6943d86bf370599c3a8629c57a69806374a5863ce18957a7b7d696a5be9fd)
  • 以前の changes_requested: independent-review-bc703c9-changes-requested-r01/result.json f2e67cb2adbef9c9294ec1e879da70b500fa27d2220d9ae1b9fb50c96cbdc3b2
  • 検査: 最終が pass であること。low 3件を消さずに記録すること。

各証拠は、それぞれの source・設定・engine・marker・入力・範囲にだけ適用します。たとえば r02 の値を windowed の値と言い換えたり、full9 を Q での実測と言い換えたりしません。

4. 条件表(verifier は結合を確かめ、whole-unit の独立レビューが判定する)

条件 根拠 範囲と未達
G0 work Tick と描画(CPU は P1〜P4)は E2。経路・snapshot・保存・読込は E3 稼働していた施設は100。GPU は null。E3 は headless・Ops OFF・x1
G0 acceptance E2 と E3 の各 report の欄 記録の項目がそろえば成立する。予算の合否は条件に含まれない
G1 collector C1/C9(_set_speed→_process、main)と RESTART RS1(UI での保存と読込) 測定の範囲は Mac(Mac16,10)。Windows での最終受入は未達のまま
G2 既定の autoload の世界、O の実際の Ops ON、RESTART の実際の継続 O は小さな入力(客0〜2)。200客での Ops ON は上限100のため不可
G3 RESTART RS1〜RS5(E5、E6)と、下の明示した証拠 下の判断材料を参照。最終的な判定は whole-unit の独立レビューが行う
G4 collector の停止契約と phase の失敗の記録、RESTART の改ざん・停止・境界 実施していない分岐は U1 で開示する
G5 E4 を再利用(source と marker の一致)。collector と RESTART の unit validation 製品が変わったら、全 roster をやり直す
G6 全 receipt の SHA、Root の結合、verifier の manifest —

G3 の判断材料(これらは証拠の提示であって、合否はそこから導きません):

  • E7 の最終 review の RS5 の判断(「overload は条件付きの分岐で、実施されていないことを開示し、保持されるとは主張しない」)と、low の1件目(「0でない backlog の保持は実施していない」)。
  • 製品の契約: scripts/core/simulation_kernel.gd:217-231(restore_clock が _accumulator を0に戻し、_skip_next_process を立てる)と、snapshot の範囲(autoload/simulation_runtime.gd:521-583)。1分未満の accumulator は、保存される状態の外にある。
  • 「発生しなかった」ことは、保存できたことの証明ではありません。独立レビューは、原本の条件「途中保存・再起動で再現」が、overload で止まって backlog が0でない状態の保存と、1分未満の実時間の位相までを要求するかどうかを、原文と上の証拠から判断します。要求すると判断した場合は、未達として changes_requested にします。

5. U1: 開示する未達(合否には含めない。P28 / P28-02 / P28-03 に残す)

  • 予算の未達: P1 x1 平均 479.210 ms > 4、P1 stall 最大 4809.099 ms > 50、P2 x3 P95 5062.697 ms > 12、P2 stall 最大 5891.466 ms > 50。
  • 200客での Operations ON(不可)。O の P3/P4 の合格は、小さな入力に限られる。
  • GPU 時間は null(gl_compatibility)。R0 と O0 は CPU も null。
  • 同一の Windows 実機、長期の操作感とバランス、ゲーム全体の受入。
  • RESTART の low 3件と、G3 の判断の結果。

6. 成果物(worker。allowed_paths は docs/plans/original-completion-2026-10-02/execution/p28-01/gate/** のみ)

  • verify_p28_01_evidence.py: engine を使わない verify-only の検査です。§3 の全証拠を、EVIDENCE_BUNDLE_MANIFEST.json(全ファイルの bytes と SHA)と、上に固定した SHA で結合します。
    • --project-root . は必須。--evidence-root を省略すると、$BUILD_OUTPUT_DIR/p28-01-gate-evidence を使います。どちらも無い場合、または証拠が欠けている場合は、失敗にします(スキップしない)。
    • 条件ごとの結果の JSON を stdout に出力し、$BUILD_OUTPUT_DIR が設定されていれば $BUILD_OUTPUT_DIR/p28-01-gate-verify.json にも書き出します(--json <path> で、書出し先を明示的に指定することもできます)。source の木には書き込みません。
    • 失敗は、構造化した検査の失敗として返します(traceback で終わらせない)。
  • EVIDENCE_BUNDLE_MANIFEST.json、GATE_CONDITIONS.json(§4 と §5 の機械可読版。各条件の根拠になる path と SHA、範囲、未達)。
  • test_verify_p28_01_evidence.py: 合成した証拠を使う正常試験と拒否試験。

7. verifier と試験が必ず拒否するもの

  • manifest の外のファイル、SHA の不一致、証拠の欠落、改ざん。
  • 範囲を外れた適用:
    • full9 の commit を Q と表記すること
    • r02 を windowed の値と言い換えること
    • r02 の seed を作ること
    • R0/O0 の CPU を取得済みとすること
  • 予算の false を合格として扱うこと。GPU の null を0や合格に置き換えること。
  • R の稼働数(100施設)を登録数として扱うこと。O の小さな入力を「200客」と表記すること。
  • RESTART の4つの gate のどれかが欠けていること。probe の bytes が Q と一致しないこと。
  • E4 の source map または marker が、現在のものと一致しないこと。
  • U1 の項目が欠けていること。U1/U2 を原本の条件として数えること。G3 を「発生しなかった」だけで合格とすること。

8. 対象外

  • engine、全192、full9、collector、RESTART の再実行。
  • 製品、依存、予算値、原本の分母の変更。Runner 本体、権限、認証、課金の変更。