P08-03: 配置の通常操作受入
This commit is contained in:
@@ -57,7 +57,7 @@ and saves outside private profiles. The mock collector supplies a controlled
|
|||||||
disk-space input; the production disk-admission gate is unchanged.
|
disk-space input; the production disk-admission gate is unchanged.
|
||||||
Current native/OS/full regression/review/integration remain pending.
|
Current native/OS/full regression/review/integration remain pending.
|
||||||
|
|
||||||
## r02 whole-model operation repair (current candidate)
|
## r02 whole-model operation repair (retained earlier submission)
|
||||||
|
|
||||||
The retained submitted HEAD is `c2b59f04f94dda0a61991ec3bb7f0e946196f995`.
|
The retained submitted HEAD is `c2b59f04f94dda0a61991ec3bb7f0e946196f995`.
|
||||||
`NATIVE_R02_READER_OPERATION_DELTA.json` and `native-r02-reader-stderr.log`
|
`NATIVE_R02_READER_OPERATION_DELTA.json` and `native-r02-reader-stderr.log`
|
||||||
@@ -134,3 +134,35 @@ No reused P08-02 PASS is claimed for changed sources. P08-01 and the whole
|
|||||||
P08 package remain open. Windows same-distribution/device evidence remains
|
P08 package remain open. Windows same-distribution/device evidence remains
|
||||||
open; Mac/Linux results cannot substitute for it. No outside-scope service
|
open; Mac/Linux results cannot substitute for it. No outside-scope service
|
||||||
defect or required permission change has been demonstrated by this worker.
|
defect or required permission change has been demonstrated by this worker.
|
||||||
|
|
||||||
|
## r04 initial OS load oracle repair (current submitted candidate)
|
||||||
|
|
||||||
|
The supplied OS_R04_INITIAL_LOAD_ORACLE_FINDING.json and
|
||||||
|
os-r04-writer-engine.log identify the bootstrap-only simple equality failure.
|
||||||
|
The registered build contains 2153 files; its complete read-only inventory is
|
||||||
|
recorded in registered-r04-evidence-manifest.json. Historical raw/PASS evidence
|
||||||
|
is unchanged and no changed-source acceptance is inherited.
|
||||||
|
|
||||||
|
Passive setup now uses the existing verify_operation oracle with bootstrap-
|
||||||
|
prefix. Complete typed JSON and raw Variant formal, checkpoint (postload),
|
||||||
|
returned Dictionary, expected-operation and operation-actual files, plus a
|
||||||
|
separate comparison JSON, remain distinct from writer/reader final proofs.
|
||||||
|
The same source-defined notification logic checks all state, previous events,
|
||||||
|
next event ID/counter and every payload field; no event masking or omissions.
|
||||||
|
The checker binds bootstrap formal/returned models to the recorded read-only
|
||||||
|
inspection and first Runtime return, reconstructs the expectation and checks
|
||||||
|
whole typed state and raw expected/actual identity.
|
||||||
|
|
||||||
|
Static inspection within the allowed fixture/recorder scope found no other
|
||||||
|
postload-versus-formal simple equality oracle. Remaining exact comparisons
|
||||||
|
check presave/formal identity or read-only preservation and are intentional.
|
||||||
|
Seven added semantic controls cover missing/extra notifications, counter,
|
||||||
|
payload and unknown-field drift, missing raw and overwritten bootstrap raw;
|
||||||
|
all 49 earlier tests remain. Final actual results and exact source/input
|
||||||
|
hashes are recorded in local-validation.json and local-source-manifest.json.
|
||||||
|
Only pure Python validation uses the ordinary 900-second subprocess timeout.
|
||||||
|
|
||||||
|
Root native/OS collection for this candidate, final full regression after
|
||||||
|
freeze, separate Opus review and integration/current final verification remain
|
||||||
|
open. All five conditions and the 30/88 denominator are unchanged. No Runtime,
|
||||||
|
UI, SaveService, collector, specification or historical evidence edits.
|
||||||
|
|||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"candidate": "8e3d79d5f2068fbe71c0ef7252540548d75b3d1e",
|
||||||
|
"native_phase_proof": "complete PASS reused with source/input SHA match, headless repeat0",
|
||||||
|
"OS_writer_pid": 75569,
|
||||||
|
"actual_OS_actions": [
|
||||||
|
"normal manual load",
|
||||||
|
"open normal build palette",
|
||||||
|
"horizontal palette reveal"
|
||||||
|
],
|
||||||
|
"completed_acks": [
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"active_request_at_stop": 4,
|
||||||
|
"native_diagnostic": "OS initial formal model exact",
|
||||||
|
"source": "passive_placement.gd setup line78 still compares postload live snapshot directly to saved snapshot; ordinary read adds SAVE_RECOVERY_LOADED",
|
||||||
|
"required_scope": "reuse existing placement.gd verify_operation for initial normal OS load; keep full saved/postload states and exact event/counter/payload checks. No Runtime/UI/collector/spec edits or event masking.",
|
||||||
|
"all_owned_ended": true,
|
||||||
|
"cleanup_errors": [],
|
||||||
|
"guard_errors": [],
|
||||||
|
"acceptance": false,
|
||||||
|
"unit_credit": 0,
|
||||||
|
"updated_utc": "2026-10-13T19:44:52.545919+00:00"
|
||||||
|
}
|
||||||
+5327
File diff suppressed because it is too large
Load Diff
+37
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"task_id": "P08-03",
|
||||||
|
"started_at": "2026-10-13T19:19:51.362993+00:00",
|
||||||
|
"ended_at": "2026-10-13T19:20:39.117228+00:00",
|
||||||
|
"syntax": {
|
||||||
|
"method": "compile(source, filename, exec); no pyc",
|
||||||
|
"files": {
|
||||||
|
"tools/run_p08_normal_placement.py": "191831b4f684bdd7e99b3be6038c15a6830f544d17c941869b1c2a8fbe4a2aa3",
|
||||||
|
"tools/check_p08_normal_placement_evidence.py": "5baea283760e04f23abefcf576f9a3e8230b96ed30d82569528dcd211a6032cf",
|
||||||
|
"tools/test_p08_normal_placement_evidence.py": "ebf6c0ef2c32dc8fac61d570a7fea99c1ac2499b92399db32afec26147b9d84c",
|
||||||
|
"tests/fixtures/p08-03/checker_fixture.py": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e"
|
||||||
|
},
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
"checker_tests": {
|
||||||
|
"argv": [
|
||||||
|
"/Applications/Xcode.app/Contents/Developer/usr/bin/python3",
|
||||||
|
"-B",
|
||||||
|
"tools/test_p08_normal_placement_evidence.py"
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"log": "repair-r02-local-checker-tests.log",
|
||||||
|
"log_sha256": "0cb0e9deddcd9d90883a9416ecfed346bf1f4337a51247d08a39d49160313129",
|
||||||
|
"synthetic_only": true,
|
||||||
|
"test_count": 49,
|
||||||
|
"retained_previous_tests": 35,
|
||||||
|
"new_semantic_tests": 14
|
||||||
|
},
|
||||||
|
"local_source_manifest": "local-source-manifest.json",
|
||||||
|
"local_source_manifest_sha256": "25b7492044046b5c8498f968b648392b592d42e266b2ff6fdb4773e52ba3e451",
|
||||||
|
"source_and_inputs_unchanged_during_tests": true,
|
||||||
|
"git_diff_check": "pass",
|
||||||
|
"native_engines_started": 0,
|
||||||
|
"OS_operations": 0,
|
||||||
|
"full_regression_executed": false,
|
||||||
|
"acceptance": "pending"
|
||||||
|
}
|
||||||
@@ -18,29 +18,32 @@
|
|||||||
},
|
},
|
||||||
"final_local_files_sha256": {
|
"final_local_files_sha256": {
|
||||||
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json": "f59f01f65c795057117fda753706a6200928d4954af901fc965cf1a7c09232b5",
|
"docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json": "f59f01f65c795057117fda753706a6200928d4954af901fc965cf1a7c09232b5",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/CONDITION_MATRIX.md": "e62103e73c9703f92c9361506aa7f7546a01c95b18eef25f827d249e33fb3a86",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/CONDITION_MATRIX.md": "8ddca3cdd8c1049018baf48c67d1ca90b8f1c59a386e625c2d187f196497e2ba",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_COLLECTION.md": "79944e586fab86096de003fb0f6ad99b2af7f5d6c3043668edc0f9b39addc218",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/ROOT_COLLECTION.md": "79944e586fab86096de003fb0f6ad99b2af7f5d6c3043668edc0f9b39addc218",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd": "21855e3b32263eb98127202467b770cb1334fa70c6b357825a122db385ffa8d6",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd": "21855e3b32263eb98127202467b770cb1334fa70c6b357825a122db385ffa8d6",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
||||||
"scenes/main/main.gd": "e015e18fee8c114ddce39e46a04be139e694a4e3569855065576c0c909b94fc6",
|
"scenes/main/main.gd": "e015e18fee8c114ddce39e46a04be139e694a4e3569855065576c0c909b94fc6",
|
||||||
"scenes/main/world_preview.gd": "2f0e417ae2ff1745062bdbdcec74b3b058cfcffbbd9001ca3e6a62cd23efb47d",
|
"scenes/main/world_preview.gd": "2f0e417ae2ff1745062bdbdcec74b3b058cfcffbbd9001ca3e6a62cd23efb47d",
|
||||||
"tests/fixtures/p08-03/checker_fixture.py": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e",
|
"tests/fixtures/p08-03/checker_fixture.py": "062333148bfb570f2191317f1634e5dd1495cf3602221fc9a054dd9243597669",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd": "c17a1874fa585ec1ea892b51860f0997176df084b08751ea41e27ea5bc1189e8",
|
"tests/fixtures/p08-03/passive_placement.gd": "e55ce365aec82f763860564d5065e8a4d3f36b717c92e28fc48ac60657366992",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
||||||
"tests/fixtures/p08-03/placement.gd": "d47b54189be76b9c8e3a6f99c9ecdcbeb75b790cf4fb03d180be9654baa2548f",
|
"tests/fixtures/p08-03/placement.gd": "299016b07b5e4eab0c269a2efde45908b7ca38bf1259abae3272453f3b7304eb",
|
||||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||||
"tests/ui/test_p08_normal_placement_ops.gd": "734f4f85d0b0fc45dc31fc23502425b911635667dabc0341ba0d88b0107f4405",
|
"tests/ui/test_p08_normal_placement_ops.gd": "734f4f85d0b0fc45dc31fc23502425b911635667dabc0341ba0d88b0107f4405",
|
||||||
"tests/ui/test_p08_normal_placement_ops.gd.uid": "7d168ac50ca82ae1979da31c467f9a5020ca5ec7616b5bf99294413d85b3b299",
|
"tests/ui/test_p08_normal_placement_ops.gd.uid": "7d168ac50ca82ae1979da31c467f9a5020ca5ec7616b5bf99294413d85b3b299",
|
||||||
"tools/check_p08_normal_placement_evidence.py": "5baea283760e04f23abefcf576f9a3e8230b96ed30d82569528dcd211a6032cf",
|
"tools/check_p08_normal_placement_evidence.py": "7fbc115599782b2b7e98f9df855e72b076580b74f6a17aa255d16f2566fe6285",
|
||||||
"tools/regression/suite-policy.json": "e875e6b05bbac8dfb98c2af007221436fa558ddb8806b6214689830295b32e8d",
|
"tools/regression/suite-policy.json": "e875e6b05bbac8dfb98c2af007221436fa558ddb8806b6214689830295b32e8d",
|
||||||
"tools/run_p08_normal_placement.py": "191831b4f684bdd7e99b3be6038c15a6830f544d17c941869b1c2a8fbe4a2aa3",
|
"tools/run_p08_normal_placement.py": "191831b4f684bdd7e99b3be6038c15a6830f544d17c941869b1c2a8fbe4a2aa3",
|
||||||
"tools/test_p08_normal_placement_evidence.py": "ebf6c0ef2c32dc8fac61d570a7fea99c1ac2499b92399db32afec26147b9d84c",
|
"tools/test_p08_normal_placement_evidence.py": "3a5fb02b944a9eff808458df897574232f9e5609d828031562e93d9920b9cfbb",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040"
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/OS_R04_INITIAL_LOAD_ORACLE_FINDING.json": "6a796bd63f5a16bd0bf0fcf07cec3f4414a5e6704409a79522a2677eae53b417",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/os-r04-writer-engine.log": "f78c28c53460b767e924867f5158787c8497973e6f1c10353cb0f2cb2cbc3a3d",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/registered-r04-evidence-manifest.json": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa"
|
||||||
},
|
},
|
||||||
"executed_source_manifest": {
|
"executed_source_manifest": {
|
||||||
"path": "local-source-manifest.json",
|
"path": "local-source-manifest.json",
|
||||||
"sha256": "25b7492044046b5c8498f968b648392b592d42e266b2ff6fdb4773e52ba3e451",
|
"sha256": "533748d30a8fb7b7e78930cf2c08139e980f75341ba772f062780d2056ec2900",
|
||||||
"source_file_count": 1326,
|
"source_file_count": 1326,
|
||||||
"contains": "Complete final local execution source and immutable/fixture/evidence input map; no material-size omission"
|
"contains": "Complete final local execution source and immutable/fixture/evidence input map; no material-size omission"
|
||||||
},
|
},
|
||||||
@@ -52,23 +55,26 @@
|
|||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
||||||
"docs/spec/acceptance/P08-03.json": "37a6a581b5a9bbe03c07a3a266b03df1f740ff488da33ecd9bd60f5b32f1efe1",
|
"docs/spec/acceptance/P08-03.json": "37a6a581b5a9bbe03c07a3a266b03df1f740ff488da33ecd9bd60f5b32f1efe1",
|
||||||
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||||
"tests/fixtures/p08-03/checker_fixture.py": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e",
|
"tests/fixtures/p08-03/checker_fixture.py": "062333148bfb570f2191317f1634e5dd1495cf3602221fc9a054dd9243597669",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd": "c17a1874fa585ec1ea892b51860f0997176df084b08751ea41e27ea5bc1189e8",
|
"tests/fixtures/p08-03/passive_placement.gd": "e55ce365aec82f763860564d5065e8a4d3f36b717c92e28fc48ac60657366992",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
||||||
"tests/fixtures/p08-03/placement.gd": "d47b54189be76b9c8e3a6f99c9ecdcbeb75b790cf4fb03d180be9654baa2548f",
|
"tests/fixtures/p08-03/placement.gd": "299016b07b5e4eab0c269a2efde45908b7ca38bf1259abae3272453f3b7304eb",
|
||||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R01_FAILURE_AND_SCOPE.json": "afc8dada6451e7e61d6d57abb0d7d040f5abcdb93432c8431c1c920dc4984515",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R01_FAILURE_AND_SCOPE.json": "afc8dada6451e7e61d6d57abb0d7d040f5abcdb93432c8431c1c920dc4984515",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r01-writer-stderr.log": "07fe6cccad7305b2ec88cb91fa79fa22ec9269d7c99d62a1f69971f7c5d22686"
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r01-writer-stderr.log": "07fe6cccad7305b2ec88cb91fa79fa22ec9269d7c99d62a1f69971f7c5d22686",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/OS_R04_INITIAL_LOAD_ORACLE_FINDING.json": "6a796bd63f5a16bd0bf0fcf07cec3f4414a5e6704409a79522a2677eae53b417",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/os-r04-writer-engine.log": "f78c28c53460b767e924867f5158787c8497973e6f1c10353cb0f2cb2cbc3a3d",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/registered-r04-evidence-manifest.json": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa"
|
||||||
},
|
},
|
||||||
"actual_local_validation": {
|
"actual_local_validation": {
|
||||||
"path": "local-validation.json",
|
"path": "local-validation.json",
|
||||||
"sha256": "ce90b9a8dc96b85736555df29d57ebddf3767df7c33043b2e9d39018c38e8729",
|
"sha256": "0b64ffbdab1562797bfbec4956a91aae27e61f5fbb576fb3997a13e6296c584f",
|
||||||
"python_syntax": "pass: four final Python sources compiled in memory",
|
"python_syntax": "pass: four final Python sources compiled in memory",
|
||||||
"checker_mock_tests": 49,
|
"checker_mock_tests": 56,
|
||||||
"checker_mock_exit_code": 0,
|
"checker_mock_exit_code": 0,
|
||||||
"log_sha256": "0cb0e9deddcd9d90883a9416ecfed346bf1f4337a51247d08a39d49160313129",
|
"log_sha256": "e54ecf761ca49aebe01fc1a13367ba01aa0f437ba649b781b1c8feb3a6f8bbc6",
|
||||||
"git_diff_check": "pass"
|
"git_diff_check": "pass"
|
||||||
},
|
},
|
||||||
"conditions": {
|
"conditions": {
|
||||||
@@ -163,6 +169,28 @@
|
|||||||
"new_unknown_native_differences_observed": false,
|
"new_unknown_native_differences_observed": false,
|
||||||
"native_repair_validation": "pending",
|
"native_repair_validation": "pending",
|
||||||
"context_gaps": [],
|
"context_gaps": [],
|
||||||
"historical_R02": "Writer passed and reader failed on c2b59f04; no acceptance or changed-source PASS inherited"
|
"historical_R02": "Writer passed and reader failed on c2b59f04; no acceptance or changed-source PASS inherited",
|
||||||
|
"r04": {
|
||||||
|
"authorities": [
|
||||||
|
"OS_R04_INITIAL_LOAD_ORACLE_FINDING.json",
|
||||||
|
"os-r04-writer-engine.log"
|
||||||
|
],
|
||||||
|
"registered_evidence_file_count": 2153,
|
||||||
|
"inventory_sha256": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa",
|
||||||
|
"changes": [
|
||||||
|
"Initial OS load uses existing strict whole-state source-defined notification oracle with bootstrap prefix",
|
||||||
|
"Bootstrap complete formal/raw/returned/actual/expected/comparison proof files remain separate from final role proofs",
|
||||||
|
"Checker binds initial inspection and Runtime return, independently rebuilds notifications/counters/payload",
|
||||||
|
"Seven new semantic negatives; all previous 49 tests retained"
|
||||||
|
],
|
||||||
|
"same_kind_static_check": "Only bootstrap used simple postload/formal equality within allowed fixture/recorder scope; presave/formal and read-only comparisons retained",
|
||||||
|
"native_OS_full_regression_Opus_review_integration": "pending",
|
||||||
|
"historical_validation_preserved": [
|
||||||
|
"historical-r02-local-validation.json",
|
||||||
|
"historical-r02-local-source-manifest.json"
|
||||||
|
],
|
||||||
|
"context_gaps": [],
|
||||||
|
"worker_timeout_seconds": 900
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-14
@@ -3678,20 +3678,20 @@
|
|||||||
"sha256": "8f150654767de0c66329d7d9e84d306c4fa5a65c918e04fb520b626b39f68334"
|
"sha256": "8f150654767de0c66329d7d9e84d306c4fa5a65c918e04fb520b626b39f68334"
|
||||||
},
|
},
|
||||||
"tests/fixtures/p08-03/checker_fixture.py": {
|
"tests/fixtures/p08-03/checker_fixture.py": {
|
||||||
"bytes": 24737,
|
"bytes": 26845,
|
||||||
"sha256": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e"
|
"sha256": "062333148bfb570f2191317f1634e5dd1495cf3602221fc9a054dd9243597669"
|
||||||
},
|
},
|
||||||
"tests/fixtures/p08-03/passive_placement.gd": {
|
"tests/fixtures/p08-03/passive_placement.gd": {
|
||||||
"bytes": 8799,
|
"bytes": 9146,
|
||||||
"sha256": "c17a1874fa585ec1ea892b51860f0997176df084b08751ea41e27ea5bc1189e8"
|
"sha256": "e55ce365aec82f763860564d5065e8a4d3f36b717c92e28fc48ac60657366992"
|
||||||
},
|
},
|
||||||
"tests/fixtures/p08-03/passive_placement.gd.uid": {
|
"tests/fixtures/p08-03/passive_placement.gd.uid": {
|
||||||
"bytes": 20,
|
"bytes": 20,
|
||||||
"sha256": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3"
|
"sha256": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3"
|
||||||
},
|
},
|
||||||
"tests/fixtures/p08-03/placement.gd": {
|
"tests/fixtures/p08-03/placement.gd": {
|
||||||
"bytes": 21854,
|
"bytes": 21977,
|
||||||
"sha256": "d47b54189be76b9c8e3a6f99c9ecdcbeb75b790cf4fb03d180be9654baa2548f"
|
"sha256": "299016b07b5e4eab0c269a2efde45908b7ca38bf1259abae3272453f3b7304eb"
|
||||||
},
|
},
|
||||||
"tests/fixtures/p08-03/placement.gd.uid": {
|
"tests/fixtures/p08-03/placement.gd.uid": {
|
||||||
"bytes": 20,
|
"bytes": 20,
|
||||||
@@ -5218,8 +5218,8 @@
|
|||||||
"sha256": "928353233bf85436a5aaf8c4f77f3f82472d94b8ad2646cb1b030baf92b3b5dc"
|
"sha256": "928353233bf85436a5aaf8c4f77f3f82472d94b8ad2646cb1b030baf92b3b5dc"
|
||||||
},
|
},
|
||||||
"tools/check_p08_normal_placement_evidence.py": {
|
"tools/check_p08_normal_placement_evidence.py": {
|
||||||
"bytes": 41464,
|
"bytes": 44262,
|
||||||
"sha256": "5baea283760e04f23abefcf576f9a3e8230b96ed30d82569528dcd211a6032cf"
|
"sha256": "7fbc115599782b2b7e98f9df855e72b076580b74f6a17aa255d16f2566fe6285"
|
||||||
},
|
},
|
||||||
"tools/check_p24_selection_evidence.py": {
|
"tools/check_p24_selection_evidence.py": {
|
||||||
"bytes": 14622,
|
"bytes": 14622,
|
||||||
@@ -5298,8 +5298,8 @@
|
|||||||
"sha256": "fd9ef7ec63f53dfd5e04e261606c9303d01a2e6590e22a35fef2e35df1429280"
|
"sha256": "fd9ef7ec63f53dfd5e04e261606c9303d01a2e6590e22a35fef2e35df1429280"
|
||||||
},
|
},
|
||||||
"tools/test_p08_normal_placement_evidence.py": {
|
"tools/test_p08_normal_placement_evidence.py": {
|
||||||
"bytes": 20263,
|
"bytes": 21950,
|
||||||
"sha256": "ebf6c0ef2c32dc8fac61d570a7fea99c1ac2499b92399db32afec26147b9d84c"
|
"sha256": "3a5fb02b944a9eff808458df897574232f9e5609d828031562e93d9920b9cfbb"
|
||||||
},
|
},
|
||||||
"tools/verify_exported_opening.py": {
|
"tools/verify_exported_opening.py": {
|
||||||
"bytes": 1519,
|
"bytes": 1519,
|
||||||
@@ -5314,14 +5314,17 @@
|
|||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/passive_os_placement_recorder.gd.uid": "d7f97560c8bbdfdaed173b2b48261e65b92847bd0493dd1cc2ebb309d0622314",
|
||||||
"docs/spec/acceptance/P08-03.json": "37a6a581b5a9bbe03c07a3a266b03df1f740ff488da33ecd9bd60f5b32f1efe1",
|
"docs/spec/acceptance/P08-03.json": "37a6a581b5a9bbe03c07a3a266b03df1f740ff488da33ecd9bd60f5b32f1efe1",
|
||||||
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
"docs/traceability/original/BASELINE.txt": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a",
|
||||||
"tests/fixtures/p08-03/checker_fixture.py": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e",
|
"tests/fixtures/p08-03/checker_fixture.py": "062333148bfb570f2191317f1634e5dd1495cf3602221fc9a054dd9243597669",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd": "c17a1874fa585ec1ea892b51860f0997176df084b08751ea41e27ea5bc1189e8",
|
"tests/fixtures/p08-03/passive_placement.gd": "e55ce365aec82f763860564d5065e8a4d3f36b717c92e28fc48ac60657366992",
|
||||||
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
"tests/fixtures/p08-03/passive_placement.gd.uid": "f75e3f2d9555c30cee3a1de882f32225fc624565a78a7ef3f5c604325c578ce3",
|
||||||
"tests/fixtures/p08-03/placement.gd": "d47b54189be76b9c8e3a6f99c9ecdcbeb75b790cf4fb03d180be9654baa2548f",
|
"tests/fixtures/p08-03/placement.gd": "299016b07b5e4eab0c269a2efde45908b7ca38bf1259abae3272453f3b7304eb",
|
||||||
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
"tests/fixtures/p08-03/placement.gd.uid": "5caca08c1e627e0ca07e2ab7b13bd82b24a22f77513fe87e30b79023568e1987",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R02_READER_OPERATION_DELTA.json": "60463e735d4f473bdad7b0925c37b9ca71ee34d6f0eb74ea6c07b508b5153e41",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r02-reader-stderr.log": "8079b3dc2ba7b9a9c37fcd9a5a8df0971354027c60def4b95fb15c7310832040",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R01_FAILURE_AND_SCOPE.json": "afc8dada6451e7e61d6d57abb0d7d040f5abcdb93432c8431c1c920dc4984515",
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/NATIVE_R01_FAILURE_AND_SCOPE.json": "afc8dada6451e7e61d6d57abb0d7d040f5abcdb93432c8431c1c920dc4984515",
|
||||||
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r01-writer-stderr.log": "07fe6cccad7305b2ec88cb91fa79fa22ec9269d7c99d62a1f69971f7c5d22686"
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/native-r01-writer-stderr.log": "07fe6cccad7305b2ec88cb91fa79fa22ec9269d7c99d62a1f69971f7c5d22686",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/OS_R04_INITIAL_LOAD_ORACLE_FINDING.json": "6a796bd63f5a16bd0bf0fcf07cec3f4414a5e6704409a79522a2677eae53b417",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/os-r04-writer-engine.log": "f78c28c53460b767e924867f5158787c8497973e6f1c10353cb0f2cb2cbc3a3d",
|
||||||
|
"docs/plans/original-completion-2026-10-02/execution/p08-03/registered-r04-evidence-manifest.json": "6189fb2fe983d11faf96f99d6e21eba550be8e89c083c1277ac2ada9fa50cafa"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,37 +1,38 @@
|
|||||||
{
|
{
|
||||||
"task_id": "P08-03",
|
"task_id": "P08-03",
|
||||||
"started_at": "2026-10-13T19:19:51.362993+00:00",
|
"started_at": "2026-10-13T19:51:22.470024+00:00",
|
||||||
"ended_at": "2026-10-13T19:20:39.117228+00:00",
|
"ended_at": "2026-10-13T19:52:12.939899+00:00",
|
||||||
"syntax": {
|
"syntax": {
|
||||||
"method": "compile(source, filename, exec); no pyc",
|
"method": "compile in memory; no pyc",
|
||||||
"files": {
|
"files": {
|
||||||
"tools/run_p08_normal_placement.py": "191831b4f684bdd7e99b3be6038c15a6830f544d17c941869b1c2a8fbe4a2aa3",
|
"tools/run_p08_normal_placement.py": "191831b4f684bdd7e99b3be6038c15a6830f544d17c941869b1c2a8fbe4a2aa3",
|
||||||
"tools/check_p08_normal_placement_evidence.py": "5baea283760e04f23abefcf576f9a3e8230b96ed30d82569528dcd211a6032cf",
|
"tools/check_p08_normal_placement_evidence.py": "7fbc115599782b2b7e98f9df855e72b076580b74f6a17aa255d16f2566fe6285",
|
||||||
"tools/test_p08_normal_placement_evidence.py": "ebf6c0ef2c32dc8fac61d570a7fea99c1ac2499b92399db32afec26147b9d84c",
|
"tools/test_p08_normal_placement_evidence.py": "3a5fb02b944a9eff808458df897574232f9e5609d828031562e93d9920b9cfbb",
|
||||||
"tests/fixtures/p08-03/checker_fixture.py": "0d12e09e5342a016bc9e61c056b07357e761c29f9d82fbf941ce524f51ff131e"
|
"tests/fixtures/p08-03/checker_fixture.py": "062333148bfb570f2191317f1634e5dd1495cf3602221fc9a054dd9243597669"
|
||||||
},
|
},
|
||||||
"passed": true
|
"passed": true
|
||||||
},
|
},
|
||||||
"checker_tests": {
|
"checker_tests": {
|
||||||
"argv": [
|
"argv": [
|
||||||
"/Applications/Xcode.app/Contents/Developer/usr/bin/python3",
|
"python3",
|
||||||
"-B",
|
"-B",
|
||||||
"tools/test_p08_normal_placement_evidence.py"
|
"tools/test_p08_normal_placement_evidence.py"
|
||||||
],
|
],
|
||||||
|
"timeout_seconds": 900,
|
||||||
"exit_code": 0,
|
"exit_code": 0,
|
||||||
"log": "repair-r02-local-checker-tests.log",
|
"log": "repair-r04-local-checker-tests.log",
|
||||||
"log_sha256": "0cb0e9deddcd9d90883a9416ecfed346bf1f4337a51247d08a39d49160313129",
|
"log_sha256": "e54ecf761ca49aebe01fc1a13367ba01aa0f437ba649b781b1c8feb3a6f8bbc6",
|
||||||
"synthetic_only": true,
|
"synthetic_only": true,
|
||||||
"test_count": 49,
|
"test_count": 56,
|
||||||
"retained_previous_tests": 35,
|
"retained_previous_tests": 49,
|
||||||
"new_semantic_tests": 14
|
"new_semantic_tests": 7
|
||||||
},
|
},
|
||||||
"local_source_manifest": "local-source-manifest.json",
|
|
||||||
"local_source_manifest_sha256": "25b7492044046b5c8498f968b648392b592d42e266b2ff6fdb4773e52ba3e451",
|
|
||||||
"source_and_inputs_unchanged_during_tests": true,
|
"source_and_inputs_unchanged_during_tests": true,
|
||||||
"git_diff_check": "pass",
|
|
||||||
"native_engines_started": 0,
|
"native_engines_started": 0,
|
||||||
"OS_operations": 0,
|
"OS_operations": 0,
|
||||||
"full_regression_executed": false,
|
"full_regression_executed": false,
|
||||||
"acceptance": "pending"
|
"acceptance": "pending",
|
||||||
|
"local_source_manifest": "local-source-manifest.json",
|
||||||
|
"local_source_manifest_sha256": "533748d30a8fb7b7e78930cf2c08139e980f75341ba772f062780d2056ec2900",
|
||||||
|
"git_diff_check": "pass"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Godot Engine v4.7.2.stable.official.ed1daf0bf - https://godotengine.org
|
||||||
|
OpenGL API 4.1 Metal - 90.5 - Compatibility - Using Device: Apple - Apple M4
|
||||||
|
|
||||||
|
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r04/os-pair/writer-request-0001/request.json
|
||||||
|
ERROR: P08 placement: OS initial formal model exact
|
||||||
|
at: push_error (core/variant/variant_utility.cpp:1023)
|
||||||
|
GDScript backtrace (most recent call first):
|
||||||
|
[0] expect (res://tests/fixtures/p08-03/placement.gd:37)
|
||||||
|
[1] setup (res://tests/fixtures/p08-03/passive_placement.gd:78)
|
||||||
|
[2] load_menu (res://tests/fixtures/p08-03/passive_placement.gd:155)
|
||||||
|
[3] request (res://tests/fixtures/p08-03/passive_placement.gd:51)
|
||||||
|
[4] frames (res://tests/fixtures/p08-03/placement.gd:71)
|
||||||
|
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r04/os-pair/writer-request-0002/request.json
|
||||||
|
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r04/os-pair/writer-request-0003/request.json
|
||||||
|
P08_ROOT_CUA_WAIT /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p08-03-native-os-r04/os-pair/writer-request-0004/request.json
|
||||||
+8620
File diff suppressed because it is too large
Load Diff
+5
@@ -0,0 +1,5 @@
|
|||||||
|
........................................................
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Ran 56 tests in 49.916s
|
||||||
|
|
||||||
|
OK
|
||||||
+29
@@ -5,6 +5,7 @@ fabricated unit-test data, never collector output. Semantic corruption tests rep
|
|||||||
their bytes, so they cannot pass merely by detecting a stale artifact checksum.
|
their bytes, so they cannot pass merely by detecting a stale artifact checksum.
|
||||||
"""
|
"""
|
||||||
import copy
|
import copy
|
||||||
|
import json
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@@ -290,6 +291,34 @@ def make(base, source, checker):
|
|||||||
'result':typed({'ok':True,'read_only':True,'snapshot':copy.deepcopy(model)}),
|
'result':typed({'ok':True,'read_only':True,'snapshot':copy.deepcopy(model)}),
|
||||||
'raw_sha256':sha(folder/(inspect_stem+'.var'))})
|
'raw_sha256':sha(folder/(inspect_stem+'.var'))})
|
||||||
put(folder/(role+'-save-results.json'), {'pid':pid,'records':[stem,inspect_stem]})
|
put(folder/(role+'-save-results.json'), {'pid':pid,'records':[stem,inspect_stem]})
|
||||||
|
if method == "native_os":
|
||||||
|
prefix = "writer-bootstrap-"
|
||||||
|
returned = {"ok":True,"operation":"recovery","code":"OK","save_path":"user://saves/manual_ui"}
|
||||||
|
expected = checker.expected_operation(formal_model,returned,"SAVE_RECOVERY_LOADED")
|
||||||
|
for label,value in [("formal-model",formal_model),("returned-result",typed(returned)),
|
||||||
|
("checkpoint",expected),("expected-operation",expected),("operation-actual",expected)]:
|
||||||
|
put(folder/(prefix+label+".json"),value)
|
||||||
|
(folder/(prefix+label+".var")).write_bytes(json.dumps(value,sort_keys=True).encode())
|
||||||
|
records = []
|
||||||
|
for suffix,operation,value in [
|
||||||
|
("0000-bootstrap","runtime_operation",returned),
|
||||||
|
("0000-inspect","initial_inspect",{"ok":True,"read_only":True,"snapshot":copy.deepcopy(model)})]:
|
||||||
|
stem = "writer-save-result-"+suffix
|
||||||
|
(folder/(stem+".var")).write_bytes(b"synthetic bootstrap Dictionary")
|
||||||
|
put(folder/(stem+".json"), {"pid":pids[0],"operation":operation,
|
||||||
|
"requested_path":"user://saves/manual_ui","absolute_path":absolute,"user_data_dir":profile,
|
||||||
|
"result":typed(value),"raw_sha256":sha(folder/(stem+".var"))})
|
||||||
|
records.append(stem)
|
||||||
|
log = json.loads((folder/"writer-save-results.json").read_text())
|
||||||
|
log["records"] = records+log["records"]
|
||||||
|
put(folder/"writer-save-results.json",log)
|
||||||
|
count = len(model["systems"]["runtime"]["domain_events"]["recent_events"])
|
||||||
|
put(folder/(prefix+"operation-comparison.json"), {
|
||||||
|
"pid":pids[0],"delta_kind":"source_defined_notification",
|
||||||
|
"formal_model":prefix+"formal-model","actual_model":prefix+"checkpoint",
|
||||||
|
"expected_model":prefix+"expected-operation","returned_result":typed(returned),
|
||||||
|
"saved_recent_count":count,"expected_recent_count":count+1,"actual_recent_count":count+1,
|
||||||
|
"whole_raw_equal":True})
|
||||||
put(folder/'save.json', {'members': {n: sha(formal/n) for n in checker.MEMBERS},
|
put(folder/'save.json', {'members': {n: sha(formal/n) for n in checker.MEMBERS},
|
||||||
'pid': pids[0], 'cell': target, 'instance_id': 'f4'})
|
'pid': pids[0], 'cell': target, 'instance_id': 'f4'})
|
||||||
row = {'id': 'resume_overlap', 'kind': 'build', 'position': position(target),
|
row = {'id': 'resume_overlap', 'kind': 'build', 'position': position(target),
|
||||||
|
|||||||
+8
-1
@@ -75,7 +75,14 @@ func setup() -> void:
|
|||||||
var stored: Dictionary = SaveService.inspect_snapshot(ProjectSettings.globalize_path(String(main.manual_save_path)))
|
var stored: Dictionary = SaveService.inspect_snapshot(ProjectSettings.globalize_path(String(main.manual_save_path)))
|
||||||
record_save_result("initial_inspect", String(main.manual_save_path), stored)
|
record_save_result("initial_inspect", String(main.manual_save_path), stored)
|
||||||
expect(bool(stored.get("ok", false)), "read-only initial formal inspection")
|
expect(bool(stored.get("ok", false)), "read-only initial formal inspection")
|
||||||
expect(runtime.create_snapshot() == stored.get("snapshot", {}), "OS initial formal model exact")
|
var formal: Dictionary = stored.get("snapshot", {})
|
||||||
|
capture_model("bootstrap-formal-model", formal)
|
||||||
|
capture("bootstrap-checkpoint")
|
||||||
|
expect(not operation_results.is_empty(), "bootstrap returned load Dictionary")
|
||||||
|
if not operation_results.is_empty():
|
||||||
|
var returned: Dictionary = operation_results.back()
|
||||||
|
capture_model("bootstrap-returned-result", returned)
|
||||||
|
verify_operation(formal, returned, &"SAVE_RECOVERY_LOADED", "bootstrap-")
|
||||||
expect(clock.paused, "diagnostic formal fixture starts paused")
|
expect(clock.paused, "diagnostic formal fixture starts paused")
|
||||||
|
|
||||||
func diagnostic_budget() -> void:
|
func diagnostic_budget() -> void:
|
||||||
|
|||||||
Vendored
+8
-8
@@ -343,7 +343,7 @@ func inspect_formal() -> Dictionary:
|
|||||||
capture_model("formal-model", formal)
|
capture_model("formal-model", formal)
|
||||||
return formal
|
return formal
|
||||||
|
|
||||||
func verify_operation(formal: Dictionary, result: Dictionary, event_type: StringName) -> void:
|
func verify_operation(formal: Dictionary, result: Dictionary, event_type: StringName, prefix: String = "") -> void:
|
||||||
var expected := formal.duplicate(true)
|
var expected := formal.duplicate(true)
|
||||||
var model: Dictionary = expected[&"systems"][&"runtime"]
|
var model: Dictionary = expected[&"systems"][&"runtime"]
|
||||||
var counters: Dictionary = model[&"id_generator"]["counters"]
|
var counters: Dictionary = model[&"id_generator"]["counters"]
|
||||||
@@ -379,20 +379,20 @@ func verify_operation(formal: Dictionary, result: Dictionary, event_type: String
|
|||||||
stream["recent_events"].append(notification.to_dictionary())
|
stream["recent_events"].append(notification.to_dictionary())
|
||||||
if stream["recent_events"].size() > DomainEventStream.RECENT_EVENT_LIMIT:
|
if stream["recent_events"].size() > DomainEventStream.RECENT_EVENT_LIMIT:
|
||||||
stream["recent_events"].pop_front()
|
stream["recent_events"].pop_front()
|
||||||
capture_model("expected-operation", expected)
|
capture_model(prefix + "expected-operation", expected)
|
||||||
capture("operation-actual")
|
capture(prefix + "operation-actual")
|
||||||
var actual: Dictionary = bytes_to_var(FileAccess.get_file_as_bytes(directory.path_join(role + "-checkpoint.var")))
|
var actual: Dictionary = bytes_to_var(FileAccess.get_file_as_bytes(directory.path_join(role + "-" + prefix + "checkpoint.var")))
|
||||||
json_file(role + "-operation-comparison.json", {
|
json_file(role + "-" + prefix + "operation-comparison.json", {
|
||||||
"pid": OS.get_process_id(), "delta_kind": "source_defined_notification",
|
"pid": OS.get_process_id(), "delta_kind": "source_defined_notification",
|
||||||
"formal_model": role + "-formal-model", "actual_model": role + "-checkpoint",
|
"formal_model": role + "-" + prefix + "formal-model", "actual_model": role + "-" + prefix + "checkpoint",
|
||||||
"expected_model": role + "-expected-operation", "returned_result": Codec.new().typed(result),
|
"expected_model": role + "-" + prefix + "expected-operation", "returned_result": Codec.new().typed(result),
|
||||||
"saved_recent_count": formal[&"systems"][&"runtime"][&"domain_events"]["recent_events"].size(),
|
"saved_recent_count": formal[&"systems"][&"runtime"][&"domain_events"]["recent_events"].size(),
|
||||||
"expected_recent_count": stream["recent_events"].size(),
|
"expected_recent_count": stream["recent_events"].size(),
|
||||||
"actual_recent_count": actual[&"systems"][&"runtime"][&"domain_events"]["recent_events"].size(),
|
"actual_recent_count": actual[&"systems"][&"runtime"][&"domain_events"]["recent_events"].size(),
|
||||||
"whole_raw_equal": var_to_bytes(expected) == var_to_bytes(actual),
|
"whole_raw_equal": var_to_bytes(expected) == var_to_bytes(actual),
|
||||||
})
|
})
|
||||||
# Complete raw actual/expected snapshots remain available on unknown drift.
|
# Complete raw actual/expected snapshots remain available on unknown drift.
|
||||||
expect(var_to_bytes(expected) == var_to_bytes(actual), "whole source-defined save operation model; see " + role + "-operation-comparison.json")
|
expect(var_to_bytes(expected) == var_to_bytes(actual), "whole source-defined save operation model; see " + role + "-" + prefix + "operation-comparison.json")
|
||||||
expect(var_to_bytes(actual) == var_to_bytes(runtime.create_snapshot()), "read-only inspection preserves live model")
|
expect(var_to_bytes(actual) == var_to_bytes(runtime.create_snapshot()), "read-only inspection preserves live model")
|
||||||
|
|
||||||
func record_save_operation(result: Dictionary) -> void:
|
func record_save_operation(result: Dictionary) -> void:
|
||||||
|
|||||||
@@ -377,6 +377,8 @@ def check(project_root, evidence_dir):
|
|||||||
rows = []
|
rows = []
|
||||||
normal_results = {}
|
normal_results = {}
|
||||||
inspections = {}
|
inspections = {}
|
||||||
|
bootstrap_inspection = None
|
||||||
|
bootstrap_result = None
|
||||||
for role, pid in zip(('writer', 'reader'), expected_pids):
|
for role, pid in zip(('writer', 'reader'), expected_pids):
|
||||||
process = document(directory+'/'+role+'-process.json')
|
process = document(directory+'/'+role+'-process.json')
|
||||||
require(process['pid'] == pid and process['failures'] == 0 and process['checks'] > 0, 'process attribution')
|
require(process['pid'] == pid and process['failures'] == 0 and process['checks'] > 0, 'process attribution')
|
||||||
@@ -392,7 +394,12 @@ def check(project_root, evidence_dir):
|
|||||||
require(path.startswith('user://') and record['absolute_path'] == str(Path(record['user_data_dir'])/path[7:]), 'save outside private user profile')
|
require(path.startswith('user://') and record['absolute_path'] == str(Path(record['user_data_dir'])/path[7:]), 'save outside private user profile')
|
||||||
result = decode(record['result'])
|
result = decode(record['result'])
|
||||||
require(isinstance(result, dict) and result.get('ok') is True, 'actual save/load failed')
|
require(isinstance(result, dict) and result.get('ok') is True, 'actual save/load failed')
|
||||||
|
if native_os and role == "writer" and record["operation"] == "initial_inspect":
|
||||||
|
require(result.get("read_only") is True and "snapshot" in result, "missing bootstrap inspection")
|
||||||
|
bootstrap_inspection = typed_member(record["result"],"snapshot")
|
||||||
if record['operation'] == 'runtime_operation':
|
if record['operation'] == 'runtime_operation':
|
||||||
|
if native_os and role == "writer" and bootstrap_result is None:
|
||||||
|
bootstrap_result = record["result"]
|
||||||
operations.append(result.get('operation'))
|
operations.append(result.get('operation'))
|
||||||
normal_results[role] = result
|
normal_results[role] = result
|
||||||
if record['operation'] == 'formal_inspect':
|
if record['operation'] == 'formal_inspect':
|
||||||
@@ -464,6 +471,30 @@ def check(project_root, evidence_dir):
|
|||||||
'expected_recent_count':len(decode(expected)['systems']['runtime']['domain_events']['recent_events']),
|
'expected_recent_count':len(decode(expected)['systems']['runtime']['domain_events']['recent_events']),
|
||||||
'actual_recent_count':len(decode(typed(role+'-checkpoint'))['systems']['runtime']['domain_events']['recent_events']),
|
'actual_recent_count':len(decode(typed(role+'-checkpoint'))['systems']['runtime']['domain_events']['recent_events']),
|
||||||
'whole_raw_equal':True} and decode(comparison['returned_result']) == result, 'wrong operation comparison attribution')
|
'whole_raw_equal':True} and decode(comparison['returned_result']) == result, 'wrong operation comparison attribution')
|
||||||
|
if native_os:
|
||||||
|
prefix = "writer-bootstrap-"
|
||||||
|
bootstrap_formal = typed(prefix+"formal-model")
|
||||||
|
returned = typed(prefix+"returned-result")
|
||||||
|
require(bootstrap_inspection is not None and not typed_differences(bootstrap_formal,bootstrap_inspection), "wrong bootstrap formal inspection")
|
||||||
|
require(bootstrap_result is not None and not typed_differences(returned,bootstrap_result), "wrong bootstrap returned Dictionary")
|
||||||
|
result = decode(returned)
|
||||||
|
require(result.get("ok") is True and result.get("operation") == "recovery", "wrong bootstrap load result")
|
||||||
|
expected = expected_operation(bootstrap_formal,result,"SAVE_RECOVERY_LOADED")
|
||||||
|
actual = typed(prefix+"checkpoint")
|
||||||
|
require(not typed_differences(expected,actual), "bootstrap source-defined operation drift")
|
||||||
|
require(not typed_differences(expected,typed(prefix+"expected-operation")), "wrong bootstrap expected model")
|
||||||
|
require(not typed_differences(actual,typed(prefix+"operation-actual")), "bootstrap inspection drift")
|
||||||
|
for label in ("expected-operation","operation-actual"):
|
||||||
|
require(sha(artifact(directory+"/"+prefix+label+".var")) == sha(artifact(directory+"/"+prefix+"checkpoint.var")), "wrong bootstrap raw model")
|
||||||
|
comparison = document(directory+"/"+prefix+"operation-comparison.json")
|
||||||
|
require(comparison == {
|
||||||
|
"pid":expected_pids[0], "delta_kind":"source_defined_notification",
|
||||||
|
"formal_model":prefix+"formal-model", "actual_model":prefix+"checkpoint",
|
||||||
|
"expected_model":prefix+"expected-operation", "returned_result":returned,
|
||||||
|
"saved_recent_count":len(decode(bootstrap_formal)["systems"]["runtime"]["domain_events"]["recent_events"]),
|
||||||
|
"expected_recent_count":len(decode(expected)["systems"]["runtime"]["domain_events"]["recent_events"]),
|
||||||
|
"actual_recent_count":len(decode(actual)["systems"]["runtime"]["domain_events"]["recent_events"]),
|
||||||
|
"whole_raw_equal":True}, "wrong bootstrap comparison attribution")
|
||||||
saved = document(directory+'/save.json')
|
saved = document(directory+'/save.json')
|
||||||
require(set(saved['members']) == set(MEMBERS) and saved['pid'] == expected_pids[0], 'missing formal members/writer')
|
require(set(saved['members']) == set(MEMBERS) and saved['pid'] == expected_pids[0], 'missing formal members/writer')
|
||||||
for member in MEMBERS:
|
for member in MEMBERS:
|
||||||
|
|||||||
@@ -61,6 +61,39 @@ class EvidenceTests(unittest.TestCase):
|
|||||||
self.assertEqual(1,C.main(['--verify-only','--project-root',str(self.root)]))
|
self.assertEqual(1,C.main(['--verify-only','--project-root',str(self.root)]))
|
||||||
self.assertIn('reason mismatch',json.loads(output.getvalue())['deficits'])
|
self.assertIn('reason mismatch',json.loads(output.getvalue())['deficits'])
|
||||||
|
|
||||||
|
def bootstrap_edit(self, mutate):
|
||||||
|
self.edit("os-pair/writer-bootstrap-checkpoint.json", mutate)
|
||||||
|
self.reject("bootstrap source-defined operation drift")
|
||||||
|
|
||||||
|
def test_bootstrap_missing_notification(self):
|
||||||
|
self.bootstrap_edit(lambda d: C.typed_member(d,"systems","runtime","domain_events","recent_events")["items"].pop())
|
||||||
|
|
||||||
|
def test_bootstrap_extra_notification(self):
|
||||||
|
self.bootstrap_edit(lambda d: C.typed_member(d,"systems","runtime","domain_events","recent_events")["items"].append(
|
||||||
|
copy.deepcopy(C.typed_member(d,"systems","runtime","domain_events","recent_events")["items"][-1])))
|
||||||
|
|
||||||
|
def test_bootstrap_counter_drift(self):
|
||||||
|
self.bootstrap_edit(lambda d: C.typed_member(d,"systems","runtime","id_generator","counters","domain_event").update(text="999"))
|
||||||
|
|
||||||
|
def test_bootstrap_payload_drift(self):
|
||||||
|
def mutate(d):
|
||||||
|
event = C.typed_member(d,"systems","runtime","domain_events","recent_events")["items"][-1]
|
||||||
|
C.typed_member(event,"payload","save_path").update(text='"/wrong/path"')
|
||||||
|
self.bootstrap_edit(mutate)
|
||||||
|
|
||||||
|
def test_bootstrap_unknown_field_drift(self):
|
||||||
|
self.bootstrap_edit(lambda d: d["entries"].append([F.typed("unknown"),F.typed(1)]))
|
||||||
|
|
||||||
|
def test_bootstrap_missing_raw(self):
|
||||||
|
(self.out/"os-pair/writer-bootstrap-checkpoint.var").unlink()
|
||||||
|
F.repin(self.out)
|
||||||
|
self.reject("writer-bootstrap-checkpoint.var")
|
||||||
|
|
||||||
|
def test_bootstrap_overwritten_raw(self):
|
||||||
|
shutil.copyfile(self.out/"os-pair/writer-checkpoint.var", self.out/"os-pair/writer-bootstrap-checkpoint.var")
|
||||||
|
F.repin(self.out)
|
||||||
|
self.reject("wrong bootstrap raw model")
|
||||||
|
|
||||||
def test_reason_mismatch(self):
|
def test_reason_mismatch(self):
|
||||||
self.edit('pair/writer-actions.json', lambda d: d['actions'][0].update(status='配置可能'))
|
self.edit('pair/writer-actions.json', lambda d: d['actions'][0].update(status='配置可能'))
|
||||||
self.reject('reason mismatch')
|
self.reject('reason mismatch')
|
||||||
|
|||||||
Reference in New Issue
Block a user