diff --git a/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/EXISTING_EVIDENCE_REAUDIT.json b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/EXISTING_EVIDENCE_REAUDIT.json new file mode 100644 index 0000000..4e2044d --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/EXISTING_EVIDENCE_REAUDIT.json @@ -0,0 +1,1753 @@ +{ + "plan_id": "P08-02", + "current_commit": "25b77f1d14b89e644f563a2fc6bd4ec463e1b392", + "verification": "Read every selected source and every path/sha256 object of 7 Root evidence reports. Changed files recorded, no reuse acceptance inferred. Cached hashes within this bounded audit only.", + "reports": [ + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-actual-root-review-r01/review.json", + "review_sha_match": true, + "source_map_origin": "review.selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "3d1d50064d72f4cccf674ad76c0d7d1ef3bf08e72e1c9b201ea92f5b51c3cf90", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "0511b9bf08f8e9eaa80ee68e15083ba85550eed602df5c8c31032a78aad38ff8", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 10, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "actual": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "actual": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next1.var", + "expected": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "actual": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next1.var", + "expected": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "actual": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next2.var", + "expected": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "actual": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next2.var", + "expected": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "actual": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next10.var", + "expected": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "actual": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next10.var", + "expected": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "actual": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-final160.var", + "expected": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "actual": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-final160.var", + "expected": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "actual": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-actual-root-review-r01/review.json", + "review_sha_match": true, + "source_map_origin": "review.selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "dbe4c24604e68a89cafe27f8cf49890689adf4326b39799374f7e011420639b5", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "484bc4e9ef52f8b34e82c4170a0974405dbff9040dbfe31864205489dacddc5f", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 10, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "actual": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "actual": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next1.var", + "expected": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "actual": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next1.var", + "expected": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "actual": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next2.var", + "expected": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "actual": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next2.var", + "expected": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "actual": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next10.var", + "expected": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "actual": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next10.var", + "expected": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "actual": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-final160.var", + "expected": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "actual": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-final160.var", + "expected": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "actual": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-actual-root-review-r02/review.json", + "review_sha_match": true, + "source_map_origin": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/runner-input.json#selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "b7263eab66894b81817362f60b118ceec742f84f2e34a176094ddf00038d5e24", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "6efe23e43fb8e3aad6f6a3322bc47a3f1b3b8f118d51af0fe9882141ab697c56", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 25, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-checkpoint.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-checkpoint.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject1.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject1.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject2.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject2.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next1.var", + "expected": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "actual": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next1.var", + "expected": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "actual": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next2.var", + "expected": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "actual": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next2.var", + "expected": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "actual": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next10.var", + "expected": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "actual": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next10.var", + "expected": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "actual": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-final20.var", + "expected": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "actual": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-final20.var", + "expected": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "actual": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject1-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject1-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject2-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject2-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/original/formal/world.bin", + "expected": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "actual": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/original/formal/manifest.json", + "expected": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "actual": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/backup/formal/world.bin", + "expected": "d820c7e5718a73c27202adce40a1934a7653052ed4798dbfe927bec2836a3bfc", + "actual": "d820c7e5718a73c27202adce40a1934a7653052ed4798dbfe927bec2836a3bfc", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/backup/formal/manifest.json", + "expected": "d4c27962bd8d5559ba279ecac5129fdeae2412b4b79f459c74bc611c329e2bc0", + "actual": "d4c27962bd8d5559ba279ecac5129fdeae2412b4b79f459c74bc611c329e2bc0", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/after-refusal/formal/world.bin", + "expected": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "actual": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/after-refusal/formal/manifest.json", + "expected": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "actual": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "match": true + }, + { + "path": "/opt/homebrew/Cellar/node/25.8.1/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-actual-root-review-r02/review.json", + "review_sha_match": true, + "source_map_origin": "review.selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "94bda8630e852d41940d87ce3882bbcb954a481732120b617d18ab516dcee562", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "ae8a3c07c4af0332d2be9ac693dc7e7d764f582675c4c84d0b0220c8beee7532", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 10, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "actual": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "actual": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next1.var", + "expected": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "actual": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next1.var", + "expected": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "actual": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next2.var", + "expected": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "actual": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next2.var", + "expected": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "actual": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next10.var", + "expected": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "actual": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next10.var", + "expected": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "actual": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-final160.var", + "expected": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "actual": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-final160.var", + "expected": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "actual": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-actual-root-review-r01/review.json", + "review_sha_match": true, + "source_map_origin": "review.selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "d90db2f139b4105d17a1c7a8348578c264258e64c16a0bc2e64b6f51c7d0f9d6", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "a31b54c0432fec3e427cb2cda9be339ef4207ca67c3d307fc68e17223f866784", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 10, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-checkpoint.var", + "expected": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "actual": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-checkpoint.var", + "expected": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "actual": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next1.var", + "expected": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "actual": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next1.var", + "expected": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "actual": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next2.var", + "expected": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "actual": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next2.var", + "expected": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "actual": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next10.var", + "expected": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "actual": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next10.var", + "expected": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "actual": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-final160.var", + "expected": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "actual": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-final160.var", + "expected": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "actual": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-actual-root-review-r02/review.json", + "review_sha_match": true, + "source_map_origin": "review.selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "63533f10fea3787f1c54571086d12a215430db7b36371d508bbe0d91a1148d4c", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "83530b612fa967904d5f1cbab610788f42a4a6b931327e50f0813e95c822d0ac", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 14, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "actual": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "actual": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next1.var", + "expected": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "actual": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next1.var", + "expected": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "actual": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next2.var", + "expected": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "actual": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next2.var", + "expected": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "actual": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next10.var", + "expected": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "actual": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next10.var", + "expected": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "actual": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-final160.var", + "expected": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "actual": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-final160.var", + "expected": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "actual": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/legacy/formal/world.bin", + "expected": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "actual": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/backup/formal/world.bin", + "expected": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "actual": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/migrated/formal/world.bin", + "expected": "818f8b9362646dba3ede7e5e65f3613dfb49548020438a1b3d805fb5f38e8cc7", + "actual": "818f8b9362646dba3ede7e5e65f3613dfb49548020438a1b3d805fb5f38e8cc7", + "match": true + }, + { + "path": "/opt/homebrew/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-actual-root-review-r02/review.json", + "review_sha_match": true, + "source_map_origin": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/runner-input.json#selected_source_map", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "594c81d1877a19acec28ead7fcb769be6a5b618f07f6cae0ded0353efc8ed1b3", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "098f85bc87ae34830592430a4b2df660a4e1008c30b417208d5f4b515f0037e0", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files_count": 25, + "raw_all_sha_match": true, + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-checkpoint.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-checkpoint.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject1.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject1.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject2.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject2.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next1.var", + "expected": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "actual": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next1.var", + "expected": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "actual": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next2.var", + "expected": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "actual": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next2.var", + "expected": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "actual": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next10.var", + "expected": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "actual": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next10.var", + "expected": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "actual": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-final160.var", + "expected": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "actual": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-final160.var", + "expected": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "actual": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject1-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject1-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject2-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject2-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/original/formal/world.bin", + "expected": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "actual": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/original/formal/manifest.json", + "expected": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "actual": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/backup/formal/world.bin", + "expected": "9e7a3670fee16445dbdee431c37dbc25b5a77541acc223f0494e8eea4b5becb3", + "actual": "9e7a3670fee16445dbdee431c37dbc25b5a77541acc223f0494e8eea4b5becb3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/backup/formal/manifest.json", + "expected": "444b347ebc337583b11f9c49c28dc83c6f4a3c7ff93cce315269547c44082fdf", + "actual": "444b347ebc337583b11f9c49c28dc83c6f4a3c7ff93cce315269547c44082fdf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/after-refusal/formal/world.bin", + "expected": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "actual": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/after-refusal/formal/manifest.json", + "expected": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "actual": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "match": true + }, + { + "path": "/opt/homebrew/Cellar/node/25.8.1/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "operations_on_accepted": false, + "normal_os_input_accepted": false, + "accepted_for_p08": false + } + ], + "product_changed": false, + "original_unit_completed": false +} diff --git a/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/MIGRATION_FUNCTION_COMPARISON.json b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/MIGRATION_FUNCTION_COMPARISON.json new file mode 100644 index 0000000..2da3119 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/MIGRATION_FUNCTION_COMPARISON.json @@ -0,0 +1,51 @@ +[ + { + "path": "autoload/simulation_runtime.gd", + "function": "prepare_facility_dimension_snapshot", + "old_body_sha": "525d227a3d02759d35c64ff885fabfc6c4e205c8f7e18ec02ab5af29c8809330", + "current_body_sha": "525d227a3d02759d35c64ff885fabfc6c4e205c8f7e18ec02ab5af29c8809330", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "migrate_facility_dimensions_at_path", + "old_body_sha": "41b6d554ad4fd92592366d022aac9aa7224b460bb7575e9cd63f1ab34c2a3371", + "current_body_sha": "41b6d554ad4fd92592366d022aac9aa7224b460bb7575e9cd63f1ab34c2a3371", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "prepare_all_facility_dimension_snapshots", + "old_body_sha": "01a03f2bb400084ff86cc1b802581fa97f9a7aa3b7e3de1d7d7932bb1b4ded10", + "current_body_sha": "01a03f2bb400084ff86cc1b802581fa97f9a7aa3b7e3de1d7d7932bb1b4ded10", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "_prepare_construction_dimension_snapshot", + "old_body_sha": "bb7a74ea8bf6fa298ec4155a165c283d27de35c34b6da5b322d2a4baadba85ca", + "current_body_sha": "bb7a74ea8bf6fa298ec4155a165c283d27de35c34b6da5b322d2a4baadba85ca", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "preview_facility_dimensions_at_path", + "old_body_sha": "5bfa3f770400761b6bcf399f398b9b72c2df049b7f8190f1f6ae1f80dfd393e3", + "current_body_sha": "5bfa3f770400761b6bcf399f398b9b72c2df049b7f8190f1f6ae1f80dfd393e3", + "equal": true + }, + { + "path": "scenes/main/main.gd", + "function": "_preview_dimension_migration", + "old_body_sha": "ae2aad38a6150074f04100da7f39eae2293f8f8c75cc4540ac6581abee62d88b", + "current_body_sha": "ae2aad38a6150074f04100da7f39eae2293f8f8c75cc4540ac6581abee62d88b", + "equal": true + }, + { + "path": "scenes/main/main.gd", + "function": "_confirm_dimension_migration", + "old_body_sha": "51171acd19626bd805cf9a620ad69616cc1e472c1ff77ba8f8bae949f8854ecc", + "current_body_sha": "51171acd19626bd805cf9a620ad69616cc1e472c1ff77ba8f8bae949f8854ecc", + "equal": true + } +] diff --git a/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/actual-opus-contract-advice.json b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/actual-opus-contract-advice.json new file mode 100644 index 0000000..b0e56e5 --- /dev/null +++ b/docs/plans/original-completion-2026-10-02/execution/p08-02-audit-r01/actual-opus-contract-advice.json @@ -0,0 +1,7 @@ +{ + "action": "wait", + "task_id": "P22-02", + "reason": "【P22-02】blocked、repairs 3/3で上限に達しているため request-repair はできない。worker が止まった理由は能力不足ではなく、最終パケットの計測(500000未満)が worker からアクセスできない場所にあることだった。オーナーの指示どおり、この計測は Root だけが行う。合格した13テスト、AST、ordinary exit 0、require-ready exit 2 は保存されている。次の判断は、Root の正確な最終パケット計測と、オーナーによる扱いの決定を待つ。provider は起動しない。\n\n【新しい P08-02 登録への推奨(提案のみ。登録・承認・予算はオーナー判断)】\n原計画の条件6つ:\nC1 混合建設\nC2 占有変更\nC3 役者の実位置\nC4 救護・物流・EV を1つの batch でまとめて移行\nC5 重複・孤立・消失がない\nC6 解消できない場合は元の配置とセーブを保つ\n\n正例:これら全部を含む混合 fixture を1つ作り、現在の main を基準に OperationsON と OperationsOFF の両方で通す。restore、finance、save reconciliation、path batch は旧 stage と違うので、ON が当てはまる根拠は説明だけでなく収集で示す。OFF だけの個別ケースでは、まとめての主張の根拠にならない。\nC6:後半の batch を解消不能にして拒否させ、live、source、以前の backup の3つが byte/SHA で変わっていないことを確認する。\nPID をまたぐ継続:プロセスAで batch を保存して終了する。新しいプロファイルのプロセスBで読み込んで続行し、不変条件の digest が一致することを確認する。\n\n負例(validator が必ず reject するもの):\n- actor ID の重複\n- 占有しているのに建物も actor もいない(孤立)\n- 救護 job、物流品、EV セッションの消失\n- 後半 batch が失敗したあとの部分適用\n- backup の上書き、live save の変更\n- PID 継続 digest の不一致\n- OFF だけの証拠で全体を主張すること\n- 旧 stage の受入の流用(29ファイル差分)\n- signals だけの UI 試験を OS 証拠として数えること\n- 期待値を常に fail にするハードコードや、サンプルの mutation だけを受け入れる validator(いずれも無効)\n\n既存資産:test_dimension_batch_save と test_dimension_migration_ui は再利用し、作り直さない。\n\nallowed_paths の案:\n- docs/plans/original-completion-2026-10-02/execution/p08-02/**\n- 新しい fixture ディレクトリ1つ(上限あり。726MiB の空きを前提に CoW stage を使う)\n- 新しい test ファイル1つ\n- tools/check_p08_02_combined_migration.py\n- tools/run_all_tests.py への最小限の登録だけ\n\nRuntime の本体と Runner の権限は対象外。不変条件の欠陥が実際に示されたときだけ、範囲を絞った別タスクを提案する。\nNative の正式チェック:Root が host で収集し、標準 sandbox の --verify-only で allocated build receipt を読む。\n完了の扱い:worker はコードを書いたら、Root の OS/native 証拠を pending のまま submitted で返す。これは original accepted ではない。全体の回帰試験は最後の変更 batch の後に1回だけ行う。", + "codex_model": "gpt-6-astra", + "codex_model_reason": "P22-02 では今、worker を走らせる予定はない。この選択は、後で P08-02 を登録したときの worker 用。fixture と validator は条件6つ全部を1つの batch で一貫させる必要がある。具体的には、建設、占有、移動中の actor、救護、物流、EV に、解消できない後半 batch での原子的な拒否と、PID をまたぐ継続が加わる。さらに既存の guarded CoW/native protocol を変えずに組み込み、ON の適用性を収集で示し、偽の pass ができない正例と負例を設計しなければならない。不変条件の推論が難しく、失敗したときの再試行コストも高いので、時間と使用量が増えても Astra の品質を優先する。この選択は run、repair、上限変更、受入の免除をどれも許可しない。" +} diff --git a/docs/spec/acceptance/P08-02.json b/docs/spec/acceptance/P08-02.json new file mode 100644 index 0000000..5a297fc --- /dev/null +++ b/docs/spec/acceptance/P08-02.json @@ -0,0 +1,78 @@ +{ + "id": "P08-02", + "title": "旧配置の安全な変更", + "work": "混合建設、占有変更、役者の実位置、救護・物流・EVをまとめて移行する。", + "acceptance": "重複、孤立、消失がない。解消不能時は元配置とセーブを保つ。", + "counting_scope": "Existing one unit among30 packages/88delivery units. No partial credit; 6 decomposed facets are not new delivery units or game atomic denominator.", + "original_authority": "docs/traceability/original/BASELINE.txt", + "approved_plan": "docs/plans/original-completion-2026-10-02/IMPLEMENTATION_PLAN.md", + "accepted_audit_input": "docs/spec/inputs/p08-02/historical-inputs.json", + "accepted_audit_input_raw_sha256": "b49fdcd1fa99666edb682d9bb34707d68722310b68df068e5132d339bac5464b", + "required_conditions": [ + { + "id": "mixed_construction", + "text": "複数の旧寸法建設中ジョブと完成施設を同一batchで実移行し、進捗・支払・予約・完成IDを保全する。" + }, + { + "id": "occupancy_change", + "text": "追加/解放セル、support、world占有とconstruction所有を一致させ、重複と孤立を残さない。" + }, + { + "id": "actual_actor_positions", + "text": "移動途中の客/職員の実位置・movement credit・経路/予約・所持資金等を許可された形状/明示route変更以外で変えない。" + }, + { + "id": "combined_rescue_logistics_ev", + "text": "同一保存/移行batchに実救護患者/搬送者/目的地、物流荷物/予約/要求、EV乗客/待機/旅程を含め、全IDと相互参照・数量・元要求の一回完了を保全する。" + }, + { + "id": "no_overlap_orphan_loss", + "text": "同一current版のOperations ON/OFFと別PID保存再開で全状態/全イベントと対象数/参照を照合し、重複・孤立・消失・二重効果がない。" + }, + { + "id": "unsolvable_preservation", + "text": "後段の解消不能batchを拒否し、先行候補の部分適用なし。現live・原配置/正式save全member・既存migration backup全memberを保持し、別PIDで元の動作を継続できる。" + } + ], + "current_source_pins": { + "autoload/simulation_runtime.gd": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39", + "scripts/construction/facility_resize_preview.gd": "d0e8d772a648a297ee0a4625206b073be2668b32c7dba2575ba1295f5b1866ac", + "scripts/construction/facility_resize_routes.gd": "05d4aedcc930160eafc2945711f867744f63f5f391e4759f8e2de9211b968201", + "scripts/core/save_service.gd": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617", + "scripts/world/path_service.gd": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4", + "scenes/main/main.gd": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55", + "tools/run_all_tests.py": "320ca668732b4ff72fc4449998af2327d4e5c527b06896740806aaf0487282b4", + "tools/regression/owned_outer.py": "c2e3483b76db1a3ff940f23f88ea0083fc78736e874ebcdb385d766dde8866e7", + "tools/strict_test_markers.py": "1cb16da6c5c00c1a0610a3fc04beb97d1eb3ba492fb1bc8fe5b621d2b7bc0406", + "tests/s1/test_dimension_batch_save.gd": "ca397c0457996bab637e8be5217b7db2c14579a1b0df54434b4000a69e793bbf", + "tests/ui/test_dimension_migration_ui.gd": "0f0cec88ea8bf5fccdcd5ade02fab70b7dc71135132048cd10db17ad9d964c0d" + }, + "evidence_requirements": [ + "Exact final submitted source map and input/config/environment (real native PID/version and private guarded profiles), bounded raw logs and strict completion markers. Historical7 cases had29 source differences and OperationsOFF; cannot become current combined PASS solely by hashes or function matching.", + "One coherent mixed fixture includes all6 facets; actual Runtime methods, real persisted actors/jobs/items/transport. Exercise both OperationsON/OFF, positive migration and late refusal, actual formal save/backup and separate writer/reader PID continuation. Full typed states and uncapped events preserved; only explicitly enumerated approved geometry/route changes and pre-existing justified IO schema difference may differ, never discard unexplained fields/events.", + "Normal production migration menu preview/cancel/confirm and changed-source rejection at samecandidate: Root collects real OS inputs/screens/model/formal state; signal-emitted UI test is only handler evidence. Root stage can load controlled oldsave; do not label injected setup as natural production.", + "Existing current local UI/dimension batch, save/restoration/path/ownership suites are reused. Required final full regression after final changes batch; only repeat if actual changes/failures require. Full regression and tests counts never replace all6 acceptance.", + "All original conditions, separate independent Opus review, main integration/current applicable final verification and ledger reflection are required before unit closure. Windows coverage stays explicitly pending where applicable, no inference from Mac native/PCK." + ], + "implementation_outputs": [ + "docs/plans/original-completion-2026-10-02/execution/p08-02/CONDITION_MATRIX.md", + "docs/plans/original-completion-2026-10-02/execution/p08-02/implementation.json", + "tests/s1/test_p08_combined_migration.gd", + "tests/fixtures/p08-02/", + "tools/run_p08_mixed_migration.py", + "tools/check_p08_migration_evidence.py", + "tools/test_p08_migration_evidence.py" + ], + "worker_instructions": [ + "Read exact work and acceptance. Preserve existing successful migration code and supplied21 historical fixture/driver files. Historicaldrivers have frozen external paths/oldsourcecounts; use as design references, never run them as current. All needed source is inside this frozenrepo. No secondworker, provider switch, git writes, Runner or cap/policy edits.", + "Authorized implementation is new bounded mixed fixture/driver/evidence checker/docs. No runtime/UI production edits in initial scope. If actual invariant defect demonstrated, submit concrete minimal proposed patch and failing evidence without silently narrowing acceptance; originalunit stays incomplete until requiredfix and allacceptance.", + "Reuse source from docs/spec/inputs/p08-02/. Create composable writer and reader under tests/fixtures/p08-02 with new standalone test_p08_combined_migration suite. Actual mixed state must include active guest route, realstaff/rescue/foodcargo/EV requests and oldsize paidjob plus completed facility in sameworld. Use existing domain methods and fixture setup, no invented production coefficients. Controlled fixture values/seeds explicitly diagnostic inputs.", + "Use existing tools/run_all_tests.py execute_phase/profile guard/owned_outer protocol for bounded host collection, all current-source CoW and guarded fresh profiles, captured realprocess cleanup, strictmarkers, exactworld and formal package members. Driver receives --project-root and --output absolute args; no fixed outsideworktree input paths or1299 admission constant. Root invokes --collect with actual finalcommit; worker need not runGodot/fullregression. New finite fixtures standalone so final fullroster can run without external Root artifact paths. Do not edit tools/run_all_tests.py or existing suite policy. Add exactly one new test_p08_combined_migration marker entry to docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json, preserving every existing entry. Driver owns only newfixture phase markers and customcase traces. Public added suite must run independently of external artifacts; this suite addition is a test, not a new delivery unit.", + "Checker --verify-only reads BUILD_OUTPUT_DIR/p08-evidence/index.json. Root copies actual evidence into allocateddir before formalvalidation. Index has exact source map, fixture/config inputs, phase receipts, rawcaptured native lifecycle, strictlogs, whole typedstate/formal-member hashes and every6condition attribution, normalOS proof and final regression receipt. Verify source and bound artifact content, actual distinctPID/ended/exit, not self-reported PASS booleans. Missing/stale/malformed/partialcase must list deficits and non0; technical artifact integrity cannot claim original unit accepted.", + "Review Root native index shape from existing native receipts; define newindex explicitly in docs with machine-readable example fixture rather than invent opaque proof. Preserve read-only fullcontent mapping and logged refusals. Anybyte-copy operation verifies rawSHA/content and does not delete earlierproofs. Root host collection and formalchecker are different; no sandboxrights expansion or paidAPI.", + "Meaningful wholechecker positives and negatives: pure isolated temporary proof fixture exercises check() through exact schema/source/phase/file links, then realindex mutations/deletions for duplicateactor, orphanoccupancy, patient/cargo/EV loss, partialbatch, overwrittenoriginal/backup, unequal crossPID state, missingON, wrong/stale source and fakeOSsignals. Positive must be reachable; do not replace full proof with allbooltrue reducer or alwaysfail readiness. Negativecorruptdata in disposable fixtures only. Avoid implementation-mirroring trivial tests; tests prove original invariants/gatefalseacceptance.", + "Python stdlib, python -B/ast.parse, bounded local checker tests only in worker. Native/fullregression/OS collection is Root responsibility after formal code submission. Read specSHA as gitshow stdout.strip UTF8, distinguish raw trailingnewline. Final full reviewerpacket measurement belongs Root on actualsubmittedSHA. Never refuse code submission solely because Root references/native/OS/finalpacket not yet collected.", + "Return genuine status submitted when bounded implemented code is ready forRoot verification, listing every pending originalcondition, actual check/failure and exact productfix proposal if any. Pending native/OS/fullregression/independentreview is not originalcompleted and not a reason to manufacture missingproof or change response to blocked. If code cannot be implemented state precisecause instead; do not selfclaimtests/sourceacceptance.", + "Keep scope focused. No manavalues, D05/D07/D08/D09 semantic choices, new assets, economicprices, storycontent, original30/88 or source baseline rewriting. Preserve unique-character protection/defaultplayer and all historicalfailedlogs." + ] +} diff --git a/docs/spec/inputs/p08-02/historical-inputs.json b/docs/spec/inputs/p08-02/historical-inputs.json new file mode 100644 index 0000000..2f5cbf6 --- /dev/null +++ b/docs/spec/inputs/p08-02/historical-inputs.json @@ -0,0 +1,1950 @@ +{ + "plan_id": "P08-02", + "purpose": "Owner coordinator accepted audit input; complete historical fixture/driver source bytes supplied INSIDE repository for reuse, not current/combined acceptance.", + "historical_cases": [ + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-actual-root-review-r01/review.json", + "review_sha256": "5078abfb2653b454f4405e554997936927138bd81c56fc3fb564540a00693368", + "native_case": "p03-current1299-inflight-dimension-native-r01", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "3d1d50064d72f4cccf674ad76c0d7d1ef3bf08e72e1c9b201ea92f5b51c3cf90", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "0511b9bf08f8e9eaa80ee68e15083ba85550eed602df5c8c31032a78aad38ff8", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "actual": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "actual": "265da09e4d26dcef8ec1853dde9654415fe6896b171ca6913149f9ff0d4f9793", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next1.var", + "expected": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "actual": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next1.var", + "expected": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "actual": "680e93d77c9c27a7984af3c009a0c8d9e365bb7aabcfe2e0d0984147bfd91ca5", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next2.var", + "expected": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "actual": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next2.var", + "expected": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "actual": "252b65d416ffe91b64372bfcf8b3788fd35b87a45c940c8e5c8e88a9e6687040", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-next10.var", + "expected": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "actual": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-next10.var", + "expected": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "actual": "4463dc585630e9f40e11ceae478bdc9b1d519d8b402ae4dae8907bf548f0215a", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/write-final160.var", + "expected": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "actual": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair/read-final160.var", + "expected": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "actual": "be96bd47ef912ca874fffd3874d7a9bd4f334b4dee9d88bf06565ff73731107f", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "3d1d50064d72f4cccf674ad76c0d7d1ef3bf08e72e1c9b201ea92f5b51c3cf90", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "0511b9bf08f8e9eaa80ee68e15083ba85550eed602df5c8c31032a78aad38ff8", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01.py", + "raw_sha256": "a45e29efbd264e07011587f20159a158185cc0bee7e0415bfd827b3091761530", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-actual-root-review-r01/review.json", + "review_sha256": "6ced37bc8af78ae35310ae6d8269767d197cdaec6c7444041a0c934ac2e50c8c", + "native_case": "p03-current1299-inflight-EV-dimension-native-r01", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "dbe4c24604e68a89cafe27f8cf49890689adf4326b39799374f7e011420639b5", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "484bc4e9ef52f8b34e82c4170a0974405dbff9040dbfe31864205489dacddc5f", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "actual": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "actual": "add307fdc709c607830a701bb673484a23fc4d928c360fc3d060d66cc966e532", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next1.var", + "expected": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "actual": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next1.var", + "expected": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "actual": "c266aa0f6a5b4ba1298508d79d03df880c95b26eb7073a1ddd6333972be75400", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next2.var", + "expected": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "actual": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next2.var", + "expected": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "actual": "a8ad1dbca5992ec711d481e66a6c357c7cfbbe36c6cd858ef0553c1a815c93e4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-next10.var", + "expected": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "actual": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-next10.var", + "expected": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "actual": "1b790160a0227a189038ce4ea5d2ea3389473f2106769bd9fc0081cbbf2a234e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/write-final160.var", + "expected": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "actual": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair/read-final160.var", + "expected": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "actual": "6d75eeb7eca3ba38d003d93531ae5f0be707abdcfc49e8dbfbca2644db698b06", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "dbe4c24604e68a89cafe27f8cf49890689adf4326b39799374f7e011420639b5", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "484bc4e9ef52f8b34e82c4170a0974405dbff9040dbfe31864205489dacddc5f", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01.py", + "raw_sha256": "e12e88058d2b5afa09a452ad1828717c8a77e687b3ac3935dcc999c9d49cd7ac", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-actual-root-review-r02/review.json", + "review_sha256": "516c8f2a5fadc3b5345d3b802a1087fe7ca4d85f8d1f00e504f27a11f5d4be09", + "native_case": "p03-current1299-EV-retarget-refusal-native-r02", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "b7263eab66894b81817362f60b118ceec742f84f2e34a176094ddf00038d5e24", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "6efe23e43fb8e3aad6f6a3322bc47a3f1b3b8f118d51af0fe9882141ab697c56", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-checkpoint.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-checkpoint.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject1.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject1.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject2.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject2.var", + "expected": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "actual": "a0e83b571601d3cfc9a0c6ecfa078ff72acae12f8b111ae93e7d79fd5da7979b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next1.var", + "expected": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "actual": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next1.var", + "expected": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "actual": "05060215168952b562d49329b9b487a833b65a1c9e0a7e628f093f0f13b5935d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next2.var", + "expected": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "actual": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next2.var", + "expected": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "actual": "f2383b09a88f8fde7a7dce055255f7822e357f66cc07701773d041eb69b12117", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-next10.var", + "expected": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "actual": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-next10.var", + "expected": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "actual": "ef8d6a279a8a3fb1d7306c8295985ec7f1baa789d8daf38e4a304e70c1f8910e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-final20.var", + "expected": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "actual": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-final20.var", + "expected": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "actual": "2a65e1529d2853202de1b282fb478d54867aa9e6876ad16151c47e7052d09c18", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject1-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject1-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/write-reject2-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/read-reject2-refusal.var", + "expected": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "actual": "f64f62b33bed375bbb77b2daebd496576b4f28b7c0f0d481d527d51c9b530a2f", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/original/formal/world.bin", + "expected": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "actual": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/original/formal/manifest.json", + "expected": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "actual": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/backup/formal/world.bin", + "expected": "d820c7e5718a73c27202adce40a1934a7653052ed4798dbfe927bec2836a3bfc", + "actual": "d820c7e5718a73c27202adce40a1934a7653052ed4798dbfe927bec2836a3bfc", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/backup/formal/manifest.json", + "expected": "d4c27962bd8d5559ba279ecac5129fdeae2412b4b79f459c74bc611c329e2bc0", + "actual": "d4c27962bd8d5559ba279ecac5129fdeae2412b4b79f459c74bc611c329e2bc0", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/after-refusal/formal/world.bin", + "expected": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "actual": "c9fd2a01d62021145045c24521133b7e6fa10d6a7d66dd50c5c7a6282f1732cf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair/after-refusal/formal/manifest.json", + "expected": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "actual": "ed22f61337e849c09974dd60a9410bd5bfbd74ee59705ebcb9d189d1aa753880", + "match": true + }, + { + "path": "/opt/homebrew/Cellar/node/25.8.1/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "b7263eab66894b81817362f60b118ceec742f84f2e34a176094ddf00038d5e24", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "6efe23e43fb8e3aad6f6a3322bc47a3f1b3b8f118d51af0fe9882141ab697c56", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02.py", + "raw_sha256": "f37ee9ff99ffa3267609555528d58c87159aadfa35d3a57c318ae6131c446571", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-actual-root-review-r02/review.json", + "review_sha256": "5b4ad1372adda1cc830bbd455016c7c602cf26195221a6450db43cc8c5ddaeb4", + "native_case": "p03-current1299-rescue-dimension-native-r01", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "94bda8630e852d41940d87ce3882bbcb954a481732120b617d18ab516dcee562", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "ae8a3c07c4af0332d2be9ac693dc7e7d764f582675c4c84d0b0220c8beee7532", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "actual": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "actual": "b36bee1e65346441e3baf335c3b2172c6247b214eeb422614aaeeb9104aa96f2", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next1.var", + "expected": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "actual": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next1.var", + "expected": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "actual": "70b09224f1b8f904d3810aeb2c326e09634a31ea08ce2c13eb318e55a88f9959", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next2.var", + "expected": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "actual": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next2.var", + "expected": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "actual": "e10f55e0cb5e41379742b08ba135c06a8c312757caa169d2631a9a068253498b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-next10.var", + "expected": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "actual": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-next10.var", + "expected": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "actual": "c9239e8ae1b1a346be59d5c872ade5cedc77a6ad69903f9d1d743b4c1aeb884d", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/write-final160.var", + "expected": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "actual": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair/read-final160.var", + "expected": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "actual": "072473573a35880727140e65fe215ac74665fdd12cd12ef022ce6200d3e6d8ce", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "94bda8630e852d41940d87ce3882bbcb954a481732120b617d18ab516dcee562", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "ae8a3c07c4af0332d2be9ac693dc7e7d764f582675c4c84d0b0220c8beee7532", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01.py", + "raw_sha256": "057fe62a7beb66e388e280aa2319174730a824716164dc92899c156f279f34c1", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-actual-root-review-r01/review.json", + "review_sha256": "91bc6e55aeee1462fbd31304d3d1c9ee0e537d8d3049ce9c4a4482829dfaa34c", + "native_case": "p03-current1299-logistics-dimension-native-r02", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "d90db2f139b4105d17a1c7a8348578c264258e64c16a0bc2e64b6f51c7d0f9d6", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "a31b54c0432fec3e427cb2cda9be339ef4207ca67c3d307fc68e17223f866784", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-checkpoint.var", + "expected": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "actual": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-checkpoint.var", + "expected": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "actual": "2cd1d4e9542a53f6387db6facc15336da1042c6382f3d7c5f84f3d0e81d5306b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next1.var", + "expected": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "actual": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next1.var", + "expected": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "actual": "4966d5178de61f6b7366e576fd1bf2ca989763bb371b5c2abecb1cccd1476e62", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next2.var", + "expected": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "actual": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next2.var", + "expected": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "actual": "a36202897628f5ce0f77a8c6d11f74158a216f2f5152026d84602b85d718237b", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-next10.var", + "expected": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "actual": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-next10.var", + "expected": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "actual": "555b0c8dc66ccd8f69a2b5532fd6dc2a25a0125998aea06be52ac860dd968d8e", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/write-final160.var", + "expected": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "actual": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair/read-final160.var", + "expected": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "actual": "564d76445c23711afddbd87f0d0dfaf7d4be3d2d95e9018bfd0649f18fc8d050", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "d90db2f139b4105d17a1c7a8348578c264258e64c16a0bc2e64b6f51c7d0f9d6", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "a31b54c0432fec3e427cb2cda9be339ef4207ca67c3d307fc68e17223f866784", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02.py", + "raw_sha256": "ac27cffc5a61f57dedb6d24bb0a9fcbc3ccc59ba924e04191339dff2462135e1", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-actual-root-review-r02/review.json", + "review_sha256": "e3baa038eba0bbd16126fdbb5941057f17493c363659abd5b9f668e38bcccfc9", + "native_case": "p03-current1299-multiple-jobs-dimension-native-r01", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "63533f10fea3787f1c54571086d12a215430db7b36371d508bbe0d91a1148d4c", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "83530b612fa967904d5f1cbab610788f42a4a6b931327e50f0813e95c822d0ac", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-checkpoint.var", + "expected": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "actual": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-checkpoint.var", + "expected": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "actual": "ec5a6bbfb0e8f524f23668eaebb18d379cf85451897664aff25a78cdbca71269", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next1.var", + "expected": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "actual": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next1.var", + "expected": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "actual": "523cc00af7c79616921130e4e61ee955e062dd696ab9d77122027f57ef318eee", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next2.var", + "expected": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "actual": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next2.var", + "expected": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "actual": "ccc17dface4b3929545fb5be94138a1a4b5481323cb1208dce22ddeadecaabef", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-next10.var", + "expected": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "actual": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-next10.var", + "expected": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "actual": "d3d40be8c4537a36e23b75378b6df766387ed222d3921badc20116290ad08957", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/write-final160.var", + "expected": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "actual": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/read-final160.var", + "expected": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "actual": "2e10e5d5148d50648f010c438f9fd35577071b3d0f1b9ea5ec87908a7daa6a5c", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/legacy/formal/world.bin", + "expected": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "actual": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/backup/formal/world.bin", + "expected": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "actual": "5a4d6ec134a3d25207e9e9a923629352c3f1c1fa7099fdfc385f1aa2d9d7eaa3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair/migrated/formal/world.bin", + "expected": "818f8b9362646dba3ede7e5e65f3613dfb49548020438a1b3d805fb5f38e8cc7", + "actual": "818f8b9362646dba3ede7e5e65f3613dfb49548020438a1b3d805fb5f38e8cc7", + "match": true + }, + { + "path": "/opt/homebrew/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "63533f10fea3787f1c54571086d12a215430db7b36371d508bbe0d91a1148d4c", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "83530b612fa967904d5f1cbab610788f42a4a6b931327e50f0813e95c822d0ac", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01.py", + "raw_sha256": "d59021776811bd47499b96def54c497a20eb3274129f480ec4e0c31b94168598", + "historical_only": true + } + ] + }, + { + "review": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-actual-root-review-r02/review.json", + "review_sha256": "c3caf63ec20f584b4789beaa527da5ab77951d02a404479d3dab2834a48cd8db", + "native_case": "p03-current1299-batch-later-refusal-native-r02", + "source_count": 1299, + "current_source_differences": [ + { + "path": "autoload/simulation_runtime.gd", + "expected": "7fdd299cdaea5bda154482018c578c649de26ef440092a8c70b9595be244be21", + "actual": "d52a995ae715542bbc550f68d35889540658275d12e04ae0b21ac276f5843f39" + }, + { + "path": "scenes/main/main.gd", + "expected": "f347793d4e42feef6ff7193250b41330f2a609580c0bb69739f11c0ad6d38374", + "actual": "41df8857f9658c17b01361350979caa942b9326c82c9f176517972c2a9692f55" + }, + { + "path": "scenes/main/world_preview.gd", + "expected": "3df29be32d3a016d8fb9dc1ee2bd32e2360ac8fad9810293f6be9b58d26046e0", + "actual": "75d5b0bd23204f5a485540512e44b89e1d2a4596b368f70177a238ba078ff42d" + }, + { + "path": "scripts/core/command_queue.gd", + "expected": "392283cd7e47a2054aaea067f110b63b37c472c9da8c0498c4dbb8ca2a3bcdb6", + "actual": "09b22e6212fa3ce1bf08f5d6b52224a2d3362b3bc63f03a8c98e89af1c6f5895" + }, + { + "path": "scripts/core/performance_budget.gd", + "expected": "79d18e8f0dcc3932801cd02ea8a8ba037af02ef57665387cba8dbe3b3e9af917", + "actual": "0e2278f88d29919a0634fc1b527328a0d0c12d87e2cd612f3eee1526aabdb073" + }, + { + "path": "scripts/core/save_service.gd", + "expected": "3e3d2aeeff7b7610b48bba24ca83610225f93aa8e8deef50c93186ee360fd8b7", + "actual": "0c158d3e6ee693b89814bf232c954e4757c5ff91dc9df03bb322c3e593e73617" + }, + { + "path": "scripts/economy/economy_service.gd", + "expected": "ecbd42338e5f17ec75501373a4f13d8839c723fc674cc7f74241aa4d9b637abd", + "actual": "95aedd0a0421c93e8fa39f0f76fa890cd0a46905d9a25c88c8b17c4d6d47728e" + }, + { + "path": "scripts/events/event_service.gd", + "expected": "4f824feece3738c94f9d021e502bc23d94952ae5bfe1b95a026ee29c06a9bf80", + "actual": "d58c416d7a1126b36023fa6ba9f02338678bd54426a3b5d04ce511d9a48c0103" + }, + { + "path": "scripts/facility/facility_service.gd", + "expected": "c4310a397a80cbf959ac810057c25ac114526e0e0d007f29d82d6a81d7a14611", + "actual": "ceb4a3e9224587423f273cdb2b56e6843ab176ac1fc4fe79dd498b5ed5c33b77" + }, + { + "path": "scripts/guest/guest_runtime.gd", + "expected": "5bb687b2da6f634c66680ffbefb4b4a57ed02fb3dff10f72ce7e7858177d1241", + "actual": "57ba99e5d977b5302987f4359a19056f1ab09c8fb7e4762ee8d79cbb9316741a" + }, + { + "path": "scripts/operations/operations_coordinator.gd", + "expected": "1c0408d12a659d7f11676765e64ec8850454609290519471f5e8d30da28d540e", + "actual": "871a248ee101b6df543fd5cf0440b5d4b0f02c21fa145a99f0687888c1bc6f90" + }, + { + "path": "scripts/ui/guest_observation_panel.gd", + "expected": "67ffc6404262d803a6d677853f327759c3e68c592cc6c8a88a1ebd20aca239f2", + "actual": "f5de1004fce5445bbfd3ee8d6ec37b325e7a9813d47c19beaeeeb411f27a50a5" + }, + { + "path": "scripts/ui/operating_ledger_panel.gd", + "expected": "881d2f9687c2a12c0a6d008777053c4b212fd4f7fe11b0713f8d897ff80f7cc0", + "actual": "652b3c98c4cdc707831a19ba1e91e23f21895f0fbf3ece40826e03df3b656a1d" + }, + { + "path": "scripts/world/path_service.gd", + "expected": "2e68653e4898387cb5a76402813a10595bd5ca7d5fb841c7ed8c55af77d7a918", + "actual": "447135729a1106639a6eee6754af3195c8a8b458ca26980ae91fa39d80dcfbd4" + }, + { + "path": "tests/mvp/test_original_midnight_settlement.gd", + "expected": "916d0b4184842b1c8cc23c1a95db12558a8ba665b251aa6a383a42995eceaa30", + "actual": "2e6d7e907156db36a44b2e3b124b2311ddc79fe45250b8dc312b0a3f543bb7d1" + }, + { + "path": "tests/mvp/test_runtime_operations_integration.gd", + "expected": "d31a891906d539d9f4db1ca6c0d327956d3634aa2d89baffa08fc6c8bede67b9", + "actual": "8865d8f68c454fe9ebba602bffdfe83f868380f84160bf15aaec22062783fa08" + }, + { + "path": "tests/mvp/test_upkeep_legacy_midnight.gd", + "expected": "48009da7074b78929d9259ef4ac8baabcb192e7a337742df0d999442270d6e89", + "actual": "1e4c2f298bf4226b4769bda20328ab1683c4ec8e58afbc2b2b18e329490dd153" + }, + { + "path": "tests/s1/test_path_service.gd", + "expected": "0f48bb44c27e32f08477b9aed61a0db5c8808219490928f734c3570a07efb251", + "actual": "17d9fd42b35004376bf96e435f53d6bce41e79258ec7f6daf3ab04ae5d8c3e1d" + }, + { + "path": "tests/s1/test_path_snapshot_transit_guard.gd", + "expected": "b41d3e1ad3a4cd92bd865ba482c9e6a3d23fbd0ad276346b97c5235f2632f3af", + "actual": "1760289e99c80cbc217b98cd96a51fa9b210102340936f89766294e12e394680" + }, + { + "path": "tests/s2/test_facility_service.gd", + "expected": "e5a0ceef45d2fcae110f777ddb3c678374b7c9110cd40f743f88c578f0ed2d34", + "actual": "4b834f1d9d9ab2ad00cb4a56f5202b70468bfe5f71318dbf816da1e29cc32690" + }, + { + "path": "tests/s3/test_guest_service.gd", + "expected": "0d10b68512685d2ed7d5c0c858952009333e0e47f348ace4b4ccdd0b21d23647", + "actual": "a104012f9e2001ae6adf76aaa935ea6cb84545f35f412e1d96d4e03209488cd9" + }, + { + "path": "tests/s3/test_runtime_staff_assignment.gd", + "expected": "594c81d1877a19acec28ead7fcb769be6a5b618f07f6cae0ded0353efc8ed1b3", + "actual": "f6004ab1601e2910268dd5d02923c32eb697fb587ad74da1f06ca4de6c21713c" + }, + { + "path": "tests/s4/test_relationship_event_service.gd", + "expected": "b65afa74a67985059cc9e8e19684405324cfcdde277a21d7eba6062c968b24c5", + "actual": "ce1aa05716feed435cb68a1435a28db219cc3f056e23a442d2eaf08840771ffe" + }, + { + "path": "tests/s4/test_runtime_relationship_events.gd", + "expected": "52c9df100bd85fc49b62b80d214f84750c907330255a909a83a8dbd8195aac39", + "actual": "466f9a40b3471a9bb39c670cdd1106e990d297bc8bfff0db557cd63bb74c8ef3" + }, + { + "path": "tests/s6/test_runtime_snapshot_serialization.gd", + "expected": "098f85bc87ae34830592430a4b2df660a4e1008c30b417208d5f4b515f0037e0", + "actual": "d9106f9defb6cc195b969ff040d24f1f8ceebe055ba66c39d4634a68620cde84" + }, + { + "path": "tests/s6/test_save_operations.gd", + "expected": "199df0b7fcc3d212cd32c79e0108dd9e5b83f9895f07553b325571c7674ed96c", + "actual": "8e30183d45767d2b1f99c8c714e798241e0b6615c907d0baa5e148ca94667eff" + }, + { + "path": "tests/ui/test_business_management.gd", + "expected": "3d9bdbb984c08589d4e43fac93cf020ab7e9df705adc9a973603e4350455e0a0", + "actual": "2c76697f9a911e9dded63ebbbc2b82ee9e616777c50a637eebd91dc4932f85a5" + }, + { + "path": "tests/ui/test_pixel_tower.gd", + "expected": "93bdbb195f2ceec07dbe052e0d0a3017d84b56f1e8ec46b87be8d98105ec0f88", + "actual": "f149f4b5507247dadf623e777e90b9bdb81f54324b406a8f55adaf89b649866a" + }, + { + "path": "tools/regression/suite-policy.json", + "expected": "35dbba91764766f40536eaa976fb3f307a4d8b182f592b663822d611f6933c9d", + "actual": "8c557c4ba21a27e3e4850fe91b4ae798833247c8e8dfe689b2c69f22d67c4bff" + } + ], + "raw_referenced_files": [ + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-checkpoint.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-checkpoint.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject1.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject1.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject2.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject2.var", + "expected": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "actual": "aa5b5745a66e5ca88b0b49afd56c8e41b0db7c95fbb6191c499b023751231fc4", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next1.var", + "expected": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "actual": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next1.var", + "expected": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "actual": "9e4558f68832ef976411460d424fad7ee73f36fd3ade75f793f8db25792277bf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next2.var", + "expected": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "actual": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next2.var", + "expected": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "actual": "c09abb70ec20655e8eabee157346950901b7d8a63ce3b5102a7d29155e5f1d50", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-next10.var", + "expected": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "actual": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-next10.var", + "expected": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "actual": "50131f134594173bc0122c80da7ba0bd9569e21e6008dc6584b80265c1befff6", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-final160.var", + "expected": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "actual": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-final160.var", + "expected": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "actual": "f5b029ebc37885f5acae11fc2d965229a5d013495b64e5872f29b3b484353266", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject1-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject1-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/write-reject2-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/read-reject2-refusal.var", + "expected": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "actual": "d9b16781392929ae1e01db43b0189edca633a79ef7efc2f9b0e56704806fe273", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/original/formal/world.bin", + "expected": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "actual": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/original/formal/manifest.json", + "expected": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "actual": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/backup/formal/world.bin", + "expected": "9e7a3670fee16445dbdee431c37dbc25b5a77541acc223f0494e8eea4b5becb3", + "actual": "9e7a3670fee16445dbdee431c37dbc25b5a77541acc223f0494e8eea4b5becb3", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/backup/formal/manifest.json", + "expected": "444b347ebc337583b11f9c49c28dc83c6f4a3c7ff93cce315269547c44082fdf", + "actual": "444b347ebc337583b11f9c49c28dc83c6f4a3c7ff93cce315269547c44082fdf", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/after-refusal/formal/world.bin", + "expected": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "actual": "33d724282bff6cca4d05c59a205e07bce0acd3ec3ba36436dedce5c9be636ff8", + "match": true + }, + { + "path": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair/after-refusal/formal/manifest.json", + "expected": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "actual": "e61342efb5bc61baae6c4d9c6f663d07bec611d2d623c5eb14da7a6163bf75a8", + "match": true + }, + { + "path": "/opt/homebrew/Cellar/node/25.8.1/bin/node", + "expected": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "actual": "9bd9754f5300bd7910f280d8e413f13bb1460b30457243aa366d253677e893f3", + "match": true + } + ], + "raw_all_sha_match": true, + "operation_mode": "OFF", + "normal_OS_input_accepted": false, + "fixture_sources": [ + { + "role": "writer", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-writer.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/stage/tests/s3/test_runtime_staff_assignment.gd", + "raw_sha256": "594c81d1877a19acec28ead7fcb769be6a5b618f07f6cae0ded0353efc8ed1b3", + "historical_only": true + }, + { + "role": "reader", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-reader.gd", + "original_staged_source": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/stage/tests/s6/test_runtime_snapshot_serialization.gd", + "raw_sha256": "098f85bc87ae34830592430a4b2df660a4e1008c30b417208d5f4b515f0037e0", + "historical_only": true + }, + { + "role": "historical_host_driver", + "repository_copy": "docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02.py", + "original_source": "artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02.py", + "raw_sha256": "c34dcbd077832080329237eba6c0d4cf765e3ccd515b242a085d4a14f101dbce", + "historical_only": true + } + ] + } + ], + "migration_functions": [ + { + "path": "autoload/simulation_runtime.gd", + "function": "prepare_facility_dimension_snapshot", + "old_body_sha": "525d227a3d02759d35c64ff885fabfc6c4e205c8f7e18ec02ab5af29c8809330", + "current_body_sha": "525d227a3d02759d35c64ff885fabfc6c4e205c8f7e18ec02ab5af29c8809330", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "migrate_facility_dimensions_at_path", + "old_body_sha": "41b6d554ad4fd92592366d022aac9aa7224b460bb7575e9cd63f1ab34c2a3371", + "current_body_sha": "41b6d554ad4fd92592366d022aac9aa7224b460bb7575e9cd63f1ab34c2a3371", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "prepare_all_facility_dimension_snapshots", + "old_body_sha": "01a03f2bb400084ff86cc1b802581fa97f9a7aa3b7e3de1d7d7932bb1b4ded10", + "current_body_sha": "01a03f2bb400084ff86cc1b802581fa97f9a7aa3b7e3de1d7d7932bb1b4ded10", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "_prepare_construction_dimension_snapshot", + "old_body_sha": "bb7a74ea8bf6fa298ec4155a165c283d27de35c34b6da5b322d2a4baadba85ca", + "current_body_sha": "bb7a74ea8bf6fa298ec4155a165c283d27de35c34b6da5b322d2a4baadba85ca", + "equal": true + }, + { + "path": "autoload/simulation_runtime.gd", + "function": "preview_facility_dimensions_at_path", + "old_body_sha": "5bfa3f770400761b6bcf399f398b9b72c2df049b7f8190f1f6ae1f80dfd393e3", + "current_body_sha": "5bfa3f770400761b6bcf399f398b9b72c2df049b7f8190f1f6ae1f80dfd393e3", + "equal": true + }, + { + "path": "scenes/main/main.gd", + "function": "_preview_dimension_migration", + "old_body_sha": "ae2aad38a6150074f04100da7f39eae2293f8f8c75cc4540ac6581abee62d88b", + "current_body_sha": "ae2aad38a6150074f04100da7f39eae2293f8f8c75cc4540ac6581abee62d88b", + "equal": true + }, + { + "path": "scenes/main/main.gd", + "function": "_confirm_dimension_migration", + "old_body_sha": "51171acd19626bd805cf9a620ad69616cc1e472c1ff77ba8f8bae949f8854ecc", + "current_body_sha": "51171acd19626bd805cf9a620ad69616cc1e472c1ff77ba8f8bae949f8854ecc", + "equal": true + } + ], + "current_policy": "Use actual current definitions/persisted state. D07 relationship transforms never inferred.", + "test_policy": "Historical controls diagnostic. Do not label signals/directcalls as OS. New combined case exercises actual migration and real persisted references." +} diff --git a/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-reader.gd new file mode 100644 index 0000000..d6aeec9 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-reader.gd @@ -0,0 +1,131 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +var room_id: StringName +const OLD_TARGET:=Vector3i(-7,3,0) +const SLOT: String="user://p03-EV-refusal/manual" +func package_hashes() -> Dictionary: + var values: Dictionary={} + for suffix: String in ["",SaveService.MIGRATION_BACKUP_SUFFIX]: + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + values[suffix+"/"+name]=FileAccess.get_sha256(ProjectSettings.globalize_path(SLOT+suffix).path_join(name)) + return values +func refusal(label: String) -> void: + var before: Dictionary=runtime.create_snapshot() + var packages: Dictionary=package_hashes() + var prepared: Dictionary=runtime.prepare_facility_dimension_snapshot(room_id) + expect(not prepared.get(&"ok",false) and &"TRANSPORT_REPLAN_REQUIRED" in prepared.get(&"retargeting",{}).get(&"errors",[]),"actual occupied trip explicitly refuses retarget") + expect(prepared.get(&"routes",{}).get(&"guest_replans",[]).size()==1,"one actual guest destination requires replan") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(SLOT) + expect(not preview.get(&"ok",false),"formal migration review rejects occupied retarget") + var result: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(not result.get(&"ok",false) and result.get(&"code",&"")==&"DIMENSION_MIGRATION_REJECTED" and result.get(&"details",{}).get(&"rolled_back",false),"formal batch refuses and rolls back isolated candidate") + expect(var_to_bytes(before)==var_to_bytes(runtime.create_snapshot()),"entire live world unchanged after all three migration paths") + expect(package_hashes()==packages,"all original and real preexisting backup files unchanged") + write_proof(MODE+"-"+label+"-refusal.var",{&"prepared":prepared,&"preview":preview,&"result":result,&"packages":packages}) + capture(label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42588)[&"valid"],"canonical current initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"own fresh evidence directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived definition") + for row: Array in [[&"guest_elevator",Vector3i(-8,0,0)],[&"reception",Vector3i(-6,0,0)],[&"premium_room",Vector3i(-6,2,0)],[&"guest_stairs",Vector3i(-7,2,0)],[&"guest_stairs",Vector3i(-7,3,0)]]: + if not command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}).is_success(): + runtime.free();clock.free();state.free() + print("EV retarget refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures);return + clock.advance_minutes(runtime.definition_registry.get_facility(row[0]).build_minutes) + for instance: FacilityInstance in runtime.facility_service.get_instances(): + if instance.definition_id==&"premium_room":room_id=instance.instance_id + expect(not room_id.is_empty(),"normally paid completed old-size room") + expect(not runtime.path_service.find_path(Vector3i(-8,0,0),OLD_TARGET).is_empty(),"real paid old upper entrance reachable through EV and corridors") + var baseline: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,baseline)[&"ok"],"formal old room baseline before real backup creation") + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"current approved footprint registry") + var first: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(first.get(&"ok",false) and first.get(&"backup_created",false),"normal unoccupied migration creates actual verified backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(baseline),"first migration leaves live original geometry") + expect(var_to_bytes(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{}))==var_to_bytes(baseline),"actual backup exactly restores pre-migration baseline") + write_proof("baseline.var",baseline) + command(&"spawn_guest",{&"guest_id":&"p03.retarget.passenger",&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i(-8,0,0),&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"target_facility_id":room_id,&"path_handle":{&"target_cell":OLD_TARGET}}}) + clock.advance_minutes(2) + var trip: Dictionary=runtime.elevators.get_actor_trip(&"guest:p03.retarget.passenger") + expect(not trip.is_empty() and trip.get(&"state",&"")==&"BOARDED","real passenger owns actual boarded EV trip") + var legacy: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,legacy)[&"ok"],"formal original includes occupied trip and old entrance") + write_proof("legacy.var",legacy);write_proof("identity.var",{&"room_id":room_id,&"serial":serial,&"request_id":trip.get(&"request_id",&"")}) + copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("original/formal")) + copy_package(ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current approved footprint registry") + var identity: Dictionary=read_proof("identity.var");room_id=identity[&"room_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("original/formal"),ProjectSettings.globalize_path(SLOT)) + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX)) + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{})),"separate PID restores real earlier backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("baseline.var")),"whole earlier backup state matches") + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT).get(&"snapshot",{})),"actual original boarded package restores") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole boarded original restored exactly") + capture("checkpoint");refusal("reject1");refusal("reject2") + if MODE=="write":copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("after-refusal/formal")) + expect(runtime.domain_events.subscribe(&"*",&"p03.refusal.uncapped",Callable(self,"observe")),"whole uncapped post-refusal journal") + clock.advance_minutes(1);capture("next1") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(10);capture("final20") + expect(runtime.facility_service.get_instance(room_id).occupied_cells.size()==6,"rejected conversion retains original facility shape") + expect(runtime.elevators.get_actor_trip(&"guest:p03.retarget.passenger").is_empty() and runtime.path_service.get_transit_actor_ids().is_empty(),"original EV trip finishes without orphan transit after refusal") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"post-refusal continuation remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"entire post-refusal journal matches without deletion or replacement") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("EV retarget refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-writer.gd new file mode 100644 index 0000000..85f1fb6 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02-writer.gd @@ -0,0 +1,131 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-native-r02/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +var room_id: StringName +const OLD_TARGET:=Vector3i(-7,3,0) +const SLOT: String="user://p03-EV-refusal/manual" +func package_hashes() -> Dictionary: + var values: Dictionary={} + for suffix: String in ["",SaveService.MIGRATION_BACKUP_SUFFIX]: + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + values[suffix+"/"+name]=FileAccess.get_sha256(ProjectSettings.globalize_path(SLOT+suffix).path_join(name)) + return values +func refusal(label: String) -> void: + var before: Dictionary=runtime.create_snapshot() + var packages: Dictionary=package_hashes() + var prepared: Dictionary=runtime.prepare_facility_dimension_snapshot(room_id) + expect(not prepared.get(&"ok",false) and &"TRANSPORT_REPLAN_REQUIRED" in prepared.get(&"retargeting",{}).get(&"errors",[]),"actual occupied trip explicitly refuses retarget") + expect(prepared.get(&"routes",{}).get(&"guest_replans",[]).size()==1,"one actual guest destination requires replan") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(SLOT) + expect(not preview.get(&"ok",false),"formal migration review rejects occupied retarget") + var result: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(not result.get(&"ok",false) and result.get(&"code",&"")==&"DIMENSION_MIGRATION_REJECTED" and result.get(&"details",{}).get(&"rolled_back",false),"formal batch refuses and rolls back isolated candidate") + expect(var_to_bytes(before)==var_to_bytes(runtime.create_snapshot()),"entire live world unchanged after all three migration paths") + expect(package_hashes()==packages,"all original and real preexisting backup files unchanged") + write_proof(MODE+"-"+label+"-refusal.var",{&"prepared":prepared,&"preview":preview,&"result":result,&"packages":packages}) + capture(label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42588)[&"valid"],"canonical current initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"own fresh evidence directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived definition") + for row: Array in [[&"guest_elevator",Vector3i(-8,0,0)],[&"reception",Vector3i(-6,0,0)],[&"premium_room",Vector3i(-6,2,0)],[&"guest_stairs",Vector3i(-7,2,0)],[&"guest_stairs",Vector3i(-7,3,0)]]: + if not command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}).is_success(): + runtime.free();clock.free();state.free() + print("EV retarget refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures);return + clock.advance_minutes(runtime.definition_registry.get_facility(row[0]).build_minutes) + for instance: FacilityInstance in runtime.facility_service.get_instances(): + if instance.definition_id==&"premium_room":room_id=instance.instance_id + expect(not room_id.is_empty(),"normally paid completed old-size room") + expect(not runtime.path_service.find_path(Vector3i(-8,0,0),OLD_TARGET).is_empty(),"real paid old upper entrance reachable through EV and corridors") + var baseline: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,baseline)[&"ok"],"formal old room baseline before real backup creation") + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"current approved footprint registry") + var first: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(first.get(&"ok",false) and first.get(&"backup_created",false),"normal unoccupied migration creates actual verified backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(baseline),"first migration leaves live original geometry") + expect(var_to_bytes(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{}))==var_to_bytes(baseline),"actual backup exactly restores pre-migration baseline") + write_proof("baseline.var",baseline) + command(&"spawn_guest",{&"guest_id":&"p03.retarget.passenger",&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i(-8,0,0),&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"target_facility_id":room_id,&"path_handle":{&"target_cell":OLD_TARGET}}}) + clock.advance_minutes(2) + var trip: Dictionary=runtime.elevators.get_actor_trip(&"guest:p03.retarget.passenger") + expect(not trip.is_empty() and trip.get(&"state",&"")==&"BOARDED","real passenger owns actual boarded EV trip") + var legacy: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,legacy)[&"ok"],"formal original includes occupied trip and old entrance") + write_proof("legacy.var",legacy);write_proof("identity.var",{&"room_id":room_id,&"serial":serial,&"request_id":trip.get(&"request_id",&"")}) + copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("original/formal")) + copy_package(ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current approved footprint registry") + var identity: Dictionary=read_proof("identity.var");room_id=identity[&"room_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("original/formal"),ProjectSettings.globalize_path(SLOT)) + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX)) + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{})),"separate PID restores real earlier backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("baseline.var")),"whole earlier backup state matches") + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT).get(&"snapshot",{})),"actual original boarded package restores") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole boarded original restored exactly") + capture("checkpoint");refusal("reject1");refusal("reject2") + if MODE=="write":copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("after-refusal/formal")) + expect(runtime.domain_events.subscribe(&"*",&"p03.refusal.uncapped",Callable(self,"observe")),"whole uncapped post-refusal journal") + clock.advance_minutes(1);capture("next1") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(10);capture("final20") + expect(runtime.facility_service.get_instance(room_id).occupied_cells.size()==6,"rejected conversion retains original facility shape") + expect(runtime.elevators.get_actor_trip(&"guest:p03.retarget.passenger").is_empty() and runtime.path_service.get_transit_actor_ids().is_empty(),"original EV trip finishes without orphan transit after refusal") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"post-refusal continuation remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"entire post-refusal journal matches without deletion or replacement") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("EV retarget refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02.py b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02.py new file mode 100644 index 0000000..1debf9a --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-EV-retarget-refusal-native-r02.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-EV-retarget-refusal-prep-r02') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'EV retarget refusal formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'EV retarget refusal formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal changed-entrance migration refusal with actual paid old room and boarded passenger; actual earlier successful migration backup retained; separate-PID whole original/backup and post-refusal continuation. Operations OFF public fixture passenger; no Main OS/rescue/logistics/full migration acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-reader.gd new file mode 100644 index 0000000..ff83740 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-reader.gd @@ -0,0 +1,143 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +var room_id: StringName +const OLD_TARGET:=Vector3i(-7,3,1) +const SLOT: String="user://p03-batch-later-refusal/manual" +func package_hashes() -> Dictionary: + var values: Dictionary={} + for suffix: String in ["",SaveService.MIGRATION_BACKUP_SUFFIX]: + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + values[suffix+"/"+name]=FileAccess.get_sha256(ProjectSettings.globalize_path(SLOT+suffix).path_join(name)) + return values +func refusal(label: String) -> void: + var before: Dictionary=runtime.create_snapshot() + var packages: Dictionary=package_hashes() + var first: Dictionary=runtime.prepare_facility_dimension_snapshot(job_id) + expect(first.get(&"ok",false),"first paid legacy job is independently migratable before later refusal") + var prepared: Dictionary=runtime.prepare_all_facility_dimension_snapshots() + expect(not prepared.get(&"ok",false) and prepared.get(&"facility_id",&"")==room_id and prepared.get(&"rolled_back",false),"actual second-target rejection rolls back earlier applied job") + expect(prepared.get(&"details",{}).get(&"routes",{}).get(&"errors",[]).any(func(error: Variant):return error is Dictionary and error.get(&"code",&"")==&"TASK_DESTINATION_CHANGED"),"real old upper-entry task specifically refuses lost destination") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(SLOT) + expect(not preview.get(&"ok",false),"formal preview rejects later target") + var result: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(not result.get(&"ok",false) and result.get(&"code",&"")==&"DIMENSION_MIGRATION_REJECTED" and result.get(&"details",{}).get(&"rolled_back",false),"formal batch refuses and rolls back isolated candidate") + expect(var_to_bytes(before)==var_to_bytes(runtime.create_snapshot()),"entire live world unchanged after all three migration paths") + expect(package_hashes()==packages,"all original and real preexisting backup files unchanged") + write_proof(MODE+"-"+label+"-refusal.var",{&"first":first,&"prepared":prepared,&"preview":preview,&"result":result,&"packages":packages}) + capture(label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42588)[&"valid"],"canonical current initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"own fresh evidence directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://tests/fixtures/legacy_staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived definition") + for row: Array in [[&"warehouse",Vector3i(-6,0,1)],[&"service_stairs",Vector3i(-7,1,1)],[&"service_stairs",Vector3i(-7,2,1)],[&"service_stairs",Vector3i(-7,3,1)],[&"staff_dormitory",Vector3i(-6,2,1)],[&"reception",Vector3i(-6,0,0)],[&"guest_stairs",Vector3i(4,1,0)],[&"guest_stairs",Vector3i(4,2,0)],[&"guest_stairs",Vector3i(4,3,0)]]: + if not command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}).is_success(): + runtime.free();clock.free();state.free() + print("Batch later refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures);return + clock.advance_minutes(runtime.definition_registry.get_facility(row[0]).build_minutes) + for instance: FacilityInstance in runtime.facility_service.get_instances(): + if instance.definition_id==&"staff_dormitory":room_id=instance.instance_id + expect(not room_id.is_empty(),"normally paid completed archived dormitory") + if not command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}).is_success():runtime.free();clock.free();state.free();quit(1);return + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid first-target partial job") + if job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var baseline: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,baseline)[&"ok"],"formal old room baseline before real backup creation") + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + paths.erase("res://tests/fixtures/legacy_staff_dormitory.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"current approved footprint registry") + var first: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(first.get(&"ok",false) and first.get(&"backup_created",false),"normal unconstrained two-target migration creates actual verified backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(baseline),"first migration leaves live original geometry") + expect(var_to_bytes(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{}))==var_to_bytes(baseline),"actual backup exactly restores pre-migration baseline") + write_proof("baseline.var",baseline) + expect(command(&"register_staff",{&"staff_id":&"batch_maintainer",&"role_id":&"porter",&"options":{&"current_cell":Vector3i(-7,1,1),&"state":StaffRuntime.State.AVAILABLE}}).is_success(),"public worker for actual old-entry task") + expect(runtime.staff_service.create_task(&"maintenance",10,clock.absolute_minute,{&"target_entity_id":room_id,&"target_cell":OLD_TARGET,&"estimated_minutes":30},&"batch_old_entry_task").is_success(),"public actual old-entry maintenance task") + expect(runtime.staff_service.assign_task_to_staff(&"batch_old_entry_task",&"batch_maintainer",clock.absolute_minute).is_success(),"public real task owner assignment") + clock.advance_minutes(1) + var task: StaffTask=runtime.staff_service.get_task(&"batch_old_entry_task") + expect(not task.is_terminal() and task.assigned_staff_id==&"batch_maintainer" and runtime.staff_service.get_staff(&"batch_maintainer").current_task_id==task.task_id,"real old-entry work remains in flight at formal save") + var legacy: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,legacy)[&"ok"],"formal original includes partial job and real upper-entry task") + write_proof("legacy.var",legacy);write_proof("identity.var",{&"room_id":room_id,&"serial":serial,&"job_id":job_id,&"task_id":&"batch_old_entry_task"}) + copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("original/formal")) + copy_package(ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + else: + paths.append("res://data/facilities/expansion/premium_room.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current approved footprint registry") + var identity: Dictionary=read_proof("identity.var");room_id=identity[&"room_id"];job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("original/formal"),ProjectSettings.globalize_path(SLOT)) + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX)) + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{})),"separate PID restores real earlier backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("baseline.var")),"whole earlier backup state matches") + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT).get(&"snapshot",{})),"actual original batch-source package restores") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole original batch source restored exactly") + capture("checkpoint");refusal("reject1");refusal("reject2") + if MODE=="write":copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("after-refusal/formal")) + expect(runtime.domain_events.subscribe(&"*",&"p03.refusal.uncapped",Callable(self,"observe")),"whole uncapped post-refusal journal") + clock.advance_minutes(1);capture("next1") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + expect(runtime.facility_service.get_instance(room_id).occupied_cells.size()==8,"later rejected dorm retains entire original footprint") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==6,"earlier rolled-back job completes with its original legacy footprint") + expect(runtime.staff_service.get_task(&"batch_old_entry_task").state==StaffTask.State.COMPLETED and runtime.staff_service.get_staff(&"batch_maintainer").current_cell==OLD_TARGET and runtime.staff_service.get_staff(&"batch_maintainer").current_task_id.is_empty(),"actual original maintenance reaches old entry and finishes without orphan work") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"post-refusal continuation remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"entire post-refusal journal matches without deletion or replacement") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Batch later refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-writer.gd new file mode 100644 index 0000000..5ee30f5 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02-writer.gd @@ -0,0 +1,143 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-native-r02/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +var room_id: StringName +const OLD_TARGET:=Vector3i(-7,3,1) +const SLOT: String="user://p03-batch-later-refusal/manual" +func package_hashes() -> Dictionary: + var values: Dictionary={} + for suffix: String in ["",SaveService.MIGRATION_BACKUP_SUFFIX]: + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + values[suffix+"/"+name]=FileAccess.get_sha256(ProjectSettings.globalize_path(SLOT+suffix).path_join(name)) + return values +func refusal(label: String) -> void: + var before: Dictionary=runtime.create_snapshot() + var packages: Dictionary=package_hashes() + var first: Dictionary=runtime.prepare_facility_dimension_snapshot(job_id) + expect(first.get(&"ok",false),"first paid legacy job is independently migratable before later refusal") + var prepared: Dictionary=runtime.prepare_all_facility_dimension_snapshots() + expect(not prepared.get(&"ok",false) and prepared.get(&"facility_id",&"")==room_id and prepared.get(&"rolled_back",false),"actual second-target rejection rolls back earlier applied job") + expect(prepared.get(&"details",{}).get(&"routes",{}).get(&"errors",[]).any(func(error: Variant):return error is Dictionary and error.get(&"code",&"")==&"TASK_DESTINATION_CHANGED"),"real old upper-entry task specifically refuses lost destination") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(SLOT) + expect(not preview.get(&"ok",false),"formal preview rejects later target") + var result: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(not result.get(&"ok",false) and result.get(&"code",&"")==&"DIMENSION_MIGRATION_REJECTED" and result.get(&"details",{}).get(&"rolled_back",false),"formal batch refuses and rolls back isolated candidate") + expect(var_to_bytes(before)==var_to_bytes(runtime.create_snapshot()),"entire live world unchanged after all three migration paths") + expect(package_hashes()==packages,"all original and real preexisting backup files unchanged") + write_proof(MODE+"-"+label+"-refusal.var",{&"first":first,&"prepared":prepared,&"preview":preview,&"result":result,&"packages":packages}) + capture(label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42588)[&"valid"],"canonical current initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"own fresh evidence directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://tests/fixtures/legacy_staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived definition") + for row: Array in [[&"warehouse",Vector3i(-6,0,1)],[&"service_stairs",Vector3i(-7,1,1)],[&"service_stairs",Vector3i(-7,2,1)],[&"service_stairs",Vector3i(-7,3,1)],[&"staff_dormitory",Vector3i(-6,2,1)],[&"reception",Vector3i(-6,0,0)],[&"guest_stairs",Vector3i(4,1,0)],[&"guest_stairs",Vector3i(4,2,0)],[&"guest_stairs",Vector3i(4,3,0)]]: + if not command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}).is_success(): + runtime.free();clock.free();state.free() + print("Batch later refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures);return + clock.advance_minutes(runtime.definition_registry.get_facility(row[0]).build_minutes) + for instance: FacilityInstance in runtime.facility_service.get_instances(): + if instance.definition_id==&"staff_dormitory":room_id=instance.instance_id + expect(not room_id.is_empty(),"normally paid completed archived dormitory") + if not command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}).is_success():runtime.free();clock.free();state.free();quit(1);return + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid first-target partial job") + if job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var baseline: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,baseline)[&"ok"],"formal old room baseline before real backup creation") + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + paths.erase("res://tests/fixtures/legacy_staff_dormitory.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"current approved footprint registry") + var first: Dictionary=runtime.migrate_facility_dimensions_at_path(SLOT) + expect(first.get(&"ok",false) and first.get(&"backup_created",false),"normal unconstrained two-target migration creates actual verified backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(baseline),"first migration leaves live original geometry") + expect(var_to_bytes(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{}))==var_to_bytes(baseline),"actual backup exactly restores pre-migration baseline") + write_proof("baseline.var",baseline) + expect(command(&"register_staff",{&"staff_id":&"batch_maintainer",&"role_id":&"porter",&"options":{&"current_cell":Vector3i(-7,1,1),&"state":StaffRuntime.State.AVAILABLE}}).is_success(),"public worker for actual old-entry task") + expect(runtime.staff_service.create_task(&"maintenance",10,clock.absolute_minute,{&"target_entity_id":room_id,&"target_cell":OLD_TARGET,&"estimated_minutes":30},&"batch_old_entry_task").is_success(),"public actual old-entry maintenance task") + expect(runtime.staff_service.assign_task_to_staff(&"batch_old_entry_task",&"batch_maintainer",clock.absolute_minute).is_success(),"public real task owner assignment") + clock.advance_minutes(1) + var task: StaffTask=runtime.staff_service.get_task(&"batch_old_entry_task") + expect(not task.is_terminal() and task.assigned_staff_id==&"batch_maintainer" and runtime.staff_service.get_staff(&"batch_maintainer").current_task_id==task.task_id,"real old-entry work remains in flight at formal save") + var legacy: Dictionary=runtime.create_snapshot() + expect(SaveService.save_snapshot(SLOT,legacy)[&"ok"],"formal original includes partial job and real upper-entry task") + write_proof("legacy.var",legacy);write_proof("identity.var",{&"room_id":room_id,&"serial":serial,&"job_id":job_id,&"task_id":&"batch_old_entry_task"}) + copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("original/formal")) + copy_package(ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + else: + paths.append("res://data/facilities/expansion/premium_room.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current approved footprint registry") + var identity: Dictionary=read_proof("identity.var");room_id=identity[&"room_id"];job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("original/formal"),ProjectSettings.globalize_path(SLOT)) + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX)) + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT+SaveService.MIGRATION_BACKUP_SUFFIX).get(&"snapshot",{})),"separate PID restores real earlier backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("baseline.var")),"whole earlier backup state matches") + expect(runtime.restore_snapshot(SaveService.load_snapshot(SLOT).get(&"snapshot",{})),"actual original batch-source package restores") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole original batch source restored exactly") + capture("checkpoint");refusal("reject1");refusal("reject2") + if MODE=="write":copy_package(ProjectSettings.globalize_path(SLOT),PAIR_ROOT.path_join("after-refusal/formal")) + expect(runtime.domain_events.subscribe(&"*",&"p03.refusal.uncapped",Callable(self,"observe")),"whole uncapped post-refusal journal") + clock.advance_minutes(1);capture("next1") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + expect(runtime.facility_service.get_instance(room_id).occupied_cells.size()==8,"later rejected dorm retains entire original footprint") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==6,"earlier rolled-back job completes with its original legacy footprint") + expect(runtime.staff_service.get_task(&"batch_old_entry_task").state==StaffTask.State.COMPLETED and runtime.staff_service.get_staff(&"batch_maintainer").current_cell==OLD_TARGET and runtime.staff_service.get_staff(&"batch_maintainer").current_task_id.is_empty(),"actual original maintenance reaches old entry and finishes without orphan work") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"post-refusal continuation remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"entire post-refusal journal matches without deletion or replacement") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Batch later refusal formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02.py b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02.py new file mode 100644 index 0000000..ee3149a --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-batch-later-refusal-native-r02.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-batch-later-refusal-prep-r02') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Batch later refusal formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Batch later refusal formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal later-target rejection and whole two-target rollback, actual paid partial premium job and completed old dorm with real assigned upper-entry task; real earlier backup unchanged and separate-PID whole continuation. Operations OFF public worker fixture, no Main OS or full migration acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks') if phases else None}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-reader.gd new file mode 100644 index 0000000..ac416c0 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-reader.gd @@ -0,0 +1,143 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var original_requests: Dictionary={} +var arrivals: Dictionary={} +var arrival_errors: Array[String]=[] +const GOAL:=Vector3i(0,1,0) +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void: + journal.append(event.to_dictionary()) + if event.event_type==&"ELEVATOR_ARRIVED": + var request_id: StringName=event.payload[&"request_id"] + if not original_requests.has(request_id):arrival_errors.append("unexpected request") + arrivals[request_id]=int(arrivals.get(request_id,0))+1 + if event.payload[&"cell"]!=GOAL or event.payload.get(&"emergency",false):arrival_errors.append("wrong arrival") +func advance(minutes: int) -> void: + for step: int in range(minutes): + clock.advance_minutes(1) + for guest: GuestRuntime in runtime.guest_service.get_guests(): + if guest.current_cell==GOAL: + expect(runtime.guest_service.begin_leaving(guest.guest_id,clock.absolute_minute,&"P03_GOAL_REACHED").get(&"ok",false),"actual arrival begins normal departure") + expect(runtime.guest_service.despawn_guest(guest.guest_id,clock.absolute_minute).get(&"ok",false),"actual completed passenger leaves normal lifecycle") +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + command(&"build_facility",{&"definition_id":&"guest_elevator",&"origin":Vector3i.ZERO}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_elevator").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + for index: int in range(5): + command(&"spawn_guest",{&"guest_id":StringName("p03.inflight.passenger.%d"%index),&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i.ZERO,&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"path_handle":{&"target_cell":GOAL}}}) + clock.advance_minutes(2) + var car: Dictionary=runtime.elevators.get_report()[&"shafts"][0] + expect(car[&"phase"]==&"BOARDING" and car[&"passenger_count"]==4 and car[&"waiting_count"]==1,"actual four boarded passengers and one queued passenger at save") + expect(runtime.path_service.get_current_density(Vector3i.ZERO)==1 and runtime.path_service.get_transit_actor_ids().size()==4,"real cabin seats excluded from floor density") + for trip: Dictionary in runtime.elevators.get_report()[&"trips"]:original_requests[trip[&"request_id"]]=trip[&"actor_id"] + expect(original_requests.size()==5,"all five actual request IDs saved") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial,&"original_requests":original_requests}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"];original_requests=identity[&"original_requests"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + advance(1);capture("next1") + advance(1);capture("next2") + advance(8);capture("next10") + advance(150);capture("final160") + var exactly_once:=arrivals.size()==5 and arrival_errors.is_empty() + for request_id: StringName in original_requests:exactly_once=exactly_once and arrivals.get(request_id,0)==1 + expect(exactly_once,"all five migrated actual EV request IDs arrive exactly once without emergency") + expect(runtime.guest_service.get_guests().is_empty() and runtime.elevators.get_report()[&"trips"].is_empty() and runtime.path_service.get_transit_actor_ids().is_empty(),"no orphan passenger seat trip or path transit after actual arrivals") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Inflight EV dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-writer.gd new file mode 100644 index 0000000..bb6aae0 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01-writer.gd @@ -0,0 +1,143 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-native-r01/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var original_requests: Dictionary={} +var arrivals: Dictionary={} +var arrival_errors: Array[String]=[] +const GOAL:=Vector3i(0,1,0) +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void: + journal.append(event.to_dictionary()) + if event.event_type==&"ELEVATOR_ARRIVED": + var request_id: StringName=event.payload[&"request_id"] + if not original_requests.has(request_id):arrival_errors.append("unexpected request") + arrivals[request_id]=int(arrivals.get(request_id,0))+1 + if event.payload[&"cell"]!=GOAL or event.payload.get(&"emergency",false):arrival_errors.append("wrong arrival") +func advance(minutes: int) -> void: + for step: int in range(minutes): + clock.advance_minutes(1) + for guest: GuestRuntime in runtime.guest_service.get_guests(): + if guest.current_cell==GOAL: + expect(runtime.guest_service.begin_leaving(guest.guest_id,clock.absolute_minute,&"P03_GOAL_REACHED").get(&"ok",false),"actual arrival begins normal departure") + expect(runtime.guest_service.despawn_guest(guest.guest_id,clock.absolute_minute).get(&"ok",false),"actual completed passenger leaves normal lifecycle") +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + command(&"build_facility",{&"definition_id":&"guest_elevator",&"origin":Vector3i.ZERO}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_elevator").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + for index: int in range(5): + command(&"spawn_guest",{&"guest_id":StringName("p03.inflight.passenger.%d"%index),&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i.ZERO,&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"path_handle":{&"target_cell":GOAL}}}) + clock.advance_minutes(2) + var car: Dictionary=runtime.elevators.get_report()[&"shafts"][0] + expect(car[&"phase"]==&"BOARDING" and car[&"passenger_count"]==4 and car[&"waiting_count"]==1,"actual four boarded passengers and one queued passenger at save") + expect(runtime.path_service.get_current_density(Vector3i.ZERO)==1 and runtime.path_service.get_transit_actor_ids().size()==4,"real cabin seats excluded from floor density") + for trip: Dictionary in runtime.elevators.get_report()[&"trips"]:original_requests[trip[&"request_id"]]=trip[&"actor_id"] + expect(original_requests.size()==5,"all five actual request IDs saved") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial,&"original_requests":original_requests}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"];original_requests=identity[&"original_requests"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + advance(1);capture("next1") + advance(1);capture("next2") + advance(8);capture("next10") + advance(150);capture("final160") + var exactly_once:=arrivals.size()==5 and arrival_errors.is_empty() + for request_id: StringName in original_requests:exactly_once=exactly_once and arrivals.get(request_id,0)==1 + expect(exactly_once,"all five migrated actual EV request IDs arrive exactly once without emergency") + expect(runtime.guest_service.get_guests().is_empty() and runtime.elevators.get_report()[&"trips"].is_empty() and runtime.path_service.get_transit_actor_ids().is_empty(),"no orphan passenger seat trip or path transit after actual arrivals") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Inflight EV dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01.py b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01.py new file mode 100644 index 0000000..64c0e24 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-EV-dimension-native-r01.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-EV-dimension-prep-r01') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Inflight EV dimension formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Inflight EV dimension formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal legacy-dimension migration with four actual boarded passengers and one queued passenger plus paid concurrent construction; separate-PID original backup and migrated full continuation; Operations OFF public guest inputs; changed destination rejection, Main OS input, rescue/logistics and whole migration remain unaccepted','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-reader.gd new file mode 100644 index 0000000..7f1a291 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-reader.gd @@ -0,0 +1,121 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + command(&"spawn_guest",{&"guest_id":&"p03.inflight.guest",&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i(4,0,0),&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"path_handle":{&"target_cell":Vector3i(4,3,0)}}}) + clock.advance_minutes(1) + var guest: GuestRuntime=runtime.guest_service.get_guest(&"p03.inflight.guest") + expect(guest!=null and guest.current_cell==Vector3i(4,0,0) and guest.state==GuestRuntime.State.MOVING,"actual partial staircase travel at save time") + var legacy: Dictionary=runtime.create_snapshot() + expect(legacy[&"systems"][&"runtime"][&"movement_credits"].size()==1 and legacy[&"systems"][&"runtime"][&"movement_credits"][0][&"credit"]==1000,"actual fractional movement credit saved") + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.guest_service.get_guest(&"p03.inflight.guest").current_cell==Vector3i(4,1,0),"real half-step finishes exactly once after migration") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Inflight dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-writer.gd new file mode 100644 index 0000000..19ae59c --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01-writer.gd @@ -0,0 +1,121 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-native-r01/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + command(&"spawn_guest",{&"guest_id":&"p03.inflight.guest",&"guest_type_id":&"traveler",&"gold":100,&"options":{&"current_cell":Vector3i(4,0,0),&"state":GuestRuntime.State.MOVING,&"state_entered_at":clock.absolute_minute-1,&"planned_exit_at":clock.absolute_minute+2000,&"path_handle":{&"target_cell":Vector3i(4,3,0)}}}) + clock.advance_minutes(1) + var guest: GuestRuntime=runtime.guest_service.get_guest(&"p03.inflight.guest") + expect(guest!=null and guest.current_cell==Vector3i(4,0,0) and guest.state==GuestRuntime.State.MOVING,"actual partial staircase travel at save time") + var legacy: Dictionary=runtime.create_snapshot() + expect(legacy[&"systems"][&"runtime"][&"movement_credits"].size()==1 and legacy[&"systems"][&"runtime"][&"movement_credits"][0][&"credit"]==1000,"actual fractional movement credit saved") + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.guest_service.get_guest(&"p03.inflight.guest").current_cell==Vector3i(4,1,0),"real half-step finishes exactly once after migration") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Inflight dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01.py b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01.py new file mode 100644 index 0000000..54b0b20 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-inflight-dimension-native-r01.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-inflight-dimension-prep-r01') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Inflight dimension formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Inflight dimension formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal legacy-dimension migration, real paid concurrent construction and fractional guest stair travel; separate-PID original backup and migrated continuation; Operations OFF controlled guest input, no Main OS input, rescue/logistics/occupied EV/whole original acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-reader.gd new file mode 100644 index 0000000..6f1aabb --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-reader.gd @@ -0,0 +1,151 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + if not result.is_success():runtime.free();clock.free();state.free();quit(1) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for row: Array in [[&"warehouse",Vector3i(-8,0,1)],[&"kitchen",Vector3i(2,0,1)],[&"staff_door",Vector3i(0,0,1)]]: + command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}) + clock.advance_minutes(180) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + if job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var warehouse: FacilityInstance + var kitchen: FacilityInstance + for room: FacilityInstance in runtime.facility_service.get_instances(): + if room.definition_id==&"warehouse":warehouse=room + if room.definition_id==&"kitchen":kitchen=room + expect(warehouse!=null and kitchen!=null,"real paid supply endpoints completed") + if warehouse==null or kitchen==null:runtime.free();clock.free();state.free();quit(1);return + command(&"hire_staff_candidate",{&"candidate_id":&"staff_gina"}) + command(&"set_staff_work_assignment",{&"staff_id":&"staff_gina",&"facility_id":warehouse.instance_id,&"template_id":&"DAY"}) + command(&"purchase_supplies",{&"warehouse_id":warehouse.instance_id,&"item_id":SupplyCatalog.RAW_FOOD,&"quantity":8}) + command(&"set_kitchen_production",{&"facility_id":kitchen.instance_id,&"enabled":true,&"target_stock":4}) + var loaded:=false + for minute: int in range(60): + clock.advance_minutes(1) + var worker: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + if not worker.carried_inventory_id.is_empty():loaded=true;break + expect(loaded,"normally hired porter actually picks up purchased cargo") + if not loaded:runtime.free();clock.free();state.free();quit(1);return + var porter: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + expect(runtime.inventory_service.total_quantity(porter.carried_inventory_id,SupplyCatalog.RAW_FOOD)==4,"actual cargo contains four paid food units from an eight-unit purchase") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(SupplyLogisticsBridge.validate_crosslinks(runtime.logistics_requests,runtime.staff_service,runtime.inventory_service,runtime.facility_service),"actual cargo crosslinks after first continued minute") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var porter: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + var delivered:=0 + for request: LogisticsRequest in runtime.logistics_requests.values(): + if request.state==LogisticsRequest.State.COMPLETED and request.item_requirements.has(SupplyCatalog.RAW_FOOD):delivered+=1 + expect(delivered==2 and porter.carried_inventory_id.is_empty(),"two real four-unit shipments complete and releases porter cargo") + var kitchen: FacilityInstance + for room: FacilityInstance in runtime.facility_service.get_instances(): + if room.definition_id==&"kitchen":kitchen=room + expect(kitchen!=null and runtime.inventory_service.total_quantity(kitchen.local_inventory_id,SupplyCatalog.RAW_FOOD)==8,"all eight purchased units actually arrive at kitchen") + expect(SupplyLogisticsBridge.validate_crosslinks(runtime.logistics_requests,runtime.staff_service,runtime.inventory_service,runtime.facility_service),"all final physical cargo ownership crosslinks valid") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Logistics dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-writer.gd new file mode 100644 index 0000000..668c36d --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02-writer.gd @@ -0,0 +1,151 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-native-r02/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + if not result.is_success():runtime.free();clock.free();state.free();quit(1) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for row: Array in [[&"warehouse",Vector3i(-8,0,1)],[&"kitchen",Vector3i(2,0,1)],[&"staff_door",Vector3i(0,0,1)]]: + command(&"build_facility",{&"definition_id":row[0],&"origin":row[1]}) + clock.advance_minutes(180) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + if job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var warehouse: FacilityInstance + var kitchen: FacilityInstance + for room: FacilityInstance in runtime.facility_service.get_instances(): + if room.definition_id==&"warehouse":warehouse=room + if room.definition_id==&"kitchen":kitchen=room + expect(warehouse!=null and kitchen!=null,"real paid supply endpoints completed") + if warehouse==null or kitchen==null:runtime.free();clock.free();state.free();quit(1);return + command(&"hire_staff_candidate",{&"candidate_id":&"staff_gina"}) + command(&"set_staff_work_assignment",{&"staff_id":&"staff_gina",&"facility_id":warehouse.instance_id,&"template_id":&"DAY"}) + command(&"purchase_supplies",{&"warehouse_id":warehouse.instance_id,&"item_id":SupplyCatalog.RAW_FOOD,&"quantity":8}) + command(&"set_kitchen_production",{&"facility_id":kitchen.instance_id,&"enabled":true,&"target_stock":4}) + var loaded:=false + for minute: int in range(60): + clock.advance_minutes(1) + var worker: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + if not worker.carried_inventory_id.is_empty():loaded=true;break + expect(loaded,"normally hired porter actually picks up purchased cargo") + if not loaded:runtime.free();clock.free();state.free();quit(1);return + var porter: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + expect(runtime.inventory_service.total_quantity(porter.carried_inventory_id,SupplyCatalog.RAW_FOOD)==4,"actual cargo contains four paid food units from an eight-unit purchase") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(SupplyLogisticsBridge.validate_crosslinks(runtime.logistics_requests,runtime.staff_service,runtime.inventory_service,runtime.facility_service),"actual cargo crosslinks after first continued minute") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var porter: StaffRuntime=runtime.staff_service.get_staff(&"staff_gina") + var delivered:=0 + for request: LogisticsRequest in runtime.logistics_requests.values(): + if request.state==LogisticsRequest.State.COMPLETED and request.item_requirements.has(SupplyCatalog.RAW_FOOD):delivered+=1 + expect(delivered==2 and porter.carried_inventory_id.is_empty(),"two real four-unit shipments complete and releases porter cargo") + var kitchen: FacilityInstance + for room: FacilityInstance in runtime.facility_service.get_instances(): + if room.definition_id==&"kitchen":kitchen=room + expect(kitchen!=null and runtime.inventory_service.total_quantity(kitchen.local_inventory_id,SupplyCatalog.RAW_FOOD)==8,"all eight purchased units actually arrive at kitchen") + expect(SupplyLogisticsBridge.validate_crosslinks(runtime.logistics_requests,runtime.staff_service,runtime.inventory_service,runtime.facility_service),"all final physical cargo ownership crosslinks valid") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Logistics dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02.py b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02.py new file mode 100644 index 0000000..b25da44 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-logistics-dimension-native-r02.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-logistics-dimension-prep-r02') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Logistics dimension formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Logistics dimension formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless formal migration with real paid supplies, normally hired porter and actual cargo plus concurrent paid legacy construction; whole separate-PID continuation and backup; Operations OFF, unchanged actual supply endpoints, no Main OS or full acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-reader.gd new file mode 100644 index 0000000..f93541e --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-reader.gd @@ -0,0 +1,129 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var dorm_job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://tests/fixtures/legacy_staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"warehouse",&"origin":Vector3i(-6,0,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"warehouse").build_minutes) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"service_stairs",&"origin":Vector3i(-7,y,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"service_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + command(&"build_facility",{&"definition_id":&"staff_dormitory",&"origin":Vector3i(-6,2,1)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + if job.definition_id==&"staff_dormitory" and not job.is_terminal():dorm_job_id=job.job_id + expect(not job_id.is_empty() and not dorm_job_id.is_empty(),"two real paid archived construction jobs are simultaneously in flight") + if job_id.is_empty() or dorm_job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var legacy: Dictionary=runtime.create_snapshot() + var original_jobs: Array=[runtime.construction_service.get_job(job_id).create_snapshot(),runtime.construction_service.get_job(dorm_job_id).create_snapshot()] + expect(original_jobs[0][&"reserved_cells"].size()==6 and original_jobs[1][&"reserved_cells"].size()==8 and original_jobs.all(func(job: Dictionary):return job[&"work_units_done"]==70000 and job[&"progress"]==466 and job[&"state"]=="BUILDING"),"actual two seven-minute jobs retain paid progress and old14 reserved cells") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_jobs) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + paths.erase("res://tests/fixtures/legacy_staff_dormitory.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and preview.get(&"facility_ids",[]).size()==2 and preview.get(&"facility_ids",[]).has(job_id) and preview.get(&"facility_ids",[]).has(dorm_job_id) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"dorm_job_id":dorm_job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];dorm_job_id=identity[&"dorm_job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Array=read_proof("original-job.var") + for index: int in range(2): + var id: StringName=job_id if index==0 else dorm_job_id + var actual: Dictionary=runtime.construction_service.get_job(id).create_snapshot() + expect(actual[&"reserved_cells"].size()==(4 if index==0 else 2) and actual[&"progress"]==original[index][&"progress"] and actual[&"construction_cost"]==original[index][&"construction_cost"] and actual[&"started_at"]==original[index][&"started_at"],"batch preserves actual paid work and changes each footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.construction_service.get_job(job_id).work_units_done==80000 and runtime.construction_service.get_job(dorm_job_id).work_units_done==80000,"both real jobs continue one minute exactly") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + for id: StringName in [job_id,dorm_job_id]: + var completed: ConstructionJob=runtime.construction_service.get_job(id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==(4 if id==job_id else 2),"each actual resized job completes with its own facility owner") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Multiple jobs dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-writer.gd new file mode 100644 index 0000000..3ac7a7f --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01-writer.gd @@ -0,0 +1,129 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-native-r01/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var dorm_job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://tests/fixtures/legacy_staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"warehouse",&"origin":Vector3i(-6,0,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"warehouse").build_minutes) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"service_stairs",&"origin":Vector3i(-7,y,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"service_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + command(&"build_facility",{&"definition_id":&"staff_dormitory",&"origin":Vector3i(-6,2,1)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + if job.definition_id==&"staff_dormitory" and not job.is_terminal():dorm_job_id=job.job_id + expect(not job_id.is_empty() and not dorm_job_id.is_empty(),"two real paid archived construction jobs are simultaneously in flight") + if job_id.is_empty() or dorm_job_id.is_empty():runtime.free();clock.free();state.free();quit(1);return + var legacy: Dictionary=runtime.create_snapshot() + var original_jobs: Array=[runtime.construction_service.get_job(job_id).create_snapshot(),runtime.construction_service.get_job(dorm_job_id).create_snapshot()] + expect(original_jobs[0][&"reserved_cells"].size()==6 and original_jobs[1][&"reserved_cells"].size()==8 and original_jobs.all(func(job: Dictionary):return job[&"work_units_done"]==70000 and job[&"progress"]==466 and job[&"state"]=="BUILDING"),"actual two seven-minute jobs retain paid progress and old14 reserved cells") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_jobs) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + paths.erase("res://tests/fixtures/legacy_staff_dormitory.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and preview.get(&"facility_ids",[]).size()==2 and preview.get(&"facility_ids",[]).has(job_id) and preview.get(&"facility_ids",[]).has(dorm_job_id) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"dorm_job_id":dorm_job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres");paths.append("res://data/facilities/expansion/staff_dormitory.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];dorm_job_id=identity[&"dorm_job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Array=read_proof("original-job.var") + for index: int in range(2): + var id: StringName=job_id if index==0 else dorm_job_id + var actual: Dictionary=runtime.construction_service.get_job(id).create_snapshot() + expect(actual[&"reserved_cells"].size()==(4 if index==0 else 2) and actual[&"progress"]==original[index][&"progress"] and actual[&"construction_cost"]==original[index][&"construction_cost"] and actual[&"started_at"]==original[index][&"started_at"],"batch preserves actual paid work and changes each footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.construction_service.get_job(job_id).work_units_done==80000 and runtime.construction_service.get_job(dorm_job_id).work_units_done==80000,"both real jobs continue one minute exactly") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + for id: StringName in [job_id,dorm_job_id]: + var completed: ConstructionJob=runtime.construction_service.get_job(id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==(4 if id==job_id else 2),"each actual resized job completes with its own facility owner") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Multiple jobs dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01.py b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01.py new file mode 100644 index 0000000..bbdffe3 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-multiple-jobs-dimension-native-r01.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-multiple-jobs-dimension-prep-r01') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Multiple jobs dimension formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Multiple jobs dimension formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal legacy-dimension migration, real paid concurrent construction and fractional guest stair travel; separate-PID original backup and migrated continuation; Operations OFF controlled guest input, no Main OS input, rescue/logistics/occupied EV/whole original acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main()) diff --git a/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-reader.gd b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-reader.gd new file mode 100644 index 0000000..3dc1df9 --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-reader.gd @@ -0,0 +1,134 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair" +const MODE := "read" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + command(&"build_facility",{&"definition_id":&"infirmary",&"origin":Vector3i(-6,0,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"infirmary").build_minutes) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + for id: StringName in [&"patient",&"porter"]: + command(&"register_staff",{&"staff_id":id,&"role_id":&"porter",&"options":{&"current_cell":Vector3i(3,0,1) if id==&"patient" else Vector3i(5,0,1),&"health":0 if id==&"patient" else 100,&"state":StaffRuntime.State.AVAILABLE,&"role_tags":[&"medic"],&"permitted_task_tags":[&"rescue"]}}) + var carrying:=false + for minute: int in range(6): + clock.advance_minutes(1) + for task: StaffTask in runtime.staff_service.get_tasks(): + if task.task_type==&"rescue_transport" and task.state==StaffTask.State.MOVING:carrying=true + if carrying:break + expect(carrying,"actual rescue transport started without forced movement") + if not carrying:runtime.free();clock.free();state.free();quit(1);return + var patient: StaffRuntime=runtime.staff_service.get_staff(&"patient") + var porter: StaffRuntime=runtime.staff_service.get_staff(&"porter") + expect(patient.current_cell==porter.current_cell and patient.health==0,"actual carried patient shares porter cell without healing") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.staff_service.get_staff(&"patient").health==0,"first post-migration minute does not skip actual transport") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var patient: StaffRuntime=runtime.staff_service.get_staff(&"patient") + expect(patient.health==100 and patient.state==StaffRuntime.State.OFF_DUTY and patient.current_cell.x<0 and patient.current_cell.z==1,"actual carrier transport and treatment finish after migrated continuation") + expect(runtime.staff_service.validate_invariants()[&"ok"],"rescue ownership invariants preserved") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Rescue dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-writer.gd b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-writer.gd new file mode 100644 index 0000000..eac4c9c --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01-writer.gd @@ -0,0 +1,134 @@ +extends SceneTree +const PAIR_ROOT := "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-native-r01/migration-pair" +const MODE := "write" +var checks:=0 +var failures:=0 +var runtime: Variant +var clock: Variant +var state: Variant +var job_id: StringName +var serial:=0 +var journal: Array[Dictionary]=[] +func _initialize() -> void:call_deferred("run") +func expect(ok: bool,label: String) -> void: + checks+=1 + print(("PASS " if ok else "FAIL ")+label) + if not ok:failures+=1;push_error("P03_INFLIGHT "+label) +func write_proof(name: String,value: Variant) -> void: + var path:=PAIR_ROOT.path_join(name) + expect(not FileAccess.file_exists(path),"fresh proof "+name) + var file:=FileAccess.open(path,FileAccess.WRITE) + expect(file!=null,"open proof "+name) + if file!=null:file.store_buffer(var_to_bytes(value));file.close() +func read_proof(name: String) -> Variant: + var data:=FileAccess.get_file_as_bytes(PAIR_ROOT.path_join(name)) + expect(not data.is_empty(),"read whole proof "+name) + return bytes_to_var(data) +func command(kind: StringName,payload: Dictionary) -> CommandResult: + serial+=1 + var result: CommandResult=runtime.submit_command(kind,payload,&"player",&"",0,-1,StringName("p03.inflight.%d"%serial)) + expect(result.is_success(),"public paid command "+String(kind)+": "+result.message) + return result +func copy_package(source: String,destination: String) -> void: + expect(DirAccess.make_dir_recursive_absolute(destination)==OK,"package destination "+destination) + for name: String in [SaveService.WORLD_FILE,SaveService.MANIFEST_FILE,SaveService.THUMBNAIL_FILE,SaveService.JOURNAL_FILE]: + var original:=FileAccess.get_file_as_bytes(source.path_join(name)) + expect(not original.is_empty() and not FileAccess.file_exists(destination.path_join(name)),"fresh formal member "+name) + var file:=FileAccess.open(destination.path_join(name),FileAccess.WRITE) + expect(file!=null,"open formal member "+name) + if file!=null:file.store_buffer(original);file.close() + expect(original==FileAccess.get_file_as_bytes(destination.path_join(name)),"complete formal member "+name) +func observe(event: SimulationDomainEvent) -> void:journal.append(event.to_dictionary()) +func capture(label: String) -> void: + var snapshot: Dictionary=runtime.create_snapshot() + write_proof(MODE+"-"+label+".var",snapshot) + if MODE=="read":expect(var_to_bytes(snapshot)==var_to_bytes(read_proof("write-"+label+".var")),"entire separate-PID snapshot "+label) +func run() -> void: + root.get_node("GameClock").set_paused(true);root.get_node("GameClock").set_process(false) + root.get_node("SimulationRuntime").configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false}) + 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(runtime.initialize(clock,state,42586)[&"valid"],"current canonical initialization") + clock.set_paused(true);runtime.configure_save_policy({&"enabled":false,&"daily_checkpoint_enabled":false,&"auto_migrate":false}) + var paths: Array[String]=FacilityCatalog.FACILITY_PATHS+FacilityCatalog.INFRASTRUCTURE_FACILITY_PATHS+FacilityCatalog.RESCUE_FACILITY_PATHS + var slot: String="user://p03-inflight-dimension/manual" + if MODE=="write": + expect(DirAccess.make_dir_recursive_absolute(PAIR_ROOT)==OK,"fresh external proof directory") + paths.append("res://tests/fixtures/legacy_premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"explicit archived dimension fixture") + command(&"build_facility",{&"definition_id":&"infirmary",&"origin":Vector3i(-6,0,1)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"infirmary").build_minutes) + for y: int in [1,2,3]: + command(&"build_facility",{&"definition_id":&"guest_stairs",&"origin":Vector3i(4,y,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"guest_stairs").build_minutes) + command(&"build_facility",{&"definition_id":&"reception",&"origin":Vector3i(-6,0,0)}) + clock.advance_minutes(runtime.definition_registry.get_facility(&"reception").build_minutes) + command(&"build_facility",{&"definition_id":&"premium_room",&"origin":Vector3i(-6,2,0)}) + clock.advance_minutes(7) + for job: ConstructionJob in runtime.construction_service.get_jobs(): + if job.definition_id==&"premium_room" and not job.is_terminal():job_id=job.job_id + expect(not job_id.is_empty(),"real paid old-size construction is in flight") + for id: StringName in [&"patient",&"porter"]: + command(&"register_staff",{&"staff_id":id,&"role_id":&"porter",&"options":{&"current_cell":Vector3i(3,0,1) if id==&"patient" else Vector3i(5,0,1),&"health":0 if id==&"patient" else 100,&"state":StaffRuntime.State.AVAILABLE,&"role_tags":[&"medic"],&"permitted_task_tags":[&"rescue"]}}) + var carrying:=false + for minute: int in range(6): + clock.advance_minutes(1) + for task: StaffTask in runtime.staff_service.get_tasks(): + if task.task_type==&"rescue_transport" and task.state==StaffTask.State.MOVING:carrying=true + if carrying:break + expect(carrying,"actual rescue transport started without forced movement") + if not carrying:runtime.free();clock.free();state.free();quit(1);return + var patient: StaffRuntime=runtime.staff_service.get_staff(&"patient") + var porter: StaffRuntime=runtime.staff_service.get_staff(&"porter") + expect(patient.current_cell==porter.current_cell and patient.health==0,"actual carried patient shares porter cell without healing") + var legacy: Dictionary=runtime.create_snapshot() + var original_job: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(original_job[&"progress"]>0 and original_job[&"reserved_cells"].size()==6,"old-size job is partly paid and reserved") + expect(SaveService.save_snapshot(slot,legacy)[&"ok"],"write actual formal source") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("legacy/formal")) + write_proof("legacy.var",legacy);write_proof("original-job.var",original_job) + paths.erase("res://tests/fixtures/legacy_premium_room.tres");paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"switch to current dimensions without fake graph changes") + var preview: Dictionary=runtime.preview_facility_dimensions_at_path(slot) + expect(preview.get(&"ok",false) and var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration preview preserves entire moving live world") + var migrated: Dictionary=runtime.migrate_facility_dimensions_at_path(slot,&"",String(preview.get(&"source_digest",""))) + expect(migrated.get(&"ok",false) and migrated.get(&"backup_created",false),"formal migration makes verified original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(legacy),"migration never advances live guest or job") + var backup:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(backup.get(&"ok",false) and var_to_bytes(backup.get(&"snapshot",{}))==var_to_bytes(legacy),"backup contains entire old moving state") + copy_package(ProjectSettings.globalize_path(slot),PAIR_ROOT.path_join("migrated/formal")) + copy_package(ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX),PAIR_ROOT.path_join("backup/formal")) + write_proof("identity.var",{&"job_id":job_id,&"serial":serial}) + else: + paths.append("res://data/facilities/expansion/premium_room.tres") + expect(runtime.definition_registry.rebuild_from_paths(paths)[&"valid"],"reader current dimension registry") + var identity: Dictionary=read_proof("identity.var");job_id=identity[&"job_id"];serial=identity[&"serial"] + copy_package(PAIR_ROOT.path_join("backup/formal"),ProjectSettings.globalize_path(slot+SaveService.MIGRATION_BACKUP_SUFFIX)) + copy_package(PAIR_ROOT.path_join("migrated/formal"),ProjectSettings.globalize_path(slot)) + var old:=SaveService.load_snapshot(slot+SaveService.MIGRATION_BACKUP_SUFFIX) + expect(old.get(&"ok",false) and runtime.restore_snapshot(old.get(&"snapshot",{})),"separate PID restores actual original backup") + expect(var_to_bytes(runtime.create_snapshot())==var_to_bytes(read_proof("legacy.var")),"whole old guest/job backup replay is exact") + var loaded:=SaveService.load_snapshot(slot) + expect(loaded.get(&"ok",false) and runtime.restore_snapshot(loaded.get(&"snapshot",{})),"actual migrated formal package restores") + var original: Dictionary=read_proof("original-job.var") + var actual: Dictionary=runtime.construction_service.get_job(job_id).create_snapshot() + expect(actual[&"reserved_cells"].size()==4 and actual[&"progress"]==original[&"progress"] and actual[&"construction_cost"]==original[&"construction_cost"] and actual[&"started_at"]==original[&"started_at"],"migration preserves actual paid work and changes footprint only") + expect(not runtime.get_operations_report().get(&"enabled",false),"scope remains controlled Operations OFF") + expect(runtime.domain_events.subscribe(&"*",&"p03.inflight.uncapped",Callable(self,"observe")),"subscribe whole uncapped continuation journal") + capture("checkpoint") + clock.advance_minutes(1);capture("next1") + expect(runtime.staff_service.get_staff(&"patient").health==0,"first post-migration minute does not skip actual transport") + clock.advance_minutes(1);capture("next2") + clock.advance_minutes(8);capture("next10") + clock.advance_minutes(150);capture("final160") + var patient: StaffRuntime=runtime.staff_service.get_staff(&"patient") + expect(patient.health==100 and patient.state==StaffRuntime.State.OFF_DUTY and patient.current_cell.x<0 and patient.current_cell.z==1,"actual carrier transport and treatment finish after migrated continuation") + expect(runtime.staff_service.validate_invariants()[&"ok"],"rescue ownership invariants preserved") + var completed: ConstructionJob=runtime.construction_service.get_job(job_id) + expect(completed.state==ConstructionJob.State.COMPLETED and runtime.facility_service.get_instance(completed.facility_instance_id).occupied_cells.size()==4,"resized paid job completes exactly once in actual Runtime") + expect(runtime.restore_snapshot(runtime.create_snapshot()),"final moving and construction world remains canonical") + write_proof(MODE+"-events.var",journal) + if MODE=="read":expect(var_to_bytes(journal)==var_to_bytes(read_proof("write-events.var")),"all uncapped continuation events match without deletion or remapping") + write_proof(MODE+"-result.var",{&"pid":OS.get_process_id(),&"checks":checks,&"failures":failures,&"job_id":job_id,&"events":journal.size()}) + runtime.free();clock.free();state.free() + print("Rescue dimension formal "+MODE+": %d checks, %d failures"%[checks,failures]);quit(failures) diff --git a/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01.py b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01.py new file mode 100644 index 0000000..edf804a --- /dev/null +++ b/docs/spec/inputs/p08-02/p03-current1299-rescue-dimension-native-r01.py @@ -0,0 +1,68 @@ +from pathlib import Path +import hashlib,importlib.util,json,sys,os +sys.dont_write_bytecode=True +R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');A=R/'artifacts/original-completion-2026-10-02';P=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p03-current1299-rescue-dimension-prep-r01') +TEST='tests/s3/test_runtime_staff_assignment.gd' +READER='tests/s6/test_runtime_snapshot_serialization.gd' +def module(n,p): + s=importlib.util.spec_from_file_location(n,p);m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def main(): + assert len(sys.argv)==2 + mode='formal-cross-pid';out=Path(sys.argv[1]);assert out.parent==A and not out.exists() and str(out)==json.loads((P/'preparation.json').read_bytes())['planned_output'] + r=module('role_formal_literal_runner',R/'tools/run_all_tests.py') + seal=r.read(P/'input-seal.json') + assert set(str(p.relative_to(P)) for p in P.rglob('*') if p.is_file())==set(seal['files'])|{'input-seal.json','preparation.json'} + for n,v in seal['files'].items():assert Path(v['path'])==P/n and r.sha(v['path'])==v['sha256'] and Path(v['path']).stat().st_size==v['bytes'] + for name in ['writer.gd','reader.gd']: + lines=(P/name).read_text().splitlines();bindings=[line[len('const PAIR_ROOT := '):]for line in lines if line.startswith('const PAIR_ROOT := ')] + assert len(bindings)==1 and json.loads(bindings[0])==str(out/'migration-pair') and not (out/'migration-pair').exists() + root_before=r.source_refs(R);assert len(root_before)==1299 + adopted=r.read(A/'p03-current1299-defense-empty-two-ref-source-adoption-r01/source-after.json') + assert {n:v['sha256']for n,v in root_before.items()}==adopted + refs=dict(root_before);refs[TEST]=seal['files']['writer.gd'];refs[READER]=seal['files']['reader.gd'] + for n,v in refs.items():assert Path(v['path']).stat().st_size==v['bytes'] and r.sha(v['path'])==v['sha256'] + 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')} + outer=module('bath_literal_owned_outer',r.SUPPORT/'owned_outer.py');assert not outer.native.helper['live_engines']() + engine='/Applications/Godot.app/Contents/MacOS/Godot' + out.mkdir();stage=out/'stage';stage.mkdir();(out/'starters').mkdir();(out/'bootstrap').mkdir() + for n,v in r.read(r.SUPPORT/'bootstrap-scripts.json').items(): + data=v['text'].encode();assert hashlib.sha256(data).hexdigest()==v['sha256'];(out/'bootstrap'/n).write_bytes(data) + protected=r.default_player(R);expected={n:{'bytes':v['bytes'],'sha256':v['sha256']}for n,v in refs.items()} + selected={'root_before':root_before,'map':{n:v['sha256']for n,v in refs.items()},'timeout':180} + for n,v in refs.items(): + p=stage/n;p.parent.mkdir(parents=True,exist_ok=True);r.copy_source(Path(v['path']),p) + assert r.inventory(stage,stage=True)==expected + public=(stage/'project.godot').read_bytes();paths=['res://'+n for n in sorted(refs) if n.endswith('.gd')];r.write(out/'parse-paths.json',paths) + markers=module('bath_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]={'test':TEST,'template':'Rescue dimension formal write: checks, failures','required':True} + contracts[READER]={'test':READER,'template':'Rescue dimension formal read: checks, failures','required':True} + policy=r.read(r.SUPPORT/'suite-policy.json');assert TEST not in policy['suite_policies'] and READER not in policy['suite_policies'] + r.write(out/'runner-input.json',{'mode':mode,'owner_pid':os.getpid(),'wrapper_sha256':r.sha(__file__),'runner_sha256':r.sha(R/'tools/run_all_tests.py'),'selected_source_map':selected['map'],'source_before':root_before,'default_player':protected,'doc4_before':docs,'actual_full':False,'source_adoption':False}) + diagnostics=module('bath_literal_diagnostics',r.SUPPORT/'diagnostic_gate.py');owners=module('bath_literal_owners',r.SUPPORT/'ordinary_proof_gate.py');audio=module('bath_literal_audio',r.SUPPORT/'audio_evidence_gate.py') + phases=[];previous={};error=None;formal_before=None + try: + for phase,test in [('import',None),('parse',None),('writer',TEST),('reader',READER)]: + if phase=='writer':assert not (out/'migration-pair').exists() + if phase=='reader':assert r.inventory(out/'migration-pair')==pair_before + row=r.execute_phase(engine,stage,out,phase,test,selected,expected,previous,policy,contracts,paths,public,protected,R,outer,markers,diagnostics,owners,audio);phases.append(row) + print(json.dumps({'phase':phase,'passed':row['passed'],'checks':row.get('reported_checks'),'error':row.get('validation_error'),'guard_error':row.get('guard_error')}),flush=True) + r.require(row['passed'],'strict phase failure stops without retry') + if phase=='writer': + pair_before=r.inventory(out/'migration-pair');formal_before={n:v for n,v in pair_before.items()if '/formal/'in n} + assert len(formal_before)==12 + r.write(out/'actual-formal-before-reader.json',formal_before) + if phase=='reader': + after=r.inventory(out/'migration-pair');assert {n:v for n,v in after.items()if '/formal/'in n}==formal_before + assert all(after[n]==v for n,v in pair_before.items()) + r.write(out/'actual-formal-after-reader.json',{n:v for n,v in after.items()if '/formal/'in n}) + except BaseException as caught:error=type(caught).__name__+': '+str(caught) + finally:cleanup,cleanup_errors=outer.finish_captured(outer.OWNED) + passed=error is None and not cleanup_errors and len(phases)==4 and all(x['passed'] for x in phases) and all(x['engine_ended'] for x in cleanup) + assert r.source_refs(R)==root_before 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) + r.write(out/'runner-ended.json',{'mode':mode,'passed':passed,'phases':phases,'cleanup':cleanup,'cleanup_errors':cleanup_errors,'error':error,'whole_source_unchanged':True,'whole_default_profile_unchanged':True,'doc4_unchanged':True,'source_adoption':False,'normal_GUI_accepted':False,'full_regression_accepted':False,'formal_cross_PID_accepted':False,'actual_captured_PIDs':[p.pid for p in outer.OWNED],'actual_native_processes':len(outer.OWNED),'actual_checks':sum(p.get('reported_checks',0)for p in phases if p['test']) if passed else None,'formal_reader_evidence_scope':'headless direct formal migration with actual rescue transport, patient and carrier references plus paid old-size concurrent construction; whole separate-PID continuation and backup; controlled initial injury, Operations OFF, no Main OS, changed-clinic destination, logistics or whole acceptance','native_Windows_accepted':False,'whole_goal_accepted':False}) + print(json.dumps({'mode':mode,'passed':passed,'error':error,'actual_native':len(phases),'actual_checks':phases[-1].get('reported_checks')}),flush=True) + return 0 if passed else 1 +if __name__=='__main__':raise SystemExit(main())