Record EQ timing comparison clarification and retained repair progress

This commit is contained in:
Codex
2026-10-21 07:32:10 +09:00
parent 2549cf7d69
commit b0d2463a92
5 changed files with 165 additions and 9 deletions
@@ -0,0 +1,54 @@
EQ_S_TIMING_CLARIFICATION r02(P28-02-EQ repair 1。r01 の全文を保ち、T4 だけを製品の source に合わせて置き換えた版。base 2549cf7d6992560b850bbd11934e3c14b39a1988。SPEC、TASK_INSTRUCTIONS、eq/references、eq/registration、ACCEPTANCE の6条件は変更しない。EQ1 の「比べない欄は理由と実際の値を記録する」の範囲で、S 層の中の実時間の値の扱いを確定する。新しい数値、製品の仕様、原本の 30/88、課金、権限は変更しない)
事実(worker の blocked の返答 eed3a23a…、Root の照合)
- 保存と読込の完了は、_complete_save_operation(autoload/simulation_runtime.gd:4734)→ _publish_actor_event で、domain event を1件発行する。その payload は _save_event_payload(:4745)で、実時間の duration_us と runtime_duration_us の2つの key を、必ず含む。
- この event は systems.runtime.domain_events.recent_events に入るので、create_snapshot()(:539)の S 層の中に、実時間の値が保存される。そのため、E4 の load の直後の S の完全一致と、同じ版の2 PID の差0は、そのままでは成立しない。SPEC §3.2 の実時間の除外は K 層の _samples と _totals だけで、S 層は対象にしていなかった。
規則(RESTART の受入済みの方式と同じ。restart_probe.gd の E の置き換えと記録、redact_payload の2 path の対応、CLARIFICATION_01 C2/C3 の X(B, ev))
T1 閉じた対象
- 対象は、event 要素の source_service が "save_service" で、event_type が _complete_save_operation の出す9種のいずれかである場合の、payload の key duration_us と runtime_duration_us の2つだけ。9種は SAVE_CHECKPOINT_SUCCEEDED、SAVE_CHECKPOINT_FAILED、SAVE_LOADED、SAVE_LOAD_FAILED、SAVE_MIGRATION_SUCCEEDED、SAVE_MIGRATION_FAILED、SAVE_RECOVERY_LOADED、SAVE_RECOVERY_CANDIDATE_LOADED、SAVE_RECOVERY_FAILED。
- 場所: S 層、latest_snapshot、E2 の全イベントの記録の中の、該当する event 要素の payload。
- それ以外の場所で、実時間と思われる値が S にあった場合は、黙って扱わずに失敗として記録し、判断に戻す(新しい事実として扱う)。
T2 比較のための正規化(可逆。値は捨てない)
- 比較する状態の deep copy を作り、T1 の各 key の値を、typed の marker {"redacted_timing": "<key>", "typeof": <元の値の typeof>} に置き換える。元の値は、sidecar に、path(その要素の event_id と key を含む)・typeof・値として、全て記録する。元の状態は変更しない。
- 要求:
- (1) 置き換えた path の集合が、比べる両側で完全に一致すること(event_id で対応させる)。
- (2) 正規化した状態の var_to_bytes が、両側で完全一致すること。一致しない場合は、RESTART の修正8の typed の正規表現で path を特定し、dict の列挙の順序だけの差を記録する。それ以外は不一致。
- (3) 同じ PID の中で、正規化した状態に sidecar の値を戻すと、元の状態の var_to_bytes と完全一致すること(可逆であることの証明)。
- (4) 元の値の typeof が int で、0 以上であること。それ以外は失敗。
- 時間の値そのものは、版の間でも、PID の間でも比べない(実時間に依存するため)。理由と、各側の実際の値を記録する。
T3 latest_digest
- 同じ PID の中で、製品の latest_digest が、SimulationDigest.compute(latest_snapshot) と一致することを確かめる(製品の digest の自己整合)。
- PID の間と版の間では、latest_snapshot が T1 の値を含む場合、製品の latest_digest の文字列は比べない(実時間を含むため)。代わりに、T2 で正規化した latest_snapshot に対して harness が計算した値を、「harness の正規化 digest」と明記して比べる。T1 の値を含まない場合は、製品の latest_digest を文字列の完全一致で比べる。どちらで比べたかを記録する。
T4 E2 と E4 の IO event(製品の source に合わせて、操作ごとに分ける)
- E2 の全イベントの比較にも T2 を適用する。event_id・event_type・absolute_minute・source_service・entity_ids・causation_command_id と、T1 以外の payload の欄は、完全一致を要求する。開始の counter の一致の要求は、従来どおり。
- 操作ごとに、実際に増えた domain event の件数と、その全ての内容を記録して検査する。監査のイベントを無視しない。
- 直接の restore_snapshot(P)(autoload/simulation_runtime.gd:587 → _restore_snapshot_internal(:591-1476)): この経路には _complete_save_operation も _publish_actor_event も無く、最後は _publish_snapshot → true で終わる。
- 成功の場合: 直後の S 層が、P を規則どおりに復元したものと、T2 の正規化の後で完全一致すること。SAVE_* の IO event は0件であること(1件以上あれば失敗)。
- 失敗の場合: 戻り値が false で、S/K/C 層と全イベントが不変であること(追加の event は0件)。
- load_from_path の成功(:4223 → _finish_load_operation → _complete_save_operation(…, SAVE_LOADED)): 直後の状態が、CLARIFICATION_01 C3 の X(P, ev_load) と、T2 の正規化の後で完全一致すること。SAVE_LOADED の IO event がちょうど1件であること。
- load_from_path の失敗(同じ経路の SAVE_LOAD_FAILED): 直後の状態が、CLARIFICATION_01 C2 の X(B, ev_fail) と、T2 の正規化の後で完全一致すること。SAVE_LOAD_FAILED の IO event がちょうど1件であること。
- X の規則は従来どおり: counter+1、published_ids への sort 挿入、recent の上限256での先頭の落とし方。それ以外の差は不一致。
- 各操作の実際の件数(0 か 1)を、期待の件数と並べて記録する。期待と違えば失敗にする。
T5 試験(test_eq.py)
- 正常試験: T1 の対象の正規化と、可逆性の確認。
- 拒否試験:
- 直接の restore_snapshot に SAVE_* の event を要求する、または期待の件数(直接の restore は0、load は1)と違う実際の件数を合格にする
- T1 の外の key や event の置き換え
- 9種の外の event_type、source_service が違う場合
- 片方の key だけの置き換え
- path の集合の不一致
- sidecar の欠落や改ざん(元に戻らない)
- 時間の値の、PID の間・版の間での一致の要求
- 実時間を含む latest_digest の文字列の比較
- 置き換えた値を統計や判定に使うこと
worker への手順
- 前回は実装0なので、SPEC・TASK・この補足に従い、eq/** に SPEC §2 の6ファイルを実装する。SPEC・TASK・eq/registration・eq/references は変更しない。
- engine を使わない test_eq.py の全件 PASS を局所で確かめ、生出力を報告し、正式な JSON で提出する。
- engine の起動、git への書込み、製品の変更、全回帰はしない。通常の実装上の選択は、記録して進める。
@@ -0,0 +1,90 @@
{
"at_jst": "2026-10-21T07:31:50.231974+09:00",
"project": "the-tree-p28-02-eq",
"task": "P28-02-EQ",
"state": "implementing",
"base": "2549cf7d6992560b850bbd11934e3c14b39a1988",
"S": null,
"repairs": 1,
"worktree": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p28-02-eq/P28-02-EQ-implement",
"runs": [
{
"id": "eed3a23a87144985a953513517ba6cce",
"status": "finished",
"pid": 91723,
"started": 1792534900.465473,
"finished": 1792534987.111678,
"exit_code": 0,
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p28-02-eq/runs/eed3a23a87144985a953513517ba6cce"
},
{
"id": "8d5e4a14dd1640a3bebeafa2b49e34ab",
"status": "running",
"pid": 95908,
"started": 1792535447.577267,
"finished": null,
"exit_code": null,
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p28-02-eq/runs/8d5e4a14dd1640a3bebeafa2b49e34ab"
}
],
"active_PID_observed": "95908 95887 Ss 01:03",
"root_exec_session": 28985,
"root_exec1315": "closed exit2; actual initial worker structured blocked/exit0 retained, no product edits/tests/engine",
"actual_Opus": "Existing Desktop governor actual312/314 judgments; closed reversible save-event timing comparison, directrestore0 vs load1 exact IO events",
"evidence": [
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/REGISTERED_EQ_2549CF7.json",
"bytes": 6643,
"sha256": "68abfd619d8b15911e87b8718bfbbeed14ba1586b350eb1a6ef9877563c24577"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/EQ_INITIAL_RETURN_EED3A23.json",
"bytes": 4182,
"sha256": "97c9c8a7b52f121ae2af37af434533e400320e67cba704310612b1c4f2288a42"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/EQ_S_TIMING_CLARIFICATION.txt",
"bytes": 5792,
"sha256": "25d323fd562d29e80782b6f075fc7a0e8b49457a6c4fbd7c30e74b31a6b6a126"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/EQ_S_TIMING_CLARIFICATION_R02.txt",
"bytes": 7347,
"sha256": "777accdd652f85db6b9014d85e3c8b3b60ca94b20768e6173b36bc769d360fd9"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/DESKTOP_EQ_TIMING_REPAIR_DECISION.json",
"bytes": 1443,
"sha256": "308272c81667096e8a70afd6531243fad277d5ceb5284e5e4e0e4d1fadc83462"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/DESKTOP_EQ_TIMING_RUN_DECISION_R02.json",
"bytes": 2441,
"sha256": "85637542620df9076249ea58fe7a6d2deb3b2884a1dc8c482a020c47ad5a56ca"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/actual-desktop-EQ-TIMING-REPAIR-input-r02/RECORDED.json",
"bytes": 2694,
"sha256": "ca0d5b8aa4279fd227bc15970bed9e2c4ddc59772d1d3be62cdf94344b4f78ce"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/actual-desktop-EQ-TIMING-RUN-input-r02/RECORDED.json",
"bytes": 3699,
"sha256": "3767330ea9bb68006a551e08f71fb91d455d1aa5716264c4e54740206ce98fef"
},
{
"path": "artifacts/original-completion-2026-10-02/p28-02-root-control-r01/eq-timing-owner-run-input-r02/RUN_STARTED.json",
"bytes": 763,
"sha256": "0a2f280bf5acb40a8967fd39f9118f7a668364e45aed6bd7ff595faa396c39b3"
}
],
"contract_AC_SPEC_TASK_reference_registration_unchanged": true,
"native7_and_both_validations_and_independent_review_not_started": true,
"original_credit": 0,
"original_completed": 23,
"original_total": 88,
"packages_completed": 4,
"packages_total": 30,
"partial_credit": false,
"next": "Follow same actual run8d5e4a14/PID95908/exec28985. No duplicate worker or engine. Submit then Root native7 and all usual mandatory gates; original P28-02 still needs OPT and whole-unit acceptance."
}
@@ -243,7 +243,7 @@
"facility_value_contracts_validation.json": "bf490a9ca585c48fc318e76c4a069ef244827d828d46e6415399f7710590dd16",
"performance_audit.json": "0b630b15a392c3e0366f1362bfe4ddacb968f915f54549f82e4d6fa315384762",
"progress_contract.json": "ccbdfce8c8365d5c13f59531955708834cce45acd0e136561c95295dfdb5df77",
"progress_snapshot.json": "928ed4db2681923afee341d8752f713e62c6858f70084170b95d0f0cd2bc0f1d",
"progress_snapshot.json": "7aea988d6a8428a631693b57382d1197e80cbba314745a796a50c7696069b24d",
"progress_validator_guard_checks.json": "72ee513fcf1cad85c24bfd0a4b472f425f6acf117928ece0f6b41e29018da627",
"progress_validator_guard_checks.r01.json": "14c26adffa5a1938241db4912e50ea54b660641ee6fee2e412d467dce14d0519",
"requirement_coverage.json": "03b10e4da367579db502d0671a6e0dda36fd385111c6f1c0084acaff7605f593",
@@ -253,6 +253,6 @@
"validate_facility_value_contracts.py": "91640e2a76cd6cc9186f7b85c0bf379b24b6cac0d48962815235ee628e7ae43e",
"validate_plan.py": "4973d3c2797289d266f5c6e7c36f3d2c31931b23a1022eab3d94328267bcc1b4",
"validator_update_checks.json": "f997d0f3de2cea29550840b1d5cb23647d64f81329de46758551e2b6c8fecc27",
"work_packages.json": "19d2d64f2684c75998a0df7b8c93572626f4366e0739a024a0a5e27d1aca6f42"
"work_packages.json": "d521f95c24f4443b742be1b1dbf701cfa76e9a6e3cea5be4138a964e533bb485"
}
}
@@ -1,9 +1,9 @@
{
"schema_version": 1,
"integrated_at_jst": "2026-10-21T07:10:02.150187+09:00",
"integrated_at_jst": "2026-10-21T07:31:50.231974+09:00",
"scope": "原30パッケージ/88成果、正式完了23成果・4パッケージ。部分点なし。P28-01全条件を独立レビュー/通常final/実DB結合で正式完了。次P28-02未完。全ゲーム/同一Windows最終受入は未完。",
"source_head": "fdb309f3bc81529135915429d2432a6644696311",
"source_authority_note": "P28-02-DIAGの実Sを測定しQのsource/settings/diagnostic bytes一致資格を確認。全4通常ゲートと実DB結合完了、DIAG補助加算0。旧sourceのcheckpointはGit履歴と元証拠に保持。",
"source_head": "2549cf7d6992560b850bbd11934e3c14b39a1988",
"source_authority_note": "Actual registered EQ base2549cf7; DIAG completed Qfdb309f/23original maintained. EQ initial real worker return and Opus timing clarification retained; repair1 implementing on same W, no acceptance credit.",
"immutable_history": {
"baseline.json": {
"sha256": "750bb3d313cc5e2ce0d4c79e563a995abd7a78f991dee1dd75c627877b02cd7b",
@@ -12246,5 +12246,10 @@
"bytes": 18478,
"sha256": "7d83ec0e19e0c12ecefebc5ab0bdffb20743ed34c6144251a08b83b315b09ecf"
},
"current_p28_02_summary": "P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。"
"current_p28_02_summary": "P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。",
"current_p28_02_EQ_checkpoint": {
"path": "docs/plans/original-completion-2026-10-02/execution/p28-02/EQ_TIMING_REPAIR1_STARTED_2549CF7.json",
"bytes": 4047,
"sha256": "021b76676bc68a9e008cfd27c7f1438f2d483f0f44e85e75cb83e2d49f700d71"
}
}
@@ -18073,7 +18073,7 @@
},
"legacy_state": "planned",
"state_scope": "package-level; completed means whole package accepted; partial implementation is not completion",
"current_summary": "P28-01は正式完了。P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。",
"current_summary": "P28-01は正式完了。P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。 EQは実Opus304/306でE1-E5/全6補助条件を固定しbase2549cf7で通常登録。初回AstraがS内保存IOeventの実時間差を正しく指摘、未実装/未試験で返答を保全。実Opus312/314が対象9eventの2keyだけを可逆sidecarに残す規則とdirectrestore0/load1の実件数を確定し、通常repair1/条件付きRUN→同じWのAstra8d5e4a14/PID95908/exec28985で実装中。EQ native7/正式両validation/別Opus全6review/通常統合finalは未達、原加算0。",
"remaining_deliverables": [
{
"id": "P28-01",
@@ -18307,10 +18307,17 @@
"sha256": "7d83ec0e19e0c12ecefebc5ab0bdffb20743ed34c6144251a08b83b315b09ecf",
"scope": "DIAG support four conditions formally completed; original P28-02 remains incomplete; original credit zero",
"linked_at_jst": "2026-10-21T07:10:02.150187+09:00"
},
{
"path": "docs/plans/original-completion-2026-10-02/execution/p28-02/EQ_TIMING_REPAIR1_STARTED_2549CF7.json",
"bytes": 4047,
"sha256": "021b76676bc68a9e008cfd27c7f1438f2d483f0f44e85e75cb83e2d49f700d71",
"scope": "Actual EQ registration and repair1 implementing checkpoint only; no auxiliary or original acceptance credit",
"linked_at_jst": "2026-10-21T07:31:50.231974+09:00"
}
],
"progress_summary": "P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。",
"updated_at_jst": "2026-10-21T07:10:02.150187+09:00",
"progress_summary": "P28-02-DIAG補助はS d6ce6dd→Q fdb309f、native全6PID/3測定・全source1407/保存保全PASS、正式unit/nativeverifyとfresh独立Opus全4条件PASS(high/medium0・low5)、通常integration/final・実DB/traceability照合で正式完了。原成果加算0。次は実OpusのT1 snapshot変換・コピー選定に従い、EQで変更前E1-E5を固定し、OPT実装・同条件反復比較・RESTART・正確最終全roster・whole-unit横断6レビュー/通常統合finalまで進める。原P28-02は未完。旧parse失敗/900timeoutは保全。正式23/88・4/30、部分点なし。性能予算false6・200客OpsON/同一Windows/長期/全ゲームは別未達。 EQは実Opus304/306でE1-E5/全6補助条件を固定しbase2549cf7で通常登録。初回AstraがS内保存IOeventの実時間差を正しく指摘、未実装/未試験で返答を保全。実Opus312/314が対象9eventの2keyだけを可逆sidecarに残す規則とdirectrestore0/load1の実件数を確定し、通常repair1/条件付きRUN→同じWのAstra8d5e4a14/PID95908/exec28985で実装中。EQ native7/正式両validation/別Opus全6review/通常統合finalは未達、原加算0。",
"updated_at_jst": "2026-10-21T07:31:50.231974+09:00",
"historical_summary_before_integrated_full9_20261021": "既採用e561 Pathを保持。source1273最大規模・Operations OFFの30分/保存再開を診断し25918+293parse/0。no-route候補の全15byte対照は一致したがmacro因果改善不足で不採用。Operations ON/新1277性能/Windows描画/長期プレイは未受入。",
"historical_before_P28_01_formal_completion": {
"progress_summary": "旧1273時点の限定軽量化・不採用記録を保持。現在の製品source1407(83b170aと同一)の実main db9d613全9測定で、代表R x1平均479.210ms/P95745.365ms/最大4809.099ms、x3P955062.697ms/最大5891.466msの予算未達を確定。O小入力の合格を最大負荷へ拡張しない。原P28-01の別PID再開・wholeunit受入を先に閉じ、同等性と失敗拒否を固定してから実測上位の改善へ進む。本単位の新規最適化/受入は未実施。",