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 <noreply@anthropic.com>
This commit is contained in:
Takeshi
2026-10-21 01:26:45 +09:00
co-authored by Claude Opus 5.5
parent 971996f6d5
commit 2f77560013
@@ -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. 終了と診断