From 2f7756001303b38cebf76945a092cea6afb8bad8 Mon Sep 17 00:00:00 2001 From: Takeshi Date: Wed, 21 Oct 2026 01:26:45 +0900 Subject: [PATCH] P28-01-RESTART: Clarification02 patch (own 4 modules vs 6 external deps; full typed-bytes SHA vs SimulationDigest) Execution-contract clarification only; RS1-RS8 unchanged. Co-Authored-By: Claude Opus 5.5 --- .../execution/p28-01/restart/SPEC_CLARIFICATION_02.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/plans/original-completion-2026-10-02/execution/p28-01/restart/SPEC_CLARIFICATION_02.md b/docs/plans/original-completion-2026-10-02/execution/p28-01/restart/SPEC_CLARIFICATION_02.md index a56fd5c..5d3eebc 100644 --- a/docs/plans/original-completion-2026-10-02/execution/p28-01/restart/SPEC_CLARIFICATION_02.md +++ b/docs/plans/original-completion-2026-10-02/execution/p28-01/restart/SPEC_CLARIFICATION_02.md @@ -21,7 +21,8 @@ import してよい project の Python は、次の6ファイルだけです(R - **読み込み方**: collector は `importlib.util.spec_from_file_location` で読み込みます。その前に、collector のディレクトリを `sys.path` の先頭に追加します(collect_p28_01.py:16 の `from check_p28_01_report import ...` を解決するため)。run_all_tests.py と owned_outer.py は、collector の `load_tool(EXTERNAL_IMPORTS[i])` で取得してかまいません。 - **使わないもの**: run_all_tests.py の `main()` の中で読み込まれる `tools/strict_test_markers.py`、`tools/regression/diagnostic_gate.py`、`ordinary_proof_gate.py`、`audio_evidence_gate.py` は使いません。run_all_tests.py の `main()` も呼びません。 - **標準ライブラリ**: 通常どおり import してかまいません。新しいものの導入、third-party の package、ネットワークは禁止です。 -- **checker の検査**: 上の6ファイル以外の project の `.py` を import しようとしたら、拒否します。拒否試験も置きます。 +- **自分の4ファイルは別扱い**: 上の6ファイルは、外部から再利用する依存の閉包です。この task が新しく作る allowed_paths 内の4ファイル(`restart/probe/restart_pair.py`、`restart_probe.gd`、`check_restart.py`、`test_restart.py`)が互いを通常どおり import することは許可します。たとえば `test_restart.py` が `check_restart.py` や `restart_pair.py` を、`restart_pair.py` が `check_restart.py` を import する場合です。これは第7の外部依存ではありません。 +- **checker の検査**: 上の6ファイルと allowed_paths 内の4ファイル以外の project の `.py` を import しようとしたら、拒否します。拒否試験も置きます。 - 方法は2つ組み合わせます。AST で import 文と、`spec_from_file_location` / `exec` の文字列の path を走査することと、実行時に `sys.modules` の `__file__` を照合することです。 - 6ファイルの SHA が1つでも違えば、起動の前に拒否します。 @@ -62,7 +63,10 @@ import してよい project の Python は、次の6ファイルだけです(R - 全 bytes のファイル: P、writer の保存直後、reader の改ざん試行の前(B)、試行の後、読込直後、継続 K の最後の状態。 - 毎分の値: 全状態の `var_to_bytes` の SHA256。 - writer と reader の各分の照合: 両側とも、event_id E の要素1件(窓の中にある間)を、同じ正規形 `{"event_id": E, "replaced_for_cross_pid_compare": true}` に置き換えます。その後の全状態 bytes の SHA256 が、全分で一致することを要求します。両側の E の要素の全内容は記録します。この置き換えは DRAFT §3.3 d の規則と同じもので、広げてはいません。 -- SimulationDigest は参考の記録にだけ使い、一致の判定には使いません。全 bytes の SHA256 は bytes の完全一致の代わりとして扱います。 +- **2つの digest の区別**: PID をまたぐ毎分の照合に使う「完全な typed `var_to_bytes` の SHA256」は、全状態の bytes をすべて覆う値であり、bytes の完全一致を表す方法として認めます。これは、状態の一部しか覆わない SimulationDigest とは別のものです。SimulationDigest は参考の記録にだけ使い、一致の判定には使いません。 +- 同じ PID の中の比較(X(P, ev)、X(B, ev_fail)、読込直後など)は、従来どおり `var_to_bytes` の bytes そのもので完全一致を判定します。 +- どちらの方法でも、E の1要素の正規形への置き換え(PID をまたぐ照合の場合だけ)以外の path は、1つも除外も省略もしません。全部が比較の対象に残ります。 +- これは実行契約の明確化であり、原本の受入 RS1〜RS8 を緩めるものではありません。 - Python の checker が確かめるのは、report の形式・矛盾・SHA の結合と、両 PID の毎分の SHA の一致、そして D1/D7 の静的検査です(Godot の値の再構成はしません)。probe の実経路は静的レビューで確かめ、実際の実行は Root の owned PID と raw の結合で確かめます。 ## D6. 終了と診断