Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afde233203 | ||
|
|
cb0a58bc28 |
+233
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"source_archive_verification": {
|
||||
"actual_cloud_readback": true,
|
||||
"whole_archive_sha256": "adf793994e1d0079b226f882d40fd9dc0d8282da42d7b04d24195e2b3a84c151",
|
||||
"bytes": 437422438,
|
||||
"all_unique_payloads_verified": 10804,
|
||||
"original_file_mappings_verified": 47574,
|
||||
"manifest_identical": true,
|
||||
"formal_credit": 0
|
||||
},
|
||||
"source_cloud_parts": [
|
||||
{
|
||||
"order": 0,
|
||||
"offset": 0,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0000.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "88c14f4fc36278bdbe953e60a4a9a0c03312c4a90fc4a18b6cdbb44af8c811c8",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp",
|
||||
"title": "review-material-r04.tar.gz.part-0000",
|
||||
"file_name": "review-material-r04.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp",
|
||||
"title": "review-material-r04.tar.gz.part-0000",
|
||||
"file_name": "review-material-r04.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 1,
|
||||
"offset": 67108864,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0001.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "2c05a971176d0b5e9f3c288f69ce5d4ec9dc6c8623d6c52edbd709aa5f4b9b0c",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC",
|
||||
"title": "review-material-r04.tar.gz.part-0001",
|
||||
"file_name": "review-material-r04.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC",
|
||||
"title": "review-material-r04.tar.gz.part-0001",
|
||||
"file_name": "review-material-r04.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"offset": 134217728,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0002.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "608f89ef345bee96cd275ae67ee6b0636fc9165e7a3ef539b1e48d1b973f27ac",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9",
|
||||
"title": "review-material-r04.tar.gz.part-0002",
|
||||
"file_name": "review-material-r04.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9",
|
||||
"title": "review-material-r04.tar.gz.part-0002",
|
||||
"file_name": "review-material-r04.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"offset": 201326592,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0003.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "a6e73590c86b6282ef63fd88863de357911434998f389229cdb2ac1f470a53bc",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA",
|
||||
"title": "review-material-r04.tar.gz.part-0003",
|
||||
"file_name": "review-material-r04.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA",
|
||||
"title": "review-material-r04.tar.gz.part-0003",
|
||||
"file_name": "review-material-r04.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"offset": 268435456,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0004.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "a50e262a1ec412b97f1185b469d436f4fcd1fc020cbbe972209a6f609448bb13",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl",
|
||||
"title": "review-material-r04.tar.gz.part-0004",
|
||||
"file_name": "review-material-r04.tar.gz.part-0004",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl",
|
||||
"title": "review-material-r04.tar.gz.part-0004",
|
||||
"file_name": "review-material-r04.tar.gz.part-0004",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"offset": 335544320,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0005.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "67ba53bbd2dc2416661e888758419d9465d3a5dd5f8ffc191f788493e013f305",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ",
|
||||
"title": "review-material-r04.tar.gz.part-0005",
|
||||
"file_name": "review-material-r04.tar.gz.part-0005",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ",
|
||||
"title": "review-material-r04.tar.gz.part-0005",
|
||||
"file_name": "review-material-r04.tar.gz.part-0005",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"offset": 402653184,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0006.bin",
|
||||
"bytes": 34769254,
|
||||
"sha256": "a88d6f246cef9c98686f94cf1167b4a6cb980610d44043e404f7515575adb202",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO",
|
||||
"title": "review-material-r04.tar.gz.part-0006",
|
||||
"file_name": "review-material-r04.tar.gz.part-0006",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO",
|
||||
"title": "review-material-r04.tar.gz.part-0006",
|
||||
"file_name": "review-material-r04.tar.gz.part-0006",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
}
|
||||
],
|
||||
"source_cloud_manifest": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"new_file_mappings": 18305,
|
||||
"every_new_file_hash_and_size_in_verified_archive": true,
|
||||
"new_payload_upload_required": false,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"files": 18305,
|
||||
"missing_files": 0,
|
||||
"missing": [],
|
||||
"all_objects_available_in_verified_r04_cloud": true
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"scripts": [
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-canonical-r05.py",
|
||||
"preserved_script": "tree-offload-canonical-r05.py",
|
||||
"sha256": "8979a7b6eff80535d3657b5116f4e223a24a584bf3990dd7594edc9e00ea8339"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-canonical-r05-prepare.py",
|
||||
"preserved_script": "tree-offload-canonical-r05-prepare.py",
|
||||
"sha256": "2efadfe4b8d4fd272003f69db9d39ae75d365a3de086d7ec9b78e1b3300d5ee4"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-canonical-r05-source-recheck.py",
|
||||
"preserved_script": "tree-offload-canonical-r05-source-recheck.py",
|
||||
"sha256": "3b96d1392a2db2f0b9692e9fc30663f2aa8116a14ef13fa21aff9d439ebde730"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-canonical-r05-retire.py",
|
||||
"preserved_script": "tree-offload-canonical-r05-retire.py",
|
||||
"sha256": "c8eb635295056793c9e54bbe088890b02704a6e94e86edd8b74f454a7fcb8332"
|
||||
}
|
||||
],
|
||||
"note": "Historical executed tools; source manifests were gzip archived only after all execution/retirement gates passed. Restore.py is standalone recovery entrypoint."
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"original_name": "MANIFEST.json",
|
||||
"uncompressed_bytes": 7168589,
|
||||
"uncompressed_sha256": "37d86cbfd6e81bab12df7614087e4f5a1ef8646e65e1cd8531b16dac2c8a1eb7",
|
||||
"compressed_name": "MANIFEST.json.gz",
|
||||
"compressed_bytes": 1070751,
|
||||
"compressed_sha256": "01c715187d5bf110f11159fc564497e28ada446705181d694dde08fe681ba684",
|
||||
"cloud_manifest": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg",
|
||||
"title": "canonical-r05-MANIFEST.json",
|
||||
"file_name": "canonical-r05-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg",
|
||||
"title": "canonical-r05-MANIFEST.json",
|
||||
"file_name": "canonical-r05-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"exact_content_verified": true
|
||||
}
|
||||
BIN
Binary file not shown.
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1Ex0Y1Ix6U8DY9FKKM-OJEDTL_im0Vq53",
|
||||
"title": "canonical-r05-CLOUD_OBJECT_REUSE.json",
|
||||
"file_name": "canonical-r05-CLOUD_OBJECT_REUSE.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1Ex0Y1Ix6U8DY9FKKM-OJEDTL_im0Vq53/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1Ex0Y1Ix6U8DY9FKKM-OJEDTL_im0Vq53",
|
||||
"title": "canonical-r05-CLOUD_OBJECT_REUSE.json",
|
||||
"file_name": "canonical-r05-CLOUD_OBJECT_REUSE.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1Ex0Y1Ix6U8DY9FKKM-OJEDTL_im0Vq53/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "51b74dfc3c6a15ce151e460bdad1e98f53ffa40ed3f9949263381d72fcf7eca3",
|
||||
"bytes": 10097
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg",
|
||||
"title": "canonical-r05-MANIFEST.json",
|
||||
"file_name": "canonical-r05-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg",
|
||||
"title": "canonical-r05-MANIFEST.json",
|
||||
"file_name": "canonical-r05-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AT5t69o2vYVZQjF_Q9NiL9gBPhjRn_qg/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "37d86cbfd6e81bab12df7614087e4f5a1ef8646e65e1cd8531b16dac2c8a1eb7",
|
||||
"bytes": 7168589
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1bfAR3vso3sdA_joQ_GCA3MZ7EO8HCp2D",
|
||||
"title": "canonical-r05-RESTORE.md",
|
||||
"file_name": "canonical-r05-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/1bfAR3vso3sdA_joQ_GCA3MZ7EO8HCp2D/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1bfAR3vso3sdA_joQ_GCA3MZ7EO8HCp2D",
|
||||
"title": "canonical-r05-RESTORE.md",
|
||||
"file_name": "canonical-r05-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/1bfAR3vso3sdA_joQ_GCA3MZ7EO8HCp2D/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "4f9c6cc124f1650541d18224375125d908a25dfbaf15667b24ccedcc5fc2d50e",
|
||||
"bytes": 1005
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1TjnRzNCj-nJB7jlRxRIXwXGRqdnf6K8c",
|
||||
"title": "canonical-r05-restore.py",
|
||||
"file_name": "canonical-r05-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1TjnRzNCj-nJB7jlRxRIXwXGRqdnf6K8c/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1TjnRzNCj-nJB7jlRxRIXwXGRqdnf6K8c",
|
||||
"title": "canonical-r05-restore.py",
|
||||
"file_name": "canonical-r05-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1TjnRzNCj-nJB7jlRxRIXwXGRqdnf6K8c/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "a96e0ca7732a8b2840a42d29347ed49d45bd6032a40f48049b7bbb83b53e5827",
|
||||
"bytes": 1925
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
# 旧版P08証跡の復元
|
||||
|
||||
退避先: https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK
|
||||
|
||||
CLOUD_OBJECT_REUSE.json の source_cloud_parts の順序で review-material-r04.tar.gz.part-0000〜0006 を取得。各サイズ・SHA-256を確認して連結し、source_archive_verification のSHA-256と照合する。アーカイブは r04 と共用し、追加本体の転送は行っていない。復元にはこのr05の MANIFEST.json(またはローカルの MANIFEST.json.gz)を使う。r04内蔵の別パス対応表を使わない。
|
||||
|
||||
`python3 restore.py review-material-r04.tar.gz MANIFEST.json /Users/korizatou114/Projects/TheTree-managed-worktrees`
|
||||
|
||||
既存のファイルへの上書きを拒否する。空の別ディレクトリへの復元も可。全復元ファイルのサイズ・SHA-256・モード・mtimeを照合する。現行版への validated-current-proof-alias、現行build、実装worktree、現在候補、実行記録はローカルに保持する。
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"unix": 1792068949.544412,
|
||||
"files": 18305,
|
||||
"logical_bytes": 2001146758,
|
||||
"free_before_selection": 2722979840,
|
||||
"free_before_retirement": 2702245888,
|
||||
"free_after": 3157508096,
|
||||
"net_free_change_from_selection": 434528256,
|
||||
"new_payload_upload_bytes": 0,
|
||||
"all_sources_and_cloud_object_hashes_verified": true,
|
||||
"current_alias_and_build_receipts_unchanged": true,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+2164
File diff suppressed because it is too large
Load Diff
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"all_sources_rehashed_and_unchanged": true,
|
||||
"manifest_sha256": "37d86cbfd6e81bab12df7614087e4f5a1ef8646e65e1cd8531b16dac2c8a1eb7",
|
||||
"unix": 1792068852.53724
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
"""Restore new path mappings from the byte-verified r04 content-addressed archive."""
|
||||
import argparse,contextlib,gzip,hashlib,json,os,tarfile
|
||||
from pathlib import Path
|
||||
p=argparse.ArgumentParser();p.add_argument('archive');p.add_argument('manifest');p.add_argument('destination');a=p.parse_args();mp=Path(a.manifest);raw=gzip.decompress(mp.read_bytes())if mp.suffix=='.gz'else mp.read_bytes();m=json.loads(raw);dest=Path(a.destination).resolve();h=hashlib.sha256()
|
||||
with open(a.archive,'rb')as f:
|
||||
for b in iter(lambda:f.read(1024**2),b''):h.update(b)
|
||||
assert h.hexdigest()==m['source_r04_archive_sha256'];rows=m['members'];by_hash={};seen=set();restored=0
|
||||
assert len({x['path']for x in rows})==len(rows)
|
||||
for x in rows:
|
||||
q=dest/x['path'];assert q.resolve().is_relative_to(dest)and not q.exists()and not q.is_symlink()
|
||||
if x['type']=='file':by_hash.setdefault(x['sha256'],[]).append(x)
|
||||
for x in rows:
|
||||
if x['type']=='directory':(dest/x['path']).mkdir(parents=True,exist_ok=True)
|
||||
with tarfile.open(a.archive,'r|gz')as t:
|
||||
for e in t:
|
||||
assert e.isfile()
|
||||
if not e.name.startswith('objects/'):continue
|
||||
key=e.name[8:]
|
||||
if key not in by_hash:continue
|
||||
assert key not in seen;seen.add(key);group=by_hash[key];assert all(x['bytes']==e.size for x in group);v=hashlib.sha256()
|
||||
with contextlib.ExitStack()as stack:
|
||||
out=[stack.enter_context((dest/x['path']).open('xb'))for x in group];f=stack.enter_context(t.extractfile(e))
|
||||
for b in iter(lambda:f.read(1024**2),b''):
|
||||
v.update(b)
|
||||
for o in out:o.write(b)
|
||||
assert v.hexdigest()==key
|
||||
for x in group:
|
||||
q=dest/x['path'];assert q.stat().st_size==x['bytes'];os.chmod(q,x['mode']);os.utime(q,ns=(x['mtime_ns'],x['mtime_ns']));restored+=1
|
||||
assert seen==set(by_hash)and restored==m['files']
|
||||
for x in reversed(rows):
|
||||
if x['type']=='directory':q=dest/x['path'];os.chmod(q,x['mode']);os.utime(q,ns=(x['mtime_ns'],x['mtime_ns']))
|
||||
print('Restored and verified',restored,'files')
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-canonical-r05.py',run_name='offload_library'))
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());coverage=json.loads((D/'COVERAGE_CHECK.json').read_bytes());assert coverage['all_objects_available_in_verified_r04_cloud'];v=json.loads((R04/'CLOUD_ARCHIVE_VERIFIED.json').read_bytes());assert v['actual_cloud_readback']and m['source_r04_archive_sha256']==v['whole_archive_sha256'];save(D/'CLOUD_OBJECT_REUSE.json',dict(source_archive_verification=v,source_cloud_parts=json.loads((R04/'CLOUD_PARTS.json').read_bytes()),source_cloud_manifest=json.loads((R04/'READBACK-MANIFEST.json.json').read_bytes())['cloud'],new_file_mappings=m['files'],every_new_file_hash_and_size_in_verified_archive=True,new_payload_upload_required=False,formal_credit=0))
|
||||
print('Verified archive reuse mapping saved')
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-canonical-r05.py',run_name='offload_library'))
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());s=json.loads((D/'SOURCE_RECHECK.json').read_bytes());assert s['all_sources_rehashed_and_unchanged']and s['manifest_sha256']==sha(D/'MANIFEST.json')and time.time()-s['unix']<3600;assert json.loads((D/'COVERAGE_CHECK.json').read_bytes())['all_objects_available_in_verified_r04_cloud']
|
||||
for n in ['MANIFEST.json','CLOUD_OBJECT_REUSE.json','restore.py','RESTORE.md']:
|
||||
j=json.loads((D/('READBACK-'+n+'.json')).read_bytes());assert j['actual_cloud_readback_verified']and j['sha256']==sha(D/n)
|
||||
assert not(D/'RETIREMENT.json').exists();check_idle();current=B/'p08-03-code/.runtime/P08-03/build';alias=parent/'validated-current-proof-alias';link=os.readlink(alias);assert Path(link).is_dir();protected={str(x):sha(x)for x in current.rglob('*.json')if 'stage'not in x.parts and 'profile'not in x.parts};assert protected
|
||||
for x in m['members']:
|
||||
q=B/x['path'];st=q.lstat();assert not q.is_symlink()and(q.is_file()if x['type']=='file'else q.is_dir());assert st.st_mtime_ns==x['mtime_ns']and st.st_mode&0o7777==x['mode'];assert x['type']!='file'or st.st_size==x['bytes']
|
||||
free=shutil.disk_usage(R).free;save(D/'RETIREMENT_INTENT.json',dict(unix=time.time(),manifest_sha256=sha(D/'MANIFEST.json'),all_sources_rehashed_and_stat_rechecked=True,only_cold_canonical_roots=m['roots'],current_alias_target=link,current_build_json_guards=protected))
|
||||
for x in m['members']:
|
||||
if x['type']=='file':(B/x['path']).unlink()
|
||||
for x in sorted(m['members'],key=lambda x:len(Path(x['path']).parts),reverse=True):
|
||||
if x['type']=='directory':(B/x['path']).rmdir()
|
||||
assert os.readlink(alias)==link and Path(link).is_dir();assert all(sha(Path(p))==h for p,h in protected.items());assert all(not(B/x).exists()for x in m['roots'])
|
||||
save(parent/'CLOUD_HISTORY_R05.json',dict(state='cloud_archived',roots=m['roots'],folder_url='https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK',manifest=str(D/'MANIFEST.json'),restore=str(D/'RESTORE.md'),source_archive_sha256=m['source_r04_archive_sha256'],alias_and_current_build_retained=True,formal_credit=0))
|
||||
r=dict(unix=time.time(),files=m['files'],logical_bytes=m['logical_bytes'],free_before_selection=m['free_before'],free_before_retirement=free,free_after=shutil.disk_usage(R).free,net_free_change_from_selection=shutil.disk_usage(R).free-m['free_before'],new_payload_upload_bytes=0,all_sources_and_cloud_object_hashes_verified=True,current_alias_and_build_receipts_unchanged=True,formal_credit=0);save(D/'RETIREMENT.json',r);print(json.dumps(r),flush=True)
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-canonical-r05.py',run_name='offload_library'))
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];check_idle();assert inv()==m['members'];save(D/'SOURCE_RECHECK.json',dict(all_sources_rehashed_and_unchanged=True,manifest_sha256=sha(D/'MANIFEST.json'),unix=time.time()));print('All 18,305 historical canonical files rehashed and unchanged',flush=True)
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
R04=D;D=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-canonical-r05-20261015';parent=B/'p08-03-code/.runtime/P08-03/evidence-archive/pre-d369';roots=sorted(str(x.relative_to(B))for x in parent.iterdir()if x.is_dir()and not x.is_symlink());assert len(roots)==8
|
||||
def check_idle():
|
||||
c=sqlite3.connect('file:'+str(DB/'the-tree-p08-03-code/state.sqlite')+'?mode=ro',uri=True);assert c.execute("select count(*) from runs where finished is null and status not in ('failed','finished')").fetchone()[0]==0
|
||||
ps=subprocess.check_output(['ps','-axo','pid,command'],text=True);opened=subprocess.run(['lsof','-n','-F','n'],capture_output=True,text=True).stdout
|
||||
for s in roots:assert not any(str(B/s)in x for x in ps.splitlines())and not any(x.startswith('n'+str(B/s)+'/')for x in opened.splitlines())
|
||||
if __name__=='__main__':
|
||||
assert D.exists() and not any(D.iterdir());check_idle();old=json.loads((R04/'MANIFEST.json').read_bytes());objects={x['sha256']:x for x in old['members']if x['type']=='file'};before=shutil.disk_usage(R).free;rows=inv();missing=[x for x in rows if x['type']=='file'and(x['sha256']not in objects or objects[x['sha256']]['bytes']!=x['bytes'])]
|
||||
save(D/'COVERAGE_CHECK.json',dict(files=sum(x['type']=='file'for x in rows),missing_files=len(missing),missing=[dict(path=x['path'],bytes=x['bytes'],sha256=x['sha256'])for x in missing],all_objects_available_in_verified_r04_cloud=not missing))
|
||||
m=dict(base=str(B),roots=roots,members=rows,files=sum(x['type']=='file'for x in rows),logical_bytes=sum(x.get('bytes',0)for x in rows),free_before=before,source_r04_manifest_sha256=sha(R04/'MANIFEST.json'),source_r04_archive_sha256=json.loads((R04/'PREPARED.json').read_bytes())['sha256'],created=time.time(),scope='Idle superseded canonical pre-d369 historical P08 evidence only; current build and current candidates retained',formal_credit=0)
|
||||
save(D/'MANIFEST.json',m);print(json.dumps(dict(files=m['files'],logical_bytes=m['logical_bytes'],missing=len(missing))),flush=True)
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"actual_cloud_readback": true,
|
||||
"whole_archive_sha256": "75953c3d35d5fbc633e7cb68c6510ea8ad33aa9b7591a83feccd1d8c69389cc0",
|
||||
"bytes": 236897320,
|
||||
"all_unique_payloads_verified": 6689,
|
||||
"original_file_mappings_verified": 14259,
|
||||
"manifest_identical": true,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
[
|
||||
{
|
||||
"order": 0,
|
||||
"offset": 0,
|
||||
"path": "/private/tmp/tree-offload-cold-r06/upload-0000.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "22c205b386248abf7b39b70c2b858a483654aa7e089a3d64b70a17a571886f53",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1MXFzQ_yfhmdJU9Q_dnWwqD7MNQlp8QYE",
|
||||
"title": "cold-r06.tar.gz.part-0000",
|
||||
"file_name": "cold-r06.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1MXFzQ_yfhmdJU9Q_dnWwqD7MNQlp8QYE/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1MXFzQ_yfhmdJU9Q_dnWwqD7MNQlp8QYE",
|
||||
"title": "cold-r06.tar.gz.part-0000",
|
||||
"file_name": "cold-r06.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1MXFzQ_yfhmdJU9Q_dnWwqD7MNQlp8QYE/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 1,
|
||||
"offset": 67108864,
|
||||
"path": "/private/tmp/tree-offload-cold-r06/upload-0001.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "6e199f6f2d6efb73252038892f0dc2a41892aa1bbb3c2888b5b4b5e45270ba3c",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1Ws-lJGHGUPFVg0i43hdhct3vue6pkOW-",
|
||||
"title": "cold-r06.tar.gz.part-0001",
|
||||
"file_name": "cold-r06.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1Ws-lJGHGUPFVg0i43hdhct3vue6pkOW-/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1Ws-lJGHGUPFVg0i43hdhct3vue6pkOW-",
|
||||
"title": "cold-r06.tar.gz.part-0001",
|
||||
"file_name": "cold-r06.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1Ws-lJGHGUPFVg0i43hdhct3vue6pkOW-/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"offset": 134217728,
|
||||
"path": "/private/tmp/tree-offload-cold-r06/upload-0002.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "70bc0439aceba6fd5642b8e819b69959e977db25e993dfa027a9abb3ba2d6549",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1wDnWAWPIdFxs1RqHAG5ow2vOt4mkNekY",
|
||||
"title": "cold-r06.tar.gz.part-0002",
|
||||
"file_name": "cold-r06.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1wDnWAWPIdFxs1RqHAG5ow2vOt4mkNekY/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1wDnWAWPIdFxs1RqHAG5ow2vOt4mkNekY",
|
||||
"title": "cold-r06.tar.gz.part-0002",
|
||||
"file_name": "cold-r06.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1wDnWAWPIdFxs1RqHAG5ow2vOt4mkNekY/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"offset": 201326592,
|
||||
"path": "/private/tmp/tree-offload-cold-r06/upload-0003.bin",
|
||||
"bytes": 35570728,
|
||||
"sha256": "ff1f41ae4c20f2b8c7b61877671e68f0e7e9fc6a8c8852e1748c5c06f99b0627",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1f-rJ_4Z1yV4lc7F2BBVartTFB84WZEJy",
|
||||
"title": "cold-r06.tar.gz.part-0003",
|
||||
"file_name": "cold-r06.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1f-rJ_4Z1yV4lc7F2BBVartTFB84WZEJy/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1f-rJ_4Z1yV4lc7F2BBVartTFB84WZEJy",
|
||||
"title": "cold-r06.tar.gz.part-0003",
|
||||
"file_name": "cold-r06.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1f-rJ_4Z1yV4lc7F2BBVartTFB84WZEJy/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
}
|
||||
]
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"scripts": [
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-cold-r06.py",
|
||||
"preserved_script": "tree-offload-cold-r06.py",
|
||||
"sha256": "52ed2ad5db40d737f81309d524f0a6972d41120bb5d17aac80bc0f27c4ebf4b8"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-cold-r06-verify-cloud.py",
|
||||
"preserved_script": "tree-offload-cold-r06-verify-cloud.py",
|
||||
"sha256": "d4819004cc19f0f7c6c5811c8cc87956e8c72837c065f6bad27232f24debed3c"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-cold-r06-source-recheck.py",
|
||||
"preserved_script": "tree-offload-cold-r06-source-recheck.py",
|
||||
"sha256": "dfad371e44b3d047c6f72a90dd71c35519cb6949f9173d472b78928b04e93507"
|
||||
},
|
||||
{
|
||||
"actual_executed_path": "/private/tmp/tree-offload-cold-r06-retire.py",
|
||||
"preserved_script": "tree-offload-cold-r06-retire.py",
|
||||
"sha256": "8d3ac0929902f4853f5d9503c89dd7d184b1412d8d3784cc93dd1ea9b61ad52d"
|
||||
}
|
||||
],
|
||||
"note": "Historical executed tools; source manifests were gzip archived only after all execution/retirement gates passed. Restore.py is standalone recovery entrypoint."
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"recorded_unix": 1792069625.883337,
|
||||
"scope": "This request only: three new offload batches r04/r05/r06; prior offloads not added",
|
||||
"batches": [
|
||||
"drive-offload-review-material-r04-20261015",
|
||||
"drive-offload-canonical-r05-20261015",
|
||||
"drive-offload-cold-r06-20261015"
|
||||
],
|
||||
"retired_roots": 23,
|
||||
"archived_original_file_paths": 80138,
|
||||
"archived_logical_bytes": 14737457073,
|
||||
"uploaded_payload_archive_bytes": 674319758,
|
||||
"r05_reused_existing_cloud_objects_without_new_payload": true,
|
||||
"free_before": 2699243520,
|
||||
"free_after": 3348508672,
|
||||
"net_observed_free_change": 649265152,
|
||||
"logical_bytes_are_not_reclaimed_physical_bytes": true,
|
||||
"cloud_folder_url": "https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"all_cloud_archive_payloads_and_mappings_retrieved_and_verified": true,
|
||||
"all_source_members_rehashed_before_retirement": true,
|
||||
"local_current_candidates_and_build_evidence_retained": true,
|
||||
"p18_current_eight_receipts_unchanged": true,
|
||||
"p08_current_alias_and_build_receipts_unchanged": true,
|
||||
"p23_old_failed_diagnostic_outcomes_retained_locally": true,
|
||||
"local_manifests_gzip_roundtrip_verified": true,
|
||||
"formal_original_unit_credit": 0
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
# 証跡のGoogle Drive退避結果
|
||||
|
||||
今回の3バッチ(r04・r05・r06)だけを集計。23か所・80,138ファイル、論理サイズ14.737 GBを退避。実空き容量は開始時2.514 GiBから終了時3.119 GiBへ、純増0.605 GiB。論理サイズを物理回収量に換算しない。macOSの共有コピーのため見かけの容量と空きの回復量は異なる。
|
||||
|
||||
退避先: https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK
|
||||
|
||||
- r04: 終了済みレビュー11件の資料コピー。全47,574ファイル分の内容をDrive再取得で照合。
|
||||
- r05: 旧版P08の8実行分、18,305ファイル。全内容がr04の検証済みオブジェクトに一致するため、本体の再送を省略。新しい元パス対応表・復元スクリプトもDrive再取得で照合。
|
||||
- r06: P23旧候補49445d4-r13の診断一式とP08旧プレビュー3件、14,259ファイル。旧P23の不合格条件を含む小さな実行結果はローカルにも同じバイト内容で保持。現行P23の9a26候補には充当しない。
|
||||
|
||||
各バッチのCLOUD_PARTS.jsonまたはCLOUD_OBJECT_REUSE.jsonに実際のDriveファイルURLとSHA-256を保持。RESTORE.mdに復元手順、MANIFEST.json.gzに全元パス・サイズ・SHA-256・mode・mtimeを保持。gzipから復号した全バイトも元対応表と照合済み。公開範囲の変更は行っていない。
|
||||
|
||||
現在のP18候補265ce30および統合予行の計8主要証跡、現在のP08参照とbuild証跡は不変。実装worktree、現行候補、現在の検証証跡、原本、ユーザー保存データ、実行記録、レビュー回答を保持。ゲームの正式完了数は加算しない。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"original_name": "MANIFEST.json",
|
||||
"uncompressed_bytes": 4919377,
|
||||
"uncompressed_sha256": "db9c53deedb48cf78f8eda1b15481d6b15967870d5a12f190224073f7dbd9fb4",
|
||||
"compressed_name": "MANIFEST.json.gz",
|
||||
"compressed_bytes": 781400,
|
||||
"compressed_sha256": "d34769ecb7af2b80ad3e70e7572089d6dded20f23d50222cdb4d27c72631ee34",
|
||||
"cloud_manifest": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb",
|
||||
"title": "cold-r06-MANIFEST.json",
|
||||
"file_name": "cold-r06-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb",
|
||||
"title": "cold-r06-MANIFEST.json",
|
||||
"file_name": "cold-r06-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"exact_content_verified": true
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"reason": "Retain exact old unaccepted diagnostics and false conditions for ongoing audits while bulky source/profile copies are on Drive",
|
||||
"files": [
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/root-cua-trace.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/root-cua-trace.json",
|
||||
"sha256": "e1c8826a165d36c0bf2d9b2a4f02fba6f3d52ac2e0fc04f6a3bc9eadc95f0350",
|
||||
"bytes": 18858
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/os-proof.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/os-proof.json",
|
||||
"sha256": "7c5d043f10e6547d67fb60eabf215e740bdd86693ddddb42e9589c23bd2b40de",
|
||||
"bytes": 162904
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/parse-paths.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/parse-paths.json",
|
||||
"sha256": "47b7ecd0131e9e19b3a858f99424d91caac1323d3f447a712625e4fe20490e9e",
|
||||
"bytes": 15803
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/root-strict-pre-review.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/root-strict-pre-review.json",
|
||||
"sha256": "ad65ab0f2b2a5a8b0cccaf9e12dfc0be8231ab6f24589628089fe54c862353bc",
|
||||
"bytes": 3202
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/runner-input.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/runner-input.json",
|
||||
"sha256": "fd78bd2a24aa05f7b4cdf04a7d9358c2e859e2c70b3ce78a304c6a21451a4bbd",
|
||||
"bytes": 318720
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/index.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/index.json",
|
||||
"sha256": "c0cc9e939845b5f3ae8375d414327821eb75c3e5f5158ae32eb872eda1b99a03",
|
||||
"bytes": 1424167
|
||||
},
|
||||
{
|
||||
"original": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02/p23-03-native-os-49445d4-r13/runner-ended.json",
|
||||
"retained": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015/retained-p23-r13-outcomes/runner-ended.json",
|
||||
"sha256": "d3069a1de33f49bb5be426dd67147910bf52ca912ffad0743957cf582d535bac",
|
||||
"bytes": 3204
|
||||
}
|
||||
],
|
||||
"formal_credit": 0
|
||||
}
|
||||
BIN
Binary file not shown.
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"archive": "/private/tmp/tree-offload-cold-r06/cold-r06.tar.gz",
|
||||
"bytes": 236897320,
|
||||
"sha256": "75953c3d35d5fbc633e7cb68c6510ea8ad33aa9b7591a83feccd1d8c69389cc0",
|
||||
"all_members_verified": true,
|
||||
"unique_payloads": 6689
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1fAnug1qqMbpC30j5NQ9MpEcAXOUk94fL",
|
||||
"title": "cold-r06-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"file_name": "cold-r06-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1fAnug1qqMbpC30j5NQ9MpEcAXOUk94fL/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1fAnug1qqMbpC30j5NQ9MpEcAXOUk94fL",
|
||||
"title": "cold-r06-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"file_name": "cold-r06-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1fAnug1qqMbpC30j5NQ9MpEcAXOUk94fL/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "07f53e41dd238db4e9ddc0fb29cd9cf38777c61298a5f5cf62cd401bf9441deb",
|
||||
"bytes": 288
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1hVH1bFxeRJR739YCJo6cejb5VouO4MAp",
|
||||
"title": "cold-r06-CLOUD_PARTS.json",
|
||||
"file_name": "cold-r06-CLOUD_PARTS.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1hVH1bFxeRJR739YCJo6cejb5VouO4MAp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1hVH1bFxeRJR739YCJo6cejb5VouO4MAp",
|
||||
"title": "cold-r06-CLOUD_PARTS.json",
|
||||
"file_name": "cold-r06-CLOUD_PARTS.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1hVH1bFxeRJR739YCJo6cejb5VouO4MAp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "ef6fea99bd5f2b092c38c2c066aee99f00fd47ef20bcf36a6c495a941de21113",
|
||||
"bytes": 4558
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19sUILvigTR84_UFpn4x2OMw7tzC59k4z",
|
||||
"title": "offload-r04-r06-FINAL_REPORT.json",
|
||||
"file_name": "offload-r04-r06-FINAL_REPORT.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19sUILvigTR84_UFpn4x2OMw7tzC59k4z/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19sUILvigTR84_UFpn4x2OMw7tzC59k4z",
|
||||
"title": "offload-r04-r06-FINAL_REPORT.json",
|
||||
"file_name": "offload-r04-r06-FINAL_REPORT.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19sUILvigTR84_UFpn4x2OMw7tzC59k4z/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "d34795aee5e9686ba7330e94f9d0856db96d2931549ab19a671e0c647e503bd6"
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "127T4_zEJhsGlgThLkhZbDR6-dR8e6FMv",
|
||||
"title": "offload-r04-r06-FINAL_REPORT.md",
|
||||
"file_name": "offload-r04-r06-FINAL_REPORT.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/127T4_zEJhsGlgThLkhZbDR6-dR8e6FMv/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "127T4_zEJhsGlgThLkhZbDR6-dR8e6FMv",
|
||||
"title": "offload-r04-r06-FINAL_REPORT.md",
|
||||
"file_name": "offload-r04-r06-FINAL_REPORT.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/127T4_zEJhsGlgThLkhZbDR6-dR8e6FMv/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "fa4ea3291637d060e671e5f99ad76ca9eee480953c7c425c079074137e945c61"
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb",
|
||||
"title": "cold-r06-MANIFEST.json",
|
||||
"file_name": "cold-r06-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb",
|
||||
"title": "cold-r06-MANIFEST.json",
|
||||
"file_name": "cold-r06-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1AjdqKoVypig1-47vbE1U8KpYqv2xKpFb/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "db9c53deedb48cf78f8eda1b15481d6b15967870d5a12f190224073f7dbd9fb4",
|
||||
"bytes": 4919377
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1SU1qY9FZd2I1uw0Kok4E64zBksIu7_oi",
|
||||
"title": "cold-r06-PREPARED.json",
|
||||
"file_name": "cold-r06-PREPARED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1SU1qY9FZd2I1uw0Kok4E64zBksIu7_oi/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1SU1qY9FZd2I1uw0Kok4E64zBksIu7_oi",
|
||||
"title": "cold-r06-PREPARED.json",
|
||||
"file_name": "cold-r06-PREPARED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1SU1qY9FZd2I1uw0Kok4E64zBksIu7_oi/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "7c166916784393ff2ebb9f857482382b45a853bdcbe1879d9ab150cb78ac4dd6",
|
||||
"bytes": 231
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1EzPkW1mZ6sSaaJzLVkK0ur1Lg8PSeVP4",
|
||||
"title": "cold-r06-RESTORE.md",
|
||||
"file_name": "cold-r06-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/1EzPkW1mZ6sSaaJzLVkK0ur1Lg8PSeVP4/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1EzPkW1mZ6sSaaJzLVkK0ur1Lg8PSeVP4",
|
||||
"title": "cold-r06-RESTORE.md",
|
||||
"file_name": "cold-r06-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/1EzPkW1mZ6sSaaJzLVkK0ur1Lg8PSeVP4/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "740d91711a465f535b82350ae0f2b83b360696d8859850a592545dd5965d0cc0",
|
||||
"bytes": 971
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1iRbjOkdZ4fuDapeye8vTL7reH5jf-J48",
|
||||
"title": "cold-r06-restore.py",
|
||||
"file_name": "cold-r06-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1iRbjOkdZ4fuDapeye8vTL7reH5jf-J48/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1iRbjOkdZ4fuDapeye8vTL7reH5jf-J48",
|
||||
"title": "cold-r06-restore.py",
|
||||
"file_name": "cold-r06-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1iRbjOkdZ4fuDapeye8vTL7reH5jf-J48/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "9e5fae33042236e7c863931f6731c8867d89c075d14d28fd45571ee844ccdc4f",
|
||||
"bytes": 1288
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
# 旧P23診断とP08旧プレビューの復元
|
||||
|
||||
退避先: https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK
|
||||
|
||||
CLOUD_PARTS.json の順に cold-r06.tar.gz.part-0000 以降を取得。各SHA-256とサイズを照合して連結し、PREPARED.json の全体SHA-256を確認する。
|
||||
|
||||
`python3 restore.py cold-r06.tar.gz /Users/korizatou114/Projects/とりにく工房ゲーム制作部/artifacts/original-completion-2026-10-02`
|
||||
|
||||
既存ファイルを上書きしない。全ファイルのサイズ・SHA-256・mode・mtimeを確認する。詳細な元パス対応はアーカイブ内 MANIFEST.json、ローカルの MANIFEST.json.gz、Driveの cold-r06-MANIFEST.json に保持。旧P23の index/os-proof/Rootの不合格条件/runner入出力は retained-p23-r13-outcomes に同じバイト内容を残す。旧診断を合格や現行9a26候補の証拠に変更しない。現行候補・全P18証跡・P08現行証跡は退避対象外。
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"recorded_unix": 1792069525.880496,
|
||||
"files": 14259,
|
||||
"roots": [
|
||||
"p23-03-native-os-49445d4-r13",
|
||||
"p08-runtime-preview-8d52b20-target-r02/stage",
|
||||
"p08-runtime-preview-78dc82d-targeted-r01/stage",
|
||||
"p08-runtime-preview-12f04d6-target-impact-r03/stage"
|
||||
],
|
||||
"logical_bytes": 1262084277,
|
||||
"unique_bytes": 784595702,
|
||||
"cloud_archive_bytes": 236897320,
|
||||
"free_before_selection": 3159797760,
|
||||
"free_before_retirement": 2663612416,
|
||||
"free_after": 3310927872,
|
||||
"net_free_change_from_selection": 151130112,
|
||||
"actual_cloud_readback_all_payloads_verified": true,
|
||||
"retired_only_manifest_members": true,
|
||||
"current_sources_build_evidence_run_records_review_results_retained": true,
|
||||
"temporary_archives_removed_after_verification": true,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"unix": 1792069524.3539698,
|
||||
"manifest_sha256": "db9c53deedb48cf78f8eda1b15481d6b15967870d5a12f190224073f7dbd9fb4",
|
||||
"whole_archive_sha256": "75953c3d35d5fbc633e7cb68c6510ea8ad33aa9b7591a83feccd1d8c69389cc0",
|
||||
"full_cloud_content_verified": true,
|
||||
"all_sources_rehashed_and_stat_rechecked": true,
|
||||
"active_jobs_and_open_files_zero": true,
|
||||
"files": 14259,
|
||||
"roots": [
|
||||
"p23-03-native-os-49445d4-r13",
|
||||
"p08-runtime-preview-8d52b20-target-r02/stage",
|
||||
"p08-runtime-preview-78dc82d-targeted-r01/stage",
|
||||
"p08-runtime-preview-12f04d6-target-impact-r03/stage"
|
||||
]
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"recorded_unix": 1792069422.347965,
|
||||
"all_sources_unchanged": true,
|
||||
"manifest_sha256": "db9c53deedb48cf78f8eda1b15481d6b15967870d5a12f190224073f7dbd9fb4"
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
"""Restore content-addressed archive without overwriting existing files."""
|
||||
import argparse,hashlib,json,os,tarfile
|
||||
from pathlib import Path
|
||||
p=argparse.ArgumentParser();p.add_argument('archive');p.add_argument('destination');a=p.parse_args();dest=Path(a.destination).resolve()
|
||||
with tarfile.open(a.archive,'r:gz')as t:
|
||||
m=json.loads(t.extractfile('MANIFEST.json').read());rows=m['members'];expected={'MANIFEST.json'}|{'objects/'+x['sha256']for x in rows if x['type']=='file'}
|
||||
assert {x.name for x in t.getmembers()}==expected and len(t.getmembers())==len(expected)
|
||||
for x in rows:
|
||||
target=dest/x['path'];assert target.resolve().is_relative_to(dest) and not target.exists()
|
||||
for x in rows:
|
||||
q=dest/x['path']
|
||||
if x['type']=='directory':q.mkdir(parents=True,exist_ok=True)
|
||||
else:
|
||||
q.parent.mkdir(parents=True,exist_ok=True);h=hashlib.sha256()
|
||||
with q.open('xb')as out,t.extractfile('objects/'+x['sha256'])as f:
|
||||
for b in iter(lambda:f.read(1048576),b''):h.update(b);out.write(b)
|
||||
assert q.stat().st_size==x['bytes'] and h.hexdigest()==x['sha256']
|
||||
os.chmod(q,x['mode']);os.utime(q,ns=(x['mtime_ns'],x['mtime_ns']))
|
||||
for x in reversed(rows):
|
||||
if x['type']=='directory':os.utime(dest/x['path'],ns=(x['mtime_ns'],x['mtime_ns']))
|
||||
print('Restored and verified',m['files'],'files')
|
||||
+16499
File diff suppressed because it is too large
Load Diff
+1377
File diff suppressed because it is too large
Load Diff
+321
@@ -0,0 +1,321 @@
|
||||
[
|
||||
"res://autoload/event_bus.gd",
|
||||
"res://autoload/game_clock.gd",
|
||||
"res://autoload/game_state.gd",
|
||||
"res://autoload/simulation_runtime.gd",
|
||||
"res://scenes/main/main.gd",
|
||||
"res://scenes/main/world_preview.gd",
|
||||
"res://scripts/authority/authority_service.gd",
|
||||
"res://scripts/authority/evidence.gd",
|
||||
"res://scripts/authority/heat_state.gd",
|
||||
"res://scripts/authority/incident.gd",
|
||||
"res://scripts/authority/inspection.gd",
|
||||
"res://scripts/construction/construction_job.gd",
|
||||
"res://scripts/construction/construction_service.gd",
|
||||
"res://scripts/construction/excavation_service.gd",
|
||||
"res://scripts/construction/facility_resize_preview.gd",
|
||||
"res://scripts/construction/facility_resize_routes.gd",
|
||||
"res://scripts/construction/placement_report.gd",
|
||||
"res://scripts/core/command.gd",
|
||||
"res://scripts/core/command_queue.gd",
|
||||
"res://scripts/core/command_result.gd",
|
||||
"res://scripts/core/definition_registry.gd",
|
||||
"res://scripts/core/deterministic_rng.gd",
|
||||
"res://scripts/core/domain_event.gd",
|
||||
"res://scripts/core/domain_event_stream.gd",
|
||||
"res://scripts/core/performance_budget.gd",
|
||||
"res://scripts/core/save_migration_registry.gd",
|
||||
"res://scripts/core/save_service.gd",
|
||||
"res://scripts/core/simulation_digest.gd",
|
||||
"res://scripts/core/simulation_kernel.gd",
|
||||
"res://scripts/core/simulation_snapshot.gd",
|
||||
"res://scripts/core/stable_id_generator.gd",
|
||||
"res://scripts/core/state_transaction.gd",
|
||||
"res://scripts/data/facility_catalog.gd",
|
||||
"res://scripts/data/facility_definition.gd",
|
||||
"res://scripts/data/mvp_content_catalog.gd",
|
||||
"res://scripts/defense/defense_service.gd",
|
||||
"res://scripts/economy/economy_service.gd",
|
||||
"res://scripts/economy/facility_upkeep_accrual.gd",
|
||||
"res://scripts/economy/facility_upkeep_settlement.gd",
|
||||
"res://scripts/economy/ledger_backed_resource_state.gd",
|
||||
"res://scripts/economy/ledger_entry.gd",
|
||||
"res://scripts/environment/facility_cleaning_bridge.gd",
|
||||
"res://scripts/environment/facility_cleaning_policy.gd",
|
||||
"res://scripts/environment/facility_cleanliness_service.gd",
|
||||
"res://scripts/environment/weather_timeline.gd",
|
||||
"res://scripts/events/event_action.gd",
|
||||
"res://scripts/events/event_choice.gd",
|
||||
"res://scripts/events/event_condition.gd",
|
||||
"res://scripts/events/event_definition.gd",
|
||||
"res://scripts/events/event_instance.gd",
|
||||
"res://scripts/events/event_service.gd",
|
||||
"res://scripts/facility/facility_instance.gd",
|
||||
"res://scripts/facility/facility_pricing.gd",
|
||||
"res://scripts/facility/facility_service.gd",
|
||||
"res://scripts/facility/service_instance.gd",
|
||||
"res://scripts/facility/service_request.gd",
|
||||
"res://scripts/guest/guest_definition.gd",
|
||||
"res://scripts/guest/guest_runtime.gd",
|
||||
"res://scripts/guest/guest_service.gd",
|
||||
"res://scripts/inventory/inventory_reservation.gd",
|
||||
"res://scripts/inventory/inventory_service.gd",
|
||||
"res://scripts/inventory/logistics_dispatcher.gd",
|
||||
"res://scripts/inventory/logistics_request.gd",
|
||||
"res://scripts/mana/mana_network_service.gd",
|
||||
"res://scripts/mana/mana_power_projection.gd",
|
||||
"res://scripts/mana/mana_reserve_balance.gd",
|
||||
"res://scripts/operations/operations_coordinator.gd",
|
||||
"res://scripts/progression/progression_service.gd",
|
||||
"res://scripts/relationship/placement_risk_preview_service.gd",
|
||||
"res://scripts/relationship/relationship_service.gd",
|
||||
"res://scripts/relationship/relationship_state.gd",
|
||||
"res://scripts/staff/shift_instance.gd",
|
||||
"res://scripts/staff/staff_commute_service.gd",
|
||||
"res://scripts/staff/staff_runtime.gd",
|
||||
"res://scripts/staff/staff_service.gd",
|
||||
"res://scripts/staff/staff_task.gd",
|
||||
"res://scripts/staff/task_dispatcher.gd",
|
||||
"res://scripts/supply/kitchen_production_service.gd",
|
||||
"res://scripts/supply/supply_auto_purchase_plans.gd",
|
||||
"res://scripts/supply/supply_auto_purchase_quote_plans.gd",
|
||||
"res://scripts/supply/supply_catalog.gd",
|
||||
"res://scripts/supply/supply_logistics_bridge.gd",
|
||||
"res://scripts/supply/supply_management_service.gd",
|
||||
"res://scripts/supply/supply_purchase_quote_v2.gd",
|
||||
"res://scripts/transport/elevator_service.gd",
|
||||
"res://scripts/ui/business_management_panel.gd",
|
||||
"res://scripts/ui/defense_management_panel.gd",
|
||||
"res://scripts/ui/event_log_dialog.gd",
|
||||
"res://scripts/ui/guest_observation_panel.gd",
|
||||
"res://scripts/ui/inactive_layer_rooms.gd",
|
||||
"res://scripts/ui/infirmary_room_art.gd",
|
||||
"res://scripts/ui/inn_opening_guide.gd",
|
||||
"res://scripts/ui/layer_interface_skin.gd",
|
||||
"res://scripts/ui/manual_save_slots_dialog.gd",
|
||||
"res://scripts/ui/operating_ledger_panel.gd",
|
||||
"res://scripts/ui/paired_bgm.gd",
|
||||
"res://scripts/ui/pixel_people.gd",
|
||||
"res://scripts/ui/pixel_tower_art.gd",
|
||||
"res://scripts/ui/pixel_tower_demo.gd",
|
||||
"res://scripts/ui/room_presentation.gd",
|
||||
"res://scripts/ui/staff_management_panel.gd",
|
||||
"res://scripts/ui/standard_room_art.gd",
|
||||
"res://scripts/ui/supply_management_panel.gd",
|
||||
"res://scripts/ui/ui_audio_feedback.gd",
|
||||
"res://scripts/ui/ui_audio_owner_shutdown.gd",
|
||||
"res://scripts/ui/ui_audio_settings_dialog.gd",
|
||||
"res://scripts/ui/visual_theme_profile.gd",
|
||||
"res://scripts/ui/world_tree_rank_dialog.gd",
|
||||
"res://scripts/world/facility_infrastructure_projector.gd",
|
||||
"res://scripts/world/legacy_stair_service.gd",
|
||||
"res://scripts/world/path_service.gd",
|
||||
"res://scripts/world/route_subslot_path_adapter.gd",
|
||||
"res://scripts/world/spatial_subslot_service.gd",
|
||||
"res://scripts/world/world_service.gd",
|
||||
"res://tests/business/test_business_closure.gd",
|
||||
"res://tests/business/test_business_operations.gd",
|
||||
"res://tests/business/test_required_kitchen.gd",
|
||||
"res://tests/environment/test_cleaning_access.gd",
|
||||
"res://tests/environment/test_facility_cleanliness.gd",
|
||||
"res://tests/environment/test_runtime_cleanliness.gd",
|
||||
"res://tests/environment/test_runtime_weather.gd",
|
||||
"res://tests/environment/test_weather_recovery.gd",
|
||||
"res://tests/environment/test_weather_timeline.gd",
|
||||
"res://tests/export/test_exported_opening.gd",
|
||||
"res://tests/fixtures/p08-02/mixed_world.gd",
|
||||
"res://tests/fixtures/p08-02/reader.gd",
|
||||
"res://tests/fixtures/p08-02/writer.gd",
|
||||
"res://tests/fixtures/p08-03/passive_placement.gd",
|
||||
"res://tests/fixtures/p08-03/placement.gd",
|
||||
"res://tests/fixtures/p23-03/diagnostic_stream.gd",
|
||||
"res://tests/fixtures/p23-03/layout_comparison.gd",
|
||||
"res://tests/fixtures/p23-03/observation.gd",
|
||||
"res://tests/fixtures/p23-03/passive_observation.gd",
|
||||
"res://tests/fixtures/p23-03/passive_os_recorder.gd",
|
||||
"res://tests/fixtures/pre_auto_purchase_runtime.gd",
|
||||
"res://tests/fixtures/pre_upkeep_runtime.gd",
|
||||
"res://tests/fixtures/required_kitchen_setup.gd",
|
||||
"res://tests/helpers/ui_audio_fixture_cleanup.gd",
|
||||
"res://tests/helpers/ui_audio_teardown.gd",
|
||||
"res://tests/mvp/test_amelia_donations.gd",
|
||||
"res://tests/mvp/test_anri_floor_pricing.gd",
|
||||
"res://tests/mvp/test_approved_free_unique_arrears.gd",
|
||||
"res://tests/mvp/test_chapel_boundaries.gd",
|
||||
"res://tests/mvp/test_chapel_service.gd",
|
||||
"res://tests/mvp/test_fine_cleaning_effect.gd",
|
||||
"res://tests/mvp/test_mvp_content_catalog.gd",
|
||||
"res://tests/mvp/test_operations_coordinator.gd",
|
||||
"res://tests/mvp/test_original_midnight_settlement.gd",
|
||||
"res://tests/mvp/test_original_room_zones.gd",
|
||||
"res://tests/mvp/test_pending_service_pricing_report.gd",
|
||||
"res://tests/mvp/test_premium_room.gd",
|
||||
"res://tests/mvp/test_premium_room_guest_flow.gd",
|
||||
"res://tests/mvp/test_progression_service.gd",
|
||||
"res://tests/mvp/test_runtime_content_progression.gd",
|
||||
"res://tests/mvp/test_runtime_mana_depletion.gd",
|
||||
"res://tests/mvp/test_runtime_operations_acceptance.gd",
|
||||
"res://tests/mvp/test_runtime_operations_integration.gd",
|
||||
"res://tests/mvp/test_runtime_upkeep.gd",
|
||||
"res://tests/mvp/test_staff_unique_contract_report.gd",
|
||||
"res://tests/mvp/test_tomari_floor_trouble.gd",
|
||||
"res://tests/mvp/test_unique_character_validation_policy.gd",
|
||||
"res://tests/mvp/test_upkeep_construction_boundaries.gd",
|
||||
"res://tests/mvp/test_upkeep_legacy_midnight.gd",
|
||||
"res://tests/mvp/test_upkeep_loss_streak.gd",
|
||||
"res://tests/performance/fixtures/linear_path_reference.gd",
|
||||
"res://tests/performance/fixtures/simulation_digest_v1_reference.gd",
|
||||
"res://tests/performance/fixtures/uncached_preview_reference.gd",
|
||||
"res://tests/performance/perf_mvp_001_harness.gd",
|
||||
"res://tests/performance/profile_production_scene.gd",
|
||||
"res://tests/performance/test_digest_performance.gd",
|
||||
"res://tests/performance/test_facility_reachability.gd",
|
||||
"res://tests/performance/test_lazy_digest.gd",
|
||||
"res://tests/performance/test_mvp_manifest_cache.gd",
|
||||
"res://tests/performance/test_path_membership.gd",
|
||||
"res://tests/performance/test_perf_mvp_001.gd",
|
||||
"res://tests/performance/test_snapshot_ownership.gd",
|
||||
"res://tests/performance/test_system_optimization.gd",
|
||||
"res://tests/performance/test_world_snapshot_cache.gd",
|
||||
"res://tests/run_tests.gd",
|
||||
"res://tests/s0/test_command_snapshot_key_order.gd",
|
||||
"res://tests/s0/test_command_transaction.gd",
|
||||
"res://tests/s0/test_definition_registry.gd",
|
||||
"res://tests/s0/test_determinism.gd",
|
||||
"res://tests/s0/test_domain_events.gd",
|
||||
"res://tests/s0/test_kernel_and_save.gd",
|
||||
"res://tests/s0/test_runtime_integration.gd",
|
||||
"res://tests/s0/test_stable_id_generator.gd",
|
||||
"res://tests/s1/test_construction_service.gd",
|
||||
"res://tests/s1/test_dimension_batch_save.gd",
|
||||
"res://tests/s1/test_excavation_service.gd",
|
||||
"res://tests/s1/test_facility_infrastructure_projector.gd",
|
||||
"res://tests/s1/test_facility_resize_preview.gd",
|
||||
"res://tests/s1/test_original_facility_dimensions.gd",
|
||||
"res://tests/s1/test_p08_combined_migration.gd",
|
||||
"res://tests/s1/test_path_congestion.gd",
|
||||
"res://tests/s1/test_path_service.gd",
|
||||
"res://tests/s1/test_path_snapshot_transit_guard.gd",
|
||||
"res://tests/s1/test_route_subslot_path_adapter.gd",
|
||||
"res://tests/s1/test_runtime_infrastructure_integration.gd",
|
||||
"res://tests/s1/test_runtime_world_construction.gd",
|
||||
"res://tests/s1/test_spatial_subslot_service.gd",
|
||||
"res://tests/s1/test_weighted_resize_runtime.gd",
|
||||
"res://tests/s1/test_world_service.gd",
|
||||
"res://tests/s2/test_economy_service.gd",
|
||||
"res://tests/s2/test_facility_pricing.gd",
|
||||
"res://tests/s2/test_facility_service.gd",
|
||||
"res://tests/s2/test_facility_upkeep_accrual.gd",
|
||||
"res://tests/s2/test_facility_upkeep_settlement.gd",
|
||||
"res://tests/s2/test_inventory_logistics.gd",
|
||||
"res://tests/s2/test_kitchen_production.gd",
|
||||
"res://tests/s2/test_ledger_backed_resources.gd",
|
||||
"res://tests/s2/test_mana_network_service.gd",
|
||||
"res://tests/s2/test_mana_power_projection.gd",
|
||||
"res://tests/s2/test_mana_reserve_balance.gd",
|
||||
"res://tests/s2/test_original_facility_parameters.gd",
|
||||
"res://tests/s2/test_runtime_operations_cycle.gd",
|
||||
"res://tests/s2/test_service_start_slots.gd",
|
||||
"res://tests/s3/test_guest_observation_restore_order.gd",
|
||||
"res://tests/s3/test_guest_service.gd",
|
||||
"res://tests/s3/test_runtime_actor_cycle.gd",
|
||||
"res://tests/s3/test_runtime_actor_hardening.gd",
|
||||
"res://tests/s3/test_runtime_path_traffic.gd",
|
||||
"res://tests/s3/test_runtime_staff_assignment.gd",
|
||||
"res://tests/s3/test_staff_payroll_operations.gd",
|
||||
"res://tests/s3/test_staff_service.gd",
|
||||
"res://tests/s4/test_placement_risk_preview_service.gd",
|
||||
"res://tests/s4/test_relationship_event_service.gd",
|
||||
"res://tests/s4/test_runtime_relationship_events.gd",
|
||||
"res://tests/s5/test_authority_service.gd",
|
||||
"res://tests/s5/test_defense_service.gd",
|
||||
"res://tests/s5/test_runtime_authority_cycle.gd",
|
||||
"res://tests/s5/test_runtime_defense_autonomy.gd",
|
||||
"res://tests/s5/test_runtime_defense_cycle.gd",
|
||||
"res://tests/s5/test_runtime_event_defense.gd",
|
||||
"res://tests/s6/test_performance_budget.gd",
|
||||
"res://tests/s6/test_runtime_save_lifecycle.gd",
|
||||
"res://tests/s6/test_runtime_snapshot_serialization.gd",
|
||||
"res://tests/s6/test_save_operations.gd",
|
||||
"res://tests/s6/test_save_preflight.gd",
|
||||
"res://tests/s6/test_save_recovery_preservation.gd",
|
||||
"res://tests/staff/test_dormitory_dimension_migration.gd",
|
||||
"res://tests/staff/test_dormitory_shift_cycle.gd",
|
||||
"res://tests/staff/test_rescue_elevator.gd",
|
||||
"res://tests/staff/test_shift_rush.gd",
|
||||
"res://tests/staff/test_staff_commute.gd",
|
||||
"res://tests/staff/test_staff_dormitory.gd",
|
||||
"res://tests/staff/test_staff_rescue.gd",
|
||||
"res://tests/staff/test_staff_rest.gd",
|
||||
"res://tests/staff/test_task_work_clock.gd",
|
||||
"res://tests/supply/test_mimi_purchase_quote.gd",
|
||||
"res://tests/supply/test_normal_auto_purchase_chain.gd",
|
||||
"res://tests/supply/test_normal_supply_chain.gd",
|
||||
"res://tests/supply/test_supply_auto_purchase.gd",
|
||||
"res://tests/supply/test_supply_auto_purchase_boundaries.gd",
|
||||
"res://tests/supply/test_supply_auto_purchase_destruction.gd",
|
||||
"res://tests/supply/test_supply_logistics_bridge.gd",
|
||||
"res://tests/supply/test_supply_management_service.gd",
|
||||
"res://tests/supply/test_supply_save_migration.gd",
|
||||
"res://tests/transport/test_elevator_service.gd",
|
||||
"res://tests/transport/test_runtime_build_preview.gd",
|
||||
"res://tests/transport/test_runtime_stairs.gd",
|
||||
"res://tests/transport/test_runtime_transport.gd",
|
||||
"res://tests/transport/test_runtime_transport_comparison.gd",
|
||||
"res://tests/transport/test_transport_boundaries.gd",
|
||||
"res://tests/transport/test_transport_comparison.gd",
|
||||
"res://tests/transport/test_transport_density_migration.gd",
|
||||
"res://tests/transport/test_transport_save.gd",
|
||||
"res://tests/ui/capture_main_dashboard.gd",
|
||||
"res://tests/ui/capture_pixel_tower.gd",
|
||||
"res://tests/ui/fixtures/counted_dashboard.gd",
|
||||
"res://tests/ui/fixtures/opening_restart_flow.gd",
|
||||
"res://tests/ui/fixtures/selection_cross_process.gd",
|
||||
"res://tests/ui/test_actor_selection.gd",
|
||||
"res://tests/ui/test_anri_recruitment.gd",
|
||||
"res://tests/ui/test_approved_free_unique_arrears_ui.gd",
|
||||
"res://tests/ui/test_business_management.gd",
|
||||
"res://tests/ui/test_chapel_gameplay.gd",
|
||||
"res://tests/ui/test_cleaning_gameplay.gd",
|
||||
"res://tests/ui/test_dashboard_coalescing.gd",
|
||||
"res://tests/ui/test_defense_management.gd",
|
||||
"res://tests/ui/test_dimension_migration_ui.gd",
|
||||
"res://tests/ui/test_elevator_management.gd",
|
||||
"res://tests/ui/test_event_log_ui.gd",
|
||||
"res://tests/ui/test_first_operating_day.gd",
|
||||
"res://tests/ui/test_guest_decision_log.gd",
|
||||
"res://tests/ui/test_guest_observation.gd",
|
||||
"res://tests/ui/test_layer_presentation.gd",
|
||||
"res://tests/ui/test_layer_skin.gd",
|
||||
"res://tests/ui/test_main_audio_feedback.gd",
|
||||
"res://tests/ui/test_main_dashboard.gd",
|
||||
"res://tests/ui/test_opening_assignment.gd",
|
||||
"res://tests/ui/test_original_build_pointer.gd",
|
||||
"res://tests/ui/test_original_facility_controls.gd",
|
||||
"res://tests/ui/test_p08_normal_placement_ops.gd",
|
||||
"res://tests/ui/test_p23_life_observation.gd",
|
||||
"res://tests/ui/test_paired_bgm.gd",
|
||||
"res://tests/ui/test_pixel_tower.gd",
|
||||
"res://tests/ui/test_rank_pointer.gd",
|
||||
"res://tests/ui/test_room_presentation.gd",
|
||||
"res://tests/ui/test_selection_autosave.gd",
|
||||
"res://tests/ui/test_selection_departure.gd",
|
||||
"res://tests/ui/test_selection_lifecycle.gd",
|
||||
"res://tests/ui/test_staff_management.gd",
|
||||
"res://tests/ui/test_staff_rescue.gd",
|
||||
"res://tests/ui/test_staff_rest.gd",
|
||||
"res://tests/ui/test_stair_transport_details.gd",
|
||||
"res://tests/ui/test_supply_auto_purchase_ui.gd",
|
||||
"res://tests/ui/test_supply_management.gd",
|
||||
"res://tests/ui/test_ui_audio_feedback.gd",
|
||||
"res://tests/ui/test_ui_presentation_audio_contract.gd",
|
||||
"res://tests/ui/test_upkeep_closed_ui.gd",
|
||||
"res://tests/ui/test_upkeep_inspector.gd",
|
||||
"res://tests/ui/test_world_tree_rank.gd",
|
||||
"res://tests/world/test_elevator_topology.gd",
|
||||
"res://tests/world/test_legacy_stairs.gd",
|
||||
"res://tests/world/test_path_transit_density.gd",
|
||||
"res://tests/world/test_path_vertical_policy.gd",
|
||||
"res://tests/world/test_stair_infrastructure.gd",
|
||||
"res://tools/capture_facility_audit.gd"
|
||||
]
|
||||
+252
File diff suppressed because one or more lines are too long
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"scope": "frozen checker before independent visual verdicts; preparation only",
|
||||
"candidate": "49445d4a4d38281eb29dab1c1f85dd2b8ffbed11",
|
||||
"checker_sha256": "927f8f63eef7d55c4a9f96783e7240adb05ad236c9252dd8b9e27e9beb996683",
|
||||
"elapsed_seconds": 269.671074125,
|
||||
"deficits": [
|
||||
"missing actual OS A semantic/pixel coverage: room",
|
||||
"missing actual OS A semantic/pixel coverage: queue",
|
||||
"missing actual OS A semantic/pixel coverage: EV",
|
||||
"missing actual OS A semantic/pixel coverage: staff",
|
||||
"missing actual OS A semantic/pixel coverage: goods",
|
||||
"missing actual OS A semantic/pixel coverage: business",
|
||||
"missing actual OS B semantic/pixel coverage: room",
|
||||
"missing actual OS B semantic/pixel coverage: queue",
|
||||
"missing actual OS B semantic/pixel coverage: EV",
|
||||
"missing actual OS B semantic/pixel coverage: staff",
|
||||
"missing actual OS B semantic/pixel coverage: goods",
|
||||
"missing actual OS B semantic/pixel coverage: business",
|
||||
"room_occupancy_and_operation: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"queues_and_overflow: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"elevator_state_and_passengers: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"staff_state_and_jobs: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"supplies_and_carried_goods: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"same_demand_route_improvement: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}",
|
||||
"normal_os_and_distinct_pid_resume: {\"room\": [\"os_guards\", \"pixels_room\"], \"queue\": [\"os_guards\", \"pixels_queue\"], \"EV\": [\"os_guards\", \"pixels_EV\"], \"staff\": [\"os_guards\", \"pixels_staff\"], \"goods\": [\"os_guards\", \"pixels_goods\"], \"business\": [\"os_guards\", \"pixels_business\"]}"
|
||||
],
|
||||
"uncaught_error": null,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+122
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"error": null,
|
||||
"cleanup": [
|
||||
{
|
||||
"pid": 15998,
|
||||
"cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"outer_cleanup_errors": [],
|
||||
"engine_ended": true,
|
||||
"outer_maximum_helper_invocations": 3,
|
||||
"helper_maximum_waits": 3,
|
||||
"per_wait_timeout_seconds": 5,
|
||||
"foreign_process_or_group_signals": 0
|
||||
},
|
||||
{
|
||||
"pid": 16095,
|
||||
"cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"outer_cleanup_errors": [],
|
||||
"engine_ended": true,
|
||||
"outer_maximum_helper_invocations": 3,
|
||||
"helper_maximum_waits": 3,
|
||||
"per_wait_timeout_seconds": 5,
|
||||
"foreign_process_or_group_signals": 0
|
||||
},
|
||||
{
|
||||
"pid": 16134,
|
||||
"cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"outer_cleanup_errors": [],
|
||||
"engine_ended": true,
|
||||
"outer_maximum_helper_invocations": 3,
|
||||
"helper_maximum_waits": 3,
|
||||
"per_wait_timeout_seconds": 5,
|
||||
"foreign_process_or_group_signals": 0
|
||||
},
|
||||
{
|
||||
"pid": 16228,
|
||||
"cleanup": {
|
||||
"owned_child_created": true,
|
||||
"engine_ended": true,
|
||||
"actual_process_exit_code": 0,
|
||||
"attempts": [
|
||||
{
|
||||
"attempt": 1,
|
||||
"kill_attempted": false,
|
||||
"wait_timeout_seconds": 5,
|
||||
"wait_completed": true,
|
||||
"errors": [],
|
||||
"poll_before": 0,
|
||||
"wait_returned_code": 0,
|
||||
"poll_after": 0
|
||||
}
|
||||
],
|
||||
"errors": []
|
||||
},
|
||||
"outer_cleanup_errors": [],
|
||||
"engine_ended": true,
|
||||
"outer_maximum_helper_invocations": 3,
|
||||
"helper_maximum_waits": 3,
|
||||
"per_wait_timeout_seconds": 5,
|
||||
"foreign_process_or_group_signals": 0
|
||||
}
|
||||
],
|
||||
"cleanup_errors": [],
|
||||
"phases": [
|
||||
"runs/import/import-receipt.json",
|
||||
"runs/parse/parse-receipt.json",
|
||||
"runs/layout-a/layout-a-receipt.json",
|
||||
"runs/layout-b/layout-b-receipt.json"
|
||||
],
|
||||
"formal_acceptance": false,
|
||||
"native_Windows": "pending"
|
||||
}
|
||||
+4925
File diff suppressed because it is too large
Load Diff
+19
@@ -0,0 +1,19 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-cold-r06.py',run_name='offload_library'))
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];rows=m['members'];p=json.loads((D/'PREPARED.json').read_bytes());v=json.loads((D/'CLOUD_ARCHIVE_VERIFIED.json').read_bytes());src=json.loads((D/'SOURCE_RECHECK.json').read_bytes())
|
||||
assert v['actual_cloud_readback']and v['whole_archive_sha256']==p['sha256']and v['original_file_mappings_verified']==m['files'];assert src['all_sources_unchanged']and src['manifest_sha256']==sha(D/'MANIFEST.json')and time.time()-src['recorded_unix']<3600
|
||||
for name in ['MANIFEST.json','PREPARED.json','CLOUD_PARTS.json','CLOUD_ARCHIVE_VERIFIED.json','RESTORE.md','restore.py']:
|
||||
r=json.loads((D/('READBACK-'+name+'.json')).read_bytes());assert r['actual_cloud_readback_verified']and r['sha256']==sha(D/name)
|
||||
assert not(D/'RETIREMENT.json').exists();idle()
|
||||
for x in rows:
|
||||
q=B/x['path'];st=q.lstat();assert not q.is_symlink()and (q.is_file()if x['type']=='file'else q.is_dir());assert st.st_mtime_ns==x['mtime_ns']and st.st_mode&0o7777==x['mode'];assert x['type']!='file'or st.st_size==x['bytes']
|
||||
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:assert q.stat().st_size==p['bytes']and sha(q)==p['sha256']
|
||||
free=shutil.disk_usage(R).free;save(D/'RETIREMENT_INTENT.json',dict(unix=time.time(),manifest_sha256=sha(D/'MANIFEST.json'),whole_archive_sha256=p['sha256'],full_cloud_content_verified=True,all_sources_rehashed_and_stat_rechecked=True,active_jobs_and_open_files_zero=True,files=m['files'],roots=roots))
|
||||
for x in rows:
|
||||
if x['type']=='file':(B/x['path']).unlink()
|
||||
for x in sorted(rows,key=lambda x:len(Path(x['path']).parts),reverse=True):
|
||||
if x['type']=='directory':(B/x['path']).rmdir()
|
||||
for s in roots:
|
||||
root=B/s;assert not root.exists();pointer=root.parent/(root.name+'.CLOUD_ARCHIVE_R06.json');assert not pointer.exists();save(pointer,dict(state='cloud_archived',original_root=str(root),folder_url='https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK',cloud_parts=str(D/'CLOUD_PARTS.json'),restore=str(D/'RESTORE.md'),whole_archive_sha256=p['sha256'],source_and_current_canonical_build_evidence_retained=True,formal_credit=0))
|
||||
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:q.unlink()
|
||||
res=dict(recorded_unix=time.time(),files=m['files'],roots=roots,logical_bytes=m['logical_bytes'],unique_bytes=m['unique_bytes'],cloud_archive_bytes=p['bytes'],free_before_selection=m['free_before'],free_before_retirement=free,free_after=shutil.disk_usage(R).free,net_free_change_from_selection=shutil.disk_usage(R).free-m['free_before'],actual_cloud_readback_all_payloads_verified=True,retired_only_manifest_members=True,current_sources_build_evidence_run_records_review_results_retained=True,temporary_archives_removed_after_verification=True,formal_credit=0)
|
||||
save(D/'RETIREMENT.json',res);print(json.dumps(res),flush=True)
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-cold-r06.py',run_name='offload_library'))
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());idle();assert inv()==m['members'];save(D/'SOURCE_RECHECK.json',dict(recorded_unix=time.time(),all_sources_unchanged=True,manifest_sha256=sha(D/'MANIFEST.json')));print('All 14,259 source files rehashed and unchanged',flush=True)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-cold-r06.py',run_name='offload_library'))
|
||||
p=json.loads((D/'PREPARED.json').read_bytes());m=json.loads((D/'MANIFEST.json').read_bytes());a=T/'cloud-readback.tar.gz';parts=[json.loads((T/f'cloud-{i:04d}.json').read_bytes())for i in range(4)];assert all(x['actual_cloud_readback_verified']for x in parts)
|
||||
assert a.stat().st_size==p['bytes']==sum(x['bytes']for x in parts) and sha(a)==p['sha256'];objs={x['sha256']:x for x in m['members']if x['type']=='file'};seen=set()
|
||||
with tarfile.open(a,'r|gz')as t:
|
||||
for e in t:
|
||||
assert e.isfile() and e.name not in seen;seen.add(e.name)
|
||||
with t.extractfile(e)as f:
|
||||
if e.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes()
|
||||
else:
|
||||
assert e.name.startswith('objects/');h=e.name[8:];assert h in objs and e.size==objs[h]['bytes'];v=hashlib.sha256()
|
||||
for b in iter(lambda:f.read(1024**2),b''):v.update(b)
|
||||
assert v.hexdigest()==h
|
||||
assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs}
|
||||
save(D/'CLOUD_PARTS.json',parts);save(D/'CLOUD_ARCHIVE_VERIFIED.json',dict(actual_cloud_readback=True,whole_archive_sha256=sha(a),bytes=a.stat().st_size,all_unique_payloads_verified=len(objs),original_file_mappings_verified=m['files'],manifest_identical=True,formal_credit=0));print('Complete cloud archive and all 14,259 file mappings verified',flush=True)
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
from pathlib import Path
|
||||
import os,json,hashlib,tarfile,io,shutil,time,subprocess,sqlite3
|
||||
R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');B=R/'artifacts/original-completion-2026-10-02';D=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-cold-r06-20261015';T=Path('/private/tmp/tree-offload-cold-r06')
|
||||
roots=['p23-03-native-os-49445d4-r13','p08-runtime-preview-8d52b20-target-r02/stage','p08-runtime-preview-78dc82d-targeted-r01/stage','p08-runtime-preview-12f04d6-target-impact-r03/stage']
|
||||
def sha(p):
|
||||
h=hashlib.sha256()
|
||||
with p.open('rb')as f:
|
||||
for b in iter(lambda:f.read(1024**2),b''):h.update(b)
|
||||
return h.hexdigest()
|
||||
def save(p,v):p.write_text(json.dumps(v,ensure_ascii=False,indent=2)+'\n')
|
||||
def idle():
|
||||
ps=subprocess.check_output(['ps','-axo','pid,command'],text=True);opened=subprocess.run(['lsof','-n','-F','n'],capture_output=True,text=True).stdout
|
||||
for s in roots:
|
||||
assert not any(str(B/s)in x for x in ps.splitlines());assert not any(x.startswith('n'+str(B/s)+'/')for x in opened.splitlines());assert not subprocess.check_output(['git','-C',str(R),'ls-files','--',str(B/s)],text=True).strip()
|
||||
def inv():
|
||||
rows=[]
|
||||
for s in roots:
|
||||
p=B/s;assert p.is_dir()and not p.is_symlink()
|
||||
for x in [p]+sorted(p.rglob('*')):
|
||||
st=x.lstat();assert not x.is_symlink()and(x.is_file()or x.is_dir()),str(x);v=dict(path=str(x.relative_to(B)),type='file'if x.is_file()else'directory',mode=st.st_mode&0o7777,mtime_ns=st.st_mtime_ns)
|
||||
if x.is_file():v.update(bytes=st.st_size,sha256=sha(x),allocated=st.st_blocks*512)
|
||||
rows.append(v)
|
||||
return rows
|
||||
if __name__=='__main__':
|
||||
assert not D.exists()and not T.exists();D.mkdir();T.mkdir();idle();free=shutil.disk_usage(R).free;rows=inv();objs={x['sha256']:x for x in rows if x['type']=='file'};m=dict(base=str(B),roots=roots,members=rows,files=sum(x['type']=='file'for x in rows),logical_bytes=sum(x.get('bytes',0)for x in rows),unique_bytes=sum(x['bytes']for x in objs.values()),free_before=free,created=time.time(),scope='Superseded P23 49445d4 r13 diagnostic including its failed original12 observations, plus three older P08 runtime-preview stage copies; P23 held9a26 and P08 currentd369 and all P18 sources/proofs retained; no acceptance change',formal_credit=0);save(D/'MANIFEST.json',m);assert free>m['unique_bytes']+512*1024**2
|
||||
a=T/'cold-r06.tar.gz'
|
||||
with tarfile.open(a,'w:gz',compresslevel=6)as t:
|
||||
for h,x in sorted(objs.items()):
|
||||
assert shutil.disk_usage(R).free>1024**3;t.add(B/x['path'],arcname='objects/'+h,recursive=False)
|
||||
v=(D/'MANIFEST.json').read_bytes();e=tarfile.TarInfo('MANIFEST.json');e.size=len(v);t.addfile(e,io.BytesIO(v))
|
||||
seen=set()
|
||||
with tarfile.open(a,'r|gz')as t:
|
||||
for e in t:
|
||||
assert e.isfile()and e.name not in seen;seen.add(e.name)
|
||||
with t.extractfile(e)as f:
|
||||
if e.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes()
|
||||
else:
|
||||
h=e.name[8:];assert e.name.startswith('objects/')and h in objs and e.size==objs[h]['bytes'];v=hashlib.sha256()
|
||||
for b in iter(lambda:f.read(1024**2),b''):v.update(b)
|
||||
assert v.hexdigest()==h
|
||||
assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs};save(D/'PREPARED.json',dict(archive=str(a),bytes=a.stat().st_size,sha256=sha(a),all_members_verified=True,unique_payloads=len(objs)));print(json.dumps(dict(files=m['files'],logical_bytes=m['logical_bytes'],unique_bytes=m['unique_bytes'],archive_bytes=a.stat().st_size)),flush=True)
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"free_before": 2665308160,
|
||||
"unique_input_bytes": 2182682276,
|
||||
"minimum_remaining_bytes": 1073741824,
|
||||
"strategy": "Guarded compressed writer checks free space every 1 MiB; no uncompressed staging; source remains intact on failure",
|
||||
"source_removal_requires": "Complete actual cloud readback and all source/member hashes match"
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"actual_cloud_readback": true,
|
||||
"whole_archive_sha256": "adf793994e1d0079b226f882d40fd9dc0d8282da42d7b04d24195e2b3a84c151",
|
||||
"bytes": 437422438,
|
||||
"all_unique_payloads_verified": 10804,
|
||||
"original_file_mappings_verified": 47574,
|
||||
"manifest_identical": true,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+198
@@ -0,0 +1,198 @@
|
||||
[
|
||||
{
|
||||
"order": 0,
|
||||
"offset": 0,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0000.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "88c14f4fc36278bdbe953e60a4a9a0c03312c4a90fc4a18b6cdbb44af8c811c8",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp",
|
||||
"title": "review-material-r04.tar.gz.part-0000",
|
||||
"file_name": "review-material-r04.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp",
|
||||
"title": "review-material-r04.tar.gz.part-0000",
|
||||
"file_name": "review-material-r04.tar.gz.part-0000",
|
||||
"mime_type": "application/x-gzip",
|
||||
"url": "https://drive.google.com/file/d/1zDFSBgYRTnNh633ee8yzsjtq7dQeHoWp/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 1,
|
||||
"offset": 67108864,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0001.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "2c05a971176d0b5e9f3c288f69ce5d4ec9dc6c8623d6c52edbd709aa5f4b9b0c",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC",
|
||||
"title": "review-material-r04.tar.gz.part-0001",
|
||||
"file_name": "review-material-r04.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC",
|
||||
"title": "review-material-r04.tar.gz.part-0001",
|
||||
"file_name": "review-material-r04.tar.gz.part-0001",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1adCPiKM7VECXZxCX1AHdBZxUSKXIyAiC/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"offset": 134217728,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0002.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "608f89ef345bee96cd275ae67ee6b0636fc9165e7a3ef539b1e48d1b973f27ac",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9",
|
||||
"title": "review-material-r04.tar.gz.part-0002",
|
||||
"file_name": "review-material-r04.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9",
|
||||
"title": "review-material-r04.tar.gz.part-0002",
|
||||
"file_name": "review-material-r04.tar.gz.part-0002",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/15_UXbGuW50NkTf1RgbkBSpUodPmXfcY9/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"offset": 201326592,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0003.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "a6e73590c86b6282ef63fd88863de357911434998f389229cdb2ac1f470a53bc",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA",
|
||||
"title": "review-material-r04.tar.gz.part-0003",
|
||||
"file_name": "review-material-r04.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA",
|
||||
"title": "review-material-r04.tar.gz.part-0003",
|
||||
"file_name": "review-material-r04.tar.gz.part-0003",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ki8e92PBUZeOavzsuvfQU4zoMIvwQdyA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"offset": 268435456,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0004.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "a50e262a1ec412b97f1185b469d436f4fcd1fc020cbbe972209a6f609448bb13",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl",
|
||||
"title": "review-material-r04.tar.gz.part-0004",
|
||||
"file_name": "review-material-r04.tar.gz.part-0004",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl",
|
||||
"title": "review-material-r04.tar.gz.part-0004",
|
||||
"file_name": "review-material-r04.tar.gz.part-0004",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1I8To-mkJC_kmQZyYiRbrCipaeF4cidcl/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"offset": 335544320,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0005.bin",
|
||||
"bytes": 67108864,
|
||||
"sha256": "67ba53bbd2dc2416661e888758419d9465d3a5dd5f8ffc191f788493e013f305",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ",
|
||||
"title": "review-material-r04.tar.gz.part-0005",
|
||||
"file_name": "review-material-r04.tar.gz.part-0005",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ",
|
||||
"title": "review-material-r04.tar.gz.part-0005",
|
||||
"file_name": "review-material-r04.tar.gz.part-0005",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1ILqHWPtXVjZ4nvgkaNBgjw4TrEdIuXpZ/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"offset": 402653184,
|
||||
"path": "/private/tmp/tree-offload-review-r04/upload-0006.bin",
|
||||
"bytes": 34769254,
|
||||
"sha256": "a88d6f246cef9c98686f94cf1167b4a6cb980610d44043e404f7515575adb202",
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO",
|
||||
"title": "review-material-r04.tar.gz.part-0006",
|
||||
"file_name": "review-material-r04.tar.gz.part-0006",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO",
|
||||
"title": "review-material-r04.tar.gz.part-0006",
|
||||
"file_name": "review-material-r04.tar.gz.part-0006",
|
||||
"mime_type": "application/octet-stream",
|
||||
"url": "https://drive.google.com/file/d/1K1xXtKe-PNuVtpqgjltLXMuJJVlOL-zO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true
|
||||
}
|
||||
]
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"current_worker_source": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"worker_clean": true,
|
||||
"all_eight_current_candidate_receipts_unchanged": true,
|
||||
"proofs": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence/runner-input.json",
|
||||
"sha256": "468fbe7da8f247098e3c47b720a22b211eed4164d2bb82e06a6708f192c47bec",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence/runner-ended.json",
|
||||
"sha256": "101bac8ddb8acc46c147cb75191c223ae426f965cd4fe660cd1ca89a82760bc6",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence/receipt.json",
|
||||
"sha256": "dd4d56b520914c7b28849c6d7393d389eee0c06ade28364ab66497e74ef414da",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence/all-tests.json",
|
||||
"sha256": "bca039cb42aeba881fc9266ef07861698276dfcd8180e7bd7336f37a0b48e90a",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01/runner-input.json",
|
||||
"sha256": "c5e601dd8c7f75f3ac054a5a28c7805490f20570372ed1a99e69ae67321ef5e2",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01/runner-ended.json",
|
||||
"sha256": "c5bf962e4caf4d2c84c21dcdfa459e4ed451bbae2ce88d36b6e057618b5bdd30",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01/receipt.json",
|
||||
"sha256": "ebf166068947255191dc88458f472093b6a81da57c2e30d8ded1891e1f0a7227",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01/all-tests.json",
|
||||
"sha256": "5a063b2c35a1e21cc57a59ad6dd1fc159a58d84201594f0dc08114bf2594861b",
|
||||
"unchanged": true
|
||||
}
|
||||
]
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"original_name": "MANIFEST.json",
|
||||
"uncompressed_bytes": 18705507,
|
||||
"uncompressed_sha256": "0070c6cd45eb91b11251fa0568ca7baa8bff3cf4fd98a6dbc5c11b5214287877",
|
||||
"compressed_name": "MANIFEST.json.gz",
|
||||
"compressed_bytes": 2630300,
|
||||
"compressed_sha256": "022eb08691a8014bb8d2d644bcd918cdb748740d3603b39683d30dbb781f83b3",
|
||||
"cloud_manifest": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"exact_content_verified": true
|
||||
}
|
||||
BIN
Binary file not shown.
+72
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"reason": "Keep archive pointers beside managed checkouts to avoid introducing untracked files into Runner worktrees; unrelated prior worktree status retained",
|
||||
"no_archival_pointer_inside_review_checkouts": true,
|
||||
"rows": [
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-02/P08-02-review-371d8aef/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-02/P08-02-review-371d8aef.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "e8f0b274f94c925d79f115cbe59f9c49c86c05d06294a2f2de1eb278c862b388",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-02/P08-02-review-ce2291ae/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-02/P08-02-review-ce2291ae.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "532dec7e83a76d7728fa8dcacfed9ddec361e9fb8cb00299db745af03d85fbe6",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-2ecdb277/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-2ecdb277.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "d64442800d3ea7bef93001e8f582234605fa02b2a46fb371f6940f2f5a83a4ef",
|
||||
"git_status_after": "?? .owner-review-context/\n"
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-c36607d5/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-c36607d5.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "e94711fa7de44d86571ce73d96f2efe31f43f26867e751bf7d7eff691a903757",
|
||||
"git_status_after": "?? .owner-review-context/\n"
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-d137e8d8/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-d137e8d8.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "d9a787ed09e166629610683bdfe7e1b5c0354d8ed42f721892c55abc04f5650f",
|
||||
"git_status_after": "?? .owner-review-context/\n"
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-semantic-25b9e45a/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-03-code/P08-03-review-semantic-25b9e45a.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "031a3658c99229e3e8235bd9c29ff85d60a0d1421c72343616f776eda50a050a",
|
||||
"git_status_after": "?? .owner-review-context/\n"
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-runtime-preview/P08-03-RTPREVIEW-review-8c717f07/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p08-runtime-preview/P08-03-RTPREVIEW-review-8c717f07.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "0d40252a2e22642cc22a598cc423071df2bfd7b1c4c841a466355fcf095fe801",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-03/P13-03-review-a563028f/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-03/P13-03-review-a563028f.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "cf29c387dcf64b1c2ca62471873479563c350faf69c24a16465c9ad357cf1779",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-03/P13-03-review-d2babf54/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p13-03/P13-03-review-d2babf54.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "ab9fb2124ed8f86bbbdd65e93c905a189ded91ed9ca88121f7fbf24885271f58",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-review-16d03793/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-review-16d03793.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "71b0733ff0799bd46bf3ad7afac371387bc0bbb53d192d9778a0db43bf5e4202",
|
||||
"git_status_after": ""
|
||||
},
|
||||
{
|
||||
"old_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/runner-agy-execution/RP24-02-review-2c927186/.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"new_pointer": "/Users/korizatou114/Projects/TheTree-managed-worktrees/runner-agy-execution/RP24-02-review-2c927186.review-material.CLOUD_ARCHIVE_R04.json",
|
||||
"unchanged_sha256": "596ddb441bb9d1661ce3f5363d0f62ff485538e1491fcd3aad5044447cc8a2c0",
|
||||
"git_status_after": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"archive": "/private/tmp/tree-offload-review-r04/review-material-r04.tar.gz",
|
||||
"bytes": 437422438,
|
||||
"sha256": "adf793994e1d0079b226f882d40fd9dc0d8282da42d7b04d24195e2b3a84c151",
|
||||
"all_members_verified": true,
|
||||
"unique_payloads": 10804,
|
||||
"source_initial_inventory_sha256": "0070c6cd45eb91b11251fa0568ca7baa8bff3cf4fd98a6dbc5c11b5214287877",
|
||||
"verification": "single sequential streaming pass across every archive object"
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1DHJ1MYJfU3fE-U71XZ2fDchadExmM3w6",
|
||||
"title": "review-material-r04-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"file_name": "review-material-r04-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1DHJ1MYJfU3fE-U71XZ2fDchadExmM3w6/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1DHJ1MYJfU3fE-U71XZ2fDchadExmM3w6",
|
||||
"title": "review-material-r04-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"file_name": "review-material-r04-CLOUD_ARCHIVE_VERIFIED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1DHJ1MYJfU3fE-U71XZ2fDchadExmM3w6/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "ef3269f1d34eb5673850e096d7c6b78205ab5f3bf0efa6a8f28142c7caad5667",
|
||||
"bytes": 289
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1s2kZvLjA_2lzWRj6dzUOuqJ8cOCJhdEV",
|
||||
"title": "review-material-r04-CLOUD_PARTS.json",
|
||||
"file_name": "review-material-r04-CLOUD_PARTS.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1s2kZvLjA_2lzWRj6dzUOuqJ8cOCJhdEV/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1s2kZvLjA_2lzWRj6dzUOuqJ8cOCJhdEV",
|
||||
"title": "review-material-r04-CLOUD_PARTS.json",
|
||||
"file_name": "review-material-r04-CLOUD_PARTS.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1s2kZvLjA_2lzWRj6dzUOuqJ8cOCJhdEV/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "69d7e232d938112e0a1d60cb38252fb888909c17fc426ba7025c456d48087a3f",
|
||||
"bytes": 8312
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "19esHPY2m15iQD8A7dX-0TxXdbJoLShOA",
|
||||
"title": "review-material-r04-MANIFEST.json",
|
||||
"file_name": "review-material-r04-MANIFEST.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/19esHPY2m15iQD8A7dX-0TxXdbJoLShOA/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "0070c6cd45eb91b11251fa0568ca7baa8bff3cf4fd98a6dbc5c11b5214287877",
|
||||
"bytes": 18705507
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1nMn0jM0zWQma1VnNO-nQXagLui3NR8LO",
|
||||
"title": "review-material-r04-PREPARED.json",
|
||||
"file_name": "review-material-r04-PREPARED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1nMn0jM0zWQma1VnNO-nQXagLui3NR8LO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1nMn0jM0zWQma1VnNO-nQXagLui3NR8LO",
|
||||
"title": "review-material-r04-PREPARED.json",
|
||||
"file_name": "review-material-r04-PREPARED.json",
|
||||
"mime_type": "application/json",
|
||||
"url": "https://drive.google.com/file/d/1nMn0jM0zWQma1VnNO-nQXagLui3NR8LO/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "e9060ad02a36eda0207b361257ba1254fefdeb235240187b15df81677f09fad4",
|
||||
"bytes": 432
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "13RMXOHPtCp8LHnb1D9XvMS3M2_ZEhaqj",
|
||||
"title": "review-material-r04-RESTORE.md",
|
||||
"file_name": "review-material-r04-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/13RMXOHPtCp8LHnb1D9XvMS3M2_ZEhaqj/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "13RMXOHPtCp8LHnb1D9XvMS3M2_ZEhaqj",
|
||||
"title": "review-material-r04-RESTORE.md",
|
||||
"file_name": "review-material-r04-RESTORE.md",
|
||||
"mime_type": "text/markdown",
|
||||
"url": "https://drive.google.com/file/d/13RMXOHPtCp8LHnb1D9XvMS3M2_ZEhaqj/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "62732c3d01b38d5ef8062bca1375d778c542053dd933db2ef1db6442e2a70e43",
|
||||
"bytes": 902
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"cloud": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1djla132opnHbUL40bGtckuPkqdodB_l4",
|
||||
"title": "review-material-r04-restore.py",
|
||||
"file_name": "review-material-r04-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1djla132opnHbUL40bGtckuPkqdodB_l4/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK",
|
||||
"structuredContent": {
|
||||
"accepted_input": "file_uri",
|
||||
"success": true,
|
||||
"id": "1djla132opnHbUL40bGtckuPkqdodB_l4",
|
||||
"title": "review-material-r04-restore.py",
|
||||
"file_name": "review-material-r04-restore.py",
|
||||
"mime_type": "text/x-python",
|
||||
"url": "https://drive.google.com/file/d/1djla132opnHbUL40bGtckuPkqdodB_l4/view?usp=drivesdk",
|
||||
"parent_id": "1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK"
|
||||
}
|
||||
},
|
||||
"actual_cloud_readback_verified": true,
|
||||
"sha256": "9e5fae33042236e7c863931f6731c8867d89c075d14d28fd45571ee844ccdc4f",
|
||||
"bytes": 1288
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
# 終了済み独立レビュー資料コピーの復元
|
||||
|
||||
退避先: https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK
|
||||
|
||||
CLOUD_PARTS.json の順序で分割ファイルを取得し、各SHA-256、サイズを照合して連結する。連結した review-material-r04.tar.gz のSHA-256を PREPARED.json と照合する。
|
||||
|
||||
`python3 restore.py review-material-r04.tar.gz /Users/korizatou114/Projects/TheTree-managed-worktrees`
|
||||
|
||||
既存のファイルへの上書きは拒否する。アーカイブ内 MANIFEST.json に元の相対パス、全ファイルのSHA-256、サイズ、モード、mtimeを保持。全内容を復元後に再検証する。元worktreeは保持し、その中の終了済み .review-material のみを退避。現行の候補版・実装・検証元資料・実行記録・レビュー回答は保持する。受入状態や完了数は変更しない。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"recorded_unix": 1792068578.626407,
|
||||
"files": 47574,
|
||||
"roots": [
|
||||
"p08-02/P08-02-review-371d8aef/.review-material",
|
||||
"p08-02/P08-02-review-ce2291ae/.review-material",
|
||||
"p08-03-code/P08-03-review-2ecdb277/.review-material",
|
||||
"p08-03-code/P08-03-review-c36607d5/.review-material",
|
||||
"p08-03-code/P08-03-review-d137e8d8/.review-material",
|
||||
"p08-03-code/P08-03-review-semantic-25b9e45a/.review-material",
|
||||
"p08-runtime-preview/P08-03-RTPREVIEW-review-8c717f07/.review-material",
|
||||
"p13-03/P13-03-review-a563028f/.review-material",
|
||||
"p13-03/P13-03-review-d2babf54/.review-material",
|
||||
"p18-01-model/P18-01-CODE-review-16d03793/.review-material",
|
||||
"runner-agy-execution/RP24-02-review-2c927186/.review-material"
|
||||
],
|
||||
"logical_bytes": 11474226038,
|
||||
"unique_bytes": 2182682276,
|
||||
"cloud_archive_bytes": 437422438,
|
||||
"free_before_selection": 2699243520,
|
||||
"free_before_retirement": 1773617152,
|
||||
"free_after": 2704744448,
|
||||
"net_free_change_from_selection": 5500928,
|
||||
"actual_cloud_readback_all_payloads_verified": true,
|
||||
"retired_only_manifest_members": true,
|
||||
"current_sources_build_evidence_run_records_review_results_retained": true,
|
||||
"temporary_archives_removed_after_verification": true,
|
||||
"formal_credit": 0
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"unix": 1792068573.8904672,
|
||||
"manifest_sha256": "0070c6cd45eb91b11251fa0568ca7baa8bff3cf4fd98a6dbc5c11b5214287877",
|
||||
"whole_archive_sha256": "adf793994e1d0079b226f882d40fd9dc0d8282da42d7b04d24195e2b3a84c151",
|
||||
"full_cloud_content_verified": true,
|
||||
"all_sources_rehashed_and_stat_rechecked": true,
|
||||
"active_jobs_and_open_files_zero": true,
|
||||
"files": 47574,
|
||||
"roots": [
|
||||
"p08-02/P08-02-review-371d8aef/.review-material",
|
||||
"p08-02/P08-02-review-ce2291ae/.review-material",
|
||||
"p08-03-code/P08-03-review-2ecdb277/.review-material",
|
||||
"p08-03-code/P08-03-review-c36607d5/.review-material",
|
||||
"p08-03-code/P08-03-review-d137e8d8/.review-material",
|
||||
"p08-03-code/P08-03-review-semantic-25b9e45a/.review-material",
|
||||
"p08-runtime-preview/P08-03-RTPREVIEW-review-8c717f07/.review-material",
|
||||
"p13-03/P13-03-review-a563028f/.review-material",
|
||||
"p13-03/P13-03-review-d2babf54/.review-material",
|
||||
"p18-01-model/P18-01-CODE-review-16d03793/.review-material",
|
||||
"runner-agy-execution/RP24-02-review-2c927186/.review-material"
|
||||
]
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"recorded_unix": 1792068563.871822,
|
||||
"all_sources_unchanged": true,
|
||||
"manifest_sha256": "0070c6cd45eb91b11251fa0568ca7baa8bff3cf4fd98a6dbc5c11b5214287877",
|
||||
"groups": [
|
||||
{
|
||||
"root": "p08-02/P08-02-review-371d8aef/.review-material",
|
||||
"verified": true,
|
||||
"files": 9057
|
||||
},
|
||||
{
|
||||
"root": "p08-02/P08-02-review-ce2291ae/.review-material",
|
||||
"verified": true,
|
||||
"files": 9051
|
||||
},
|
||||
{
|
||||
"root": "p08-03-code/P08-03-review-2ecdb277/.review-material",
|
||||
"verified": true,
|
||||
"files": 3449
|
||||
},
|
||||
{
|
||||
"root": "p08-03-code/P08-03-review-c36607d5/.review-material",
|
||||
"verified": true,
|
||||
"files": 3449
|
||||
},
|
||||
{
|
||||
"root": "p08-03-code/P08-03-review-d137e8d8/.review-material",
|
||||
"verified": true,
|
||||
"files": 18310
|
||||
},
|
||||
{
|
||||
"root": "p08-03-code/P08-03-review-semantic-25b9e45a/.review-material",
|
||||
"verified": true,
|
||||
"files": 5
|
||||
},
|
||||
{
|
||||
"root": "p08-runtime-preview/P08-03-RTPREVIEW-review-8c717f07/.review-material",
|
||||
"verified": true,
|
||||
"files": 95
|
||||
},
|
||||
{
|
||||
"root": "p13-03/P13-03-review-a563028f/.review-material",
|
||||
"verified": true,
|
||||
"files": 13
|
||||
},
|
||||
{
|
||||
"root": "p13-03/P13-03-review-d2babf54/.review-material",
|
||||
"verified": true,
|
||||
"files": 13
|
||||
},
|
||||
{
|
||||
"root": "p18-01-model/P18-01-CODE-review-16d03793/.review-material",
|
||||
"verified": true,
|
||||
"files": 4126
|
||||
},
|
||||
{
|
||||
"root": "runner-agy-execution/RP24-02-review-2c927186/.review-material",
|
||||
"verified": true,
|
||||
"files": 6
|
||||
}
|
||||
]
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];rows=m['members'];objs={x['sha256']:x for x in rows if x['type']=='file'};idle()
|
||||
a=T/'review-material-r04.tar.gz';assert not a.exists()
|
||||
class Guard:
|
||||
def __init__(self,f):self.f=f;self.n=0
|
||||
def write(self,b):
|
||||
self.n+=len(b)
|
||||
if self.n>=1024**2:
|
||||
assert shutil.disk_usage(R).free>1024**3+len(b),'disk floor: source retained';self.n=0
|
||||
return self.f.write(b)
|
||||
def __getattr__(self,k):return getattr(self.f,k)
|
||||
save(D/'CAPACITY_ADMISSION.json',dict(free_before=shutil.disk_usage(R).free,unique_input_bytes=m['unique_bytes'],minimum_remaining_bytes=1024**3,strategy='Guarded compressed writer checks free space every 1 MiB; no uncompressed staging; source remains intact on failure',source_removal_requires='Complete actual cloud readback and all source/member hashes match'))
|
||||
with a.open('xb')as f:
|
||||
with tarfile.open(fileobj=Guard(f),mode='w:gz',compresslevel=6)as t:
|
||||
for h,x in sorted(objs.items()):
|
||||
q=B/x['path'];assert q.stat().st_size==x['bytes']
|
||||
t.add(q,arcname='objects/'+h,recursive=False)
|
||||
v=(D/'MANIFEST.json').read_bytes();e=tarfile.TarInfo('MANIFEST.json');e.size=len(v);t.addfile(e,io.BytesIO(v))
|
||||
with tarfile.open(a,'r:gz')as t:
|
||||
assert len(t.getmembers())==len(objs)+1 and t.extractfile('MANIFEST.json').read()==(D/'MANIFEST.json').read_bytes()
|
||||
for h in objs:assert hashlib.sha256(t.extractfile('objects/'+h).read()).hexdigest()==h
|
||||
save(D/'PREPARED.json',dict(archive=str(a),bytes=a.stat().st_size,sha256=sha(a),all_members_verified=True,unique_payloads=len(objs),source_initial_inventory_sha256=sha(D/'MANIFEST.json')))
|
||||
print(json.dumps(dict(archive_bytes=a.stat().st_size,unique_payloads=len(objs),files=m['files'],free=shutil.disk_usage(R).free)),flush=True)
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
"""Restore content-addressed archive without overwriting existing files."""
|
||||
import argparse,hashlib,json,os,tarfile
|
||||
from pathlib import Path
|
||||
p=argparse.ArgumentParser();p.add_argument('archive');p.add_argument('destination');a=p.parse_args();dest=Path(a.destination).resolve()
|
||||
with tarfile.open(a.archive,'r:gz')as t:
|
||||
m=json.loads(t.extractfile('MANIFEST.json').read());rows=m['members'];expected={'MANIFEST.json'}|{'objects/'+x['sha256']for x in rows if x['type']=='file'}
|
||||
assert {x.name for x in t.getmembers()}==expected and len(t.getmembers())==len(expected)
|
||||
for x in rows:
|
||||
target=dest/x['path'];assert target.resolve().is_relative_to(dest) and not target.exists()
|
||||
for x in rows:
|
||||
q=dest/x['path']
|
||||
if x['type']=='directory':q.mkdir(parents=True,exist_ok=True)
|
||||
else:
|
||||
q.parent.mkdir(parents=True,exist_ok=True);h=hashlib.sha256()
|
||||
with q.open('xb')as out,t.extractfile('objects/'+x['sha256'])as f:
|
||||
for b in iter(lambda:f.read(1048576),b''):h.update(b);out.write(b)
|
||||
assert q.stat().st_size==x['bytes'] and h.hexdigest()==x['sha256']
|
||||
os.chmod(q,x['mode']);os.utime(q,ns=(x['mtime_ns'],x['mtime_ns']))
|
||||
for x in reversed(rows):
|
||||
if x['type']=='directory':os.utime(dest/x['path'],ns=(x['mtime_ns'],x['mtime_ns']))
|
||||
print('Restored and verified',m['files'],'files')
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];rows=m['members'];p=json.loads((D/'PREPARED.json').read_bytes());v=json.loads((D/'CLOUD_ARCHIVE_VERIFIED.json').read_bytes());src=json.loads((D/'SOURCE_RECHECK.json').read_bytes())
|
||||
assert v['actual_cloud_readback']and v['whole_archive_sha256']==p['sha256']and v['original_file_mappings_verified']==m['files'];assert src['all_sources_unchanged']and src['manifest_sha256']==sha(D/'MANIFEST.json')and time.time()-src['recorded_unix']<3600
|
||||
for name in ['MANIFEST.json','PREPARED.json','CLOUD_PARTS.json','CLOUD_ARCHIVE_VERIFIED.json','RESTORE.md','restore.py']:
|
||||
r=json.loads((D/('READBACK-'+name+'.json')).read_bytes());assert r['actual_cloud_readback_verified']and r['sha256']==sha(D/name)
|
||||
assert not(D/'RETIREMENT.json').exists();idle()
|
||||
for x in rows:
|
||||
q=B/x['path'];st=q.lstat();assert not q.is_symlink()and (q.is_file()if x['type']=='file'else q.is_dir());assert st.st_mtime_ns==x['mtime_ns']and st.st_mode&0o7777==x['mode'];assert x['type']!='file'or st.st_size==x['bytes']
|
||||
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:assert q.stat().st_size==p['bytes']and sha(q)==p['sha256']
|
||||
free=shutil.disk_usage(R).free;save(D/'RETIREMENT_INTENT.json',dict(unix=time.time(),manifest_sha256=sha(D/'MANIFEST.json'),whole_archive_sha256=p['sha256'],full_cloud_content_verified=True,all_sources_rehashed_and_stat_rechecked=True,active_jobs_and_open_files_zero=True,files=m['files'],roots=roots))
|
||||
for x in rows:
|
||||
if x['type']=='file':(B/x['path']).unlink()
|
||||
for x in sorted(rows,key=lambda x:len(Path(x['path']).parts),reverse=True):
|
||||
if x['type']=='directory':(B/x['path']).rmdir()
|
||||
for s in roots:
|
||||
root=B/s;assert not root.exists();pointer=root.parent/'.review-material.CLOUD_ARCHIVE_R04.json';assert not pointer.exists();save(pointer,dict(state='cloud_archived',original_root=str(root),folder_url='https://drive.google.com/drive/folders/1Xa2b6rQmwBFq4jWIDFcJgiCbcNYfWXsK',cloud_parts=str(D/'CLOUD_PARTS.json'),restore=str(D/'RESTORE.md'),whole_archive_sha256=p['sha256'],source_and_current_canonical_build_evidence_retained=True,formal_credit=0))
|
||||
for q in [Path(p['archive']),T/'cloud-readback.tar.gz']:q.unlink()
|
||||
res=dict(recorded_unix=time.time(),files=m['files'],roots=roots,logical_bytes=m['logical_bytes'],unique_bytes=m['unique_bytes'],cloud_archive_bytes=p['bytes'],free_before_selection=m['free_before'],free_before_retirement=free,free_after=shutil.disk_usage(R).free,net_free_change_from_selection=shutil.disk_usage(R).free-m['free_before'],actual_cloud_readback_all_payloads_verified=True,retired_only_manifest_members=True,current_sources_build_evidence_run_records_review_results_retained=True,temporary_archives_removed_after_verification=True,formal_credit=0)
|
||||
save(D/'RETIREMENT.json',res);print(json.dumps(res),flush=True)
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
from pathlib import Path
|
||||
import os,json,hashlib,tarfile,io,shutil,time,sqlite3,subprocess
|
||||
B=Path('/Users/korizatou114/Projects/TheTree-managed-worktrees');R=Path('/Users/korizatou114/Projects/とりにく工房ゲーム制作部');D=R/'docs/plans/original-completion-2026-10-02/execution/drive-offload-review-material-r04-20261015';T=Path('/private/tmp/tree-offload-review-r04');DB=Path('/Users/korizatou114/Library/Application Support/agent-control')
|
||||
roots=sorted(str(x.relative_to(B)) for x in B.glob('*/*review*/.review-material'))
|
||||
def sha(p):
|
||||
h=hashlib.sha256()
|
||||
with p.open('rb') as f:
|
||||
for a in iter(lambda:f.read(1024**2),b''):h.update(a)
|
||||
return h.hexdigest()
|
||||
def save(p,v):p.write_text(json.dumps(v,ensure_ascii=False,indent=2)+'\n')
|
||||
def idle():
|
||||
ps=subprocess.check_output(['ps','-axo','pid,command'],text=True);opened=subprocess.run(['lsof','-n','-F','n'],capture_output=True,text=True).stdout
|
||||
for s in roots:
|
||||
root=B/s;db=DB/('the-tree-'+root.parent.parent.name)/'state.sqlite';assert db.exists()
|
||||
c=sqlite3.connect('file:'+str(db)+'?mode=ro',uri=True)
|
||||
assert c.execute("select count(*) from runs where finished is null and status not in ('failed','finished')").fetchone()[0]==0
|
||||
assert not any(str(root) in line for line in ps.splitlines())
|
||||
assert not any(line.startswith('n'+str(root)+'/') for line in opened.splitlines())
|
||||
assert not subprocess.check_output(['git','-C',str(root.parent),'ls-files','--','.review-material'],text=True).strip()
|
||||
def inv():
|
||||
rows=[]
|
||||
for s in roots:
|
||||
root=B/s;assert root.is_dir() and not root.is_symlink()
|
||||
for x in [root]+sorted(root.rglob('*')):
|
||||
st=x.lstat();assert not x.is_symlink() and (x.is_dir() or x.is_file()),str(x)
|
||||
d=dict(path=str(x.relative_to(B)),type='file' if x.is_file() else 'directory',mode=st.st_mode&0o7777,mtime_ns=st.st_mtime_ns)
|
||||
if x.is_file():d.update(bytes=st.st_size,sha256=sha(x),allocated=st.st_blocks*512)
|
||||
rows.append(d)
|
||||
return rows
|
||||
if __name__=='__main__':
|
||||
assert not D.exists() and not T.exists();D.mkdir();T.mkdir();idle();free=shutil.disk_usage(R).free;rows=inv();objs={x['sha256']:x for x in rows if x['type']=='file'}
|
||||
m=dict(base=str(B),roots=roots,members=rows,files=sum(x['type']=='file'for x in rows),logical_bytes=sum(x.get('bytes',0)for x in rows),unique_bytes=sum(x['bytes']for x in objs.values()),free_before=free,created=time.time(),scope='Only idle completed review material snapshots. All current canonical build evidence, source worktrees, reviewer outputs and run records retained.',formal_credit=0)
|
||||
save(D/'MANIFEST.json',m);assert free>sum(x['bytes']for x in objs.values())+512*1024**2
|
||||
a=T/'review-material-r04.tar.gz'
|
||||
with tarfile.open(a,'w:gz',compresslevel=6)as t:
|
||||
for h,x in sorted(objs.items()):t.add(B/x['path'],arcname='objects/'+h,recursive=False)
|
||||
v=(D/'MANIFEST.json').read_bytes();e=tarfile.TarInfo('MANIFEST.json');e.size=len(v);t.addfile(e,io.BytesIO(v))
|
||||
with tarfile.open(a,'r:gz')as t:
|
||||
assert t.extractfile('MANIFEST.json').read()==(D/'MANIFEST.json').read_bytes()
|
||||
for h in objs:assert hashlib.sha256(t.extractfile('objects/'+h).read()).hexdigest()==h
|
||||
assert inv()==rows
|
||||
save(D/'PREPARED.json',dict(archive=str(a),bytes=a.stat().st_size,sha256=sha(a),all_members_verified=True,source_unchanged=True,unique_payloads=len(objs)))
|
||||
print(json.dumps({k:m[k]for k in ['files','logical_bytes','unique_bytes','free_before']}),a.stat().st_size,flush=True)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
p=json.loads((D/'PREPARED.json').read_bytes());m=json.loads((D/'MANIFEST.json').read_bytes());a=T/'cloud-readback.tar.gz';parts=[json.loads((T/f'cloud-{i:04d}.json').read_bytes())for i in range(7)];assert all(x['actual_cloud_readback_verified']for x in parts)
|
||||
assert a.stat().st_size==p['bytes']==sum(x['bytes']for x in parts) and sha(a)==p['sha256'];objs={x['sha256']:x for x in m['members']if x['type']=='file'};seen=set()
|
||||
with tarfile.open(a,'r|gz')as t:
|
||||
for e in t:
|
||||
assert e.isfile() and e.name not in seen;seen.add(e.name)
|
||||
with t.extractfile(e)as f:
|
||||
if e.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes()
|
||||
else:
|
||||
assert e.name.startswith('objects/');h=e.name[8:];assert h in objs and e.size==objs[h]['bytes'];v=hashlib.sha256()
|
||||
for b in iter(lambda:f.read(1024**2),b''):v.update(b)
|
||||
assert v.hexdigest()==h
|
||||
assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs}
|
||||
save(D/'CLOUD_PARTS.json',parts);save(D/'CLOUD_ARCHIVE_VERIFIED.json',dict(actual_cloud_readback=True,whole_archive_sha256=sha(a),bytes=a.stat().st_size,all_unique_payloads_verified=len(objs),original_file_mappings_verified=m['files'],manifest_identical=True,formal_credit=0));print('Complete cloud archive and all 47,574 file mappings verified',flush=True)
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());objs={x['sha256']:x for x in m['members'] if x['type']=='file'};a=T/'review-material-r04.tar.gz';seen=set()
|
||||
with tarfile.open(a,'r|gz')as t:
|
||||
for x in t:
|
||||
assert x.isfile() and x.name not in seen;seen.add(x.name)
|
||||
with t.extractfile(x)as f:
|
||||
if x.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes()
|
||||
else:
|
||||
assert x.name.startswith('objects/');h=x.name[8:];assert h in objs and x.size==objs[h]['bytes'];v=hashlib.sha256()
|
||||
for b in iter(lambda:f.read(1024**2),b''):v.update(b)
|
||||
assert v.hexdigest()==h
|
||||
assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs}
|
||||
save(D/'PREPARED.json',dict(archive=str(a),bytes=a.stat().st_size,sha256=sha(a),all_members_verified=True,unique_payloads=len(objs),source_initial_inventory_sha256=sha(D/'MANIFEST.json'),verification='single sequential streaming pass across every archive object'))
|
||||
print(json.dumps(dict(archive_bytes=a.stat().st_size,unique_payloads=len(objs),files=m['files'],free=shutil.disk_usage(R).free)),flush=True)
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
exec(open('/private/tmp/tree-offload-review-r04.py').read().split("if __name__")[0])
|
||||
m=json.loads((D/'MANIFEST.json').read_bytes());roots=m['roots'];idle();groups=[]
|
||||
for s in roots:
|
||||
root=B/s;rows=[]
|
||||
for x in [root]+sorted(root.rglob('*')):
|
||||
st=x.lstat();assert not x.is_symlink()and(x.is_file()or x.is_dir());v=dict(path=str(x.relative_to(B)),type='file'if x.is_file()else'directory',mode=st.st_mode&0o7777,mtime_ns=st.st_mtime_ns)
|
||||
if x.is_file():v.update(bytes=st.st_size,sha256=sha(x),allocated=st.st_blocks*512)
|
||||
rows.append(v)
|
||||
expected=[v for v in m['members']if v['path']==s or v['path'].startswith(s+'/')];assert rows==expected,s;groups.append(dict(root=s,verified=True,files=sum(x['type']=='file'for x in rows)));print(root.parent.name,'source hashes unchanged',flush=True)
|
||||
save(D/'SOURCE_RECHECK.json',dict(recorded_unix=time.time(),all_sources_unchanged=True,manifest_sha256=sha(D/'MANIFEST.json'),groups=groups))
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"method": "Verified identical original engine -> separate APFS CoW inode with /bin/cp -c; all proof bytes/mode/mtime/receipt hashes retained. Per-file allocated sums do not represent exclusive APFS cost.",
|
||||
"rows": [
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence-historical-0084760e-r02/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-relationship-evidence-historical-b7a7cc0-r05/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-review-16d03793/.review-material/build/p18-relationship-evidence/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
},
|
||||
{
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-review-16d03793/.review-material/build/p18-relationship-evidence-historical-0084760e-r02/engine.bin",
|
||||
"bytes": 351312912,
|
||||
"sha256": "c7cccbf8fb143e34e02fd6521e09be2c2b974f0d5db080b19071c9c570718ccf",
|
||||
"source_identical_engine": "/Applications/Godot.app/Contents/MacOS/Godot",
|
||||
"source_unchanged": true,
|
||||
"separate_inode": true,
|
||||
"nlink": 1,
|
||||
"original_mode_mtime_receipts_unchanged": true,
|
||||
"allocated_before": 351313920,
|
||||
"allocated_after": 351313920
|
||||
}
|
||||
],
|
||||
"free_before": 2365444096,
|
||||
"free_after": 2726948864,
|
||||
"prior_compression_result_note": "Prior transparent compression preserved data but measured net free decreased. Shared extents are a possible explanation; no exclusive-allocation claim. Reuse identical existing engine extents instead.",
|
||||
"raw_proof_deleted": false,
|
||||
"engines_started": 0
|
||||
}
|
||||
+33
-5
@@ -3,7 +3,7 @@
|
||||
"original_title": "関係モデルと保存",
|
||||
"original_acceptance": "表示と状態が一致し、意味不明な値の一対一変換を行わない。",
|
||||
"state": "review_pending",
|
||||
"active_work": "Existing P18-01-CODE same0084760e backend repair under actual Opus commander; no duplicate implementation",
|
||||
"active_work": "Submitted265ce30 backend frozen/merged native and formal validation passed; actual independent Opus review pending quota recovery; no active implementer or reviewer",
|
||||
"original_denominator": {
|
||||
"packages": 30,
|
||||
"units": 88,
|
||||
@@ -56,7 +56,7 @@
|
||||
"actual_scheduling_direction": "execution/next-closure-after-p13-20261015/OPUS_NEXT_ORIGINAL_DIRECTION.json",
|
||||
"current_capacity_bytes": 3396866048,
|
||||
"heavy_runs_started": 0,
|
||||
"updated_at_jst": "2026-10-15T20:12:19.677704+09:00",
|
||||
"updated_at_jst": "2026-10-15T22:08:07.049410+09:00",
|
||||
"active_worker": null,
|
||||
"repair3_terminal": "No product/test changes; only preserved implementation handoff policy-gap note and prepare-only. Independent required fixes still available.",
|
||||
"repair3_result": "REPAIR3_ACTUAL_RESULT.json",
|
||||
@@ -76,7 +76,7 @@
|
||||
"actual_native_owned9ended": true,
|
||||
"native_result": "ROOT_REPAIR5_NATIVE_RESULT.json",
|
||||
"review": "B7A7CC0_ACTUAL_INDEPENDENT_REVIEW.json",
|
||||
"review_status": "changes_requested",
|
||||
"review_status": "pending_for_submitted_265ce30",
|
||||
"review_findings": {
|
||||
"high": 1,
|
||||
"medium": 1,
|
||||
@@ -105,7 +105,7 @@
|
||||
"exit_code": 0,
|
||||
"engine_runs": 0
|
||||
},
|
||||
"current_free_bytes": 2987036672,
|
||||
"current_free_bytes": 3357089792,
|
||||
"native": {
|
||||
"candidate": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"suites": 7,
|
||||
@@ -123,5 +123,33 @@
|
||||
"commit": "265ce30f81b1302ca374330f7129f02d6fde4697"
|
||||
},
|
||||
"latest_review_applies_to": "b7a7cc0 only; 265ce30 independent Opus review not yet executed",
|
||||
"all_original_unit_conditions_kept": true
|
||||
"all_original_unit_conditions_kept": true,
|
||||
"merged_native_preflight": {
|
||||
"result": "MERGED_265_NATIVE_RESULT.json",
|
||||
"composition_commit": "44874d792ff4f2293c1b71c3a111d899b4798723",
|
||||
"suites": 7,
|
||||
"checks": 1839,
|
||||
"parse_paths": 316,
|
||||
"all9ownedended": true,
|
||||
"ordinary_integration_candidate": false,
|
||||
"main_adopted": false
|
||||
},
|
||||
"review_resume": {
|
||||
"automation_id": "p18",
|
||||
"kind": "one-time same-thread heartbeat",
|
||||
"scheduled_jst": "2026-10-15T22:41:00+09:00",
|
||||
"receipt": "REVIEW_RESUME_AUTOMATION.json",
|
||||
"duplicate_guard_required": true
|
||||
},
|
||||
"storage_offload": {
|
||||
"report": "../drive-offload-cold-r06-20261015/FINAL_REPORT.json",
|
||||
"current_proof_eight_pins_unchanged": true,
|
||||
"closed_review_material_restorable_on_Drive": true
|
||||
},
|
||||
"historical_relocation_record_filename_correction": {
|
||||
"from_name": "OLD_0084760E_NATIVE_RELOCATION.json",
|
||||
"to_name": "OLD_B7A7CC0_NATIVE_RELOCATION.json",
|
||||
"unchanged_record_sha256": "7a74a0903ee7f60fb0b111eb111a187d977a6c6ffe07ae33b78e4ec76e923dd7",
|
||||
"reason": "Record contents describe b7a7cc0 relocation; filename corrected to match without changing record or raw proof bytes"
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"submitted": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"current_main": "cb0a58bc285a29c039d20383efe06d65792b8249",
|
||||
"expected_merge_tree": "90be420677d106a0a18cca5f2ba17fab833ed446",
|
||||
"tracked_full_checkout_bytes": 207320697,
|
||||
"prior_native_entire_output_bytes": 474324984,
|
||||
"conservative_remaining_admission_bytes": 2579466695,
|
||||
"free_bytes": 2992128000,
|
||||
"reserve": "3 full merged checkouts +1native1.2x +200MiB profiles +100MiB material metadata +1GiB OS",
|
||||
"review_pending": true,
|
||||
"ordinary_candidate_not_created": true,
|
||||
"main_or_task_state_not_changed": true,
|
||||
"original_unit_credit": 0
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"source_composition_commit": "44874d792ff4f2293c1b71c3a111d899b4798723",
|
||||
"source_tree": "90be420677d106a0a18cca5f2ba17fab833ed446",
|
||||
"main_base": "cb0a58bc285a29c039d20383efe06d65792b8249",
|
||||
"submitted": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"ordinary_integration_candidate": false,
|
||||
"actual_native_suites": 7,
|
||||
"actual_native_checks": 1839,
|
||||
"actual_parse_paths": 316,
|
||||
"all9ownedended": true,
|
||||
"output": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01",
|
||||
"seconds": 67.39455008506775,
|
||||
"proof_pins": {
|
||||
"runner-input.json": "c5e601dd8c7f75f3ac054a5a28c7805490f20570372ed1a99e69ae67321ef5e2",
|
||||
"runner-ended.json": "c5bf962e4caf4d2c84c21dcdfa459e4ed451bbae2ce88d36b6e057618b5bdd30",
|
||||
"receipt.json": "ebf166068947255191dc88458f472093b6a81da57c2e30d8ded1891e1f0a7227",
|
||||
"all-tests.json": "5a063b2c35a1e21cc57a59ad6dd1fc159a58d84201594f0dc08114bf2594861b"
|
||||
},
|
||||
"source_map_reuse_rule": "Only reuse against a future ordinary Runner candidate after independently matching every selected source/settings/marker/policy/engine/input file. Composition Git SHA is not the future integration SHA and is not relabelled.",
|
||||
"source_or_proof_edited": false,
|
||||
"formal_original_unit_credit": 0,
|
||||
"remaining": [
|
||||
"Separate actual Opus review of submitted265 after its quota recovers",
|
||||
"Ordinary latest-main prepare-integration with strict applicable evidence, exact candidate approval/final/main integration",
|
||||
"Whole originalP18conditions stillopen"
|
||||
]
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"state": "terminal_pass",
|
||||
"source_composition_commit": "44874d792ff4f2293c1b71c3a111d899b4798723",
|
||||
"source_tree": "90be420677d106a0a18cca5f2ba17fab833ed446",
|
||||
"main_base": "cb0a58bc285a29c039d20383efe06d65792b8249",
|
||||
"submitted": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"ordinary_integration_candidate": false,
|
||||
"actual_native_suites": 7,
|
||||
"actual_native_checks": 1839,
|
||||
"actual_parse_paths": 316,
|
||||
"all9ownedended": true,
|
||||
"output": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01",
|
||||
"seconds": 67.39455008506775,
|
||||
"proof_pins": {
|
||||
"runner-input.json": "c5e601dd8c7f75f3ac054a5a28c7805490f20570372ed1a99e69ae67321ef5e2",
|
||||
"runner-ended.json": "c5bf962e4caf4d2c84c21dcdfa459e4ed451bbae2ce88d36b6e057618b5bdd30",
|
||||
"receipt.json": "ebf166068947255191dc88458f472093b6a81da57c2e30d8ded1891e1f0a7227",
|
||||
"all-tests.json": "5a063b2c35a1e21cc57a59ad6dd1fc159a58d84201594f0dc08114bf2594861b"
|
||||
},
|
||||
"source_map_reuse_rule": "Only reuse against a future ordinary Runner candidate after independently matching every selected source/settings/marker/policy/engine/input file. Composition Git SHA is not the future integration SHA and is not relabelled.",
|
||||
"source_or_proof_edited": false,
|
||||
"formal_original_unit_credit": 0,
|
||||
"remaining": [
|
||||
"Separate actual Opus review of submitted265 after its quota recovers",
|
||||
"Ordinary latest-main prepare-integration with strict applicable evidence, exact candidate approval/final/main integration",
|
||||
"Whole originalP18conditions stillopen"
|
||||
]
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"roster": [
|
||||
"tests/s4/test_original_relationship_model.gd",
|
||||
"tests/s4/test_original_relationship_runtime.gd",
|
||||
"tests/s4/test_relationship_event_service.gd",
|
||||
"tests/s4/test_runtime_relationship_events.gd",
|
||||
"tests/s6/test_runtime_snapshot_serialization.gd",
|
||||
"tests/s6/test_runtime_save_lifecycle.gd",
|
||||
"tests/ui/test_staff_management.gd"
|
||||
],
|
||||
"source_files": 1338,
|
||||
"source_bytes": 67895232,
|
||||
"free_bytes": 2770632704,
|
||||
"conservative_required_bytes": 382468032,
|
||||
"capacity_available": true,
|
||||
"parse_paths": 316,
|
||||
"future_native_phases": 9,
|
||||
"actual_checks": null,
|
||||
"engines": 0,
|
||||
"stages": 0,
|
||||
"formal_acceptance": false
|
||||
}
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
{
|
||||
"status": "draft_for_actual_Opus_UI_phase_review_not_registered_not_started",
|
||||
"original_plan_id": "P18-01",
|
||||
"new_original_unit": false,
|
||||
"original_30_88_unchanged": true,
|
||||
"formal_original_unit_credit": 0,
|
||||
"original_acceptance": "表示と状態が一致し、意味不明な値の一対一変換を行わない。",
|
||||
"sources": {
|
||||
"original": {
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/docs/traceability/original/BASELINE.txt",
|
||||
"bytes": 23494,
|
||||
"sha256": "75e4bdbdeb379c9269553f0c776bdb9cc96e01f2d6aa5ca650d132c63a8aeb1a"
|
||||
},
|
||||
"current_main_staff_panel": {
|
||||
"path": "/Users/korizatou114/Projects/とりにく工房ゲーム制作部/scripts/ui/staff_management_panel.gd",
|
||||
"bytes": 23519,
|
||||
"sha256": "df3120130956b300d1349cb758c0aa30dfd7da5e0774fb7fb9a1f3e4e0786fb2"
|
||||
},
|
||||
"held_backend_service": {
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-implement/scripts/relationship/relationship_service.gd",
|
||||
"bytes": 27526,
|
||||
"sha256": "d2f6304aa643b98914c5d65bf3eb673ca8cc427476187f43e76b4b941410b1d3"
|
||||
},
|
||||
"held_backend_runtime": {
|
||||
"path": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/P18-01-CODE-implement/autoload/simulation_runtime.gd",
|
||||
"bytes": 611487,
|
||||
"sha256": "0c8c9356a78bf9df16c362e202a362e044bae018f40efb54145713582d69a2d2"
|
||||
}
|
||||
},
|
||||
"original_evidence": [
|
||||
{
|
||||
"line": 137,
|
||||
"text": "## 7.1 概要とコアコンセプト"
|
||||
},
|
||||
{
|
||||
"line": 138,
|
||||
"text": "3つの感情パラメータと防御値「愛の盾」、直接対決「決闘」によってヒロインの運命(純愛・NTR・堕落)をシミュレートする。"
|
||||
},
|
||||
{
|
||||
"line": 139,
|
||||
"text": "## 7.2 感情パラメータと「愛の盾」"
|
||||
},
|
||||
{
|
||||
"line": 140,
|
||||
"text": " * **好感度 (Affection):** 主人公への愛。「愛の盾」の最大耐久値。"
|
||||
},
|
||||
{
|
||||
"line": 141,
|
||||
"text": " * **淫乱度 (Lust):** 快楽への依存。盾の防御力(ダメージ軽減率)を下げる。"
|
||||
},
|
||||
{
|
||||
"line": 142,
|
||||
"text": " * **NTR度 (Netorare):** ライバル依存。盾破壊後に上昇する。"
|
||||
},
|
||||
{
|
||||
"line": 143,
|
||||
"text": " * **『愛の盾』:** NTR攻撃を無効化するバリア。耐久値0でブレイクし、NTR侵食が始まる。"
|
||||
},
|
||||
{
|
||||
"line": 152,
|
||||
"text": " * **リターン:** ライバル追放・隷属化、「愛の盾」全回復。"
|
||||
},
|
||||
{
|
||||
"line": 219,
|
||||
"text": " * **ユニット:** 客の欲求バー・AI思考ログ、従業員の感情3軸グラフ・愛の盾耐久値。"
|
||||
},
|
||||
{
|
||||
"line": 246,
|
||||
"text": " * エフェクト(愛の盾、煙、マナの光)。"
|
||||
}
|
||||
],
|
||||
"current_gap": {
|
||||
"panel_scope": "Roster and assignment editing only; no original_relationship/affection/lust/netorare rendering in current staff_management_panel.gd.",
|
||||
"backend_projection": [
|
||||
{
|
||||
"line": 10893,
|
||||
"text": "\t\t\t&\"original_relationship\": relationship_service.get_original_relationship(staff.staff_id),"
|
||||
}
|
||||
],
|
||||
"unset_actual_readmodel": "func get_original_relationship(subject_id: StringName) -> Dictionary:\n\tif _original_records.has(subject_id):\n\t\tvar result: Dictionary = _original_records[subject_id].duplicate(true)\n\t\tresult[&\"configured\"] = true\n\t\treturn result\n\treturn {&\"configured\": false, &\"subject_id\": subject_id,\n\t\t&\"protagonist_id\": null, &\"rival_id\": null, &\"affection\": null,\n\t\t&\"lust\": null, &\"netorare\": null, &\"shield_current\": null, &\"shield_max\": null}\n",
|
||||
"ordinary_staff_entry_exists": true,
|
||||
"original_UI_gap_open_backend_scope_unchanged": true
|
||||
},
|
||||
"proposed_requirements": [
|
||||
{
|
||||
"id": "ui_normal_entry",
|
||||
"required": "Reach from ordinary employee/inspector entry. Add faithful three-axis emotion graph and shield durability while preserving current roster/assignment/shift operations; no diagnostic-only entry."
|
||||
},
|
||||
{
|
||||
"id": "ui_actual_values",
|
||||
"required": "Read real get_staff_management_report row.original_relationship for the selected staff; preserve subject/protagonist/rival direction, Affection/Lust/Netorare and shield_current/shield_max exactly. Never convert old five axes to original three."
|
||||
},
|
||||
{
|
||||
"id": "ui_unset_vs_zero",
|
||||
"required": "configured:false or absent readmodel shows explicit unconfigured/unknown values and no fabricated graph point or zeros. Configured true zeros are real zero. Preserve existing old-format report compatibility as unknown original state, not a guessed mapping."
|
||||
},
|
||||
{
|
||||
"id": "ui_graph_and_labels",
|
||||
"required": "Show actual original three-axis graph (not text-only or legacy five-axis substitute), Japanese labels and actual shield current/max. Do not invent a gameplay ceiling/percentage scale from legacy0..100; expose any purely visual scaling truthfully and preserve exact numeric values. Commander must review concrete scale choice."
|
||||
},
|
||||
{
|
||||
"id": "ui_readonly",
|
||||
"required": "Opening, refresh, staff switching and live snapshot updates must not register defaults or mutate relationships/other Runtime state. No production initialization values or new rates/thresholds/routes/duels/contacts."
|
||||
},
|
||||
{
|
||||
"id": "ui_save_and_live_consistency",
|
||||
"required": "Real selected staff configured/unconfigured views agree with the same Runtime state before/after publication and save/reload; distinct PID ordinary route remains needed. Do not use injected fixtures as normal gameplay or initial-value approval."
|
||||
},
|
||||
{
|
||||
"id": "ui_verification",
|
||||
"required": "Meaningful native UI local+affected tests, actual rendering/source/provenance and independent direct visual review, ordinary OS evidence and applicable Windows coverage. Update source marker/policy pins, then exact final required whole-unit full roster after related code/UI batched, independent whole-unit review and normal integration/final. No skipped GUI falsely counted as pass."
|
||||
}
|
||||
],
|
||||
"validation_fixture_requirements": [
|
||||
"Use the actual dedicated model and real hired identity catalog. Configured/unconfigured/zero/beyondlegacy100/fractional finite values are validation fixtures only; no production adoption.",
|
||||
"Prove graph/label/shield values and geometry derive from same Runtime payload, read-only behavior and save/reload equality. Keep old native employee assignment tests meaningful.",
|
||||
"All mandatory source/engine/PID/profile/cleanup/capture provenance; headless structure checks do not substitute actual visible graph/normal OS acceptance."
|
||||
],
|
||||
"scope_candidate_only": [
|
||||
"scripts/ui/staff_management_panel.gd",
|
||||
"one focused three-axis graph component + UID if needed",
|
||||
"new focused UI test(s) + UID",
|
||||
"completion-marker and suite-policy rows for added tests",
|
||||
"UI-phase evidence/docs"
|
||||
],
|
||||
"role_candidate": {
|
||||
"commander": "actual Claude Opus5.5 must review this proposal and choose concrete execution",
|
||||
"ui": "Antigravity per user-selected plugin, not started; model not asserted",
|
||||
"backend": "Keep accepted interface after backend review/integration; no duplicate implementation",
|
||||
"review": "independent actual Opus"
|
||||
},
|
||||
"resource_and_assets": "Before execution measure checkout/native output/profiles/capture/material cost. Reuse existing styling/assets. If adding generic UI/icons, check Kenney first and preserve URL/license. No new paid services, source deletions or permission expansion.",
|
||||
"dependencies_unmet": [
|
||||
"Backend265 independent Opus re-review and ordinary latest-main integration/final",
|
||||
"Production-approved original initialization/undefined units/ranges remain unknown, not defaulted",
|
||||
"Ordinary Mac GUI capture currently unavailable; Windows final environment/D10 remains open"
|
||||
],
|
||||
"not_claimed": [
|
||||
"new task registered",
|
||||
"UI implemented",
|
||||
"initial values approved",
|
||||
"P18-01 completed",
|
||||
"game completed"
|
||||
]
|
||||
}
|
||||
-506
@@ -1,506 +0,0 @@
|
||||
diff --git a/autoload/simulation_runtime.gd b/autoload/simulation_runtime.gd
|
||||
index 27bb139..82fa152 100644
|
||||
--- a/autoload/simulation_runtime.gd
|
||||
+++ b/autoload/simulation_runtime.gd
|
||||
@@ -1056,14 +1056,10 @@ func _restore_snapshot_internal(snapshot: Dictionary, recovery_mode: bool) -> bo
|
||||
return false
|
||||
var restored_relationships := RelationshipService.new()
|
||||
restored_relationships.configure_original_identity_validator(
|
||||
- func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, restored_staff)
|
||||
+ func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, restored_staff, restored_catalog)
|
||||
)
|
||||
if not restored_relationships.restore_snapshot(runtime_data[&"relationships"]):
|
||||
return false
|
||||
- for relationship: RelationshipState in restored_relationships.get_relationships():
|
||||
- for actor_id: StringName in [relationship.actor_a_id, relationship.actor_b_id]:
|
||||
- if actor_id != &"player" and not restored_staff.has_staff(actor_id) and not restored_guests.has_guest(actor_id):
|
||||
- return false
|
||||
var restored_events := EventService.new()
|
||||
for raw_definition: Variant in runtime_data[&"event_definitions"]:
|
||||
var definition := EventDefinition.from_variant(raw_definition)
|
||||
@@ -5387,7 +5383,7 @@ func _configure_relationship_event_boundaries() -> void:
|
||||
if relationship_service == null or event_service == null:
|
||||
return
|
||||
relationship_service.configure_original_identity_validator(
|
||||
- func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, staff_service)
|
||||
+ func(payload: Dictionary) -> bool: return _original_relationship_identities_valid(payload, staff_service, mvp_content_catalog)
|
||||
)
|
||||
relationship_service.configure_candidate_callback(
|
||||
Callable(self, "_on_relationship_threshold_candidate")
|
||||
@@ -6770,15 +6766,15 @@ func _execute_progress_staff_task(command: SimulationCommand) -> CommandResult:
|
||||
result.command_id = command.command_id
|
||||
return result
|
||||
|
||||
-func _original_relationship_identities_valid(payload: Dictionary, staff_registry: StaffService) -> bool:
|
||||
+func _original_relationship_identities_valid(payload: Dictionary, staff_registry: StaffService, catalog: MvpContentCatalog) -> bool:
|
||||
if payload.get("protagonist_id") != "player" or staff_registry == null:
|
||||
return false
|
||||
var subject := StringName(payload.get("subject_id", ""))
|
||||
var rival := StringName(payload.get("rival_id", ""))
|
||||
if subject == &"player" or rival == &"player" or subject == rival or not staff_registry.has_staff(subject):
|
||||
return false
|
||||
- var heroine_definition := mvp_content_catalog.get_entry(&"unique_characters", subject)
|
||||
- var rival_definition := mvp_content_catalog.get_entry(&"unique_characters", rival)
|
||||
+ var heroine_definition := catalog.get_entry(&"unique_characters", subject)
|
||||
+ var rival_definition := catalog.get_entry(&"unique_characters", rival)
|
||||
var subject_staff := staff_registry.get_staff(subject)
|
||||
return subject_staff.employment_kind == StaffRuntime.EmploymentKind.UNIQUE \
|
||||
and heroine_definition.get(&"role_id") == String(subject_staff.role_id) \
|
||||
diff --git a/docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json b/docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
index 5474439..6d5e0ae 100644
|
||||
--- a/docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
+++ b/docs/plans/original-completion-2026-10-02/execution/completion_marker_contracts.json
|
||||
@@ -7,7 +7,7 @@
|
||||
"template": "Original relationship model: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
- "source_sha256_at_schema_audit": "ad509f5fb67ab91e1d1d99a08af51e4695e411b9a2541ea63ee22b1555cb0924",
|
||||
+ "source_sha256_at_schema_audit": "c74b243dbbb54dba9bbc165e29508cca910f0beb63e32d25ebbb8ea606dccce9",
|
||||
"authority": {
|
||||
"path": "docs/spec/acceptance/P18-01-code-r01.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
@@ -18,7 +18,7 @@
|
||||
"template": "Original relationship runtime: <checks> checks, <failures> failures",
|
||||
"required": true,
|
||||
"fixed_check_count_used": false,
|
||||
- "source_sha256_at_schema_audit": "374f3d31a65d2f2b62dfef29721c8c838575b856f4fa5a0bca31c6ba4c7e09dd",
|
||||
+ "source_sha256_at_schema_audit": "349271cc8b8a4750ef339ecac6905852bd7a5d006cca68ee10d5d0c737f426de",
|
||||
"authority": {
|
||||
"path": "docs/spec/acceptance/P18-01-code-r01.json",
|
||||
"scope": "new backend suite marker; native execution pending"
|
||||
diff --git a/docs/plans/original-completion-2026-10-02/execution/p18-01-code/IMPLEMENTATION.md b/docs/plans/original-completion-2026-10-02/execution/p18-01-code/IMPLEMENTATION.md
|
||||
index 453eeb2..efc5cea 100644
|
||||
--- a/docs/plans/original-completion-2026-10-02/execution/p18-01-code/IMPLEMENTATION.md
|
||||
+++ b/docs/plans/original-completion-2026-10-02/execution/p18-01-code/IMPLEMENTATION.md
|
||||
@@ -1,6 +1,53 @@
|
||||
# P18-01-CODE implementation handoff
|
||||
|
||||
-Status: submitted for Runner validation; no acceptance or unit completion claimed.
|
||||
+Status: repair 4 implementation prepared for Runner; no acceptance or unit completion claimed. P02-01 representative inputs remain an unavailable context dependency, detailed below.
|
||||
+
|
||||
+## Repair 3 historical failure (2026-10-15)
|
||||
+
|
||||
+Historical record only: stopping independent repairs over decoder permissiveness was wrong. The commander producer-evidence interpretation supersedes this old policy concern; the following describes the failed repair-3 attempt, not the current policy.
|
||||
+
|
||||
+Inspected baseline d2a1f80a613e7c77b02b941026bc49c2d85db863 using read-only git show.
|
||||
+RelationshipState.from_snapshot delegates to configure; _value preserves canonical
|
||||
+key precedence. Numeric fields use int(), with clampi/maxi where applicable.
|
||||
+Thus finite fractional numbers are truncated as well as integral JSON floats;
|
||||
+numeric strings such as metrics.affection = "42" are also converted. The baseline
|
||||
+RelationshipService._parse_snapshot similarly converts version and candidate
|
||||
+sequence with int(). These are broader than a finite-integral-float-only policy.
|
||||
+No acceptance policy for these conflicting formats has been selected here.
|
||||
+
|
||||
+Baseline normalization also replaces non-Dictionary metrics, action_counts,
|
||||
+daily_metric_deltas, flags and crossed_thresholds with defaults, coerces flags
|
||||
+with bool(), and ignores non-Array threshold collections. The immutable spec
|
||||
+requires wrong types to reject, while the repair direction requires baseline
|
||||
+legitimate acceptance without a new restriction or loosening. In particular,
|
||||
+accepting or rejecting numeric strings cannot satisfy both without an explicit
|
||||
+policy decision. Non-numeric/non-finite input, wrong containers, future versions,
|
||||
+duplicates, invalid references, corrupt original records and projection mismatches
|
||||
+remain required rejections under the spec; this report does not waive any.
|
||||
+
|
||||
+Baseline Runtime restore delegates legacy relationships to RelationshipService
|
||||
+without the added actor-existence loop. Baseline GuestService.despawn_guest retains
|
||||
+the departed guest in persistent_records and removes it from active guests.
|
||||
+The held actor loop is therefore still an unresolved repair item. Candidate
|
||||
+catalog selection, lifecycle tests, mutation-through-alias tests, atomic rejection
|
||||
+coverage and source-pin updates are also still outstanding. The numeric Reader
|
||||
+helpers in SimulationSnapshot and SaveService accept bounded finite integral JSON
|
||||
+floats for their own envelope fields; they do not establish a policy overriding
|
||||
+RelationshipState's coercions. P02-01 representative-save applicability has not
|
||||
+been established; no fixture acceptance claim is made.
|
||||
+
|
||||
+Only this handoff and prepare-only evidence were changed. Production code, test
|
||||
+sources and marker/policy pins were left untouched pending policy resolution.
|
||||
+Prepare-only exited 0: 1,311 source files, 67,310,742 bytes; 3,384,279,040 free
|
||||
+bytes; 381,883,542 conservative required bytes; capacity available. Seven suites:
|
||||
+original_relationship_model, original_relationship_runtime,
|
||||
+relationship_event_service, runtime_relationship_events,
|
||||
+runtime_snapshot_serialization, runtime_save_lifecycle, staff_management.
|
||||
+308 future parse paths and nine future native phases; engines/stages = 0,
|
||||
+actual_checks = null, formal_acceptance = false. The first invocation omitted
|
||||
+required --output and exited 2; the corrected invocation used the allowed
|
||||
+p18-01-code/repair-3-prepare output path. Native checks were not run.
|
||||
+P18-01 remains 30/88, in progress, with no partial credit.
|
||||
|
||||
Scope: dedicated original relationship state, lossless legacy snapshot preservation,
|
||||
Runtime registration and read projection, and the contract-listed tests and collector.
|
||||
@@ -34,8 +81,8 @@ The acceptance specification without its final newline matches the contract SHA2
|
||||
catalog membership does not invent recruitment. No new original update policy,
|
||||
contact, route, attack, threshold or duel behavior is defined.
|
||||
- Snapshot restore validates candidates before replacing live services, then
|
||||
- rebinds the identity validator to live staff. Existing legacy actor references
|
||||
- must resolve against player, restored staff or restored guests.
|
||||
+ rebinds the identity validator to live staff. Legacy relationships retain the original acceptance of departed guests; original
|
||||
+ records separately validate staff/person/catalog references.
|
||||
- Every staff-management row exposes `original_relationship`. Missing records
|
||||
have `configured: false` and null values, distinct from explicit zero. Configured
|
||||
projections are copies, so reads and caller edits cannot change service state.
|
||||
@@ -77,3 +124,91 @@ in_progress: ordinary Japanese UI rendering/equality, approved production values
|
||||
all-seven recruitment, final full required roster and applicable Windows final
|
||||
acceptance remain outstanding. No git writes, other agents or Runner controls
|
||||
were used by worker.
|
||||
+
|
||||
+## Repair 4 producer interpretation and independent repairs
|
||||
+
|
||||
+The unchanged wrong-types/valid-legacy contract follows legitimate producers,
|
||||
+not corrupt-input coercions. RelationshipState.create_snapshot
|
||||
+(scripts/relationship/relationship_state.gd:132-152) emits String ids/route,
|
||||
+int numeric fields, named route_lock, Dictionary numeric/bool collections and
|
||||
+Array thresholds. Its validity check (:99-101) requires int metrics.
|
||||
+Read-only git log identifies 423fd6d as the only history entry for that file;
|
||||
+git show of that producer (:132-152) also emits the enum NAME String, not int.
|
||||
+
|
||||
+Actual writer scripts/core/save_service.gd:874-878 serializes the snapshot with
|
||||
+var_to_bytes and ZSTD; Reader :1021-1028 uses bytes_to_var. Thus world numeric
|
||||
+ints remain ints. JSON decoding (:970-978) applies to the manifest, not relationship
|
||||
+payloads. Integral JSON floats are not an established relationship save format
|
||||
+on this path. Accept int legacy values, named route_lock and producer collections.
|
||||
+Reject numeric strings, null, bool-as-number, fractional/nonfinite numbers, float
|
||||
+relationship numbers, int route_lock, wrong containers and invalid enum names.
|
||||
+Unknown extensions remain opaque; canonical values precede aliases, and aliases,
|
||||
+unknown facts and collection order remain raw retained facts. Neither old axis
|
||||
+configures original Affection/Lust/Netorare.
|
||||
+
|
||||
+relationship_service.gd _legacy_types_valid now also checks collection key types
|
||||
+and restricts route_lock to producer enum names. The pre-existing int/container
|
||||
+checks implement the producer policy. No conversion or rewrite of raw input occurs.
|
||||
+Runtime candidate validation now takes restored_catalog; command/service binding
|
||||
+uses the live catalog. Removed only the added active legacy actor loop.
|
||||
+GuestService.despawn_guest (scripts/guest/guest_service.gd:954-978) retains the
|
||||
+persistent record and removes the active guest, so that loop rejected valid saves.
|
||||
+Original identity/person validation remains in place.
|
||||
+Existing StaffService.remove_staff (:897-898) and retire_staff (:942-943) already
|
||||
+refuse UNIQUE departures before changes; tests assert refusal and saved original
|
||||
+record survival. No new departure rule or record deletion was added.
|
||||
+
|
||||
+The two new suites now cover real Service and Runtime affection/dependence
|
||||
+mutations from v1 affinity/obligation, canonical precedence, raw extensions and
|
||||
+order, null original values, v2 restore/rebind, departed persistent guest acceptance,
|
||||
+and atomic malformed candidates. Rejection checks retain service identity/state,
|
||||
+whole Runtime bytes and caller input. The five existing suites remain unchanged.
|
||||
+Fixtures are validation inputs, not production values or newly hired characters.
|
||||
+
|
||||
+Collector derives every sorted .gd path from the exact shared.source_refs map.
|
||||
+Verification binds parse-paths.json, the receipt count, the unique zero-failure
|
||||
+FULL_DEPENDENCY_PARSE marker, actual_parse_checks and the whole retained stage
|
||||
+to that same source map. No count-specific skips or other provenance changes.
|
||||
+This frozen map has 308 paths; expanded maps must verify their own full count.
|
||||
+
|
||||
+### Precise remaining context gap
|
||||
+
|
||||
+The P02-01 input manifest referenced by
|
||||
+docs/plans/original-completion-2026-10-02/execution/multi-agent-dev-handoff/delivery_contract_proposal.json:333
|
||||
+is absent at artifacts/original-completion-2026-10-02/p02-01-fixed-baseline-r01/input-manifest.json
|
||||
+in this worktree. Reading the exact production-root counterpart returns
|
||||
+Operation not permitted. Production-root listing/search is also denied.
|
||||
+No representative save bytes or decoded fixture are available in this checkout;
|
||||
+.review-material is absent. Accordingly their exact types/applicability have NOT
|
||||
+been verified, no older conflicting producer shape is asserted, and no replacement
|
||||
+representative fixture has been invented. Runner/owner must supply readable pinned
|
||||
+manifest and applicable save members to finish that mandatory evidence and test.
|
||||
+This gap did not stop the independent repairs. No native checks were executed.
|
||||
+UI, values, routes, contacts and duel remain untouched. P18-01 remains 30/88,
|
||||
+in progress. Native seven-suite frozen evidence, p18-model validation, separate
|
||||
+Opus review, latest-main integration and fresh merged-source evidence remain
|
||||
+Root/Runner work; no completion claim is made.
|
||||
+
|
||||
+### Worker static/prepare evidence (repair 4)
|
||||
+
|
||||
+Python AST parsed successfully. git diff --check passed. Both new suite SHA-256
|
||||
+pins match their final source in marker contracts and suite-policy; all other
|
||||
+rows are unchanged. The five existing suite files are byte-identical to HEAD.
|
||||
+No engine, native collector, default profile or full regression was run.
|
||||
+
|
||||
+Prepare-only roster (seven): original_relationship_model,
|
||||
+original_relationship_runtime, relationship_event_service,
|
||||
+runtime_relationship_events, runtime_snapshot_serialization,
|
||||
+runtime_save_lifecycle, staff_management. Full paths are the unchanged ROSTER in
|
||||
+tools/run_p18_relationship_tests.py:17-25.
|
||||
+Initial repair-4 preview: 1,311 files, 67,318,770 source bytes,
|
||||
+3,388,039,168 free bytes, conservative single-set admission 381,891,570 bytes,
|
||||
+308 parse paths, nine future phases, engines/stages zero, actual_checks null,
|
||||
+formal_acceptance false. A final preview after final edits is retained separately
|
||||
+as repair-4-prepare.json. No native pass is implied by this preview.
|
||||
+
|
||||
+Using the supplied old output estimate conservatively as 474 MiB per full set
|
||||
+(including 351 MiB engine), two fresh sets require 948 MiB = 994,050,048 bytes.
|
||||
+They fit the observed ~3.39 GB free space, with ~2.39 GB left before other new
|
||||
+consumers. This is capacity arithmetic, not a reservation or a measured new run;
|
||||
+actual output growth remains Root's admission responsibility.
|
||||
diff --git a/scripts/relationship/relationship_service.gd b/scripts/relationship/relationship_service.gd
|
||||
index 35d4670..d4a49ef 100644
|
||||
--- a/scripts/relationship/relationship_service.gd
|
||||
+++ b/scripts/relationship/relationship_service.gd
|
||||
@@ -543,7 +543,7 @@ func _parse_snapshot(snapshot: Dictionary) -> Dictionary:
|
||||
|
||||
static func _legacy_types_valid(raw: Dictionary) -> bool:
|
||||
for key: String in ["relationship_id", "actor_a_id", "actor_b_id"]:
|
||||
- if not (raw.get(key) is String or raw.get(key) is StringName):
|
||||
+ if not raw.get(key) is String:
|
||||
return false
|
||||
for key: String in ["shield_max", "shield_current", "last_event_at", "daily_attack_count", "attack_day", "metric_delta_day"]:
|
||||
if raw.has(key) and not raw[key] is int:
|
||||
@@ -559,9 +559,9 @@ static func _legacy_types_valid(raw: Dictionary) -> bool:
|
||||
for value: Variant in raw.get(key, {}).values():
|
||||
if not value is int:
|
||||
return false
|
||||
- for key: String in ["action_counts", "flags"]:
|
||||
+ for key: String in ["metrics", "action_counts", "daily_metric_deltas", "flags", "crossed_thresholds"]:
|
||||
for identity: Variant in raw.get(key, {}):
|
||||
- if not (identity is String or identity is StringName):
|
||||
+ if not identity is String:
|
||||
return false
|
||||
for value: Variant in raw.get("flags", {}).values():
|
||||
if not value is bool:
|
||||
@@ -572,10 +572,11 @@ static func _legacy_types_valid(raw: Dictionary) -> bool:
|
||||
for threshold: Variant in value:
|
||||
if not threshold is int:
|
||||
return false
|
||||
- if raw.has("route_id") and not (raw["route_id"] is String or raw["route_id"] is StringName):
|
||||
- return false
|
||||
- if raw.has("route_lock") and not (raw["route_lock"] is int or raw["route_lock"] is String or raw["route_lock"] is StringName):
|
||||
+ if raw.has("route_id") and not raw["route_id"] is String:
|
||||
return false
|
||||
+ if raw.has("route_lock"):
|
||||
+ if not raw["route_lock"] is String or not RelationshipStateType.RouteLock.keys().has(raw["route_lock"]):
|
||||
+ return false
|
||||
return true
|
||||
|
||||
|
||||
diff --git a/tests/s4/test_original_relationship_model.gd b/tests/s4/test_original_relationship_model.gd
|
||||
index d2a2c81..1f24b4f 100644
|
||||
--- a/tests/s4/test_original_relationship_model.gd
|
||||
+++ b/tests/s4/test_original_relationship_model.gd
|
||||
@@ -30,7 +30,50 @@ func _service() -> RelationshipService:
|
||||
)
|
||||
|
||||
|
||||
+static func legacy_fixture() -> Dictionary:
|
||||
+ return {"version": 1, "relationships": [
|
||||
+ {"relationship_id": "aliases", "actor_a_id": "heroine_anri", "actor_b_id": "player",
|
||||
+ "metrics": {"affinity": 41, "obligation": 19, "extension": {"opaque": [3, "keep"]}},
|
||||
+ "extra": ["raw", 2.5]},
|
||||
+ {"relationship_id": "second", "actor_a_id": "departed", "actor_b_id": "player",
|
||||
+ "metrics": {"trust": 7}}],
|
||||
+ "threshold_candidates": [], "next_candidate_sequence": 1, "extension": ["ordered", 7]}
|
||||
+
|
||||
+
|
||||
+func _alias_mutations() -> void:
|
||||
+ var service := _service()
|
||||
+ var legacy := legacy_fixture()
|
||||
+ var input := var_to_bytes(legacy)
|
||||
+ _expect(service.restore_snapshot(legacy), "int v1 aliases accepted")
|
||||
+ _expect(service.apply_value_change(&"aliases", &"affection", 2, 0).is_success(), "affection mutation through real service")
|
||||
+ _expect(service.apply_value_change(&"aliases", &"dependence", 3, 0).is_success(), "dependence mutation through real service")
|
||||
+ var saved := service.create_snapshot()
|
||||
+ var raw: Dictionary = saved[&"legacy"]["relationships"][0]
|
||||
+ _expect(raw["metrics"]["affection"] == 43 and raw["metrics"]["dependence"] == 22, "canonical changes merged")
|
||||
+ _expect(raw["metrics"]["affinity"] == 41 and raw["metrics"]["obligation"] == 19, "aliases remain old facts")
|
||||
+ _expect(raw["metrics"]["extension"] == legacy["relationships"][0]["metrics"]["extension"] and raw["extra"] == ["raw", 2.5], "unknown facts survive mutation")
|
||||
+ _expect(saved[&"legacy"]["relationships"][1] == legacy["relationships"][1], "record order preserved")
|
||||
+ var restored := _service()
|
||||
+ _expect(restored.restore_snapshot(saved), "mutated v2 restores")
|
||||
+ _expect(var_to_bytes(restored.create_snapshot()) == var_to_bytes(saved), "mutated v2 raw order and bytes preserved")
|
||||
+ _expect(restored.get_relationship(&"aliases").get_metric(&"affection") == 43 and restored.get_relationship(&"aliases").get_metric(&"dependence") == 22, "canonical values take precedence over raw aliases")
|
||||
+ for key: StringName in [&"affection", &"lust", &"netorare"]:
|
||||
+ _expect(restored.get_original_relationship(&"heroine_anri")[key] == null, "old axes never configure original " + String(key))
|
||||
+ _expect(var_to_bytes(legacy) == input, "mutation never changes input bytes")
|
||||
+ for value: Variant in ["50", null, true, 50.0, 1.5, INF, NAN]:
|
||||
+ var bad := legacy_fixture()
|
||||
+ bad["relationships"][0]["metrics"]["affinity"] = value
|
||||
+ _rejected(restored, bad)
|
||||
+ var bad := legacy_fixture()
|
||||
+ bad["relationships"][0]["metrics"] = []
|
||||
+ _rejected(restored, bad)
|
||||
+ bad = saved.duplicate(true)
|
||||
+ bad[&"relationships"] = []
|
||||
+ _rejected(restored, bad)
|
||||
+
|
||||
+
|
||||
func _run() -> void:
|
||||
+ _alias_mutations()
|
||||
var service := _service()
|
||||
var before := var_to_bytes(service.create_snapshot())
|
||||
var unset := service.get_original_relationship(&"heroine_anri")
|
||||
diff --git a/tests/s4/test_original_relationship_runtime.gd b/tests/s4/test_original_relationship_runtime.gd
|
||||
index f2aa656..7029ce1 100644
|
||||
--- a/tests/s4/test_original_relationship_runtime.gd
|
||||
+++ b/tests/s4/test_original_relationship_runtime.gd
|
||||
@@ -71,8 +71,90 @@ func _run() -> void:
|
||||
invalid["rival_id"] = "missing"
|
||||
_expect(not runtime.relationship_service.register_original_relationship(invalid).is_success(), "restore rebind keeps identity validator")
|
||||
_expect(runtime.relationship_service.register_original_relationship(fixture).is_success(), "restored service accepts correct identities")
|
||||
+ _expect(not runtime.staff_service.remove_staff(&"heroine_anri").is_success(), "registered UNIQUE heroine removal refused")
|
||||
+ _expect(not runtime.staff_service.retire_staff(&"heroine_anri").is_success(), "registered UNIQUE heroine retirement refused")
|
||||
+ var retained: Dictionary = runtime.create_snapshot()
|
||||
+ _expect(runtime.restore_snapshot(retained), "refused departures survive save and readback")
|
||||
+ _expect(runtime.relationship_service.get_original_relationship(&"heroine_anri")[&"configured"], "departure never deletes original record")
|
||||
+ _extra_coverage(runtime)
|
||||
runtime.free()
|
||||
clock.free()
|
||||
state.free()
|
||||
print("Original relationship runtime: %d checks, %d failures" % [_checks, _failures])
|
||||
quit(_failures)
|
||||
+
|
||||
+
|
||||
+func _reject_runtime(runtime: Variant, candidate: Dictionary) -> void:
|
||||
+ var before := var_to_bytes(runtime.create_snapshot())
|
||||
+ var service: Variant = runtime.relationship_service
|
||||
+ var service_bytes := var_to_bytes(service.create_snapshot())
|
||||
+ var input := var_to_bytes(candidate)
|
||||
+ _expect(not runtime.restore_snapshot(candidate), "malformed candidate rejected atomically")
|
||||
+ _expect(runtime.relationship_service == service and var_to_bytes(service.create_snapshot()) == service_bytes, "rejection preserves prior service identity and bytes")
|
||||
+ _expect(var_to_bytes(runtime.create_snapshot()) == before, "rejection preserves whole Runtime bytes")
|
||||
+ _expect(var_to_bytes(candidate) == input, "rejection preserves all input bytes")
|
||||
+
|
||||
+
|
||||
+func _extra_coverage(runtime: Variant) -> void:
|
||||
+ var candidate: Dictionary = runtime.create_snapshot()
|
||||
+ var legacy := Fixtures.legacy_fixture()
|
||||
+ candidate[&"systems"][&"runtime"][&"relationships"] = legacy
|
||||
+ # GuestService's legitimate departure representation, retained after active removal.
|
||||
+ candidate[&"systems"][&"runtime"][&"guests"][&"persistent_records"].append({
|
||||
+ &"guest_id": "departed", &"guest_type_id": "traveler", &"debt_gold": 0,
|
||||
+ &"unresolved_incident_ids": [], &"outstanding_reservation_ids": []})
|
||||
+ candidate[&"systems"][&"runtime"][&"progression"][&"metrics"][&"guest_lifetime"] += 1
|
||||
+ var input := var_to_bytes(candidate)
|
||||
+ _expect(runtime.restore_snapshot(candidate), "int v1 and departed persistent guest relationships accepted")
|
||||
+ _expect(var_to_bytes(candidate) == input, "accepted v1 Runtime input unchanged")
|
||||
+ for change: Dictionary in [{&"metric_id": &"affection", &"delta": 2}, {&"metric_id": &"dependence", &"delta": 3}]:
|
||||
+ change[&"relationship_id"] = &"aliases"
|
||||
+ _expect(runtime.submit_command(&"change_relationship", change).is_success(), "alias changes use public Runtime command")
|
||||
+ var saved: Dictionary = runtime.create_snapshot()
|
||||
+ var raw: Dictionary = saved[&"systems"][&"runtime"][&"relationships"][&"legacy"]["relationships"][0]
|
||||
+ _expect(raw["metrics"]["affection"] == 43 and raw["metrics"]["dependence"] == 22, "Runtime merges canonical mutations")
|
||||
+ _expect(raw["metrics"]["affinity"] == 41 and raw["metrics"]["obligation"] == 19, "Runtime keeps raw aliases")
|
||||
+ _expect(raw["extra"] == ["raw", 2.5] and raw["metrics"]["extension"] == {"opaque": [3, "keep"]}, "Runtime keeps unknown facts")
|
||||
+ var saved_bytes := var_to_bytes(saved)
|
||||
+ _expect(runtime.restore_snapshot(saved), "mutated v2 Runtime restores and rebinds")
|
||||
+ _expect(var_to_bytes(runtime.create_snapshot()) == saved_bytes, "v2 Runtime preserves raw bytes and order")
|
||||
+ _expect(runtime.relationship_service.get_relationship(&"aliases").get_metric(&"affection") == 43 and runtime.relationship_service.get_relationship(&"aliases").get_metric(&"dependence") == 22, "Runtime canonical precedence survives rebind")
|
||||
+ for key: StringName in [&"affection", &"lust", &"netorare"]:
|
||||
+ _expect(runtime.relationship_service.get_original_relationship(&"heroine_anri")[key] == null, "Runtime old axes leave original unset")
|
||||
+ _expect(runtime.relationship_service.register_original_relationship(Fixtures.fixture()).is_success(), "rebound service accepts original")
|
||||
+ saved = runtime.create_snapshot()
|
||||
+ for kind: String in ["numeric_string", "metrics_container", "duplicate", "version_type", "unknown_version", "projection", "non_heroine", "counterpart", "non_staff", "corrupt"]:
|
||||
+ var bad := saved.duplicate(true)
|
||||
+ var relationships: Dictionary = bad[&"systems"][&"runtime"][&"relationships"]
|
||||
+ match kind:
|
||||
+ "numeric_string", "metrics_container":
|
||||
+ if kind == "numeric_string":
|
||||
+ relationships[&"legacy"]["relationships"][0]["metrics"]["affection"] = "50"
|
||||
+ else:
|
||||
+ relationships[&"legacy"]["relationships"][0]["metrics"] = []
|
||||
+ relationships[&"relationships"] = relationships[&"legacy"]["relationships"].duplicate(true)
|
||||
+ "duplicate":
|
||||
+ relationships[&"original_relationships"].append(Fixtures.fixture())
|
||||
+ "version_type":
|
||||
+ relationships[&"version"] = "2"
|
||||
+ "unknown_version":
|
||||
+ relationships[&"version"] = 3
|
||||
+ "projection":
|
||||
+ relationships[&"relationships"] = []
|
||||
+ "non_heroine":
|
||||
+ var rival_staff := StaffRuntime.new().configure(&"rival_rai", &"influencer", {&"employment_kind": &"UNIQUE"})
|
||||
+ _expect(rival_staff.is_valid(), "non-heroine rejection fixture is valid UNIQUE staff")
|
||||
+ bad[&"systems"][&"runtime"][&"staff"][&"staff"].append(rival_staff.create_snapshot())
|
||||
+ relationships[&"original_relationships"][0]["subject_id"] = "rival_rai"
|
||||
+ relationships[&"original_relationships"][0]["rival_id"] = "heroine_anri"
|
||||
+ var registry := StaffService.new()
|
||||
+ _expect(registry.register_staff(rival_staff).is_success(), "non-heroine UNIQUE exists in identity fixture registry")
|
||||
+ _expect(Fixtures.Model.from_snapshot(relationships[&"original_relationships"][0]) != null, "non-heroine payload passes structural model validation")
|
||||
+ _expect(not runtime._original_relationship_identities_valid(relationships[&"original_relationships"][0], registry, runtime.mvp_content_catalog), "catalog rejects non-heroine UNIQUE subject specifically")
|
||||
+ "counterpart":
|
||||
+ relationships[&"original_relationships"][0]["rival_id"] = "rival_other"
|
||||
+ "non_staff":
|
||||
+ relationships[&"original_relationships"][0]["subject_id"] = "departed"
|
||||
+ "corrupt":
|
||||
+ relationships[&"original_relationships"][0].erase("lust")
|
||||
+ _reject_runtime(runtime, bad)
|
||||
diff --git a/tools/regression/suite-policy.json b/tools/regression/suite-policy.json
|
||||
index 63d34d8..6604a3d 100644
|
||||
--- a/tools/regression/suite-policy.json
|
||||
+++ b/tools/regression/suite-policy.json
|
||||
@@ -2,14 +2,14 @@
|
||||
"schema_version": 1,
|
||||
"suite_policies": {
|
||||
"tests/s4/test_original_relationship_model.gd": {
|
||||
- "source_sha256": "ad509f5fb67ab91e1d1d99a08af51e4695e411b9a2541ea63ee22b1555cb0924",
|
||||
+ "source_sha256": "c74b243dbbb54dba9bbc165e29508cca910f0beb63e32d25ebbb8ea606dccce9",
|
||||
"ordinary_cleanup_prepared": false,
|
||||
"ordinary_control_labels": [],
|
||||
"old_bounded_teardown": false,
|
||||
"new_audio_QA": false
|
||||
},
|
||||
"tests/s4/test_original_relationship_runtime.gd": {
|
||||
- "source_sha256": "374f3d31a65d2f2b62dfef29721c8c838575b856f4fa5a0bca31c6ba4c7e09dd",
|
||||
+ "source_sha256": "349271cc8b8a4750ef339ecac6905852bd7a5d006cca68ee10d5d0c737f426de",
|
||||
"ordinary_cleanup_prepared": false,
|
||||
"ordinary_control_labels": [],
|
||||
"old_bounded_teardown": false,
|
||||
diff --git a/tools/run_p18_relationship_tests.py b/tools/run_p18_relationship_tests.py
|
||||
index c520311..925ccca 100644
|
||||
--- a/tools/run_p18_relationship_tests.py
|
||||
+++ b/tools/run_p18_relationship_tests.py
|
||||
@@ -199,6 +199,7 @@ def seal(out, refs, engine, contract_sha):
|
||||
source = content_map(refs)
|
||||
shared.write(out / 'receipt.json', {
|
||||
'schema': 'guarded-p18-v2', 'source_map': source,
|
||||
+ 'parse_checks': len([name for name in refs if name.endswith('.gd')]),
|
||||
'source_map_sha256': digest(source),
|
||||
'project_settings_sha256': source['project.godot']['sha256'],
|
||||
'marker_contract_sha256': contract_sha,
|
||||
@@ -281,8 +282,10 @@ def verify(out, refs, markers, contracts, policy, contract_sha, parse_paths):
|
||||
require(engine and shared.sha(engine) == start['engine_sha256']
|
||||
== manifest['engine_sha256'] == files['engine.bin']['sha256'],
|
||||
'current native engine and retained bytes pinned')
|
||||
- require(read('parse-paths.json') == parse_paths and len(parse_paths) == 308,
|
||||
- 'all 308 exact source parse paths')
|
||||
+ derived_paths = ['res://' + name for name in sorted(refs) if name.endswith('.gd')]
|
||||
+ require(read('parse-paths.json') == parse_paths == derived_paths
|
||||
+ and manifest['parse_checks'] == len(derived_paths),
|
||||
+ 'all exact source parse paths and receipt count')
|
||||
require(end['passed'] is True and end['engine_ended'] is True and end['error'] is None
|
||||
and end['cleanup_errors'] == [] and end['guard_errors'] == [],
|
||||
'finished successful collection without guard/cleanup error')
|
||||
@@ -463,8 +466,9 @@ def verify(out, refs, markers, contracts, policy, contract_sha, parse_paths):
|
||||
else:
|
||||
require(row['controlled_environment'] == {}, 'fresh import environment')
|
||||
if phase == 'parse':
|
||||
- require(re.findall(r'(?m)^FULL_DEPENDENCY_PARSE checks=([0-9]+) failures=([0-9]+)\n', raw)
|
||||
- == [('308', '0')] and row['actual_parse_checks'] == 308, 'unique all-script parse marker')
|
||||
+ require(len(re.findall(r'(?m)^FULL_DEPENDENCY_PARSE\b', raw)) == 1
|
||||
+ and re.findall(r'(?m)^FULL_DEPENDENCY_PARSE checks=([0-9]+) failures=([0-9]+)\n', raw)
|
||||
+ == [(str(len(parse_paths)), '0')] and row['actual_parse_checks'] == len(parse_paths), 'unique all-script parse marker')
|
||||
if test:
|
||||
parsed = markers.parse_raw(test, raw, contracts, source[test]['sha256'])
|
||||
require(parsed['passed'] and row['completion'] == parsed
|
||||
@@ -492,7 +496,7 @@ def verify(out, refs, markers, contracts, policy, contract_sha, parse_paths):
|
||||
'whole raw evidence unchanged during verification')
|
||||
require(content_map(shared.source_refs(shared.HERE.parent)) == source,
|
||||
'whole current source unchanged during verification')
|
||||
- print(json.dumps({'verified': True, 'actual_suites': 7, 'parse_checks': 308,
|
||||
+ print(json.dumps({'verified': True, 'actual_suites': 7, 'parse_checks': len(parse_paths),
|
||||
'actual_checks': end['actual_all_roster_checks'], 'engines_started': 0,
|
||||
'formal_acceptance': False, 'original_unit_complete': False}))
|
||||
return 0
|
||||
@@ -536,7 +540,6 @@ def main(argv=None):
|
||||
require(contracts[test]['source_sha256_at_schema_audit'] == refs[test]['sha256'],
|
||||
'new strict source-hashed marker')
|
||||
parse_paths = ['res://' + name for name in sorted(refs) if name.endswith('.gd')]
|
||||
- require(len(parse_paths) == 308, 'exact expected parse count')
|
||||
if args.prepare_only:
|
||||
ancestor = out.parent
|
||||
while not ancestor.exists():
|
||||
@@ -545,7 +548,7 @@ def main(argv=None):
|
||||
size = sum(p['bytes'] for p in refs.values())
|
||||
print(json.dumps({'roster': ROSTER, 'source_files': len(refs), 'source_bytes': size,
|
||||
'free_bytes': free, 'conservative_required_bytes': size + shared.MIN_SPACE,
|
||||
- 'capacity_available': free >= size + shared.MIN_SPACE, 'parse_paths': 308,
|
||||
+ 'capacity_available': free >= size + shared.MIN_SPACE, 'parse_paths': len(parse_paths),
|
||||
'future_native_phases': 9, 'actual_checks': None, 'engines': 0, 'stages': 0,
|
||||
'formal_acceptance': False}))
|
||||
return 0
|
||||
BIN
Binary file not shown.
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"original_path": "docs/plans/original-completion-2026-10-02/execution/p18-01-resume-20261015/PRESERVED_REPAIR4_DIFF.patch",
|
||||
"original_bytes": 32892,
|
||||
"original_sha256": "b4d570884c1d0eb90c6780c7346419cb7e3f43780ec590bb472822f087e3f72d",
|
||||
"compressed_path": "docs/plans/original-completion-2026-10-02/execution/p18-01-resume-20261015/PRESERVED_REPAIR4_DIFF.patch.gz",
|
||||
"compressed_bytes": 10186,
|
||||
"compressed_sha256": "73f67bd136833919e20bbc6d3e0dc1c31524e8956eb71a75d3ceafc94e55a402",
|
||||
"verified_content_preserved": true,
|
||||
"raw_original_also_in_git_commit": "1a6cc43f2efe5c0128d7677c6ee5dd17dcb15ce2",
|
||||
"reason": "Raw patch contains intentional diff context prefixes followed by tabs, which git diff --check misinterprets when patch is added as text. Preserve exact raw artifact in verified gzip, not whitespace-edit proof."
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"id": "p18",
|
||||
"observed_config": {
|
||||
"version": 1,
|
||||
"id": "p18",
|
||||
"kind": "heartbeat",
|
||||
"name": "P18独立レビューを利用枠回復後に再開",
|
||||
"status": "ACTIVE",
|
||||
"rrule": "FREQ=DAILY;COUNT=1;BYHOUR=22;BYMINUTE=41;BYSECOND=0",
|
||||
"target_thread_id": "01a0f827-b7b6-7453-9367-098f6b1c4435",
|
||||
"created_at": 1792067255122,
|
||||
"updated_at": 1792067255122
|
||||
},
|
||||
"scope": "One-time same-thread actual independent review after observed Claude reset; existing human continue-after-limit instruction; no duplicate workers or source/acceptance changes.",
|
||||
"view_verified": true
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"candidate": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"backend_task": "P18-01-CODE",
|
||||
"original_plan_id": "P18-01",
|
||||
"all4backend_conditions_unchanged": true,
|
||||
"formal_original_unit_credit": 0,
|
||||
"formal_validation": {
|
||||
"task_id": "P18-01-CODE",
|
||||
"commit": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"kind": "validation",
|
||||
"checks": [
|
||||
{
|
||||
"id": "p18-model",
|
||||
"exit_code": 0,
|
||||
"artifact": "/Users/korizatou114/Library/Application Support/agent-control/the-tree-p18-01-model/runs/f5e341d64e9f4cc9991960f7bcfa34ce",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"passed": true
|
||||
},
|
||||
"native_frozen": {
|
||||
"suites": 7,
|
||||
"checks": 1839,
|
||||
"parse": 308,
|
||||
"pids": [
|
||||
91826,
|
||||
91922,
|
||||
91953,
|
||||
91970,
|
||||
92030,
|
||||
92034,
|
||||
92058,
|
||||
92074,
|
||||
92126
|
||||
],
|
||||
"all9ended": true,
|
||||
"guard_errors": [],
|
||||
"cleanup_errors": [],
|
||||
"proof_pins": {
|
||||
"runner-input.json": "468fbe7da8f247098e3c47b720a22b211eed4164d2bb82e06a6708f192c47bec",
|
||||
"runner-ended.json": "101bac8ddb8acc46c147cb75191c223ae426f965cd4fe660cd1ca89a82760bc6",
|
||||
"receipt.json": "dd4d56b520914c7b28849c6d7393d389eee0c06ade28364ab66497e74ef414da",
|
||||
"all-tests.json": "bca039cb42aeba881fc9266ef07861698276dfcd8180e7bd7336f37a0b48e90a"
|
||||
}
|
||||
},
|
||||
"actual_prior_review": {
|
||||
"task_id": "P18-01-CODE",
|
||||
"commit": "b7a7cc01d4d0e874e10464c686b7fdeecd9b348c",
|
||||
"status": "changes_requested",
|
||||
"summary": "I reviewed the full diff, the complete changed Runtime methods, RelationshipService, OriginalRelationshipState, both new suites, the collector, the marker and policy pins, and the registered validation material. The verifier in .review-material/validation-runs/.../stdout.log reports verified=true, 7 suites, 1163 checks and 308 parse paths.\n\nP18-C-1 is met: the dedicated directional model requires explicit fields, ties shield_max to Affection, keeps unset distinct from explicit zero, and invents no coefficients.\n\nP18-C-3 is largely met: there is a real Runtime command, an identity validator tied to restored and then live staff and catalog, restore-before-swap atomicity, and read-only report projections.\n\nP18-C-2 is mostly met. The v1 raw facts, aliases, extensions and record order survive the v2 round trip, and the original relationship state is kept separate from the five legacy axes.\n\nHowever, the v2 container makes an existing affected-regression assertion pass vacuously. In tests/s6/test_runtime_save_lifecycle.gd:520-537, the \"recovery never guesses an exclusive Relationship route lock\" case appends an invalid EXCLUSIVE_LOCKED relationship with an empty route_id only to systems.runtime.relationships.relationships. That is now just the compatibility projection. The candidate is rejected by the new \"projection disagrees with legacy\" check (relationship_service.gd restore_snapshot) before the route-lock invariant is ever evaluated. The test body is unchanged and still passes, but it no longer verifies the P03 restore safeguard the spec requires to be preserved. Neither new suite restores the v2 legacy path with an invalid route lock. The 1163 passing checks therefore overstate coverage of that safeguard.\n\nThere are smaller gaps:\n- Threshold candidate fields other than the ids are not type-checked.\n- Candidate ordering in snapshots changed from sorted to insertion order once a legacy payload has been restored.\n\nP18-C-4: the native evidence is strong, but integration and affected final validation are still pending. The original P18-01 unit is correctly not claimed complete.",
|
||||
"acceptance_ids": [
|
||||
"P18-C-1",
|
||||
"P18-C-2",
|
||||
"P18-C-3",
|
||||
"P18-C-4"
|
||||
],
|
||||
"findings": [
|
||||
{
|
||||
"severity": "high",
|
||||
"message": "An existing restore-safeguard test now passes vacuously. tests/s6/test_runtime_save_lifecycle.gd:520-537 (route_mismatch) appends an invalid EXCLUSIVE_LOCKED relationship with route_id \"\" only to runtime.relationships[\"relationships\"], which under SNAPSHOT_VERSION 2 is just the compatibility projection. RelationshipService.restore_snapshot rejects it at the projection-vs-legacy equality check, so RelationshipState.is_valid's route-lock invariant is never reached. The test, which says \"recovery never guesses an exclusive Relationship route lock\", still passes without exercising that invariant, which weakens the P03 safeguard verification the spec requires to be retained. Fix: add a new-suite check that injects the invalid route-lock record into legacy.relationships and the projection consistently, then assert atomic rejection (normal and recovery restore), so the affected regression truly covers this invariant. Do not edit the existing test body."
|
||||
},
|
||||
{
|
||||
"severity": "medium",
|
||||
"message": "The wrong-type rejection for v1 threshold_candidates is partial. _parse_snapshot type-checks only candidate_id and relationship_id. It does not check metric_id, threshold (int), requires_unlock_event (bool), created_at (int), actor_ids (Array) or deduplication_key, even though RelationshipService._register_threshold_candidate produces typed values for all of them. Since \"wrong types\" must reject atomically, either validate these fields against the producer's types or record an explicit justification for leaving them opaque, and add a test for that decision."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "Legacy snapshot ordering changed. create_snapshot used to sort threshold_candidates by candidate_id. After any restore (when _legacy_raw is non-empty) it now emits insertion order, while a fresh service still emits sorted order. The result is deterministic, but it is an undocumented change to legacy output. Confirm this is intended, or keep the sorted order for candidates created after the restore."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "docs/.../p18-01-code/inspect_repair5_inputs.py hardcodes an absolute path under the worker allocation. It is a docs-only helper, but it is not reproducible from the checkout. Consider making the path a parameter."
|
||||
},
|
||||
{
|
||||
"severity": "low",
|
||||
"message": "P18-C-4: native local and affected evidence is present and verified (validation id 5, 9 owned PIDs, no cleanup or guard errors). Integration and affected final validation on merged main remain pending Runner gates. The P18-01 original unit remains at 30/88 and in progress; this is correctly not claimed complete."
|
||||
}
|
||||
]
|
||||
},
|
||||
"fixes_to_reassess": {
|
||||
"high": "New Runtime suite now has successful normal+real package recovery positive exclusive-route control, and empty-route-only mutation with legacy/projection identical. Asserts normal and actualload_with_recovery rejection, input/Runtime/service bytes, serviceidentity, forbiddenrepairsfalse. Five oldtests untouched.",
|
||||
"medium": "Added candidate_id/relationship_id/metric_id and actor String/StringName acceptance, dedup keyString,threshold/created_atint,requires_unlock_eventbool,Array2actors typed. Actualproducer typedcandidate/Stringcompatibility/opaqueextension positivecontrols and wrongtype tests acrossv1/v2,Service,Runtime,recovery. No newgameplaynumericbounds.",
|
||||
"low": "Rawcandidateorder retained per lossless contract; realzero-paddedmonotonic producer appending test added. Review whether this legitimately preserves required oldbehavior; do not simply waive.",
|
||||
"docs_low": "Historicalinspectorabsoluteallocationpath deferredoutsideproductacceptance."
|
||||
},
|
||||
"fixed_original_inputs": {
|
||||
"candidate": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"test_sha256": "c56bdb99dd43a4e7ceb3ca2861e8db39972c5c4e805126a77e2f7da32ca5bdc9",
|
||||
"fixed_original_manifest_sha256": "d07b6c42ecca11bf3557ee5034ce9cc70b5a750f7b08b6b40f9ef09cdbe787c2",
|
||||
"packages": [
|
||||
{
|
||||
"name": "initial",
|
||||
"world_bytes": 7523,
|
||||
"world_sha256": "df91b4624c9afdeea2d366ff38d9f545fcff3f5f99223e3c04ae66d04b2f9fab",
|
||||
"manifest_sha256": "e9c4f7a8ea4ce9897c1e66c7861779fcd558f2dc314e08dbaef1b59bd145f419",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "operating",
|
||||
"world_bytes": 48631,
|
||||
"world_sha256": "93732bb0bc042f4da0f90879a03dc3f3e374b3b45000840b0cbae142c42601c6",
|
||||
"manifest_sha256": "9c8b2c813c78ea1e19f43af31e77ff1547d707ca93f0d142c9e0df5e9bee8bd6",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "moving",
|
||||
"world_bytes": 27413,
|
||||
"world_sha256": "a577b190cb3b18cfc5cca1ef15d26521ea950bf5f3d3da68d19b1c8f43672158",
|
||||
"manifest_sha256": "52e87c19e39d7e4e922b47ef5979f4fecbe3211bd3f193ab30fd5418fffc5c73",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "date-boundary",
|
||||
"world_bytes": 26686,
|
||||
"world_sha256": "d4443f0bd42c2e9d6a5dd07d1949deade5d7526036f1320b56336b5637c9fcc3",
|
||||
"manifest_sha256": "5e604491f863537d390f9db11f9dcc2473fcbf7fc0bced8d326caae893572ea2",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "defense",
|
||||
"world_bytes": 10110,
|
||||
"world_sha256": "34ab140d64743b89425c292b785827fdb82c2bf92510688a4038461a2fe7a5d7",
|
||||
"manifest_sha256": "91d209a9bc295eadfa761359670a0c53ec7799a1f2ab53eedaacc14b2430b015",
|
||||
"byte_for_byte_original_match": true
|
||||
}
|
||||
],
|
||||
"all_fixed_world_and_manifest_bytes_match": true,
|
||||
"scope": "Independent Root original byte comparison; native Reader/Runtime evidence is separate",
|
||||
"engines_started": 0
|
||||
},
|
||||
"actual_merged_source_native": {
|
||||
"source_composition_commit": "44874d792ff4f2293c1b71c3a111d899b4798723",
|
||||
"source_tree": "90be420677d106a0a18cca5f2ba17fab833ed446",
|
||||
"main_base": "cb0a58bc285a29c039d20383efe06d65792b8249",
|
||||
"submitted": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"ordinary_integration_candidate": false,
|
||||
"actual_native_suites": 7,
|
||||
"actual_native_checks": 1839,
|
||||
"actual_parse_paths": 316,
|
||||
"all9ownedended": true,
|
||||
"output": "/Users/korizatou114/Projects/TheTree-managed-worktrees/p18-01-model/.runtime/P18-01-CODE/build/p18-merged-native-evidence-265ce30-r01",
|
||||
"seconds": 67.39455008506775,
|
||||
"proof_pins": {
|
||||
"runner-input.json": "c5e601dd8c7f75f3ac054a5a28c7805490f20570372ed1a99e69ae67321ef5e2",
|
||||
"runner-ended.json": "c5bf962e4caf4d2c84c21dcdfa459e4ed451bbae2ce88d36b6e057618b5bdd30",
|
||||
"receipt.json": "ebf166068947255191dc88458f472093b6a81da57c2e30d8ded1891e1f0a7227",
|
||||
"all-tests.json": "5a063b2c35a1e21cc57a59ad6dd1fc159a58d84201594f0dc08114bf2594861b"
|
||||
},
|
||||
"source_map_reuse_rule": "Only reuse against a future ordinary Runner candidate after independently matching every selected source/settings/marker/policy/engine/input file. Composition Git SHA is not the future integration SHA and is not relabelled.",
|
||||
"source_or_proof_edited": false,
|
||||
"formal_original_unit_credit": 0,
|
||||
"remaining": [
|
||||
"Separate actual Opus review of submitted265 after its quota recovers",
|
||||
"Ordinary latest-main prepare-integration with strict applicable evidence, exact candidate approval/final/main integration",
|
||||
"Whole originalP18conditions stillopen"
|
||||
]
|
||||
},
|
||||
"merged_proof_scope": "Non-production actualGitcomposition with currentmain, not ordinaryintegrationcandidate. All7/1839 and316parse passed. Does not replace ordinaryprepare-integration/final or independentsubmittedreview. Reuse only when everyselectedsource/settings/markers/policy/engine/input hashmatches futureactualcandidate; neverrelabel compositionGitSHA.",
|
||||
"source_or_tests_root_edited": false,
|
||||
"actual_commander6": "Not obtained dueClaude429. Actualrecorded same-task Opus599fd345 model/startchoice and later actualOpusreviewd002 were forwarded unchanged under existingRunner/spec/scope; allgates preserved. This is not a forged commanderdecision.",
|
||||
"review_request": "Actual separate Opus5.5 session: reassessALL4fixedbackendcriteria, FULLdiff, relevantcompletecurrentfrozen sources/dependencies, actualregisteredvalidation/native/rawproof/typedproducer/Reader evidence and exacthigh/medium fixes. No severitywaiver, no testcountsubstitute. Readfullfrozencheckout files if needed; no byte/filecap. All necessarymaterial copiedby normalRunner. Integration/final remainordinaryfollowinggates; do not claimoriginalunitcomplete.",
|
||||
"remaining_whole_unit": [
|
||||
"Ordinary staffUI actualoriginal3axis/shield and saved/restored display equality (currentmainstaffpanelhasnone; draftUIphase isnotimplementation)",
|
||||
"Production-approved original initialization and undefinedunits/ranges",
|
||||
"Required finalwholeunitfullrosterafterrelatedUI/codebatch",
|
||||
"Independentwholeunitreview and sameWindows finalapplicableacceptance"
|
||||
]
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"candidate": "265ce30f81b1302ca374330f7129f02d6fde4697",
|
||||
"test_sha256": "c56bdb99dd43a4e7ceb3ca2861e8db39972c5c4e805126a77e2f7da32ca5bdc9",
|
||||
"fixed_original_manifest_sha256": "d07b6c42ecca11bf3557ee5034ce9cc70b5a750f7b08b6b40f9ef09cdbe787c2",
|
||||
"packages": [
|
||||
{
|
||||
"name": "initial",
|
||||
"world_bytes": 7523,
|
||||
"world_sha256": "df91b4624c9afdeea2d366ff38d9f545fcff3f5f99223e3c04ae66d04b2f9fab",
|
||||
"manifest_sha256": "e9c4f7a8ea4ce9897c1e66c7861779fcd558f2dc314e08dbaef1b59bd145f419",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "operating",
|
||||
"world_bytes": 48631,
|
||||
"world_sha256": "93732bb0bc042f4da0f90879a03dc3f3e374b3b45000840b0cbae142c42601c6",
|
||||
"manifest_sha256": "9c8b2c813c78ea1e19f43af31e77ff1547d707ca93f0d142c9e0df5e9bee8bd6",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "moving",
|
||||
"world_bytes": 27413,
|
||||
"world_sha256": "a577b190cb3b18cfc5cca1ef15d26521ea950bf5f3d3da68d19b1c8f43672158",
|
||||
"manifest_sha256": "52e87c19e39d7e4e922b47ef5979f4fecbe3211bd3f193ab30fd5418fffc5c73",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "date-boundary",
|
||||
"world_bytes": 26686,
|
||||
"world_sha256": "d4443f0bd42c2e9d6a5dd07d1949deade5d7526036f1320b56336b5637c9fcc3",
|
||||
"manifest_sha256": "5e604491f863537d390f9db11f9dcc2473fcbf7fc0bced8d326caae893572ea2",
|
||||
"byte_for_byte_original_match": true
|
||||
},
|
||||
{
|
||||
"name": "defense",
|
||||
"world_bytes": 10110,
|
||||
"world_sha256": "34ab140d64743b89425c292b785827fdb82c2bf92510688a4038461a2fe7a5d7",
|
||||
"manifest_sha256": "91d209a9bc295eadfa761359670a0c53ec7799a1f2ab53eedaacc14b2430b015",
|
||||
"byte_for_byte_original_match": true
|
||||
}
|
||||
],
|
||||
"all_fixed_world_and_manifest_bytes_match": true,
|
||||
"scope": "Independent Root original byte comparison; native Reader/Runtime evidence is separate",
|
||||
"engines_started": 0
|
||||
}
|
||||
@@ -244,7 +244,7 @@
|
||||
"facility_value_contracts_validation.json": "bf490a9ca585c48fc318e76c4a069ef244827d828d46e6415399f7710590dd16",
|
||||
"performance_audit.json": "0b630b15a392c3e0366f1362bfe4ddacb968f915f54549f82e4d6fa315384762",
|
||||
"progress_contract.json": "ccbdfce8c8365d5c13f59531955708834cce45acd0e136561c95295dfdb5df77",
|
||||
"progress_snapshot.json": "6e11768ba54df24b96789a28466ee7cccfec5ffbd3ecdc168f405ad3e1b74b55",
|
||||
"progress_snapshot.json": "7c5e9ca1cf85b6b038d8c6cec46774dcd7639eb9da73973c193a38666416d6e0",
|
||||
"progress_validator_guard_checks.json": "72ee513fcf1cad85c24bfd0a4b472f425f6acf117928ece0f6b41e29018da627",
|
||||
"progress_validator_guard_checks.r01.json": "14c26adffa5a1938241db4912e50ea54b660641ee6fee2e412d467dce14d0519",
|
||||
"requirement_coverage.json": "8b5788b22ae8f49ea7e5cf048a5f0d82b54f6f193623465e0b70496b5aadd09d",
|
||||
|
||||
@@ -10310,6 +10310,28 @@
|
||||
"native_parse": 308,
|
||||
"all9ownedended": true,
|
||||
"formal_original_unit_credit": 0,
|
||||
"audit": "execution/p18-01-resume-20261015/CURRENT_ACCEPTANCE_AUDIT.json"
|
||||
"audit": "execution/p18-01-resume-20261015/CURRENT_ACCEPTANCE_AUDIT.json",
|
||||
"merged_native_preflight": {
|
||||
"result": "MERGED_265_NATIVE_RESULT.json",
|
||||
"composition_commit": "44874d792ff4f2293c1b71c3a111d899b4798723",
|
||||
"suites": 7,
|
||||
"checks": 1839,
|
||||
"parse_paths": 316,
|
||||
"all9ownedended": true,
|
||||
"ordinary_integration_candidate": false,
|
||||
"main_adopted": false
|
||||
},
|
||||
"review_resume": {
|
||||
"automation_id": "p18",
|
||||
"kind": "one-time same-thread heartbeat",
|
||||
"scheduled_jst": "2026-10-15T22:41:00+09:00",
|
||||
"receipt": "REVIEW_RESUME_AUTOMATION.json",
|
||||
"duplicate_guard_required": true
|
||||
},
|
||||
"storage_offload": {
|
||||
"report": "../drive-offload-cold-r06-20261015/FINAL_REPORT.json",
|
||||
"current_proof_eight_pins_unchanged": true,
|
||||
"closed_review_material_restorable_on_Drive": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user