Record request resend save proof and correct whole-function evidence pins
This commit is contained in:
+6
@@ -0,0 +1,6 @@
|
||||
P04-01のrepair5/C run cb864ee199f346408370f8944e574eb7は通常terminal exit2で終了、workerは供給資料の4複数行関数SHAに本文が含まれないことを正しく検出しblockedを返しました。raw所有/保存/帳簿3個別検査はpass、23改変負例reject、合成補正のみpassで原成果加点0。この結果を受けRootが供給不備を実修正しました。全8未提出worker編集をbyte/hash一致でcheckpoint保存し、workerソース編集0。既存Cは保持し全再実装しません。
|
||||
Root補正実記録:
|
||||
{"all20_whole_functions_byte_equal": true, "changed_hash_rows": [{"path": "autoload/simulation_runtime.gd", "function": "_advance_staff_ai", "old_sha256": "c7c440bf77850b2348040c0ae1b17ee11fdca1cea9605d51076c4a53a1ed2edd", "new_whole_raw_sha256": "0e222987f7c5e25583dbaba8fe63784aa563715067396e8d31d10bd191e7179b", "whole_function_unit_bytes": 2105}, {"path": "autoload/simulation_runtime.gd", "function": "_release_closed_business_request", "old_sha256": "7fb1b2c4197319d9ff29d7ab565306ecd0b569e331491281ed71d3a38d3a8695", "new_whole_raw_sha256": "6dbde3a3d425e47a049dcc4f05eae6f01fe9784f473c0fb1019a0633c239d83b", "whole_function_unit_bytes": 2414}, {"path": "autoload/simulation_runtime.gd", "function": "_complete_service_transaction", "old_sha256": "c7ccce01292699052b8284383ad77f1fe0a5ead9a9c3936622ad9c3b93a3e408", "new_whole_raw_sha256": "f2b6e96a8eeef3dd3f8419b4d9d5ef4e1d13241600ce970bdd78a924428cac6c", "whole_function_unit_bytes": 614}, {"path": "scripts/facility/facility_service.gd", "function": "_prepare_service_for_tick", "old_sha256": "8a9bef4ec1bbe3b25c418f8c7d04d4233cedaa942eda5cc77d530280b0f129de", "new_whole_raw_sha256": "b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc", "whole_function_unit_bytes": 1958}, {"path": "scripts/facility/facility_service.gd", "function": "_complete_service", "old_sha256": "38a16ace875e4f4b09133b10677cb50871732ca7177166b8659b07c2d79e61d0", "new_whole_raw_sha256": "494edfd11cb3e896d73c2c6fdbe7c1193efce6d869b105e526d2f1dfd1168142", "whole_function_unit_bytes": 1387}, {"path": "scripts/facility/facility_service.gd", "function": "_fail_service", "old_sha256": "b4dbc53b40ac3eb4e639bdf13d9f5538eb64a7bd6df22ec230e7baef4a535f58", "new_whole_raw_sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5", "whole_function_unit_bytes": 484}], "old_report_sha256": "ecb92215b7bfb4368ddeb6d44dcd467d13e97d677ca2f29df3ab9684f6c757c7", "new_report_sha256": "46e0cc35cb95496d5f26d3cab7d3a31cb29faacaa16714daab3aefdf65b420a3", "corrected_bundle": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/audit-support/native-first-current", "new_manifest_sha256": "dbaab3c293c191eb5f3aff34854945e2d564f824df50a92802b3a7eda55321a8", "old_bytes_preserved_in": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/audit-support/native-first-current/root-corrections-r02", "product_source_changed": false, "new_engine_runs": 0}
|
||||
補正はGit registered deb1bcb とproduction5f6bc11の各blobから、行頭func/static func開始から次の行頭named funcまたはEOFまでraw bytesを独立抽出し20/20全文一致を確認。hash変更は4signature切断+2後続comment込みで6件。POST_P18_CURRENT_SOURCE_APPLICABILITY.jsonとSOURCE_MANIFEST.jsonの該当1rowを更新、旧全byteはbuild_dir/audit-support/native-first-current/root-corrections-r02/に保持。現在のactual bundleをRootがそのままworker checker verify_native(base)で実行してPASS、engine再実行0。正規化や架空receipt補正ではなく、実Git blobの全文再計算です。
|
||||
次の1行動を判断してください。期待: 保持Cのまま、補正済みbundleで必要Python検証を行い、古いblocked説明/c-native-validationを同期して正常提出応答をする短い継続。製品・原15条件+EV/原7領域/安全性3結果・全30/88は不変。正常repair6へ進む場合も使用済5/max null維持。C段階の提出とwhole P04未達は区別し、未収集indexで重複validateしない。既存Rootprobe/Reader/全Cコードの再作成は禁止。現在C native_applicabilityのlegacy comment-prefix候補はRoot供給補正後には不要なので、全文SHAだけを要求する最小修正(約数行)と、signature-only SHAを拒否する負例の追加が妥当か判断してください。全関数old==newは元から必須で維持します。
|
||||
モデルはこの限定継続の難度であなたが選択(既定Sol、必要時Astra)。byte一致の供給根拠とtask外budget再承認待ちはありません。Root追加paid255/command再送の証拠は今回C範囲へ追加せず保持しており、workerの範囲を膨らませません。
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"action": "request-repair",
|
||||
"task_id": "P04-01",
|
||||
"reason": "repair6として限定継続を依頼する。対象範囲はallowed_pathsのみで、既存のC実装(Rootprobe/Reader/全Cコード)は保持し、作り直さない。Root補正済みbundle(manifest dbaab3c2…、report 46e0cc35…、20/20関数が全文byte一致、hash更新6件、旧bytesはroot-corrections-r02に保持、engine再実行0)を前提とする。(1) tools/check_p04_order_evidence.py:444-454 native_applicabilityの暫定処理を外す。現在はコメント除去版の候補リスト(candidates/offsets)を許容しているが、全文raw SHA(sha256(new[function]) == production_body_sha256 == registered_body_sha256)だけを受け付ける数行の修正にする。old[function]==new[function]の全関数一致は従来どおり必須とする。「Root's report ends before…」のコメントは削除または修正する。(2) checker_native_fixtures.py(またはnegative fixtures)に負例を追加する。signature行だけのSHA、および後続コメントを除いた本文SHAをproduction_body_sha256に入れた行は、どちらもrejectされることを確認する。既存の23改変負例はすべてreject維持とする。(3) 補正済みbundleに対してPython検証を1回ずつ実行する。verify_native(base)のPASS、raw個別検査3件、全負例reject、applicability/既存fixture/A-B確認が対象。実行していない検査はPASSと報告しない。(4) c-native-validation.json、EVIDENCE_COLLECTION.md、CHECKER_PROTOCOL.mdに残る古いblocked説明(4つの複数行関数SHAに本文が含まれない件)を補正後の実記録に合わせて更新する。旧値と新値は両方明記する。(5) 正常応答として提出する。C段階の提出とP04-01全体の未達は区別し、formal_original_credit=0、原15条件+EV/7領域/安全性3結果、全30/88の分母は変更しない。未収集のindexについて重複validateは行わず、Root追加分(paid255/コマンド再送)の証拠も範囲に加えない。製品ソース、engine、Runner、gitへの書き込みは0とし、使用済repair 5件・max null・予算の変更は提案にも含めない。",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"codex_model_reason": "修正範囲は特定済みで小さい。checker 1箇所の候補リストを全文SHAの一致比較に置き換える数行、負例1〜2件の追加、既存Python検証の再実行、文書同期で終わる。新しい設計判断、engine実行、複数ファイルにまたがる推論は不要で、供給bytesの根拠もRootが確定している。Astraに上げるほどの難度はなく、時間と使用量の面から既定のSolが適切と判断した。"
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"action": "run",
|
||||
"task_id": "P04-01",
|
||||
"reason": "Runnerはrepair_ready(使用済6、max null)で、提出9767b0aと保持中の8編集は変わっていない。合意済みのrepair6の限定継続を開始する。tools/check_p04_order_evidence.py:444-454には、指摘どおり暫定処理(コメント除去版をcandidates/offsetsとして許容)とRootのコメントが残っていることを確認した。修正方向は前回のrequest-repairの全文どおり。(1) 全文raw SHAだけを受け付けるようにする。sha256(new[function]) == production_body_sha256 == registered_body_sha256 で、old==newも必須とする。(2) signature行だけのSHA、および後続コメントを除いた本文SHAを負例として拒否させる。既存の23負例は拒否のまま維持する。(3) 補正済みbundle(build_dir/audit-support/native-first-current/)に対し、verify_native PASS、raw個別検査、全負例、applicability/既存fixture/A-Bを、Pythonでそれぞれ1回ずつ確認する。実行していない検査はPASSと報告しない。(4) c-native-validation.json、EVIDENCE_COLLECTION.md、CHECKER_PROTOCOL.mdの古いblocked記述を、旧値と新値を併記して更新する。(5) 正常応答として提出する。変更はallowed_paths内だけとし、C実装の作り直し、engine、全回帰、製品、Runner、config、DB、gitへの書き込みはいずれも0。Rootの追加分(paid/再送)は範囲に入れない。formal_original_credit=0とし、原15条件+EV/7領域/安全性3結果、全30/88の分母、予算、repair上限は変更せず、提案にも含めない。完了の確定はRunnerの検証、独立レビュー、オーナー判断に委ねる。",
|
||||
"codex_model": "gpt-6.1-sol",
|
||||
"codex_model_reason": "修正箇所は特定済みで小さい。checker 1箇所の候補リストを全文SHAの一致比較に置き換える数行、負例2件の追加、既存Python検証の各1回実行、3文書の記述同期で終わる。新しい設計判断や複数ファイルにまたがる推論は要らず、Rootが全文20/20の一致を確認済みなので供給bytesの根拠も確定している。Astraに上げるほどの難度はなく、品質・時間・使用量の面から既定のSolが適切と判断した。"
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
正常dispatch済み、repair_ready/使用済6/max null、保持8編集と提出9767b0aは不変です。あなたが今出した限定継続だけの開始判断を返してください。正常修正方向全文:
|
||||
{"action": "request-repair", "task_id": "P04-01", "reason": "repair6として限定継続を依頼する。対象範囲はallowed_pathsのみで、既存のC実装(Rootprobe/Reader/全Cコード)は保持し、作り直さない。Root補正済みbundle(manifest dbaab3c2…、report 46e0cc35…、20/20関数が全文byte一致、hash更新6件、旧bytesはroot-corrections-r02に保持、engine再実行0)を前提とする。(1) tools/check_p04_order_evidence.py:444-454 native_applicabilityの暫定処理を外す。現在はコメント除去版の候補リスト(candidates/offsets)を許容しているが、全文raw SHA(sha256(new[function]) == production_body_sha256 == registered_body_sha256)だけを受け付ける数行の修正にする。old[function]==new[function]の全関数一致は従来どおり必須とする。「Root's report ends before…」のコメントは削除または修正する。(2) checker_native_fixtures.py(またはnegative fixtures)に負例を追加する。signature行だけのSHA、および後続コメントを除いた本文SHAをproduction_body_sha256に入れた行は、どちらもrejectされることを確認する。既存の23改変負例はすべてreject維持とする。(3) 補正済みbundleに対してPython検証を1回ずつ実行する。verify_native(base)のPASS、raw個別検査3件、全負例reject、applicability/既存fixture/A-B確認が対象。実行していない検査はPASSと報告しない。(4) c-native-validation.json、EVIDENCE_COLLECTION.md、CHECKER_PROTOCOL.mdに残る古いblocked説明(4つの複数行関数SHAに本文が含まれない件)を補正後の実記録に合わせて更新する。旧値と新値は両方明記する。(5) 正常応答として提出する。C段階の提出とP04-01全体の未達は区別し、formal_original_credit=0、原15条件+EV/7領域/安全性3結果、全30/88の分母は変更しない。未収集のindexについて重複validateは行わず、Root追加分(paid255/コマンド再送)の証拠も範囲に加えない。製品ソース、engine、Runner、gitへの書き込みは0とし、使用済repair 5件・max null・予算の変更は提案にも含めない。", "codex_model": "gpt-6.1-sol", "codex_model_reason": "修正範囲は特定済みで小さい。checker 1箇所の候補リストを全文SHAの一致比較に置き換える数行、負例1〜2件の追加、既存Python検証の再実行、文書同期で終わる。新しい設計判断、engine実行、複数ファイルにまたがる推論は不要で、供給bytesの根拠もRootが確定している。Astraに上げるほどの難度はなく、時間と使用量の面から既定のSolが適切と判断した。"}
|
||||
供給native-first-current bundleは既存build_dir/audit-support/native-first-current/ にあり、Rootが全文20/20と実checker verify_native PASSを確認しました。旧body signature truncationのrawはroot-corrections-r02へ保持し、登録/production Git blob全文の独立再計算だけを行いました。Root新paid/再送ケースの入力は今回追加せずscopeを膨らませません。workerは全文SHA比較の数行、既存negativeにsignature/comment短縮SHA拒否追加、Python必要確認1回ずつ、旧blockedメタデータ更新と正式提出応答だけ。全C再実装/engine/全回帰/製品/Runner/config/DB/git書込はしません。正常Runnerが提出します。原成果加点0を維持。既存のP04 implementer-only予算adapterは維持し新budget承認不要。状態と入力が妥当ならrunを返してください。
|
||||
+55
-33
@@ -8,140 +8,160 @@
|
||||
"function": "advance_one_minute",
|
||||
"registered_body_sha256": "b9587ef722d8c8640248025462819374ae5eca1c3d8bbe600b6bc9c328567777",
|
||||
"production_body_sha256": "b9587ef722d8c8640248025462819374ae5eca1c3d8bbe600b6bc9c328567777",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1075
|
||||
},
|
||||
{
|
||||
"path": "scripts/core/simulation_kernel.gd",
|
||||
"function": "_run_phase",
|
||||
"registered_body_sha256": "52461eeb288892a4bb4b6a99570185af08a30758ef88b0046a911baaa6f318e1",
|
||||
"production_body_sha256": "52461eeb288892a4bb4b6a99570185af08a30758ef88b0046a911baaa6f318e1",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 491
|
||||
},
|
||||
{
|
||||
"path": "scripts/core/simulation_kernel.gd",
|
||||
"function": "_handle_time_boundaries",
|
||||
"registered_body_sha256": "2ced47a2911b36def9d89de82a43afc69148ead44d19db6a2a6c7bce5a910ae9",
|
||||
"production_body_sha256": "2ced47a2911b36def9d89de82a43afc69148ead44d19db6a2a6c7bce5a910ae9",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 231
|
||||
},
|
||||
{
|
||||
"path": "scripts/core/command_queue.gd",
|
||||
"function": "_comes_before",
|
||||
"registered_body_sha256": "21f7f9f7c0923121fd0a022a2f7546b7bb7117a9979c1ed25d0b33b96e28ab28",
|
||||
"production_body_sha256": "21f7f9f7c0923121fd0a022a2f7546b7bb7117a9979c1ed25d0b33b96e28ab28",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 292
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_process_tick_commands",
|
||||
"registered_body_sha256": "9de66a4bb84b12304300d49085f44546412319bd4aee91e67b61becf97e50294",
|
||||
"production_body_sha256": "9de66a4bb84b12304300d49085f44546412319bd4aee91e67b61becf97e50294",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 348
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_operations_time",
|
||||
"registered_body_sha256": "511580d1fac3d2785072e94c2981065fa47ba18b1c97122922645dac5c0d94ab",
|
||||
"production_body_sha256": "511580d1fac3d2785072e94c2981065fa47ba18b1c97122922645dac5c0d94ab",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 2305
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_run_operations_deferred_suffix",
|
||||
"registered_body_sha256": "12075307b12cbb66ffda47a26097194a07fad9d6467e3e557bd7269315c98982",
|
||||
"production_body_sha256": "12075307b12cbb66ffda47a26097194a07fad9d6467e3e557bd7269315c98982",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 642
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_mana",
|
||||
"registered_body_sha256": "05c54626ce6e355acd92994ab80aaf2177c5cf194885e66934552139e087599e",
|
||||
"production_body_sha256": "05c54626ce6e355acd92994ab80aaf2177c5cf194885e66934552139e087599e",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1267
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_facilities",
|
||||
"registered_body_sha256": "f1efd0c23bdd60d1ef19a21879640b53b8b4d88844c0c881fe7cd724387ec274",
|
||||
"production_body_sha256": "f1efd0c23bdd60d1ef19a21879640b53b8b4d88844c0c881fe7cd724387ec274",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 206
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_guest_vitals",
|
||||
"registered_body_sha256": "8226ca18c983ac576a74e772cc3088e9fe52b362ffba1b71255bd1d7623c1234",
|
||||
"production_body_sha256": "8226ca18c983ac576a74e772cc3088e9fe52b362ffba1b71255bd1d7623c1234",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 389
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_staff_ai",
|
||||
"registered_body_sha256": "c7c440bf77850b2348040c0ae1b17ee11fdca1cea9605d51076c4a53a1ed2edd",
|
||||
"production_body_sha256": "c7c440bf77850b2348040c0ae1b17ee11fdca1cea9605d51076c4a53a1ed2edd",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "0e222987f7c5e25583dbaba8fe63784aa563715067396e8d31d10bd191e7179b",
|
||||
"production_body_sha256": "0e222987f7c5e25583dbaba8fe63784aa563715067396e8d31d10bd191e7179b",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 2105
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_guest_ai_decisions",
|
||||
"registered_body_sha256": "e33b41294e88dba840affd5cc0a5c58fe5d46f5d98a80a8d5f4e907a3b9a7b93",
|
||||
"production_body_sha256": "e33b41294e88dba840affd5cc0a5c58fe5d46f5d98a80a8d5f4e907a3b9a7b93",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1333
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_release_closed_business_queues",
|
||||
"registered_body_sha256": "3a05fbe94877eeb750fb0d692501954555ab6a8005448ab3b6023dab9bad816b",
|
||||
"production_body_sha256": "3a05fbe94877eeb750fb0d692501954555ab6a8005448ab3b6023dab9bad816b",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 933
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_release_closed_business_request",
|
||||
"registered_body_sha256": "7fb1b2c4197319d9ff29d7ab565306ecd0b569e331491281ed71d3a38d3a8695",
|
||||
"production_body_sha256": "7fb1b2c4197319d9ff29d7ab565306ecd0b569e331491281ed71d3a38d3a8695",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "6dbde3a3d425e47a049dcc4f05eae6f01fe9784f473c0fb1019a0633c239d83b",
|
||||
"production_body_sha256": "6dbde3a3d425e47a049dcc4f05eae6f01fe9784f473c0fb1019a0633c239d83b",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 2414
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_complete_service_transaction",
|
||||
"registered_body_sha256": "c7ccce01292699052b8284383ad77f1fe0a5ead9a9c3936622ad9c3b93a3e408",
|
||||
"production_body_sha256": "c7ccce01292699052b8284383ad77f1fe0a5ead9a9c3936622ad9c3b93a3e408",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "f2b6e96a8eeef3dd3f8419b4d9d5ef4e1d13241600ce970bdd78a924428cac6c",
|
||||
"production_body_sha256": "f2b6e96a8eeef3dd3f8419b4d9d5ef4e1d13241600ce970bdd78a924428cac6c",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 614
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "advance_one_minute",
|
||||
"registered_body_sha256": "59c0e89b4dca291e3ec02601b3f7c5544dba7c823fc137e0e7a50e7d5319e0ed",
|
||||
"production_body_sha256": "59c0e89b4dca291e3ec02601b3f7c5544dba7c823fc137e0e7a50e7d5319e0ed",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1525
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_prepare_service_for_tick",
|
||||
"registered_body_sha256": "8a9bef4ec1bbe3b25c418f8c7d04d4233cedaa942eda5cc77d530280b0f129de",
|
||||
"production_body_sha256": "8a9bef4ec1bbe3b25c418f8c7d04d4233cedaa942eda5cc77d530280b0f129de",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc",
|
||||
"production_body_sha256": "b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1958
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_complete_service",
|
||||
"registered_body_sha256": "38a16ace875e4f4b09133b10677cb50871732ca7177166b8659b07c2d79e61d0",
|
||||
"production_body_sha256": "38a16ace875e4f4b09133b10677cb50871732ca7177166b8659b07c2d79e61d0",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "494edfd11cb3e896d73c2c6fdbe7c1193efce6d869b105e526d2f1dfd1168142",
|
||||
"production_body_sha256": "494edfd11cb3e896d73c2c6fdbe7c1193efce6d869b105e526d2f1dfd1168142",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 1387
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_fail_service",
|
||||
"registered_body_sha256": "b4dbc53b40ac3eb4e639bdf13d9f5538eb64a7bd6df22ec230e7baef4a535f58",
|
||||
"production_body_sha256": "b4dbc53b40ac3eb4e639bdf13d9f5538eb64a7bd6df22ec230e7baef4a535f58",
|
||||
"exact_bytes_equal": true
|
||||
"registered_body_sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5",
|
||||
"production_body_sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5",
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 484
|
||||
},
|
||||
{
|
||||
"path": "scripts/operations/operations_coordinator.gd",
|
||||
"function": "_process_minute_boundaries",
|
||||
"registered_body_sha256": "1312166dc17aee0ef470069a73ff3fe6b86d11d04ca7de76f3d04f1d2d14674e",
|
||||
"production_body_sha256": "1312166dc17aee0ef470069a73ff3fe6b86d11d04ca7de76f3d04f1d2d14674e",
|
||||
"exact_bytes_equal": true
|
||||
"exact_bytes_equal": true,
|
||||
"whole_raw_function_bytes": 2212
|
||||
}
|
||||
],
|
||||
"all20_ordering_bodies_identical": true,
|
||||
@@ -184,5 +204,7 @@
|
||||
}
|
||||
],
|
||||
"limitation": "Ordering body equality alone does not establish boundary evidence applicability; new relationship restore/schema and path/arrival dependencies need specific checks. Existing six spec pins bind older Runtime; latest integration cannot satisfy a checker that unconditionally equates all current sources to old pins. No spec, checker, policy or acceptance change made by Root.",
|
||||
"formal_credit": 0
|
||||
"formal_credit": 0,
|
||||
"extraction_rule": "Raw top-level func/static func start through next top-level named function or EOF, including multiline signatures, entire body, whitespace and intervening comments; no normalization.",
|
||||
"correction": "Prior Root parser truncated four multiline signatures before their bodies. All 20 whole raw function units independently recomputed from registered and production Git blobs and byte-equal; no engine rerun or source modification."
|
||||
}
|
||||
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"source": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement",
|
||||
"files": [
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/CHECKER_PROTOCOL.md",
|
||||
"bytes": 13995,
|
||||
"sha256": "c1cba2957fa455f7b942f5a848aa2cc745c09958ebde1a79909f3091cde045a2"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/checker_negative_fixtures.py",
|
||||
"bytes": 10954,
|
||||
"sha256": "840001c840acec621347360904f6f41c872fb966f590193905de4a513ee5900a"
|
||||
},
|
||||
{
|
||||
"path": "tools/check_p04_order_evidence.py",
|
||||
"bytes": 48550,
|
||||
"sha256": "98b2692c604055d7b970e6ef9e3ad1795f35823c3c19d1acad5b80ad2ec7a378"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/EVIDENCE_COLLECTION.md",
|
||||
"bytes": 14838,
|
||||
"sha256": "a09904aa1b974126cbdf5dcf230a8dac1adc27ba1c2149b795661dc9b37d3f60"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/c-native-validation.json",
|
||||
"bytes": 5505,
|
||||
"sha256": "fc3a73707d8eab8e4ea42244fe85620086c30643d22eba654acddbd812b7abd6"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/checker_applicability_fixtures.py",
|
||||
"bytes": 4872,
|
||||
"sha256": "2aab87c4d5835558bed29538375549f893355d8e2a0b1fedbb0f1c3fb7af1b7a"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/checker_native_fixtures.py",
|
||||
"bytes": 10860,
|
||||
"sha256": "26bbdcee483816b8bc60c250bbc63bf0a72a194dce2ba9b690abace9b6b17bbc"
|
||||
},
|
||||
{
|
||||
"path": "docs/plans/original-completion-2026-10-02/execution/p04-01/repair4-context.json",
|
||||
"bytes": 2190,
|
||||
"sha256": "a9ad741e58866222df441b3617b1a15bae0be81ffe48372ba62044cfd6c948f6"
|
||||
}
|
||||
],
|
||||
"archive_sha256": "a9c2e2930105ae4b342d029207abc9e33b073f24d6820e86373d2eb187ce6537",
|
||||
"actual_run": "cb864ee199f346408370f8944e574eb7",
|
||||
"native_product_runs": 0,
|
||||
"status": "incomplete; C individual real raw checks passed; Root supplied applicability rejected; no acceptance credit"
|
||||
}
|
||||
BIN
Binary file not shown.
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"scope": "Root local recomputation of retained C against actual corrected native bundle, not registered whole-unit validation or independent review",
|
||||
"worker_source_sha256": "98b2692c604055d7b970e6ef9e3ad1795f35823c3c19d1acad5b80ad2ec7a378",
|
||||
"correction_report_sha256": "d3187c5aeb0ad8d24336be9637e8b9c2ba392b78964c16c419548b68eaef395d",
|
||||
"verify_native_passed": true,
|
||||
"product_source_edits": 0,
|
||||
"engine_reruns": 0,
|
||||
"original_credit": 0
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"all20_whole_functions_byte_equal": true,
|
||||
"changed_hash_rows": [
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_advance_staff_ai",
|
||||
"old_sha256": "c7c440bf77850b2348040c0ae1b17ee11fdca1cea9605d51076c4a53a1ed2edd",
|
||||
"new_whole_raw_sha256": "0e222987f7c5e25583dbaba8fe63784aa563715067396e8d31d10bd191e7179b",
|
||||
"whole_function_unit_bytes": 2105
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_release_closed_business_request",
|
||||
"old_sha256": "7fb1b2c4197319d9ff29d7ab565306ecd0b569e331491281ed71d3a38d3a8695",
|
||||
"new_whole_raw_sha256": "6dbde3a3d425e47a049dcc4f05eae6f01fe9784f473c0fb1019a0633c239d83b",
|
||||
"whole_function_unit_bytes": 2414
|
||||
},
|
||||
{
|
||||
"path": "autoload/simulation_runtime.gd",
|
||||
"function": "_complete_service_transaction",
|
||||
"old_sha256": "c7ccce01292699052b8284383ad77f1fe0a5ead9a9c3936622ad9c3b93a3e408",
|
||||
"new_whole_raw_sha256": "f2b6e96a8eeef3dd3f8419b4d9d5ef4e1d13241600ce970bdd78a924428cac6c",
|
||||
"whole_function_unit_bytes": 614
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_prepare_service_for_tick",
|
||||
"old_sha256": "8a9bef4ec1bbe3b25c418f8c7d04d4233cedaa942eda5cc77d530280b0f129de",
|
||||
"new_whole_raw_sha256": "b35c2c0fb23a04258b71995dd7c3b6dfacbbcdf36106e2e3348acef0e18d21cc",
|
||||
"whole_function_unit_bytes": 1958
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_complete_service",
|
||||
"old_sha256": "38a16ace875e4f4b09133b10677cb50871732ca7177166b8659b07c2d79e61d0",
|
||||
"new_whole_raw_sha256": "494edfd11cb3e896d73c2c6fdbe7c1193efce6d869b105e526d2f1dfd1168142",
|
||||
"whole_function_unit_bytes": 1387
|
||||
},
|
||||
{
|
||||
"path": "scripts/facility/facility_service.gd",
|
||||
"function": "_fail_service",
|
||||
"old_sha256": "b4dbc53b40ac3eb4e639bdf13d9f5538eb64a7bd6df22ec230e7baef4a535f58",
|
||||
"new_whole_raw_sha256": "56f61b255217bddb4c8a6ad3af6ed1f9edc3b6a6e928dacf2105be6698936de5",
|
||||
"whole_function_unit_bytes": 484
|
||||
}
|
||||
],
|
||||
"old_report_sha256": "ecb92215b7bfb4368ddeb6d44dcd467d13e97d677ca2f29df3ab9684f6c757c7",
|
||||
"new_report_sha256": "46e0cc35cb95496d5f26d3cab7d3a31cb29faacaa16714daab3aefdf65b420a3",
|
||||
"corrected_bundle": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/audit-support/native-first-current",
|
||||
"new_manifest_sha256": "dbaab3c293c191eb5f3aff34854945e2d564f824df50a92802b3a7eda55321a8",
|
||||
"old_bytes_preserved_in": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/audit-support/native-first-current/root-corrections-r02",
|
||||
"product_source_changed": false,
|
||||
"new_engine_runs": 0
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"task": {
|
||||
"id": "P04-01",
|
||||
"state": "implementing",
|
||||
"repairs": 6,
|
||||
"submitted": "9767b0a28ca8d252520307dbbac60a1d8cfb87ab"
|
||||
},
|
||||
"actual_run": {
|
||||
"id": "c2c761d8d2ed4a55b7ea4515e13ae53f",
|
||||
"status": "running",
|
||||
"pid": 24614,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p04-01/runs/c2c761d8d2ed4a55b7ea4515e13ae53f"
|
||||
},
|
||||
"model": "gpt-6.1-sol",
|
||||
"model_authority": "OPUS_REPAIR6_C_RUN_DECISION.json",
|
||||
"actual_scope": "retain C; strict whole raw function SHA; 2 negative cases and metadata sync only",
|
||||
"formal_credit": 0
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"scope": "Root formal public request resend acceptance fixture, not whole-unit acceptance",
|
||||
"probe_sha256": "14f6722bc8fba604abadf7cc00c447db5553e566e6ea2bec9bbb10b6365fe7b1",
|
||||
"wrapper_sha256": "b21fb05734416e5814a6c3e6c5b6c6d04b40418d21221d1574de136d74603574",
|
||||
"input_manifest_sha256": "1922dfa7a75d2055e958ab52c9379386db8b9378d641ee22d96b1c495b33ce58",
|
||||
"source_native": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01",
|
||||
"free_before": 1681416192,
|
||||
"required_free": 1567661072,
|
||||
"estimated_seconds": 90,
|
||||
"whole_original_credit": 0
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"source_native": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01",
|
||||
"execution_sha256": "33c6d05f4a92cb5509ecbba840e2ad38a15c4c6b016a5979cade2e56460c9248",
|
||||
"source_refs": 1338,
|
||||
"whole_typed_inputs": {
|
||||
"before": {
|
||||
"path": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-before.var",
|
||||
"bytes": 486172,
|
||||
"sha256": "17281699c559e496d9deaf7fc57dc6a06d14be503e6e96b5ca410553de4ed8cf"
|
||||
},
|
||||
"midnight": {
|
||||
"path": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-midnight.var",
|
||||
"bytes": 507500,
|
||||
"sha256": "c78a50e3ffbc673de7fa2371cde0f79f959301aed20fa2e5836a2bd63e0fe0f8"
|
||||
},
|
||||
"paused": {
|
||||
"path": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-paused.var",
|
||||
"bytes": 506972,
|
||||
"sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
"after": {
|
||||
"path": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-after.var",
|
||||
"bytes": 507272,
|
||||
"sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
},
|
||||
"next": {
|
||||
"path": "/Users/korizatou114/Projects/\u3068\u308a\u306b\u304f\u5de5\u623f\u30b2\u30fc\u30e0\u5236\u4f5c\u90e8/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-next.var",
|
||||
"bytes": 508112,
|
||||
"sha256": "dfc7ded1106e775a980c197d07c8f0e5b3d16788ae7be852716b4148f676fe72"
|
||||
}
|
||||
},
|
||||
"kitchen_id": "facility_00000003",
|
||||
"original_price": 25,
|
||||
"facility_id": "facility_00000001",
|
||||
"request_id": "p04.order.midnight.request",
|
||||
"guest_ids": [
|
||||
"p04.order.midnight.guest"
|
||||
],
|
||||
"request_key": "p04.same-minute.service.request"
|
||||
}
|
||||
+328
@@ -0,0 +1,328 @@
|
||||
{
|
||||
"plan_id": "P04-01",
|
||||
"production_commit": "f3f23cac8822da19ab6912bacd759a94d084c0c0",
|
||||
"scope": "Same-minute public create_service_request retransmission before admission/during dependency pause/after completion, including formal SaveService and distinct-PID Reader. All typed state preserved. Existing payroll values remain observed test inputs, not newly approved product balance.",
|
||||
"source_files": 1338,
|
||||
"actual_owned_pids": [
|
||||
20262,
|
||||
20314,
|
||||
20347,
|
||||
23675,
|
||||
23722,
|
||||
23759,
|
||||
23770
|
||||
],
|
||||
"all_owned_ended": true,
|
||||
"duplicate_attempts": [
|
||||
{
|
||||
"scope": "original native",
|
||||
"label": "queued-same-minute",
|
||||
"minute": 1394,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-queued-same-minute-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-queued-same-minute-after.var",
|
||||
"identical_whole_typed_sha256": "5528432137faea5b2cf3187c50d3ba4f9a275394321c64319486c576550841f8"
|
||||
},
|
||||
{
|
||||
"scope": "original native",
|
||||
"label": "paused-00-01",
|
||||
"minute": 1441,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-paused-00-01-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-paused-00-01-after.var",
|
||||
"identical_whole_typed_sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
{
|
||||
"scope": "original native",
|
||||
"label": "completed-00-02",
|
||||
"minute": 1442,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-completed-00-02-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-duplicate-completed-00-02-after.var",
|
||||
"identical_whole_typed_sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
},
|
||||
{
|
||||
"scope": "formal Reader",
|
||||
"label": "loaded-before",
|
||||
"minute": 1439,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-before-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-before-after.var",
|
||||
"identical_whole_typed_sha256": "17281699c559e496d9deaf7fc57dc6a06d14be503e6e96b5ca410553de4ed8cf"
|
||||
},
|
||||
{
|
||||
"scope": "formal Reader",
|
||||
"label": "loaded-paused",
|
||||
"minute": 1441,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-paused-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-paused-after.var",
|
||||
"identical_whole_typed_sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
{
|
||||
"scope": "formal Reader",
|
||||
"label": "loaded-after",
|
||||
"minute": 1442,
|
||||
"code": "DUPLICATE_IDEMPOTENCY_KEY",
|
||||
"original_command_id": 45,
|
||||
"before": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-after-before.var",
|
||||
"after": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-duplicate-loaded-after-after.var",
|
||||
"identical_whole_typed_sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
}
|
||||
],
|
||||
"typed_saved_loaded_replayed_14": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/writer-before-persisted.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-before.var",
|
||||
"sha256": "17281699c559e496d9deaf7fc57dc6a06d14be503e6e96b5ca410553de4ed8cf"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-before-loaded.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-before.var",
|
||||
"sha256": "17281699c559e496d9deaf7fc57dc6a06d14be503e6e96b5ca410553de4ed8cf"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/writer-midnight-persisted.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-midnight.var",
|
||||
"sha256": "c78a50e3ffbc673de7fa2371cde0f79f959301aed20fa2e5836a2bd63e0fe0f8"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-midnight-loaded.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-midnight.var",
|
||||
"sha256": "c78a50e3ffbc673de7fa2371cde0f79f959301aed20fa2e5836a2bd63e0fe0f8"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-replayed-midnight.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-midnight.var",
|
||||
"sha256": "c78a50e3ffbc673de7fa2371cde0f79f959301aed20fa2e5836a2bd63e0fe0f8"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/writer-paused-persisted.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-paused.var",
|
||||
"sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-paused-loaded.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-paused.var",
|
||||
"sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-replayed-paused.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-paused.var",
|
||||
"sha256": "789e17a97972ac250884215412de3bc241665c0f36418464a3c6020a5cce06e5"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/writer-after-persisted.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-after.var",
|
||||
"sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-after-loaded.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-after.var",
|
||||
"sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-replayed-after.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-after.var",
|
||||
"sha256": "aebdf32b03c2716156a8ef92344e5884035be428caf6709a94dc557161035336"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/writer-next-persisted.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-next.var",
|
||||
"sha256": "dfc7ded1106e775a980c197d07c8f0e5b3d16788ae7be852716b4148f676fe72"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-next-loaded.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-next.var",
|
||||
"sha256": "dfc7ded1106e775a980c197d07c8f0e5b3d16788ae7be852716b4148f676fe72"
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-formal-native-r01/restart-evidence/reader-replayed-next.var",
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p04-idempotency-paid-midnight-native-r01/order-evidence/midnight-next.var",
|
||||
"sha256": "dfc7ded1106e775a980c197d07c8f0e5b3d16788ae7be852716b4148f676fe72"
|
||||
}
|
||||
],
|
||||
"formal_members_original_and_copied_20": [
|
||||
{
|
||||
"point": "before",
|
||||
"name": "journal.log",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/before/journal.log",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/before/journal.log",
|
||||
"sha256": "b47ea66287aebdf200b24d88064955320c30e46ccb255e5f1529e16879257d6b"
|
||||
},
|
||||
{
|
||||
"point": "before",
|
||||
"name": "manifest.json",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/before/manifest.json",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/before/manifest.json",
|
||||
"sha256": "cb5b2b700e0d1808236dc8dac5cd26f2d449965f70134491aef456dfbbff6920"
|
||||
},
|
||||
{
|
||||
"point": "before",
|
||||
"name": "thumbnail.png",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/before/thumbnail.png",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/before/thumbnail.png",
|
||||
"sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32"
|
||||
},
|
||||
{
|
||||
"point": "before",
|
||||
"name": "world.bin",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/before/world.bin",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/before/world.bin",
|
||||
"sha256": "53a57528c6ffcaf5e31101ddd7915f23e7df2d7bc9abc5b8c0e2448df6cc5b77"
|
||||
},
|
||||
{
|
||||
"point": "midnight",
|
||||
"name": "journal.log",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/midnight/journal.log",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/midnight/journal.log",
|
||||
"sha256": "b47ea66287aebdf200b24d88064955320c30e46ccb255e5f1529e16879257d6b"
|
||||
},
|
||||
{
|
||||
"point": "midnight",
|
||||
"name": "manifest.json",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/midnight/manifest.json",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/midnight/manifest.json",
|
||||
"sha256": "2780b7b0cd40b0d901b20592e0483abd4b20fdf15df69be3660d2b00b2b1da6d"
|
||||
},
|
||||
{
|
||||
"point": "midnight",
|
||||
"name": "thumbnail.png",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/midnight/thumbnail.png",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/midnight/thumbnail.png",
|
||||
"sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32"
|
||||
},
|
||||
{
|
||||
"point": "midnight",
|
||||
"name": "world.bin",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/midnight/world.bin",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/midnight/world.bin",
|
||||
"sha256": "dc441ecab7b85edb4773d1529618123a38e85f6f4f6bfe9aa181f3e6ae5fdcc9"
|
||||
},
|
||||
{
|
||||
"point": "paused",
|
||||
"name": "journal.log",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/paused/journal.log",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/paused/journal.log",
|
||||
"sha256": "b47ea66287aebdf200b24d88064955320c30e46ccb255e5f1529e16879257d6b"
|
||||
},
|
||||
{
|
||||
"point": "paused",
|
||||
"name": "manifest.json",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/paused/manifest.json",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/paused/manifest.json",
|
||||
"sha256": "157c6c2738edfb9e5faf119e6281337297b8cf1cff194595c2c5649f1fefc7cc"
|
||||
},
|
||||
{
|
||||
"point": "paused",
|
||||
"name": "thumbnail.png",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/paused/thumbnail.png",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/paused/thumbnail.png",
|
||||
"sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32"
|
||||
},
|
||||
{
|
||||
"point": "paused",
|
||||
"name": "world.bin",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/paused/world.bin",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/paused/world.bin",
|
||||
"sha256": "06bb59f561d32005ba9d2939483ca5296ef09ddb350c8c9da765eb4fd2c35e27"
|
||||
},
|
||||
{
|
||||
"point": "after",
|
||||
"name": "journal.log",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/after/journal.log",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/after/journal.log",
|
||||
"sha256": "b47ea66287aebdf200b24d88064955320c30e46ccb255e5f1529e16879257d6b"
|
||||
},
|
||||
{
|
||||
"point": "after",
|
||||
"name": "manifest.json",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/after/manifest.json",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/after/manifest.json",
|
||||
"sha256": "7728b1adeb0c33506f2b7e974787cdb9a9ef1f4e35e571a89b8f6573b9d82116"
|
||||
},
|
||||
{
|
||||
"point": "after",
|
||||
"name": "thumbnail.png",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/after/thumbnail.png",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/after/thumbnail.png",
|
||||
"sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32"
|
||||
},
|
||||
{
|
||||
"point": "after",
|
||||
"name": "world.bin",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/after/world.bin",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/after/world.bin",
|
||||
"sha256": "263c97e35253e6eda03910b078e97721fe9923ddbad8fd5637b088e3e8c32408"
|
||||
},
|
||||
{
|
||||
"point": "next",
|
||||
"name": "journal.log",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/next/journal.log",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/next/journal.log",
|
||||
"sha256": "b47ea66287aebdf200b24d88064955320c30e46ccb255e5f1529e16879257d6b"
|
||||
},
|
||||
{
|
||||
"point": "next",
|
||||
"name": "manifest.json",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/next/manifest.json",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/next/manifest.json",
|
||||
"sha256": "b86e27ab7b6c583072ef9e3ee9750b28a063cd6480e6d17344c19693c8ef0b5f"
|
||||
},
|
||||
{
|
||||
"point": "next",
|
||||
"name": "thumbnail.png",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/next/thumbnail.png",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/next/thumbnail.png",
|
||||
"sha256": "0ef55674eca98b6748ae5ccca85a14b042c1545a143810c9c47b487119895c32"
|
||||
},
|
||||
{
|
||||
"point": "next",
|
||||
"name": "world.bin",
|
||||
"writer": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-e130f716caa44224bfa18ef8eac3cb87-standard-runtime-writer/saves/p04_boundary/next/world.bin",
|
||||
"reader": "/Users/korizatou114/Library/Application Support/TheTree-PCK-tests-6cdda8fcb0414be38564d39779f790a6-standard-runtime-reader/saves/p04_boundary/next/world.bin",
|
||||
"sha256": "2b811a296ab9be288dcfde61e9238e7b7357bf7e9ed1265231e77ed44b7f46d0"
|
||||
}
|
||||
],
|
||||
"original_packages_unchanged": true,
|
||||
"writer_pid": 23759,
|
||||
"reader_pid": 23770,
|
||||
"one_target_sale": [
|
||||
{
|
||||
"absolute_minute": 1442,
|
||||
"amount": 25,
|
||||
"category": "SERVICE_SALE",
|
||||
"credit_account": "GUEST_WALLET:p04.order.midnight.guest",
|
||||
"debit_account": "FACILITY_REVENUE:facility_00000001",
|
||||
"memo_key": "",
|
||||
"related_transaction_id": "",
|
||||
"source_entity_id": "facility_00000001",
|
||||
"transaction_id": "ledger_00000085"
|
||||
}
|
||||
],
|
||||
"one_payroll": [
|
||||
{
|
||||
"absolute_minute": 1440,
|
||||
"amount": 255,
|
||||
"category": "WAGE",
|
||||
"credit_account": "PLAYER_CASH",
|
||||
"debit_account": "WAGE_EXPENSE",
|
||||
"memo_key": "operations.payroll.settlement",
|
||||
"related_transaction_id": "",
|
||||
"source_entity_id": "payroll-day-00000001",
|
||||
"transaction_id": "ledger_00000081"
|
||||
}
|
||||
],
|
||||
"source_default_profile_doc4_unchanged": true,
|
||||
"native_execution_sha256": "33c6d05f4a92cb5509ecbba840e2ad38a15c4c6b016a5979cade2e56460c9248",
|
||||
"formal_execution_sha256": "30ccb97289abef5bf9ef0406661f1e8a9a02e8d016b5798f9c79bca27636109d",
|
||||
"observations_sha256": "a6d40020061f8091790116a08aa5752f21a270b833b55d4dbe451a98e6664416",
|
||||
"reader_receipt_sha256": "f9b38cc2962642676d91c60b95ae13f9b40d61626e50ceca8bb7916cf026f868",
|
||||
"formal_original_credit": 0,
|
||||
"independent_whole_review": "pending"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"scope": "Root QA exact same-minute request replay contract; no product or worker edits; catalog values are observed test inputs",
|
||||
"base_probe_sha256": "7a47b3e7e19f059c2b016d9e895259c186a82a212f8e0b1ad5344ac7b5a9d713",
|
||||
"probe_sha256": "4f9493c23eb635faf4fc6af9c97100c3a3029c7ebc45e8d942be7390e62b1c80",
|
||||
"wrapper_sha256": "025cb15b51f32e01e7b5178dd550aae4270b847675a67ebb53466d9dc3393c24",
|
||||
"estimated_seconds": 90,
|
||||
"free_before": 1647456256,
|
||||
"required_free": 1567661072,
|
||||
"planned_native_phases": [
|
||||
"import",
|
||||
"parse",
|
||||
"repro"
|
||||
],
|
||||
"original_acceptance_credit": 0
|
||||
}
|
||||
+143
@@ -0,0 +1,143 @@
|
||||
extends SceneTree
|
||||
# Reuse reviewed entire boundary inputs. Formal public saves, separate owned Writer/Reader.
|
||||
var _runtime: Variant
|
||||
var _clock: Variant
|
||||
var _state: Variant
|
||||
var _checks := 0
|
||||
var _failures := 0
|
||||
var _folder := ""
|
||||
var _mode := ""
|
||||
var _cases: Array = []
|
||||
var _slots: Dictionary = {}
|
||||
var _results: Array = []
|
||||
var _resends: Array[Dictionary] = []
|
||||
func _initialize() -> void: call_deferred("_run")
|
||||
func _expect(ok: bool, label: String) -> void:
|
||||
_checks += 1
|
||||
if not ok: _failures += 1; push_error(label)
|
||||
func _json(path: String) -> Variant:
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
_expect(file != null, "read sealed metadata " + path.get_file())
|
||||
if file == null: return null
|
||||
var value: Variant = JSON.parse_string(file.get_as_text()); file.close(); return value
|
||||
func _input(row: Dictionary) -> Dictionary:
|
||||
var path := String(row["path"])
|
||||
_expect(FileAccess.get_sha256(path) == String(row["sha256"]), "exact original input SHA")
|
||||
var file := FileAccess.open(path, FileAccess.READ)
|
||||
_expect(file != null, "original typed input exists")
|
||||
if file == null: return {}
|
||||
var data := file.get_buffer(file.get_length()); file.close()
|
||||
_expect(data.size() == int(row["bytes"]), "entire typed input length")
|
||||
var value: Variant = bytes_to_var(data)
|
||||
_expect(value is Dictionary and var_to_bytes(value) == data, "original entire typed input roundtrip")
|
||||
return value if value is Dictionary else {}
|
||||
func _proof(label: String, value: Variant) -> void:
|
||||
var file := FileAccess.open(_folder.path_join(_mode + "-" + label + ".var"), FileAccess.WRITE)
|
||||
_expect(file != null, "whole typed output " + label)
|
||||
if file != null: file.store_buffer(var_to_bytes(value)); file.flush(); file.close()
|
||||
func _reset() -> void:
|
||||
_cleanup()
|
||||
_runtime = load("res://autoload/simulation_runtime.gd").new()
|
||||
_clock = load("res://autoload/game_clock.gd").new()
|
||||
_state = load("res://autoload/game_state.gd").new()
|
||||
_clock.reset(1, 6, 0); _state.reset()
|
||||
_expect(bool(_runtime.initialize(_clock, _state, 424242).get(&"valid", false)), "ordinary Runtime initializes")
|
||||
_clock.set_paused(true)
|
||||
func _cleanup() -> void:
|
||||
if _runtime != null: _runtime.free()
|
||||
if _clock != null: _clock.free()
|
||||
if _state != null: _state.free()
|
||||
_runtime = null; _clock = null; _state = null
|
||||
func _restore_expected(expected: Dictionary, label: String) -> void:
|
||||
_expect(_runtime.restore_snapshot(expected), "public whole Runtime restore " + label)
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(expected), "whole restore equality " + label)
|
||||
func _write_save(label: String, expected: Dictionary) -> void:
|
||||
_restore_expected(expected, label)
|
||||
var path := "user://saves/p04_boundary/" + label
|
||||
var result := SaveService.save_snapshot(path, _runtime.create_snapshot())
|
||||
_expect(bool(result.get(&"ok", false)), "formal public package save " + label)
|
||||
var inspected := SaveService.inspect_snapshot(path)
|
||||
_expect(bool(inspected.get(&"ok", false)) and bool(inspected.get(&"read_only", false)) and var_to_bytes(inspected.get(&"snapshot", {})) == var_to_bytes(expected), "formal whole typed inspect " + label)
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(expected), "save leaves whole Runtime unchanged " + label)
|
||||
_slots[label] = ProjectSettings.globalize_path(path)
|
||||
_proof(label + "-persisted", expected)
|
||||
func _copy_package(original: String, label: String) -> void:
|
||||
var target := ProjectSettings.globalize_path("user://saves/p04_boundary/" + label)
|
||||
_expect(DirAccess.make_dir_recursive_absolute(target) == OK, "fresh Reader package " + label)
|
||||
var dir := DirAccess.open(original)
|
||||
_expect(dir != null, "Writer entire package available")
|
||||
if dir == null: return
|
||||
var names := dir.get_files(); names.sort()
|
||||
_expect(dir.get_directories().is_empty() and names == PackedStringArray(["journal.log", "manifest.json", "thumbnail.png", "world.bin"]), "exact complete four-member save package")
|
||||
for member: String in names:
|
||||
_expect(DirAccess.copy_absolute(original.path_join(member), target.path_join(member)) == OK, "copy complete member " + member)
|
||||
_expect(FileAccess.get_sha256(original.path_join(member)) == FileAccess.get_sha256(target.path_join(member)), "literal copied member SHA " + member)
|
||||
_slots[label] = target
|
||||
func _load_save(label: String, expected: Dictionary) -> void:
|
||||
var result := SaveService.load_snapshot(String(_slots[label]))
|
||||
_expect(bool(result.get(&"ok", false)), "formal public package load " + label)
|
||||
if not bool(result.get(&"ok", false)): return
|
||||
_expect(var_to_bytes(result[&"snapshot"]) == var_to_bytes(expected), "loaded entire typed package matches original " + label)
|
||||
_restore_expected(result[&"snapshot"], label)
|
||||
_proof(label + "-loaded", _runtime.create_snapshot())
|
||||
func _run() -> void:
|
||||
_folder = OS.get_environment("THE_TREE_BOUNDARY_RESTART_EVIDENCE")
|
||||
_mode = OS.get_environment("THE_TREE_BOUNDARY_RESTART_MODE")
|
||||
if _folder.is_empty() or _mode not in ["writer", "reader"]: quit(2); return
|
||||
_expect(DirAccess.make_dir_recursive_absolute(_folder) == OK, "fresh formal output")
|
||||
var manifest: Dictionary = _json(OS.get_environment("THE_TREE_BOUNDARY_RESTART_INPUT"))
|
||||
var inputs: Dictionary = manifest["whole_typed_inputs"]
|
||||
_reset()
|
||||
if _mode == "writer":
|
||||
for point: String in inputs: _write_save(point, _input(inputs[point]))
|
||||
else:
|
||||
var writer: Dictionary = _json(_folder.path_join("writer.json"))
|
||||
_expect(int(writer["pid"]) != OS.get_process_id() and String(writer["profile"]) != OS.get_user_data_dir(), "distinct actual Writer/Reader PID and private profiles")
|
||||
for label: String in writer["slots"]: _copy_package(String(writer["slots"][label]), label)
|
||||
for point: String in inputs: _load_save(point, _input(inputs[point]))
|
||||
_load_save("before", _input(inputs["before"]))
|
||||
_assert_request_resend(manifest, "loaded-before")
|
||||
var receipts: Array = []
|
||||
_runtime.economy_service.transaction_posted.connect(func(id: StringName, entries: Array):
|
||||
var rows: Array = []
|
||||
for row: LedgerEntry in entries: rows.append(row.to_dictionary())
|
||||
receipts.append({&"id": id, &"minute": _clock.absolute_minute, &"rows": rows})
|
||||
)
|
||||
for point: String in ["midnight", "paused", "after", "next"]:
|
||||
if point == "after":
|
||||
var id := StringName(manifest["kitchen_id"])
|
||||
var command: CommandResult = _runtime.submit_command(&"set_facility_policy", {&"facility_id": id, &"patch": {&"business_open": true}}, &"player", &"", 10, -1, &"p04.dependency.reopen")
|
||||
_expect(command.is_success(), "same public dependency reopen after formal restart")
|
||||
_clock.advance_one_minute()
|
||||
var expected := _input(inputs[point])
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(expected), "all typed state after formal restart equals original native " + point)
|
||||
_proof("replayed-" + point, _runtime.create_snapshot())
|
||||
if point in ["paused", "after"]: _assert_request_resend(manifest, "loaded-" + point)
|
||||
var sale_count := 0
|
||||
for receipt: Dictionary in receipts:
|
||||
for row: Dictionary in receipt[&"rows"]:
|
||||
if row[&"category"] == &"SERVICE_SALE":
|
||||
sale_count += 1
|
||||
_expect(receipt[&"minute"] == 1442 and row[&"amount"] == int(manifest["original_price"]), "exact original service sale after formal restart")
|
||||
_expect(sale_count == 1, "one sale notification across paused midnight and recovery")
|
||||
_results.append({&"receipts": receipts, &"sale_count": sale_count})
|
||||
_proof("receipts", receipts)
|
||||
_finish()
|
||||
func _assert_request_resend(manifest: Dictionary, label: String) -> void:
|
||||
var before: Dictionary = _runtime.create_snapshot()
|
||||
var guests: Array = []
|
||||
for guest: String in manifest["guest_ids"]: guests.append(StringName(guest))
|
||||
var result: CommandResult = _runtime.submit_command(&"create_service_request", {&"facility_id": StringName(manifest["facility_id"]), &"request_id": StringName(manifest["request_id"]), &"guest_ids": guests}, &"player", &"", 10, -1, StringName(manifest["request_key"]))
|
||||
_expect(result.code == CommandResult.Code.DUPLICATE_IDEMPOTENCY_KEY, "formal restart retains processed request idempotency " + label)
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_expect(var_to_bytes(before) == var_to_bytes(after), "formal restart request resend preserves entire typed Runtime " + label)
|
||||
_proof("duplicate-" + label + "-before", before); _proof("duplicate-" + label + "-after", after)
|
||||
_resends.append({&"label": label, &"minute": _clock.absolute_minute, &"result": result.to_dictionary(), &"request_key": manifest["request_key"]})
|
||||
|
||||
func _finish() -> void:
|
||||
var file := FileAccess.open(_folder.path_join(_mode + ".json"), FileAccess.WRITE)
|
||||
if file != null:
|
||||
file.store_string(JSON.stringify({&"pid": OS.get_process_id(), &"profile": OS.get_user_data_dir(), &"slots": _slots, &"resends": _resends, &"results": _results, &"checks": _checks, &"failures": _failures}, "\t")); file.flush(); file.close()
|
||||
_cleanup()
|
||||
print("Dependency formal restart: %d checks, %d failures" % [_checks, _failures])
|
||||
quit(1 if _failures else 0)
|
||||
+230
@@ -0,0 +1,230 @@
|
||||
extends "res://tests/s3/test_runtime_actor_hardening.gd"
|
||||
var _observations: Array[Dictionary] = []
|
||||
var _receipts: Array[Dictionary] = []
|
||||
var _first_receipts: Array[Dictionary] = []
|
||||
var _receipt_hook: Callable
|
||||
var _evidence_dir := ""
|
||||
var _facility_id: StringName = &""
|
||||
var _service_id: StringName = &""
|
||||
var _request_id: StringName = &"p04.order.midnight.request"
|
||||
var _guest_id: StringName = &"p04.order.midnight.guest"
|
||||
var _staff_ids: Array[StringName] = [&"p04.midnight.server.a", &"p04.midnight.server.b"]
|
||||
var _serial := 0
|
||||
var _case := "midnight"
|
||||
var _original_price := 0
|
||||
var _observation_pass := "first"
|
||||
var _first_summary: Dictionary = {}
|
||||
var _paid_reception_id: StringName = &""
|
||||
var _expected_daily_wages := 0
|
||||
var _duplicate_results: Array[Dictionary] = []
|
||||
|
||||
func _run() -> void:
|
||||
_evidence_dir = OS.get_environment("THE_TREE_ORDER_EVIDENCE")
|
||||
if _evidence_dir.is_empty(): quit(2); return
|
||||
_expect(DirAccess.make_dir_recursive_absolute(_evidence_dir) == OK, "fresh external evidence directory")
|
||||
_run_midnight()
|
||||
_finish_order()
|
||||
|
||||
func _run_midnight() -> void:
|
||||
_reset_runtime(424242)
|
||||
var enabled: Dictionary = _runtime.enable_production_operations()
|
||||
_expect(bool(enabled.get(&"ok", false)), "public production operations enabled at original Day 1 06:00")
|
||||
if not bool(enabled.get(&"ok", false)): return
|
||||
var facility := _build_cafeteria(true)
|
||||
if facility == null: return
|
||||
_facility_id = facility.instance_id
|
||||
var definition: FacilityDefinition = _runtime.definition_registry.get_facility(facility.definition_id)
|
||||
_original_price = definition.base_price
|
||||
_setup_paid_reception()
|
||||
var cook_id := StringName("fixture.kitchen.worker.%s" % _facility_id)
|
||||
_expect(_cmd(&"set_staff_work_assignment", {&"staff_id": cook_id, &"template_id": &"NIGHT", &"facility_id": facility.related_facility_id}).is_success(), "public original NIGHT assignment replaces inherited 23:59 cook fixture")
|
||||
for id: StringName in _staff_ids:
|
||||
_expect(_cmd(&"register_staff", {&"staff_id": id, &"role_id": &"server", &"options": {&"state": StaffRuntime.State.OFF_DUTY, &"current_cell": Vector3i.ZERO}}).is_success(), "register real workplace Staff " + String(id))
|
||||
_expect(_cmd(&"set_staff_work_assignment", {&"staff_id": id, &"template_id": &"NIGHT", &"facility_id": _facility_id}).is_success(), "original NIGHT 18:00-next06:00 assignment " + String(id))
|
||||
var queue_at := 1440 - definition.base_service_minutes - 1
|
||||
_expect(queue_at > _clock.absolute_minute, "setup finishes before original service start")
|
||||
if queue_at <= _clock.absolute_minute: return
|
||||
_clock.advance_minutes(1079 - _clock.absolute_minute)
|
||||
_observe("paid-before-handover-17-59")
|
||||
_expect(_runtime.facility_service.get_instance(_paid_reception_id).active_staff_ids.has(&"staff_akane"), "normally hired daytime receptionist physically attends before original DAY boundary")
|
||||
_clock.register_tick_handler(_clock.TickPhase.FACILITY_COMPLETION, &"zz.p04.paid.before-handover", func(minute: int):
|
||||
if minute == 1080:
|
||||
_observe("paid-at-completion-before-handover-18-00")
|
||||
_expect(_runtime.facility_service.get_instance(_paid_reception_id).active_staff_ids.has(&"staff_akane"), "last DAY interval retains actual hired worker before handover")
|
||||
)
|
||||
_clock.advance_one_minute(); _observe("paid-after-handover-18-00")
|
||||
_expect(not _runtime.facility_service.get_instance(_paid_reception_id).active_staff_ids.has(&"staff_akane"), "daytime hired receptionist is removed after completion phase")
|
||||
_clock.advance_minutes(queue_at - _clock.absolute_minute)
|
||||
_expect(_runtime.facility_service.get_instance(_paid_reception_id).active_staff_ids.has(&"staff_bardo"), "normally hired NIGHT replacement physically arrives")
|
||||
_expect(_clock.absolute_minute == queue_at and _runtime.operations_coordinator.current_minute == queue_at, "real production operations advance without blocked suffix")
|
||||
if _clock.absolute_minute != queue_at: return
|
||||
for id: StringName in _staff_ids:
|
||||
var worker: StaffRuntime = _runtime.staff_service.get_staff(id)
|
||||
_expect(_runtime.staff_service.requires_attendance(id) and StaffCommuteService.is_at_facility(worker, facility) and worker.current_cell != Vector3i.ZERO, "physical ordinary NIGHT workplace arrival " + String(id))
|
||||
var kitchen: FacilityInstance = _runtime.facility_service.get_instance(facility.related_facility_id)
|
||||
var cook: StaffRuntime = _runtime.staff_service.get_staff(cook_id)
|
||||
_expect(_runtime.staff_service.requires_attendance(cook_id) and StaffCommuteService.is_at_facility(cook, kitchen), "real kitchen NIGHT attendance, not legacy attendance bypass")
|
||||
_expect(_stock(facility.local_inventory_id, &"ingredient/basic_meal", 1, &"p04.midnight.stock"), "one real meal to reserve")
|
||||
_expect(_cmd(&"spawn_guest", {&"guest_id": _guest_id, &"guest_type_id": &"traveler", &"gold": _original_price * 2, &"options": {&"state": GuestRuntime.State.DECIDING, &"current_cell": Vector3i.ZERO}}).is_success(), "public actual Guest wallet")
|
||||
_expect(_target_request().is_success(), "original public service request with explicit idempotency key")
|
||||
_assert_request_resend("queued-same-minute")
|
||||
_clock.advance_one_minute()
|
||||
var active: Array = _runtime.facility_service.get_active_services(_facility_id)
|
||||
_expect(active.size() == 1, "one actual reserved service starts")
|
||||
if active.size() != 1: return
|
||||
var service: ServiceInstance = active[0]; _service_id = service.service_id
|
||||
_expect(service.started_at + service.duration_minutes == 1440 and service.duration_minutes == definition.base_service_minutes and service.price_snapshot == _original_price, "original service completion coincides with 00:00")
|
||||
_clock.advance_minutes(1439 - _clock.absolute_minute)
|
||||
_expect(service.elapsed_minutes == service.duration_minutes - 1, "one original service minute remains at 23:59")
|
||||
_expect(_runtime.operations_coordinator.get_day_summary(1).is_empty(), "real Day 1 not closed early")
|
||||
_expect(_cmd(&"set_facility_policy", {&"facility_id": kitchen.instance_id, &"patch": {&"business_open": false}}).is_success(), "public dependency kitchen closure; dining itself remains open by policy")
|
||||
_expect(not facility.related_facility_operating and kitchen.state == FacilityInstance.State.CLOSED, "dependency closure projects to dining")
|
||||
var held_ids: Array[StringName] = service.inventory_reservations.duplicate()
|
||||
var held_elapsed := service.elapsed_minutes
|
||||
var held_service_id := service.service_id
|
||||
_connect_receipts(); _observe("closed-before-23-59")
|
||||
var before: Dictionary = _runtime.create_snapshot()
|
||||
_clock.advance_one_minute(); _observe("paused-00-00")
|
||||
_expect(_clock.absolute_minute == 1440 and int(_runtime.operations_coordinator.get_day_summary(1).get(&"closed_at", -1)) == 1440, "real daily close proceeds while dependent service is paused")
|
||||
_assert_held(service, held_service_id, held_ids, held_elapsed)
|
||||
var midnight: Dictionary = _runtime.create_snapshot()
|
||||
_first_summary = _runtime.operations_coordinator.get_day_summary(1).duplicate(true)
|
||||
_expect(_expected_daily_wages > 0 and int(_first_summary[&"settlement"][&"new_wages_total"]) == _expected_daily_wages and int(_first_summary[&"settlement"][&"paid_total"]) == _expected_daily_wages, "real midnight settles full existing catalog wages once")
|
||||
var wage_rows := 0
|
||||
for receipt: Dictionary in _receipts:
|
||||
for row: Dictionary in receipt[&"rows"]:
|
||||
if row[&"category"] == &"WAGE":
|
||||
wage_rows += 1
|
||||
_expect(receipt[&"minute"] == 1440 and int(row[&"amount"]) == _expected_daily_wages and row[&"credit_account"] == &"PLAYER_CASH", "one real payroll transaction debits actual player cash at midnight")
|
||||
_expect(wage_rows == 1, "exactly one nonzero payroll ledger row at midnight")
|
||||
_clock.advance_one_minute(); _observe("paused-00-01")
|
||||
_assert_held(service, held_service_id, held_ids, held_elapsed)
|
||||
_assert_request_resend("paused-00-01")
|
||||
var paused: Dictionary = _runtime.create_snapshot()
|
||||
_expect(_reopen_dependency(kitchen.instance_id).is_success(), "public reopening of same dependency")
|
||||
_clock.advance_one_minute(); _observe("resumed-complete-00-02")
|
||||
_assert_completed(service, held_service_id, held_ids)
|
||||
_assert_request_resend("completed-00-02")
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_clock.advance_one_minute(); _observe("stable-00-03")
|
||||
_assert_completed(service, held_service_id, held_ids)
|
||||
var next: Dictionary = _runtime.create_snapshot()
|
||||
_first_receipts.assign(_receipts.duplicate(true))
|
||||
_expect(_runtime.restore_snapshot(before), "restore typed pre-midnight dependency-closed snapshot")
|
||||
_observation_pass = "replay"; _receipts.clear(); _connect_receipts()
|
||||
_clock.advance_one_minute()
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(midnight), "typed paused midnight state replay matches")
|
||||
_clock.advance_one_minute()
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(paused), "typed second paused state replay matches")
|
||||
_expect(_reopen_dependency(kitchen.instance_id).is_success(), "replay same public reopen command and idempotency key")
|
||||
_clock.advance_one_minute()
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(after), "typed completed state replay matches")
|
||||
_clock.advance_one_minute()
|
||||
_expect(var_to_bytes(_runtime.create_snapshot()) == var_to_bytes(next), "typed subsequent state replay matches")
|
||||
_expect(_first_receipts == _receipts, "all actual service and settlement receipts replay unchanged")
|
||||
_write_var("before", before); _write_var("midnight", midnight); _write_var("paused", paused); _write_var("after", after); _write_var("next", next)
|
||||
|
||||
func _target_request() -> CommandResult:
|
||||
return _runtime.submit_command(&"create_service_request", {&"facility_id": _facility_id, &"request_id": _request_id, &"guest_ids": [_guest_id]}, &"player", &"", 10, -1, &"p04.same-minute.service.request")
|
||||
|
||||
func _assert_request_resend(label: String) -> void:
|
||||
var before: Dictionary = _runtime.create_snapshot()
|
||||
var result: CommandResult = _target_request()
|
||||
_expect(result.code == CommandResult.Code.DUPLICATE_IDEMPOTENCY_KEY, "normal repeated processed request reports its original duplicate-key contract " + label)
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_expect(var_to_bytes(before) == var_to_bytes(after), "same-minute request resend preserves all typed Runtime state " + label)
|
||||
_write_var("duplicate-" + label + "-before", before)
|
||||
_write_var("duplicate-" + label + "-after", after)
|
||||
_duplicate_results.append({&"label": label, &"minute": _clock.absolute_minute, &"command_result": result.to_dictionary(), &"request_id": _request_id, &"idempotency_key": &"p04.same-minute.service.request"})
|
||||
|
||||
func _setup_paid_reception() -> void:
|
||||
var definition: FacilityDefinition = _runtime.definition_registry.get_facility(&"reception")
|
||||
_expect(_cmd(&"build_facility", {&"definition_id": &"reception", &"origin": Vector3i(2, 0, WorldService.LAYER_FRONT)}).is_success(), "paid public reception construction")
|
||||
_clock.advance_minutes(definition.build_minutes)
|
||||
for instance: FacilityInstance in _runtime.facility_service.get_instances():
|
||||
if instance.definition_id == &"reception": _paid_reception_id = instance.instance_id
|
||||
_expect(not _paid_reception_id.is_empty(), "reception completes using unchanged construction duration")
|
||||
var catalog: Dictionary = JSON.parse_string(FileAccess.get_file_as_string("res://data/characters/mvp_staff_candidates.json"))
|
||||
for candidate_id: StringName in [&"staff_akane", &"staff_bardo"]:
|
||||
var original_wage := -1
|
||||
for row: Dictionary in catalog["entries"]:
|
||||
if StringName(row["id"]) == candidate_id: original_wage = int(row["daily_wage"])
|
||||
_expect(original_wage > 0 and _cmd(&"hire_staff_candidate", {&"candidate_id": candidate_id}).is_success(), "public hire of existing paid candidate " + String(candidate_id))
|
||||
var worker: StaffRuntime = _runtime.staff_service.get_staff(candidate_id)
|
||||
_expect(worker != null and worker.get_effective_daily_wage() == original_wage, "existing catalog wage unchanged for " + String(candidate_id))
|
||||
_expected_daily_wages += original_wage
|
||||
_expect(_cmd(&"set_staff_work_assignment", {&"staff_id": candidate_id, &"template_id": &"DAY" if candidate_id == &"staff_akane" else &"NIGHT", &"facility_id": _paid_reception_id}).is_success(), "ordinary recurring paid DAY or NIGHT assignment")
|
||||
|
||||
func _reopen_dependency(kitchen_id: StringName) -> CommandResult:
|
||||
return _runtime.submit_command(&"set_facility_policy", {&"facility_id": kitchen_id, &"patch": {&"business_open": true}}, &"player", &"", 10, -1, &"p04.dependency.reopen")
|
||||
|
||||
func _assert_held(service: ServiceInstance, held_id: StringName, ids: Array[StringName], elapsed: int) -> void:
|
||||
_expect(service.service_id == held_id and service.elapsed_minutes == elapsed and service.inventory_reservations == ids, "same service and own reservation IDs retain exact progress")
|
||||
_expect(_service_receipts().is_empty() and _runtime.economy_service.get_balance(StringName("GUEST_WALLET:" + String(_guest_id))) == _original_price * 2, "no service sale or wallet charge during dependency closure")
|
||||
for id: StringName in ids:
|
||||
var reservation: InventoryReservation = _runtime.inventory_service.get_reservation(id)
|
||||
_expect(reservation != null and reservation.state == InventoryReservation.State.ACTIVE, "own reservation remains reserved while dependency is closed")
|
||||
|
||||
func _assert_completed(service: ServiceInstance, held_id: StringName, ids: Array[StringName]) -> void:
|
||||
_expect(service.service_id == held_id and service.state == ServiceInstance.State.COMPLETED and service.completed_at == 1442, "same service completes once after dependency restoration")
|
||||
_expect(service.inventory_reservations == ids and _service_receipts().size() == 1 and _runtime.economy_service.get_balance(StringName("GUEST_WALLET:" + String(_guest_id))) == _original_price, "same reserved service has one original-price payment")
|
||||
for id: StringName in ids:
|
||||
var reservation: InventoryReservation = _runtime.inventory_service.get_reservation(id)
|
||||
_expect(reservation != null and reservation.state == InventoryReservation.State.CONSUMED, "own original reservation consumed once after restoration")
|
||||
_expect(_runtime.operations_coordinator.get_day_summary(1) == _first_summary, "restored dependency does not mutate prior daily close")
|
||||
|
||||
func _service_receipts() -> Array:
|
||||
var selected: Array = []
|
||||
for receipt: Dictionary in _receipts:
|
||||
for row: Dictionary in receipt[&"rows"]:
|
||||
if row[&"category"] == &"SERVICE_SALE" and row[&"source_entity_id"] == _facility_id and row[&"credit_account"] == StringName("GUEST_WALLET:" + String(_guest_id)):
|
||||
selected.append(receipt); break
|
||||
return selected
|
||||
|
||||
func _connect_receipts() -> void:
|
||||
if _receipt_hook.is_valid() and _runtime.economy_service.transaction_posted.is_connected(_receipt_hook):
|
||||
_runtime.economy_service.transaction_posted.disconnect(_receipt_hook)
|
||||
_receipt_hook = func(id: StringName, entries: Array):
|
||||
var rows: Array = []
|
||||
for row: LedgerEntry in entries: rows.append(row.to_dictionary())
|
||||
_receipts.append({&"id": id, &"minute": _clock.absolute_minute, &"rows": rows, &"staff_at_receipt": _runtime.facility_service.get_instance(_facility_id).active_staff_ids.duplicate()})
|
||||
_runtime.economy_service.transaction_posted.connect(_receipt_hook)
|
||||
|
||||
func _cmd(kind: StringName, payload: Dictionary) -> CommandResult:
|
||||
_serial += 1
|
||||
return _runtime.submit_command(kind, payload, &"player", &"", 10, -1, StringName("p04.order.shift.command.%d" % _serial))
|
||||
|
||||
func _observe(label: String) -> void:
|
||||
label = _case + "-" + _observation_pass + "-" + label
|
||||
var facility: FacilityInstance = _runtime.facility_service.get_instance(_facility_id)
|
||||
var service: ServiceInstance = _runtime.facility_service.get_service(_service_id)
|
||||
var guest: GuestRuntime = _runtime.guest_service.get_guest(_guest_id)
|
||||
var paid: Array = []
|
||||
for paid_id: StringName in [&"staff_akane", &"staff_bardo"]:
|
||||
var hired: StaffRuntime = _runtime.staff_service.get_staff(paid_id)
|
||||
if hired != null: paid.append(hired.create_snapshot())
|
||||
var reception: FacilityInstance = _runtime.facility_service.get_instance(_paid_reception_id)
|
||||
_observations.append({&"label": label + "-paid-actors", &"minute": _clock.absolute_minute, &"paid_staff": paid, &"paid_reception": reception.create_snapshot() if reception != null else {}, &"expected_catalog_wages": _expected_daily_wages})
|
||||
var workers: Array = []
|
||||
for id: StringName in _staff_ids:
|
||||
var worker: StaffRuntime = _runtime.staff_service.get_staff(id)
|
||||
var shift: ShiftInstance = _runtime.staff_service.get_shift(worker.shift_id)
|
||||
workers.append({&"staff": worker.create_snapshot(), &"shift": shift.create_snapshot() if shift != null else {}, &"is_present": _runtime.staff_commute.is_present(worker, facility), &"requires_attendance": _runtime.staff_service.requires_attendance(id), &"at_facility": StaffCommuteService.is_at_facility(worker, facility), &"within_shift": shift.contains_minute(_clock.absolute_minute) if shift != null else false})
|
||||
_observations.append({&"label": label, &"minute": _clock.absolute_minute, &"workers": workers, &"facility_state": facility.state, &"power_available": facility.power_available, &"active_staff": facility.active_staff_ids.duplicate(), &"service": service.create_snapshot() if service != null else {}, &"request_present": _runtime.facility_service.get_request(_request_id) != null, &"wallet": _runtime.economy_service.get_balance(StringName("GUEST_WALLET:" + String(_guest_id))), &"available_meals": _runtime.inventory_service.available_quantity(facility.local_inventory_id, &"ingredient/basic_meal"), &"reservations": _runtime.inventory_service.create_snapshot(), &"guest": guest.create_snapshot() if guest != null else {}, &"receipts": _receipts.duplicate(true), &"day_summary": _runtime.operations_coordinator.get_day_summary(1), &"operations": _runtime.operations_coordinator.create_snapshot()})
|
||||
_write_var(_observation_pass + "-" + label.trim_prefix(_case + "-" + _observation_pass + "-"), _runtime.create_snapshot())
|
||||
|
||||
func _write_var(label: String, value: Variant) -> void:
|
||||
var file := FileAccess.open(_evidence_dir.path_join(_case + "-" + label + ".var"), FileAccess.WRITE)
|
||||
_expect(file != null, "write whole typed evidence " + label)
|
||||
if file != null: file.store_buffer(var_to_bytes(value)); file.flush(); file.close()
|
||||
var json_file := FileAccess.open(_evidence_dir.path_join(_case + "-" + label + ".json"), FileAccess.WRITE)
|
||||
_expect(json_file != null, "write JSON mirror alongside authoritative typed snapshot")
|
||||
if json_file != null: json_file.store_string(JSON.stringify(value, "\t")); json_file.flush(); json_file.close()
|
||||
|
||||
func _finish_order() -> void:
|
||||
var file := FileAccess.open(_evidence_dir.path_join("observations.json"), FileAccess.WRITE)
|
||||
if file != null:
|
||||
file.store_string(JSON.stringify({&"classification": "P04-01 same-minute public request resend before admission, during dependency pause and after completion, with paid catalog DAY/NIGHT handover and nonzero payroll across midnight; catalog values are observed inputs, not approval of final product balancing; restaurant setup remains controlled; typed same-process replay only; no formal SaveService/OS/Windows/whole acceptance", &"observations": _observations, &"first_receipts": _first_receipts, &"replay_receipts": _receipts, &"first_summary": _first_summary, &"duplicate_results": _duplicate_results, &"checks": _checks, &"failures": _failures}, "\t")); file.flush(); file.close()
|
||||
_cleanup()
|
||||
print("Midnight boundary diagnostic: %d checks, %d failures" % [_checks, _failures])
|
||||
quit(1 if _failures else 0)
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json,re,subprocess,shutil,tarfile
|
||||
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');E=R/'docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261015';W=Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/P04-01-implement');B=Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p04-01/.runtime/P04-01/build/audit-support/native-first-current');sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
# Preserve every incomplete worker edit before touching any coordinator input.
|
||||
raw=subprocess.check_output(['git','status','--porcelain=v1','-z','--untracked-files=all'],cwd=W);files=[x.decode()[3:]for x in raw.split(b'\0')if x];assert len(files)==8;rows=[{'path':s,'bytes':(W/s).stat().st_size,'sha256':sha(W/s)}for s in files];T=E/'REPAIR5_PRESERVED_WORK.tar.gz';assert not T.exists()
|
||||
with tarfile.open(T,'w:gz')as t:
|
||||
for s in files:t.add(W/s,arcname=s,recursive=False)
|
||||
with tarfile.open(T,'r:gz')as t:
|
||||
for z in rows:assert hashlib.sha256(t.extractfile(z['path']).read()).hexdigest()==z['sha256']
|
||||
(E/'REPAIR5_PRESERVED_WORK.json').write_text(json.dumps({'source':str(W),'files':rows,'archive_sha256':sha(T),'actual_run':'cb864ee199f346408370f8944e574eb7','native_product_runs':0,'status':'incomplete; C individual real raw checks passed; Root supplied applicability rejected; no acceptance credit'},indent=2)+'\n')
|
||||
P=E/'POST_P18_CURRENT_SOURCE_APPLICABILITY.json';old=P.read_bytes();data=json.loads(old);registered='deb1bcb2374eb378b840ca345db952bd8572cb6e';prod=data['production_commit'];changed=[]
|
||||
def units(blob):
|
||||
starts=list(re.finditer(rb'(?m)^(?:static )?func ([A-Za-z_][A-Za-z_0-9]*)\(',blob));return {m[1].decode():blob[m.start():starts[i+1].start()if i+1<len(starts)else len(blob)]for i,m in enumerate(starts)}
|
||||
for row in data['ordering_functions']:
|
||||
a=subprocess.check_output(['git','show',registered+':'+row['path']],cwd=R);b=subprocess.check_output(['git','show',prod+':'+row['path']],cwd=R);first=units(a)[row['function']];second=units(b)[row['function']];assert first==second;h=hashlib.sha256(first).hexdigest()
|
||||
if row['registered_body_sha256']!=h:changed.append({'path':row['path'],'function':row['function'],'old_sha256':row['production_body_sha256'],'new_whole_raw_sha256':h,'whole_function_unit_bytes':len(first)})
|
||||
row.update(registered_body_sha256=h,production_body_sha256=h,exact_bytes_equal=True,whole_raw_function_bytes=len(first))
|
||||
data['extraction_rule']='Raw top-level func/static func start through next top-level named function or EOF, including multiline signatures, entire body, whitespace and intervening comments; no normalization.';data['correction']='Prior Root parser truncated four multiline signatures before their bodies. All 20 whole raw function units independently recomputed from registered and production Git blobs and byte-equal; no engine rerun or source modification.'
|
||||
C=B/'root-corrections-r02';assert not C.exists();C.mkdir();(C/'POST_P18_CURRENT_SOURCE_APPLICABILITY.before-r02.json').write_bytes(old);shutil.copyfile(B/'SOURCE_MANIFEST.json',C/'SOURCE_MANIFEST.before-r02.json');assert (B/P.name).read_bytes()==old;P.write_text(json.dumps(data,ensure_ascii=False,indent=2)+'\n');shutil.copyfile(P,B/P.name);manifest=json.loads((B/'SOURCE_MANIFEST.json').read_text());hits=[r for r in manifest['files']if r['copy']==P.name];assert len(hits)==1;hits[0].update(bytes=P.stat().st_size,sha256=sha(P));(B/'SOURCE_MANIFEST.json').write_text(json.dumps(manifest,ensure_ascii=False,indent=2)+'\n');(E/'ROOT_FULL_FUNCTION_PIN_CORRECTION_R02.json').write_text(json.dumps({'all20_whole_functions_byte_equal':True,'changed_hash_rows':changed,'old_report_sha256':hashlib.sha256(old).hexdigest(),'new_report_sha256':sha(P),'corrected_bundle':str(B),'new_manifest_sha256':sha(B/'SOURCE_MANIFEST.json'),'old_bytes_preserved_in':str(C),'product_source_changed':False,'new_engine_runs':0},ensure_ascii=False,indent=2)+'\n');print({'all20_whole_bodies_equal':True,'hash_rows_corrected':len(changed),'worker_edits_preserved':len(rows),'engine_reruns':0})
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
from pathlib import Path
|
||||
import json,hashlib,shutil
|
||||
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=A/'p04-idempotency-paid-formal-prep-r01';assert not P.exists();P.mkdir();N=A/'p04-idempotency-paid-midnight-native-r01';assert json.loads((N/'execution.json').read_text())['passed'];sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest();s=(A/'p04-paid-shift-midnight-formal-prep-r01/dependency-formal.gd').read_text().replace('var _results: Array = []','var _results: Array = []\nvar _resends: Array[Dictionary] = []');needle='\t\t_load_save("before", _input(inputs["before"]))';assert s.count(needle)==1;s=s.replace(needle,needle+'\n\t\t_assert_request_resend(manifest, "loaded-before")');needle='\t\t\t_proof("replayed-" + point, _runtime.create_snapshot())';assert s.count(needle)==1;s=s.replace(needle,needle+'\n\t\t\tif point in ["paused", "after"]: _assert_request_resend(manifest, "loaded-" + point)');needle='func _finish() -> void:';s=s.replace(needle,'''func _assert_request_resend(manifest: Dictionary, label: String) -> void:
|
||||
var before: Dictionary = _runtime.create_snapshot()
|
||||
var guests: Array = []
|
||||
for guest: String in manifest["guest_ids"]: guests.append(StringName(guest))
|
||||
var result: CommandResult = _runtime.submit_command(&"create_service_request", {&"facility_id": StringName(manifest["facility_id"]), &"request_id": StringName(manifest["request_id"]), &"guest_ids": guests}, &"player", &"", 10, -1, StringName(manifest["request_key"]))
|
||||
_expect(result.code == CommandResult.Code.DUPLICATE_IDEMPOTENCY_KEY, "formal restart retains processed request idempotency " + label)
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_expect(var_to_bytes(before) == var_to_bytes(after), "formal restart request resend preserves entire typed Runtime " + label)
|
||||
_proof("duplicate-" + label + "-before", before); _proof("duplicate-" + label + "-after", after)
|
||||
_resends.append({&"label": label, &"minute": _clock.absolute_minute, &"result": result.to_dictionary(), &"request_key": manifest["request_key"]})
|
||||
|
||||
''' +needle);s=s.replace('&"slots": _slots,','&"slots": _slots, &"resends": _resends,');Q=P/'idempotency-formal.gd';Q.write_text(s)
|
||||
obs=json.loads((N/'order-evidence/observations.json').read_text());service=next(x['service']for x in obs['observations']if 'service_id'in x.get('service',{}));before=json.loads((N/'order-evidence/midnight-before.json').read_text());cafe=next(x for x in before['systems']['runtime']['facilities']['instances']if x['instance_id']==service['facility_id']);inputs={}
|
||||
for point in ['before','midnight','paused','after','next']:
|
||||
p=N/'order-evidence'/('midnight-'+point+'.var');inputs[point]={'path':str(p),'bytes':p.stat().st_size,'sha256':sha(p)}
|
||||
M=P/'INPUT.json';M.write_text(json.dumps({'source_native':str(N),'execution_sha256':sha(N/'execution.json'),'source_refs':1338,'whole_typed_inputs':inputs,'kitchen_id':cafe['related_facility_id'],'original_price':service['price_snapshot'],'facility_id':service['facility_id'],'request_id':service['request_id'],'guest_ids':service['guest_ids'],'request_key':'p04.same-minute.service.request'},indent=2)+'\n')
|
||||
w=(A/'p04-paid-shift-midnight-formal-native-r01.py').read_text().replace('p04-paid-shift-midnight-formal-native-r01','p04-idempotency-paid-formal-native-r01').replace('p04-paid-shift-midnight-formal-prep-r01','p04-idempotency-paid-formal-prep-r01').replace('/dependency-formal.gd','/idempotency-formal.gd').replace('P04-01 existing paid catalog payroll and DAY/NIGHT handover with dependency pause/resume across midnight using public formal SaveService and distinct-PID Reader','P04-01 public request resend after formal SaveService/distinct PID restoration with exact whole typed state equality in paid midnight dependency scenario');W=A/'p04-idempotency-paid-formal-native-r01.py';compile(w,str(W),'exec');W.write_text(w);floor=1024**3+Path('/Applications/Godot.app/Contents/MacOS/Godot').stat().st_size+136*1024**2;free=shutil.disk_usage(A).free;assert free>=floor;(P/'ADMISSION.json').write_text(json.dumps({'scope':'Root formal public request resend acceptance fixture, not whole-unit acceptance','probe_sha256':sha(Q),'wrapper_sha256':sha(W),'input_manifest_sha256':sha(M),'source_native':str(N),'free_before':free,'required_free':floor,'estimated_seconds':90,'whole_original_credit':0},indent=2)+'\n');print('formal idempotency Reader prepared; original processed request key retained')
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
from pathlib import Path
|
||||
import json,hashlib,shutil
|
||||
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=A/'p04-idempotency-paid-midnight-prep-r01';assert not P.exists();P.mkdir();base=A/'p04-paid-shift-midnight-prep-r01/paid-shift-midnight.gd';s=base.read_text().replace('var _expected_daily_wages := 0','var _expected_daily_wages := 0\nvar _duplicate_results: Array[Dictionary] = []')
|
||||
old='\t_expect(_cmd(&"create_service_request", {&"facility_id": _facility_id, &"request_id": _request_id, &"guest_ids": [_guest_id]}).is_success(), "actual request original price/duration")';assert old in s;s=s.replace(old,'\t_expect(_target_request().is_success(), "original public service request with explicit idempotency key")\n\t_assert_request_resend("queued-same-minute")')
|
||||
old='\tvar paused: Dictionary = _runtime.create_snapshot()';s=s.replace(old,'\t_assert_request_resend("paused-00-01")\n'+old);old='\tvar after: Dictionary = _runtime.create_snapshot()';s=s.replace(old,'\t_assert_request_resend("completed-00-02")\n'+old)
|
||||
pos=s.index('func _setup_paid_reception()');s=s[:pos]+'''func _target_request() -> CommandResult:
|
||||
return _runtime.submit_command(&"create_service_request", {&"facility_id": _facility_id, &"request_id": _request_id, &"guest_ids": [_guest_id]}, &"player", &"", 10, -1, &"p04.same-minute.service.request")
|
||||
|
||||
func _assert_request_resend(label: String) -> void:
|
||||
var before: Dictionary = _runtime.create_snapshot()
|
||||
var result: CommandResult = _target_request()
|
||||
_expect(result.code == CommandResult.Code.DUPLICATE_IDEMPOTENCY_KEY, "normal repeated processed request reports its original duplicate-key contract " + label)
|
||||
var after: Dictionary = _runtime.create_snapshot()
|
||||
_expect(var_to_bytes(before) == var_to_bytes(after), "same-minute request resend preserves all typed Runtime state " + label)
|
||||
_write_var("duplicate-" + label + "-before", before)
|
||||
_write_var("duplicate-" + label + "-after", after)
|
||||
_duplicate_results.append({&"label": label, &"minute": _clock.absolute_minute, &"command_result": result.to_dictionary(), &"request_id": _request_id, &"idempotency_key": &"p04.same-minute.service.request"})
|
||||
|
||||
''' +s[pos:]
|
||||
s=s.replace('&"first_summary": _first_summary,','&"first_summary": _first_summary, &"duplicate_results": _duplicate_results,');s=s.replace('P04-01 existing paid catalog DAY/NIGHT reception handover and real nonzero payroll with approved dependency closure across midnight','P04-01 same-minute public request resend before admission, during dependency pause and after completion, with paid catalog DAY/NIGHT handover and nonzero payroll across midnight');Q=P/'idempotency-paid-midnight.gd';Q.write_text(s)
|
||||
w=(A/'p04-paid-shift-midnight-native-r01.py').read_text().replace('p04-paid-shift-midnight-native-r01','p04-idempotency-paid-midnight-native-r01').replace('p04-paid-shift-midnight-prep-r01','p04-idempotency-paid-midnight-prep-r01').replace('/paid-shift-midnight.gd','/idempotency-paid-midnight.gd').replace('P04-01 existing catalog paid DAY/NIGHT actors with actual nonzero payroll and dependency pause/resume across midnight on current source','P04-01 same-minute public service request resends with full typed state equality and existing paid catalog midnight/dependency scenario');W=A/'p04-idempotency-paid-midnight-native-r01.py';compile(w,str(W),'exec');W.write_text(w);shutil.copyfile(A/'p04-paid-shift-midnight-prep-r01/SOURCE_MAP.json',P/'SOURCE_MAP.json');floor=1024**3+Path('/Applications/Godot.app/Contents/MacOS/Godot').stat().st_size+136*1024**2;free=shutil.disk_usage(A).free;assert free>=floor;sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest();(P/'ADMISSION.json').write_text(json.dumps({'scope':'Root QA exact same-minute request replay contract; no product or worker edits; catalog values are observed test inputs','base_probe_sha256':sha(base),'probe_sha256':sha(Q),'wrapper_sha256':sha(W),'estimated_seconds':90,'free_before':free,'required_free':floor,'planned_native_phases':['import','parse','repro'],'original_acceptance_credit':0},indent=2)+'\n');print('idempotency probe prepared on preserved native pattern')
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pathlib import Path
|
||||
import hashlib, importlib.util, json, os, shutil, subprocess, sys
|
||||
sys.dont_write_bytecode = True
|
||||
R = Path(__file__).resolve().parents[2]
|
||||
A = R / 'artifacts/original-completion-2026-10-02'
|
||||
OUT = A / 'p04-idempotency-paid-formal-native-r01'
|
||||
QA = A / 'p04-idempotency-paid-formal-prep-r01/idempotency-formal.gd'
|
||||
INPUT = A / 'p04-idempotency-paid-formal-prep-r01/INPUT.json'
|
||||
TEST = 'tests/s3/test_runtime_staff_assignment.gd'
|
||||
def module(name, path):
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m); return m
|
||||
def main():
|
||||
r = module('order_repro_runner', R / 'tools/run_all_tests.py')
|
||||
root = r.source_refs(R); source = {n:v['sha256'] for n,v in root.items()}
|
||||
source_path = A / 'p04-approved-shift-current-prep-r01/SOURCE_MAP.json'
|
||||
assert source == r.read(source_path) and len(source) == 1338
|
||||
fixed = list(r.read(INPUT)['whole_typed_inputs'].values()) + [dict(path=str(INPUT),bytes=INPUT.stat().st_size,sha256=r.sha(INPUT)),dict(path=str(QA),bytes=QA.stat().st_size,sha256=r.sha(QA))]
|
||||
def fixed_guard():
|
||||
for pin in fixed:
|
||||
f=Path(pin['path']); assert not f.is_symlink() and f.stat().st_size==pin['bytes'] and r.sha(f)==pin['sha256']
|
||||
fixed_guard()
|
||||
protected = r.default_player(R)
|
||||
docs = {n:r.sha(R / 'docs/plans/original-completion-2026-10-02' / n) for n in ['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json']}
|
||||
old = Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence')
|
||||
assert r.read(old / 'runner-ended.json')['passed']
|
||||
assert r.read(old / 'runner-input.json')['selected_source_map'] == source
|
||||
assert shutil.disk_usage(A).free >= 1024**3 + Path('/Applications/Godot.app/Contents/MacOS/Godot').stat().st_size + 136*1024**2
|
||||
outer = module('order_literal_owned', r.SUPPORT / 'owned_outer.py')
|
||||
assert not outer.native.helper['live_engines']()
|
||||
refs = dict(root); refs[TEST] = dict(path=str(QA), bytes=QA.stat().st_size, sha256=r.sha(QA))
|
||||
expected = {n:dict(bytes=p['bytes'],sha256=p['sha256']) for n,p in refs.items()}
|
||||
selected = dict(root_before=root,map={n:p['sha256'] for n,p in refs.items()},timeout=1200)
|
||||
assert not OUT.exists(); OUT.mkdir(); stage=OUT/'stage'; stage.mkdir()
|
||||
for leaf in ['starters','bootstrap']: (OUT/leaf).mkdir()
|
||||
for n,p in r.read(r.SUPPORT/'bootstrap-scripts.json').items():
|
||||
data=p['text'].encode(); assert hashlib.sha256(data).hexdigest()==p['sha256']; (OUT/'bootstrap'/n).write_bytes(data)
|
||||
for n,p in refs.items():
|
||||
dst=stage/n; dst.parent.mkdir(parents=True,exist_ok=True); r.copy_source(Path(p['path']),dst)
|
||||
assert r.inventory(stage,stage=True)==expected
|
||||
cache=old/'stage/.godot'; cache_before=r.inventory(cache)
|
||||
for n in cache_before:
|
||||
src=cache/n; dst=stage/'.godot'/n; dst.parent.mkdir(parents=True,exist_ok=True)
|
||||
subprocess.run(['/bin/cp','-c',str(src),str(dst)],check=True); assert src.stat().st_ino != dst.stat().st_ino
|
||||
assert r.inventory(stage/'.godot')==cache_before
|
||||
r.write(OUT/'cache-reuse.json',dict(ended_run=str(old),ended_receipt_sha256=r.sha(old/'runner-ended.json'),whole_cache=cache_before,independent_inode=True,ordinary_import_required=True,ordinary_parse_required=True))
|
||||
paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')]; r.write(OUT/'parse-paths.json',paths)
|
||||
markers=module('order_literal_markers',R/'tools/strict_test_markers.py')
|
||||
contracts=markers.load_contracts(R/'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json')
|
||||
contracts[TEST]=dict(test=TEST,template='Dependency formal restart: <checks> checks, <failures> failures',required=True)
|
||||
policy=r.read(r.SUPPORT/'suite-policy.json'); assert TEST not in policy['suite_policies']
|
||||
r.write(OUT/'contracts.json',contracts)
|
||||
r.write(OUT/'runner-input.json',dict(classification='P04-01 public request resend after formal SaveService/distinct PID restoration with exact whole typed state equality in paid midnight dependency scenario; snapshots are exact typed evidence and JSON mirrors lose Variant key/value types; not Windows or whole-unit acceptance',owner_runner_pid=os.getpid(),wrapper_sha256=r.sha(__file__),QA=dict(path=str(QA),sha256=r.sha(QA),bytes=QA.stat().st_size),runner_sha256=r.sha(R/'tools/run_all_tests.py'),source_before=root,selected_source_map=selected['map'],source_map_authority=str(source_path),default_player_before=protected,doc4_before=docs,fixed_input_pins=fixed,source_adoption=False,QA_overrides=[TEST],ordinary_disk_floor_bytes=r.MIN_SPACE,functional_watchdog_seconds=1200))
|
||||
diagnostics=module('order_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py'); owners=module('order_literal_owners',r.SUPPORT/'ordinary_proof_gate.py'); audio=module('order_literal_audio',r.SUPPORT/'audio_evidence_gate.py')
|
||||
original=outer.run_phase
|
||||
def run_phase(argv,folder,timeout,env,**kwargs):
|
||||
env=dict(env)
|
||||
if folder.name in ['writer','reader']: env.update(THE_TREE_BOUNDARY_RESTART_EVIDENCE=str(OUT/'restart-evidence'), THE_TREE_BOUNDARY_RESTART_MODE=folder.name, THE_TREE_BOUNDARY_RESTART_INPUT=str(INPUT))
|
||||
return original(argv,folder,timeout,env,**kwargs)
|
||||
outer.run_phase=run_phase
|
||||
phases=[]; previous={}; error=None; formal_before=None; public=(stage/'project.godot').read_bytes()
|
||||
try:
|
||||
for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',TEST)]:
|
||||
if phase == 'reader': formal_before = {n:r.inventory(Path(p)) for n,p in r.read(OUT/'restart-evidence/writer.json')['slots'].items()}
|
||||
row=r.execute_phase('/Applications/Godot.app/Contents/MacOS/Godot',stage,OUT,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio)
|
||||
phases.append(row); r.write(OUT/(phase+'-actual-phase.json'),row)
|
||||
print(json.dumps(dict(phase=phase,passed=row['passed'],checks=row.get('reported_checks'),error=row.get('validation_error'))),flush=True)
|
||||
if not row['passed']:
|
||||
error=phase+' strict phase failure'; break
|
||||
except BaseException as caught: error=type(caught).__name__+': '+str(caught)
|
||||
finally: cleanup,cleanup_errors=outer.finish_captured(outer.OWNED)
|
||||
fixed_guard()
|
||||
assert r.source_refs(R)==root and r.default_player(R)==protected
|
||||
assert {n:r.sha(R/'docs/plans/original-completion-2026-10-02'/n) for n in docs}==docs
|
||||
assert r.inventory(stage,stage=True)==dict(expected,**previous) and r.inventory(cache)==cache_before
|
||||
formal_after = {n:r.inventory(Path(p)) for n,p in r.read(OUT/'restart-evidence/writer.json')['slots'].items()} if (OUT/'restart-evidence/writer.json').exists() else None
|
||||
formal_unchanged = formal_before is not None and formal_after == formal_before
|
||||
passed=formal_unchanged and error is None and len(phases)==4 and all(p['passed'] for p in phases) and not cleanup_errors and all(p['engine_ended'] for p in cleanup)
|
||||
r.write(OUT/'execution.json',dict(passed=passed,error=error,phases=phases,actual_captured_PIDs=[p.pid for p in outer.OWNED],cleanup=cleanup,cleanup_errors=cleanup_errors,all_source_unchanged=True,all_default_player_unchanged=True,doc4_unchanged=True,actual_native=len(outer.OWNED),formal_before=formal_before,formal_after=formal_after,formal_unchanged=formal_unchanged,whole_goal_accepted=False,unit_accepted=False))
|
||||
print(json.dumps(dict(passed=passed,error=error,actual_native=len(outer.OWNED))),flush=True)
|
||||
return 0 if passed else 1
|
||||
if __name__=='__main__': raise SystemExit(main())
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pathlib import Path
|
||||
import hashlib, importlib.util, json, os, shutil, subprocess, sys
|
||||
sys.dont_write_bytecode = True
|
||||
R = Path(__file__).resolve().parents[2]
|
||||
A = R / 'artifacts/original-completion-2026-10-02'
|
||||
OUT = A / 'p04-idempotency-paid-midnight-native-r01'
|
||||
QA = A / 'p04-idempotency-paid-midnight-prep-r01/idempotency-paid-midnight.gd'
|
||||
TEST = 'tests/s3/test_runtime_staff_assignment.gd'
|
||||
def module(name, path):
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m); return m
|
||||
def main():
|
||||
r = module('order_repro_runner', R / 'tools/run_all_tests.py')
|
||||
root = r.source_refs(R); source = {n:v['sha256'] for n,v in root.items()}
|
||||
source_path = A / 'p04-idempotency-paid-midnight-prep-r01/SOURCE_MAP.json'
|
||||
assert source == r.read(source_path) and len(source) == 1338
|
||||
protected = r.default_player(R)
|
||||
docs = {n:r.sha(R / 'docs/plans/original-completion-2026-10-02' / n) for n in ['IMPLEMENTATION_PLAN.md','PROGRESS_INTEGRATION.md','work_packages.json','progress_snapshot.json']}
|
||||
old = Path('/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence')
|
||||
assert r.read(old / 'runner-ended.json')['passed']
|
||||
assert r.read(old / 'runner-input.json')['selected_source_map'] == source
|
||||
assert shutil.disk_usage(A).free >= 1024**3 + Path('/Applications/Godot.app/Contents/MacOS/Godot').stat().st_size + 136*1024**2
|
||||
outer = module('order_literal_owned', r.SUPPORT / 'owned_outer.py')
|
||||
assert not outer.native.helper['live_engines']()
|
||||
refs = dict(root); refs[TEST] = dict(path=str(QA), bytes=QA.stat().st_size, sha256=r.sha(QA))
|
||||
expected = {n:dict(bytes=p['bytes'],sha256=p['sha256']) for n,p in refs.items()}
|
||||
selected = dict(root_before=root,map={n:p['sha256'] for n,p in refs.items()},timeout=1200)
|
||||
assert not OUT.exists(); OUT.mkdir(); stage=OUT/'stage'; stage.mkdir()
|
||||
for leaf in ['starters','bootstrap']: (OUT/leaf).mkdir()
|
||||
for n,p in r.read(r.SUPPORT/'bootstrap-scripts.json').items():
|
||||
data=p['text'].encode(); assert hashlib.sha256(data).hexdigest()==p['sha256']; (OUT/'bootstrap'/n).write_bytes(data)
|
||||
for n,p in refs.items():
|
||||
dst=stage/n; dst.parent.mkdir(parents=True,exist_ok=True); r.copy_source(Path(p['path']),dst)
|
||||
assert r.inventory(stage,stage=True)==expected
|
||||
cache=old/'stage/.godot'; cache_before=r.inventory(cache)
|
||||
for n in cache_before:
|
||||
src=cache/n; dst=stage/'.godot'/n; dst.parent.mkdir(parents=True,exist_ok=True)
|
||||
subprocess.run(['/bin/cp','-c',str(src),str(dst)],check=True); assert src.stat().st_ino != dst.stat().st_ino
|
||||
assert r.inventory(stage/'.godot')==cache_before
|
||||
r.write(OUT/'cache-reuse.json',dict(ended_run=str(old),ended_receipt_sha256=r.sha(old/'runner-ended.json'),whole_cache=cache_before,independent_inode=True,ordinary_import_required=True,ordinary_parse_required=True))
|
||||
paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')]; r.write(OUT/'parse-paths.json',paths)
|
||||
markers=module('order_literal_markers',R/'tools/strict_test_markers.py')
|
||||
contracts=markers.load_contracts(R/'docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json')
|
||||
contracts[TEST]=dict(test=TEST,template='Midnight boundary diagnostic: <checks> checks, <failures> failures',required=True)
|
||||
policy=r.read(r.SUPPORT/'suite-policy.json'); assert TEST not in policy['suite_policies']
|
||||
r.write(OUT/'contracts.json',contracts)
|
||||
r.write(OUT/'runner-input.json',dict(classification='P04-01 same-minute public service request resends with full typed state equality and existing paid catalog midnight/dependency scenario; snapshots are exact typed evidence and JSON mirrors lose Variant key/value types; no formal save, Windows or whole-unit acceptance',owner_runner_pid=os.getpid(),wrapper_sha256=r.sha(__file__),QA=dict(path=str(QA),sha256=r.sha(QA),bytes=QA.stat().st_size),runner_sha256=r.sha(R/'tools/run_all_tests.py'),source_before=root,selected_source_map=selected['map'],source_map_authority=str(source_path),default_player_before=protected,doc4_before=docs,source_adoption=False,QA_overrides=[TEST],ordinary_disk_floor_bytes=r.MIN_SPACE,functional_watchdog_seconds=1200))
|
||||
diagnostics=module('order_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py'); owners=module('order_literal_owners',r.SUPPORT/'ordinary_proof_gate.py'); audio=module('order_literal_audio',r.SUPPORT/'audio_evidence_gate.py')
|
||||
original=outer.run_phase
|
||||
def run_phase(argv,folder,timeout,env,**kwargs):
|
||||
env=dict(env)
|
||||
if folder.name=='repro': env['THE_TREE_ORDER_EVIDENCE']=str(OUT/'order-evidence')
|
||||
return original(argv,folder,timeout,env,**kwargs)
|
||||
outer.run_phase=run_phase
|
||||
phases=[]; previous={}; error=None; public=(stage/'project.godot').read_bytes()
|
||||
try:
|
||||
for phase,test in [('import',None),('parse',None),('repro',TEST)]:
|
||||
row=r.execute_phase('/Applications/Godot.app/Contents/MacOS/Godot',stage,OUT,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio)
|
||||
phases.append(row); r.write(OUT/(phase+'-actual-phase.json'),row)
|
||||
print(json.dumps(dict(phase=phase,passed=row['passed'],checks=row.get('reported_checks'),error=row.get('validation_error'))),flush=True)
|
||||
if not row['passed']:
|
||||
error=phase+' strict phase failure'; break
|
||||
except BaseException as caught: error=type(caught).__name__+': '+str(caught)
|
||||
finally: cleanup,cleanup_errors=outer.finish_captured(outer.OWNED)
|
||||
assert r.source_refs(R)==root and r.default_player(R)==protected
|
||||
assert {n:r.sha(R/'docs/plans/original-completion-2026-10-02'/n) for n in docs}==docs
|
||||
assert r.inventory(stage,stage=True)==dict(expected,**previous) and r.inventory(cache)==cache_before
|
||||
passed=error is None and len(phases)==3 and all(p['passed'] for p in phases) and not cleanup_errors and all(p['engine_ended'] for p in cleanup)
|
||||
r.write(OUT/'execution.json',dict(passed=passed,error=error,phases=phases,actual_captured_PIDs=[p.pid for p in outer.OWNED],cleanup=cleanup,cleanup_errors=cleanup_errors,all_source_unchanged=True,all_default_player_unchanged=True,doc4_unchanged=True,actual_native=len(outer.OWNED),whole_goal_accepted=False,unit_accepted=False))
|
||||
print(json.dumps(dict(passed=passed,error=error,actual_native=len(outer.OWNED))),flush=True)
|
||||
return 0 if passed else 1
|
||||
if __name__=='__main__': raise SystemExit(main())
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
from pathlib import Path
|
||||
import json,hashlib,shutil
|
||||
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';E=R/'docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261015';N=A/'p04-idempotency-paid-midnight-native-r01';F=A/'p04-idempotency-paid-formal-native-r01';load=lambda p:json.loads(p.read_bytes());sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest();n=load(N/'execution.json');f=load(F/'execution.json');assert n['passed']and f['passed']and f['formal_unchanged']and f['formal_before']==f['formal_after'];assert all(z['engine_ended']for x in [n,f]for z in x['cleanup']);assert all(x[k]for x in [n,f]for k in ['all_source_unchanged','all_default_player_unchanged','doc4_unchanged']);obs=load(N/'order-evidence/observations.json');w=load(F/'restart-evidence/writer.json');d=load(F/'restart-evidence/reader.json');assert w['pid']!=d['pid']and w['profile']!=d['profile']and w['failures']==d['failures']==0;duplicates=[]
|
||||
for row in obs['duplicate_results']:
|
||||
result=row['command_result'];assert result['code']=='DUPLICATE_IDEMPOTENCY_KEY'and result['details']['processed'];original=result['details']['original_result'];assert original['code']=='OK';prefix='midnight-duplicate-'+row['label'];before=N/'order-evidence'/(prefix+'-before.var');after=N/'order-evidence'/(prefix+'-after.var');assert sha(before)==sha(after);duplicates.append({'scope':'original native','label':row['label'],'minute':row['minute'],'code':result['code'],'original_command_id':result['details']['original_command_id'],'before':str(before),'after':str(after),'identical_whole_typed_sha256':sha(before)})
|
||||
for row in d['resends']:
|
||||
result=row['result'];assert result['code']=='DUPLICATE_IDEMPOTENCY_KEY'and result['details']['processed'];prefix='reader-duplicate-'+row['label'];before=F/'restart-evidence'/(prefix+'-before.var');after=F/'restart-evidence'/(prefix+'-after.var');assert sha(before)==sha(after);duplicates.append({'scope':'formal Reader','label':row['label'],'minute':row['minute'],'code':result['code'],'original_command_id':result['details']['original_command_id'],'before':str(before),'after':str(after),'identical_whole_typed_sha256':sha(before)})
|
||||
assert len(duplicates)==6 and len({x['original_command_id']for x in duplicates})==1;inputs=load(A/'p04-idempotency-paid-formal-prep-r01/INPUT.json');typed=[];members=[]
|
||||
for point,z in inputs['whole_typed_inputs'].items():
|
||||
for name in ['writer-'+point+'-persisted','reader-'+point+'-loaded']+(['reader-replayed-'+point]if point!='before'else[]):
|
||||
p=F/'restart-evidence'/(name+'.var');assert sha(p)==z['sha256'];typed.append({'path':str(p),'original':z['path'],'sha256':sha(p)})
|
||||
wp=Path(w['slots'][point]);rp=Path(d['slots'][point]);expected={'journal.log','manifest.json','thumbnail.png','world.bin'};assert {z.name for z in wp.iterdir()}==expected=={z.name for z in rp.iterdir()}
|
||||
for name in sorted(expected):assert sha(wp/name)==sha(rp/name);members.append({'point':point,'name':name,'writer':str(wp/name),'reader':str(rp/name),'sha256':sha(wp/name)})
|
||||
assert len(typed)==14 and len(members)==20;state=load(N/'order-evidence/midnight-next.json')['systems']['runtime'];sales=[x for x in state['economy']['entries']if x['category']=='SERVICE_SALE'and x['credit_account']=='GUEST_WALLET:p04.order.midnight.guest'];wage=[x for x in state['economy']['entries']if x['category']=='WAGE'];assert len(sales)==len(wage)==1 and sales[0]['amount']==25 and wage[0]['amount']==255
|
||||
record={'plan_id':'P04-01','production_commit':'f3f23cac8822da19ab6912bacd759a94d084c0c0','scope':'Same-minute public create_service_request retransmission before admission/during dependency pause/after completion, including formal SaveService and distinct-PID Reader. All typed state preserved. Existing payroll values remain observed test inputs, not newly approved product balance.','source_files':1338,'actual_owned_pids':n['actual_captured_PIDs']+f['actual_captured_PIDs'],'all_owned_ended':True,'duplicate_attempts':duplicates,'typed_saved_loaded_replayed_14':typed,'formal_members_original_and_copied_20':members,'original_packages_unchanged':True,'writer_pid':w['pid'],'reader_pid':d['pid'],'one_target_sale':sales,'one_payroll':wage,'source_default_profile_doc4_unchanged':True,'native_execution_sha256':sha(N/'execution.json'),'formal_execution_sha256':sha(F/'execution.json'),'observations_sha256':sha(N/'order-evidence/observations.json'),'reader_receipt_sha256':sha(F/'restart-evidence/reader.json'),'formal_original_credit':0,'independent_whole_review':'pending'};(E/'ROOT_SAME_MINUTE_RESEND_FORMAL_RESULT.json').write_text(json.dumps(record,ensure_ascii=False,indent=2)+'\n')
|
||||
for src,name in [(A/'p04-idempotency-paid-midnight-prep-r01/idempotency-paid-midnight.gd','idempotency-paid-midnight-r01.gd'),(A/'p04-idempotency-paid-midnight-prep-r01/ADMISSION.json','ROOT_SAME_MINUTE_RESEND_NATIVE_ADMISSION.json'),(A/'p04-idempotency-paid-midnight-native-r01.py','p04-idempotency-paid-midnight-native-r01.py'),(A/'p04-idempotency-paid-formal-prep-r01/idempotency-formal.gd','idempotency-paid-formal-r01.gd'),(A/'p04-idempotency-paid-formal-prep-r01/ADMISSION.json','ROOT_SAME_MINUTE_RESEND_FORMAL_ADMISSION.json'),(A/'p04-idempotency-paid-formal-prep-r01/INPUT.json','ROOT_SAME_MINUTE_RESEND_FORMAL_INPUT.json'),(A/'p04-idempotency-paid-formal-native-r01.py','p04-idempotency-paid-formal-native-r01.py'),(Path('/private/tmp/thetree-p04-idempotency-native-prepare-r01.py'),'p04-idempotency-native-prepare-r01.py'),(Path('/private/tmp/thetree-p04-idempotency-formal-prepare-r01.py'),'p04-idempotency-formal-prepare-r01.py')]:shutil.copyfile(src,E/name)
|
||||
print({'same_key_duplicate_attempts':6,'whole_typed_state_pairs_byte_identical':6,'formal_typed_states_match_original':14,'target_sales':1,'payroll_rows':1,'all_owned_ended':True,'original_credit':0})
|
||||
@@ -254,6 +254,6 @@
|
||||
"validate_facility_value_contracts.py": "91640e2a76cd6cc9186f7b85c0bf379b24b6cac0d48962815235ee628e7ae43e",
|
||||
"validate_plan.py": "23678227d9b3c556f1bd903f4b5b3147c4a82ce5085e10055481026803451b80",
|
||||
"validator_update_checks.json": "f997d0f3de2cea29550840b1d5cb23647d64f81329de46758551e2b6c8fecc27",
|
||||
"work_packages.json": "180d7dd46d0ea4c6e180cc1c373521a63ca1eaf743aedceccda1749e451c45d4"
|
||||
"work_packages.json": "0c3100600e0eda5e3a71d4517eeefb3e8a687f932db9b1d746257d2508a3c23c"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3598,7 +3598,7 @@
|
||||
},
|
||||
"legacy_state": "in_progress",
|
||||
"state_scope": "package-level; completed means whole package accepted; partial implementation is not completion",
|
||||
"current_summary": "承認D05をmain5f6bc11/全1338sourceで実測。18:00は完了・25G一回課金時に昼番2人、その後交代0人。依存先休業は日跨ぎ1439→1441で同service/予約・進捗44/45・財布50保持、復帰後1442に完了・財布25・SALE25一回、1443追加0。さらに正式SaveServiceの5状態をWriter3854→別profile/PID Reader3879で保存読込し、公開厨房再開後の全型付き14出力SHAが原nativeと一致、元保存20member不変・Reader20member全SHA一致。全10owned PID通常終了。原7領域の残境界/非ゼロ給与/command再送/EV、raw結合checker完成、独立whole受入・正常統合finalが残り、原成果加点0。repair4編集6件を保持しprobe/Reader重複workerなし。実OpusがC結合層とraw改変負例に範囲を限定しAstraを選択、同タスクの正常dispatchでrepair5 implementing。LLM900秒は許可済みtask-only予算adapterで除去、検証watchdogと登録設定は維持。 追加でmain54e81e5の既存カタログ2名を公開hire/勤務割当で雇用し、実DAY/NIGHT交代と00:00給与255G一回を実測。正式SaveService Writer14262→別PID Reader14476でも全14typed出力が原native SHA一致、元20保存member不変、翌分まで給与行1件。既存給与データの入力利用であり本番balanceの新承認ではない。実行中C担当の入力/範囲は変更せず次の受入照合に保持。",
|
||||
"current_summary": "P04-01承認D05を現採用source1338で実測。18:00完了課金後交代、依存先休業の日跨ぎ保持/復帰一回完了、既存2名の非ゼロ給与255G一回、同一request同分再送の全typed状態不変を確認。日跨ぎ/給与/再送は正式SaveServiceと別PID Readerでも元14typed出力・保存20memberがSHA一致。Cはraw所有/保存/帳簿の個別検査と23負例を通したがRoot供給関数SHA不備を検出。RootがGit20関数全文を再計算して実C全体を通し、旧資料と8編集を保持。実Opus判断でSol repair6が全文SHA厳密化・負例2件・旧説明同期だけを通常実行中。原7領域の残境界・全条件独立レビュー・正常統合finalが残り、原成果加点0。",
|
||||
"remaining_deliverables": [
|
||||
{
|
||||
"id": "P04-01",
|
||||
@@ -3847,21 +3847,21 @@
|
||||
"scope": "Root diagnosis and actual first repair; no original acceptance"
|
||||
}
|
||||
],
|
||||
"current_summary": "承認D05をmain5f6bc11/全1338sourceで実測。18:00は完了・25G一回課金時に昼番2人、その後交代0人。依存先休業は日跨ぎ1439→1441で同service/予約・進捗44/45・財布50保持、復帰後1442に完了・財布25・SALE25一回、1443追加0。さらに正式SaveServiceの5状態をWriter3854→別profile/PID Reader3879で保存読込し、公開厨房再開後の全型付き14出力SHAが原nativeと一致、元保存20member不変・Reader20member全SHA一致。全10owned PID通常終了。原7領域の残境界/非ゼロ給与/command再送/EV、raw結合checker完成、独立whole受入・正常統合finalが残り、原成果加点0。repair4編集6件を保持しprobe/Reader重複workerなし。実OpusがC結合層とraw改変負例に範囲を限定しAstraを選択、同タスクの正常dispatchでrepair5 implementing。LLM900秒は許可済みtask-only予算adapterで除去、検証watchdogと登録設定は維持。 追加でmain54e81e5の既存カタログ2名を公開hire/勤務割当で雇用し、実DAY/NIGHT交代と00:00給与255G一回を実測。正式SaveService Writer14262→別PID Reader14476でも全14typed出力が原native SHA一致、元20保存member不変、翌分まで給与行1件。既存給与データの入力利用であり本番balanceの新承認ではない。実行中C担当の入力/範囲は変更せず次の受入照合に保持。",
|
||||
"current_summary": "P04-01承認D05を現採用source1338で実測。18:00完了課金後交代、依存先休業の日跨ぎ保持/復帰一回完了、既存2名の非ゼロ給与255G一回、同一request同分再送の全typed状態不変を確認。日跨ぎ/給与/再送は正式SaveServiceと別PID Readerでも元14typed出力・保存20memberがSHA一致。Cはraw所有/保存/帳簿の個別検査と23負例を通したがRoot供給関数SHA不備を検出。RootがGit20関数全文を再計算して実C全体を通し、旧資料と8編集を保持。実Opus判断でSol repair6が全文SHA厳密化・負例2件・旧説明同期だけを通常実行中。原7領域の残境界・全条件独立レビュー・正常統合finalが残り、原成果加点0。",
|
||||
"remaining_conditions": [
|
||||
"原7種更新順序・証拠対応の原本/承認済み仕様への全条件適合性と規約凍結を最終独立受入する",
|
||||
"承認D05の依存先休業pause/resume日跨ぎと正式SaveService/別PID復元はmain5f6bc11で実測済み。既存証拠と残の原7領域全条件への適合性・独立whole受入を残す。直接休業D-034と区別する。",
|
||||
"承認済みD05:17:59→18:00昼番の完了・課金後に交代。夜番不在・既存残業タスク・同分再送を現版証拠で確認",
|
||||
"既存39証拠等の適用版・入力・設定・環境を照合して不足境界だけ検証。全条件独立受入と通常統合/final/台帳反映。D05他領域は具体的根拠を確認し一括解決/一括停止にしない"
|
||||
],
|
||||
"progress_summary": "承認D05をmain5f6bc11/全1338sourceで実測。18:00は完了・25G一回課金時に昼番2人、その後交代0人。依存先休業は日跨ぎ1439→1441で同service/予約・進捗44/45・財布50保持、復帰後1442に完了・財布25・SALE25一回、1443追加0。さらに正式SaveServiceの5状態をWriter3854→別profile/PID Reader3879で保存読込し、公開厨房再開後の全型付き14出力SHAが原nativeと一致、元保存20member不変・Reader20member全SHA一致。全10owned PID通常終了。原7領域の残境界/非ゼロ給与/command再送/EV、raw結合checker完成、独立whole受入・正常統合finalが残り、原成果加点0。repair4編集6件を保持しprobe/Reader重複workerなし。実OpusがC結合層とraw改変負例に範囲を限定しAstraを選択、同タスクの正常dispatchでrepair5 implementing。LLM900秒は許可済みtask-only予算adapterで除去、検証watchdogと登録設定は維持。 追加でmain54e81e5の既存カタログ2名を公開hire/勤務割当で雇用し、実DAY/NIGHT交代と00:00給与255G一回を実測。正式SaveService Writer14262→別PID Reader14476でも全14typed出力が原native SHA一致、元20保存member不変、翌分まで給与行1件。既存給与データの入力利用であり本番balanceの新承認ではない。実行中C担当の入力/範囲は変更せず次の受入照合に保持。",
|
||||
"progress_summary": "P04-01承認D05を現採用source1338で実測。18:00完了課金後交代、依存先休業の日跨ぎ保持/復帰一回完了、既存2名の非ゼロ給与255G一回、同一request同分再送の全typed状態不変を確認。日跨ぎ/給与/再送は正式SaveServiceと別PID Readerでも元14typed出力・保存20memberがSHA一致。Cはraw所有/保存/帳簿の個別検査と23負例を通したがRoot供給関数SHA不備を検出。RootがGit20関数全文を再計算して実C全体を通し、旧資料と8編集を保持。実Opus判断でSol repair6が全文SHA厳密化・負例2件・旧説明同期だけを通常実行中。原7領域の残境界・全条件独立レビュー・正常統合finalが残り、原成果加点0。",
|
||||
"remaining_gaps": [
|
||||
"依存先休業日跨ぎと正式保存/別PID復元の現版生証拠をcheckerへ結合する。原サービス/予約保持・課金一回・原保存全member不変・全型付きstate一致を監査し、未収集条件は未達のまま維持。",
|
||||
"18:00と非ゼロ給与255Gの日跨ぎ/正式保存再開は有限実測済み。未完了serviceの夜番不在/残業、command同分再送、EV予約等の不足と既存証拠適用性を個別確認する。",
|
||||
"同一service requestの同分再送は原実測と正式SaveService/別PIDで全状態不変を確認済み。未完了serviceの夜番不在/残業、EV予約、停電→閉店同Tick、退出/忍耐/破壊等の不足境界と既存証拠適用性を個別確認する。",
|
||||
"未提出repair4のA/B修正を保持し、C/D/Eの必要範囲を現実のguarded rawから完成する。LLM900秒打切りは実Opus判断と既存上限撤廃指示に沿う専用CLIのP04 implementer限定adapterで除去済み。登録config/digestと検証watchdogは不変。",
|
||||
"原7領域/安全性3結果/30-88の全条件を満たしてから独立wholeレビュー・登録validate・通常integration/final・台帳反映する。原成果の完了加点0。"
|
||||
],
|
||||
"updated_at_jst": "2026-10-16T01:41:36.997105+09:00",
|
||||
"updated_at_jst": "2026-10-16T01:53:14.357106+09:00",
|
||||
"current_recheck": "execution/p04-01-current-recheck-20261015/recheck.json",
|
||||
"policy_candidate": "execution/p04-01-current-recheck-20261015/D05_POLICY_CANDIDATE.md",
|
||||
"owner_policy_update": {
|
||||
@@ -3869,12 +3869,12 @@
|
||||
"reference": "docs/plans/original-completion-2026-10-02/execution/p04-01-current-recheck-20261015/D05_OWNER_APPROVAL.json",
|
||||
"scope": "two owner policy selections only; no acceptance credit",
|
||||
"remaining": "condition-specific evidence applicability, missing boundaries, independent review, ordinary integration/final",
|
||||
"actual_commander": "execution/p04-01-current-recheck-20261015/OPUS_AFTER_REAL_D05_FORMAL_DECISION.json",
|
||||
"actual_commander": "execution/p04-01-current-recheck-20261015/OPUS_C_CORRECTED_INPUT_CONTINUATION.json",
|
||||
"runner_state": "implementing",
|
||||
"repairs": 5,
|
||||
"worker_model": "gpt-6-astra",
|
||||
"repairs": 6,
|
||||
"worker_model": "gpt-6.1-sol",
|
||||
"model_selected_by": "actual Claude Opus 5.5 run decision",
|
||||
"run_decision": "execution/p04-01-current-recheck-20261015/OPUS_REPAIR5_C_RUN_DECISION.json",
|
||||
"run_decision": "execution/p04-01-current-recheck-20261015/OPUS_REPAIR6_C_RUN_DECISION.json",
|
||||
"submitted": "9767b0a28ca8d252520307dbbac60a1d8cfb87ab",
|
||||
"registered_validation": "9d724d81f0e74a9f94dfd94cdc6eb5c6",
|
||||
"root_work_continues": true,
|
||||
@@ -3884,9 +3884,11 @@
|
||||
"duplicate_probe_worker_dispatched": false,
|
||||
"formal_dependency_proof": "execution/p04-01-current-recheck-20261015/ROOT_APPROVED_DEPENDENCY_FORMAL_RESULT.json",
|
||||
"timeout_adapter": "execution/p04-01-current-recheck-20261015/OWNER_P04_LLM_TIMEOUT_ADAPTER.json",
|
||||
"actual_run": "cb864ee199f346408370f8944e574eb7",
|
||||
"actual_run": "c2c761d8d2ed4a55b7ea4515e13ae53f",
|
||||
"current_scope": "trusted raw binding C plus relevant adversarial Python fixtures only; no product/probe duplication or native/full regression",
|
||||
"paid_shift_midnight_formal_proof": "execution/p04-01-current-recheck-20261015/ROOT_PAID_SHIFT_MIDNIGHT_FORMAL_RESULT.json"
|
||||
"paid_shift_midnight_formal_proof": "execution/p04-01-current-recheck-20261015/ROOT_PAID_SHIFT_MIDNIGHT_FORMAL_RESULT.json",
|
||||
"same_minute_formal_proof": "execution/p04-01-current-recheck-20261015/ROOT_SAME_MINUTE_RESEND_FORMAL_RESULT.json",
|
||||
"corrected_c_bundle": "execution/p04-01-current-recheck-20261015/ROOT_CORRECTED_C_BUNDLE_LOCAL_PASS.json"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user