[object Object]

← back to Ticket System

Verify retained backup objects and restore five scoped renders

1809c161af09756b1db81875f42c5888812a1cd0 · 2026-09-08 06:39:28 -0700 · Steve Abrams

Files touched

Diff

commit 1809c161af09756b1db81875f42c5888812a1cd0
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Tue Sep 8 06:39:28 2026 -0700

    Verify retained backup objects and restore five scoped renders
---
 .../ops-five-render-proof.json                     | 339 +++++++++++++
 .../ops-object-pins.json                           |  10 +
 .../ops-object-result.json                         | 146 ++++++
 .../ops-object-verifier-v1.py                      | 411 +++++++++++++++
 .../parent-five-render-proof.json                  |  46 ++
 .../parent-independent-cli-proof.json              | 550 +++++++++++++++++++++
 .../parent-original-capture-proof.json             |  11 +
 .../parent-real-integrity-proof.json               |  42 ++
 .../cycle-20260908T1322Z-m4gNE5-integrity.json     |  24 +
 9 files changed, 1579 insertions(+)

diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-five-render-proof.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-five-render-proof.json
new file mode 100644
index 00000000..6d805afa
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-five-render-proof.json
@@ -0,0 +1,339 @@
+{
+  "started_epoch": 1788874519.4649549,
+  "data_deadline_epoch": 1788875002.896985,
+  "restores": [
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4",
+      "captured_ref": "ad275a5b3bbabd66d23893af977e96553f969eaa",
+      "git_oid": "efbba50e8faff2c98d5cd58654619ffcc85b7e92",
+      "persisted_git_oid": "efbba50e8faff2c98d5cd58654619ffcc85b7e92",
+      "bytes": 54076657,
+      "restored_sha256": "02c63daaf51ec448e1e81038515573b90b493020ca63e64b815b13c3348c7807",
+      "current_local_sha256": "02c63daaf51ec448e1e81038515573b90b493020ca63e64b815b13c3348c7807",
+      "current_local_stable": true,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4",
+      "captured_ref": "ad275a5b3bbabd66d23893af977e96553f969eaa",
+      "git_oid": "b43f1788d2681871ff6ac918be7b5857a2e5cdd5",
+      "persisted_git_oid": "b43f1788d2681871ff6ac918be7b5857a2e5cdd5",
+      "bytes": 57230151,
+      "restored_sha256": "78958f5c3bd6eb81c4859f51171636c2e39b60311922793dba8126a224e95ee2",
+      "current_local_sha256": "78958f5c3bd6eb81c4859f51171636c2e39b60311922793dba8126a224e95ee2",
+      "current_local_stable": true,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4",
+      "captured_ref": "ad275a5b3bbabd66d23893af977e96553f969eaa",
+      "git_oid": "4744083a7a07447f55cde597cdbb14b530e82371",
+      "persisted_git_oid": "4744083a7a07447f55cde597cdbb14b530e82371",
+      "bytes": 57075907,
+      "restored_sha256": "86af0a15c7feeaadacb6cfa72cfdf24c1b42ebb7112a0dc8f95056c7c1190712",
+      "current_local_sha256": "86af0a15c7feeaadacb6cfa72cfdf24c1b42ebb7112a0dc8f95056c7c1190712",
+      "current_local_stable": true,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4",
+      "captured_ref": "ad275a5b3bbabd66d23893af977e96553f969eaa",
+      "git_oid": "f868b83b92bc085314fd49cd1f791c7ea3b114bf",
+      "persisted_git_oid": "f868b83b92bc085314fd49cd1f791c7ea3b114bf",
+      "bytes": 31563007,
+      "restored_sha256": "3757002784c48ce9055d75a90420ee59e0853c054b5009cc3105467876bbaf40",
+      "current_local_sha256": "3757002784c48ce9055d75a90420ee59e0853c054b5009cc3105467876bbaf40",
+      "current_local_stable": true,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4",
+      "captured_ref": "ad275a5b3bbabd66d23893af977e96553f969eaa",
+      "git_oid": "dbf6ed038c5be1d119c9f8956cbe83dd72bb1e42",
+      "persisted_git_oid": "dbf6ed038c5be1d119c9f8956cbe83dd72bb1e42",
+      "bytes": 28635596,
+      "restored_sha256": "8d86bfc65054c3368209d2875133ed5f7511a231b46973fa5326bcad5d845d08",
+      "current_local_sha256": "8d86bfc65054c3368209d2875133ed5f7511a231b46973fa5326bcad5d845d08",
+      "current_local_stable": true,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4",
+      "verdict": "PASS"
+    }
+  ],
+  "source_scope": "historical captured snapshot; current local bytes compared only for these five paths",
+  "all_restored_files_retained": true,
+  "commands": [
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "ls-tree",
+        "-rz",
+        "ad275a5b3bbabd66d23893af977e96553f969eaa",
+        "--",
+        "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "-s",
+        "efbba50e8faff2c98d5cd58654619ffcc85b7e92"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "cat-file",
+        "blob",
+        "efbba50e8faff2c98d5cd58654619ffcc85b7e92"
+      ],
+      "exit": 0,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4",
+      "stderr": "/private/tmp/ops-TK10928-integrity.SDj0y8/restore-rentv-slideshow_2026-07-29_07-02-25.stderr"
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "hash-object",
+        "--",
+        "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "ls-tree",
+        "-rz",
+        "ad275a5b3bbabd66d23893af977e96553f969eaa",
+        "--",
+        "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "-s",
+        "b43f1788d2681871ff6ac918be7b5857a2e5cdd5"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "cat-file",
+        "blob",
+        "b43f1788d2681871ff6ac918be7b5857a2e5cdd5"
+      ],
+      "exit": 0,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4",
+      "stderr": "/private/tmp/ops-TK10928-integrity.SDj0y8/restore-rentv-slideshow_2026-07-29_08-29-23.stderr"
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "hash-object",
+        "--",
+        "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "ls-tree",
+        "-rz",
+        "ad275a5b3bbabd66d23893af977e96553f969eaa",
+        "--",
+        "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "-s",
+        "4744083a7a07447f55cde597cdbb14b530e82371"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "cat-file",
+        "blob",
+        "4744083a7a07447f55cde597cdbb14b530e82371"
+      ],
+      "exit": 0,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4",
+      "stderr": "/private/tmp/ops-TK10928-integrity.SDj0y8/restore-rentv-slideshow_2026-07-29_08-22-08.stderr"
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "hash-object",
+        "--",
+        "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "ls-tree",
+        "-rz",
+        "ad275a5b3bbabd66d23893af977e96553f969eaa",
+        "--",
+        "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "-s",
+        "f868b83b92bc085314fd49cd1f791c7ea3b114bf"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "cat-file",
+        "blob",
+        "f868b83b92bc085314fd49cd1f791c7ea3b114bf"
+      ],
+      "exit": 0,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4",
+      "stderr": "/private/tmp/ops-TK10928-integrity.SDj0y8/restore-rentv-slideshow_2026-07-29_08-16-11.stderr"
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "hash-object",
+        "--",
+        "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "ls-tree",
+        "-rz",
+        "ad275a5b3bbabd66d23893af977e96553f969eaa",
+        "--",
+        "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "-s",
+        "dbf6ed038c5be1d119c9f8956cbe83dd72bb1e42"
+      ],
+      "exit": 0,
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "cat-file",
+        "blob",
+        "dbf6ed038c5be1d119c9f8956cbe83dd72bb1e42"
+      ],
+      "exit": 0,
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4",
+      "stderr": "/private/tmp/ops-TK10928-integrity.SDj0y8/restore-rentv-slideshow_2026-07-29_07-49-53.stderr"
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "gc.auto=0",
+        "hash-object",
+        "--",
+        "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4"
+      ],
+      "exit": 0,
+      "stderr": ""
+    }
+  ],
+  "object_validation_run_id": "ce98da6a-4528-4255-9c07-30543c8a1ea9",
+  "verdict": "PASS",
+  "finished_epoch": 1788874524.452112,
+  "combined_data_phase_seconds": 121.5551278591156
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-pins.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-pins.json
new file mode 100644
index 00000000..8dbbdc1a
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-pins.json
@@ -0,0 +1,10 @@
+{
+  "version": "ops-object-verifier-v1",
+  "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+  "source": "/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+  "inventory_sha256": "3d165016ebb5e06b18b97124d5d06a5e0b528a34c08f895a62544cfff72add12",
+  "manifest_sha256": "02f539816fccb989c307bece019b48c3dadf8bbead1c4f977395af3053c78746",
+  "object_count": 14061,
+  "logical_bytes": 60348642328,
+  "require_immutable": true
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-result.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-result.json
new file mode 100644
index 00000000..c01b2adf
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-result.json
@@ -0,0 +1,146 @@
+{
+  "version": "ops-object-verifier-v1",
+  "run_id": "ce98da6a-4528-4255-9c07-30543c8a1ea9",
+  "started_epoch": 1788874403.0304341,
+  "data_budget_seconds": 420.0,
+  "max_workers": 2,
+  "python_blob_chunk_bytes": 1048576,
+  "structured_cap_bytes": 2097152,
+  "source": "/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+  "full_fsck_semantics": false,
+  "binding": "eafd07a985dd2872aaf5ee57ec6936e536278ca5258a8cbee512a0a0277ab849",
+  "pins": {
+    "version": "ops-object-verifier-v1",
+    "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+    "source": "/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+    "inventory_sha256": "3d165016ebb5e06b18b97124d5d06a5e0b528a34c08f895a62544cfff72add12",
+    "manifest_sha256": "02f539816fccb989c307bece019b48c3dadf8bbead1c4f977395af3053c78746",
+    "object_count": 14061,
+    "logical_bytes": 60348642328,
+    "require_immutable": true
+  },
+  "source_manifest": {
+    "files": 4059,
+    "bytes": 3167634917,
+    "sha256_verified": 4059,
+    "immutable_entries": 4328
+  },
+  "inventory_exact": true,
+  "roots": {
+    "HEAD": "c539b5a08a4f84a551d8825a0fc73fa588bcbce8",
+    "refs": [
+      "ad275a5b3bbabd66d23893af977e96553f969eaa refs/auto-snapshot/latest",
+      "c539b5a08a4f84a551d8825a0fc73fa588bcbce8 refs/heads/master"
+    ],
+    "all_in_inventory": true
+  },
+  "resume_credited": 0,
+  "retained_uncredited_tails": [],
+  "completed": 14061,
+  "remaining": 0,
+  "completed_bytes": 60348642328,
+  "remaining_bytes": 0,
+  "completed_by_type": {
+    "blob": 4574,
+    "tree": 6991,
+    "commit": 2496,
+    "tag": 0
+  },
+  "internal_edges_checked": 246888,
+  "gitlinks_external": 1597346,
+  "structured_objects_remaining": 0,
+  "roots_hash_verified": true,
+  "errors": [],
+  "verdict": "PASS",
+  "completion_claim_allowed": true,
+  "receipts": {
+    "/private/tmp/ops-TK10928-integrity.SDj0y8/real/receipts/segment-ce98da6a-4528-4255-9c07-30543c8a1ea9-0.jsonl": "29aaa75416c36ae0e05f6ba234fe76906eaaff2b13cb04e27fd65eb4ea0e472a",
+    "/private/tmp/ops-TK10928-integrity.SDj0y8/real/receipts/segment-ce98da6a-4528-4255-9c07-30543c8a1ea9-1.jsonl": "45cbfe365bb32a9e08b4619f4a21902bc919dbaa1313173dfac4f2ecbf0d81f0"
+  },
+  "elapsed_seconds": 103.15799141605385,
+  "finished_epoch": 1788874506.187737,
+  "commands": [
+    {
+      "argv": [
+        "git",
+        "--no-pager",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "core.commitGraph=false",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "--batch-all-objects",
+        "--batch-check=%(objectname) %(objecttype) %(objectsize) %(objectsize:disk)"
+      ],
+      "exit": 0,
+      "stdout_sha256": "3d165016ebb5e06b18b97124d5d06a5e0b528a34c08f895a62544cfff72add12",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--no-pager",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "core.commitGraph=false",
+        "-c",
+        "gc.auto=0",
+        "for-each-ref",
+        "--format=%(objectname) %(refname)"
+      ],
+      "exit": 0,
+      "stdout_sha256": "e623d1641dbb09982483120ca453369499267dfc1c5266bb6f6b69e56fed9c80",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--no-pager",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "core.commitGraph=false",
+        "-c",
+        "gc.auto=0",
+        "rev-parse",
+        "--verify",
+        "HEAD"
+      ],
+      "exit": 0,
+      "stdout_sha256": "2bcbe92f4ea45a1f42f7e7284f82ebb3ba95875a499f24c0c2faa26e6328a299",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--no-pager",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "core.commitGraph=false",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "--batch"
+      ],
+      "pid": 37521,
+      "stderr_path": "/private/tmp/ops-TK10928-integrity.SDj0y8/real/cat-file-ce98da6a-4528-4255-9c07-30543c8a1ea9-0.stderr",
+      "exit": 0
+    },
+    {
+      "argv": [
+        "git",
+        "--no-pager",
+        "--git-dir=/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+        "-c",
+        "core.commitGraph=false",
+        "-c",
+        "gc.auto=0",
+        "cat-file",
+        "--batch"
+      ],
+      "pid": 37522,
+      "stderr_path": "/private/tmp/ops-TK10928-integrity.SDj0y8/real/cat-file-ce98da6a-4528-4255-9c07-30543c8a1ea9-1.stderr",
+      "exit": 0
+    }
+  ]
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py
new file mode 100644
index 00000000..669ad78a
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py
@@ -0,0 +1,411 @@
+#!/usr/bin/env python3
+"""Scratch-only SHA-1 Git object validator; receipts are resumable, not git fsck.
+
+No source writes. Exactly two cat-file subprocesses maximum. Stream blobs in
+1 MiB chunks; structured objects have a 2 MiB cap. Every successful object has
+an fsynced hash-chained receipt. Torn final lines are retained and uncredited.
+"""
+import argparse
+import concurrent.futures
+import hashlib
+import json
+import os
+from pathlib import Path
+import queue
+import re
+import select
+import stat
+import subprocess
+import threading
+import time
+import uuid
+
+VERSION = 'ops-object-verifier-v1'
+GUARD = Path('/Users/macstudio3/Projects/ticket-system/config/dtd-cost-mode')
+HEX = re.compile(r'^[0-9a-f]{40}$')
+CHUNK = 1024 * 1024
+STRUCT_LIMIT = 2 * CHUNK
+
+
+def canon(x):
+    return json.dumps(x, sort_keys=True, separators=(',', ':')).encode()
+
+
+def sha(path):
+    h = hashlib.sha256()
+    with Path(path).open('rb') as f:
+        for b in iter(lambda: f.read(CHUNK), b''):
+            h.update(b)
+    return h.hexdigest()
+
+
+def write_json(path, data):
+    with Path(path).open('x') as f:
+        json.dump(data, f, indent=2)
+        f.write('\n')
+        f.flush()
+        os.fsync(f.fileno())
+
+
+def env():
+    e = {k: v for k, v in os.environ.items() if not k.startswith('GIT_')}
+    e.update(GIT_CONFIG_NOSYSTEM='1', GIT_CONFIG_GLOBAL='/dev/null',
+             GIT_OPTIONAL_LOCKS='0', GIT_NO_REPLACE_OBJECTS='1')
+    return e
+
+
+def gitcmd(repo, args):
+    return ['git', '--no-pager', '--git-dir=' + str(repo),
+            '-c', 'core.commitGraph=false', '-c', 'gc.auto=0', *args]
+
+
+def command(repo, args, deadline, commands):
+    c = gitcmd(repo, args)
+    p = subprocess.run(c, env=env(), capture_output=True,
+                       timeout=max(.01, deadline-time.monotonic()))
+    commands.append({'argv': c, 'exit': p.returncode,
+                     'stdout_sha256': hashlib.sha256(p.stdout).hexdigest(),
+                     'stderr': p.stderr.decode(errors='replace')[:1000]})
+    if p.returncode:
+        raise ValueError('git command failed: ' + repr(commands[-1]))
+    return p.stdout
+
+
+def inventory(path):
+    out = {}
+    for line in Path(path).read_text().splitlines():
+        oid, kind, size, stored = line.split()
+        if not HEX.fullmatch(oid) or oid in out or kind not in ('commit', 'tree', 'blob', 'tag'):
+            raise ValueError('malformed/duplicate inventory row: ' + line)
+        out[oid] = (kind, int(size), int(stored))
+    if not out:
+        raise ValueError('empty inventory')
+    return out
+
+
+def inspect_source(repo, manifest_path, require_immutable, deadline):
+    expected = json.loads(Path(manifest_path).read_text())
+    actual = {}
+    immutable = 0
+    for p in [repo, *repo.rglob('*')]:
+        if time.monotonic() >= deadline:
+            raise TimeoutError('deadline during manifest verification')
+        s = p.lstat()
+        if stat.S_ISLNK(s.st_mode):
+            raise ValueError('source symlink forbidden: ' + str(p))
+        if s.st_flags & stat.UF_IMMUTABLE:
+            immutable += 1
+        elif require_immutable:
+            raise ValueError('source immutable flag missing: ' + str(p))
+        if p.is_file():
+            rel = str(p.relative_to(repo))
+            if rel not in expected:
+                raise ValueError('unexpected source file: ' + rel)
+            x = expected[rel]
+            if s.st_size != x['bytes'] or sha(p) != x['sha256']:
+                raise ValueError('source manifest mismatch: ' + rel)
+            actual[rel] = {'bytes': s.st_size, 'sha256': x['sha256']}
+    if set(actual) != set(expected):
+        raise ValueError('missing source files: ' + repr(sorted(set(expected)-set(actual))))
+    for rel in ('objects/info/alternates', 'objects/info/http-alternates', 'shallow', 'info/grafts'):
+        if (repo/rel).exists():
+            raise ValueError('external/replaced/shallow object source forbidden: ' + rel)
+    if (repo/'refs/replace').exists():
+        raise ValueError('replacement refs forbidden')
+    return {'files': len(actual), 'bytes': sum(x['bytes'] for x in actual.values()),
+            'sha256_verified': len(actual), 'immutable_entries': immutable}
+
+
+def edges(kind, data, inv):
+    links = []
+    external = []
+    if kind == 'tree':
+        at = 0
+        while at < len(data):
+            sp = data.find(b' ', at)
+            nul = data.find(b'\0', sp+1)
+            if sp < at or nul < sp or nul+21 > len(data):
+                raise ValueError('malformed tree')
+            mode = data[at:sp]
+            name = data[sp+1:nul]
+            oid = data[nul+1:nul+21].hex()
+            if not name or b'/' in name or name in (b'.', b'..'):
+                raise ValueError('invalid tree name')
+            if mode == b'160000':
+                external.append(oid)
+            elif mode in (b'40000', b'040000'):
+                links.append((oid, 'tree'))
+            elif mode in (b'100644', b'100755', b'120000'):
+                links.append((oid, 'blob'))
+            else:
+                raise ValueError('unsupported tree mode ' + repr(mode))
+            at = nul+21
+    elif kind in ('commit', 'tag'):
+        header = data.split(b'\n\n', 1)[0].splitlines()
+        if kind == 'commit':
+            trees = [x[5:].decode() for x in header if x.startswith(b'tree ')]
+            if len(trees) != 1:
+                raise ValueError('commit must have one tree')
+            links.append((trees[0], 'tree'))
+            links.extend((x[7:].decode(), 'commit') for x in header if x.startswith(b'parent '))
+        else:
+            objects = [x[7:].decode() for x in header if x.startswith(b'object ')]
+            types = [x[5:].decode() for x in header if x.startswith(b'type ')]
+            if len(objects) != 1 or len(types) != 1:
+                raise ValueError('tag must have one object and type')
+            links.append((objects[0], types[0]))
+    for oid, expected in links:
+        if not HEX.fullmatch(oid) or oid not in inv:
+            raise ValueError('missing linked object: ' + oid)
+        if inv[oid][0] != expected:
+            raise ValueError('linked object type mismatch: ' + oid)
+    return {'internal_edges': len(links), 'edges_sha256': hashlib.sha256(canon(links)).hexdigest(),
+            'external_gitlinks': len(external),
+            'external_gitlinks_sha256': hashlib.sha256(canon(external)).hexdigest()}
+
+
+class Batch:
+    def __init__(self, repo, deadline, stderr_path, commands):
+        self.deadline = deadline
+        self.buffer = bytearray()
+        self.err = Path(stderr_path).open('xb')
+        self.argv = gitcmd(repo, ['cat-file', '--batch'])
+        self.p = subprocess.Popen(self.argv, env=env(), stdin=subprocess.PIPE,
+                                  stdout=subprocess.PIPE, stderr=self.err, bufsize=0)
+        self.entry = {'argv': self.argv, 'pid': self.p.pid, 'stderr_path': str(stderr_path)}
+        commands.append(self.entry)
+
+    def fill(self):
+        remaining = self.deadline-time.monotonic()
+        if remaining <= 0:
+            raise TimeoutError('data deadline')
+        if not select.select([self.p.stdout], [], [], remaining)[0]:
+            raise TimeoutError('cat-file deadline')
+        b = os.read(self.p.stdout.fileno(), CHUNK)
+        if not b:
+            raise ValueError('cat-file unexpectedly ended')
+        self.buffer.extend(b)
+
+    def take(self, n):
+        while not self.buffer:
+            self.fill()
+        n = min(n, len(self.buffer))
+        b = bytes(self.buffer[:n])
+        del self.buffer[:n]
+        return b
+
+    def line(self):
+        while b'\n' not in self.buffer:
+            if len(self.buffer) > 512:
+                raise ValueError('oversized cat-file header')
+            self.fill()
+        i = self.buffer.index(10)+1
+        b = bytes(self.buffer[:i])
+        del self.buffer[:i]
+        return b
+
+    def validate(self, oid, inv):
+        self.p.stdin.write((oid+'\n').encode())
+        head = self.line().decode().strip().split()
+        if len(head) != 3:
+            raise ValueError('invalid/missing object header: ' + repr(head))
+        got, kind, n = head
+        n = int(n)
+        if (got, kind, n) != (oid, inv[oid][0], inv[oid][1]):
+            raise ValueError('object type/size identity mismatch: ' + oid)
+        if kind != 'blob' and n > STRUCT_LIMIT:
+            raise ValueError('structured object exceeds memory boundary')
+        h = hashlib.sha1((kind+' '+str(n)+'\0').encode())
+        structured = bytearray()
+        left = n
+        while left:
+            b = self.take(min(CHUNK, left))
+            h.update(b)
+            if kind != 'blob':
+                structured.extend(b)
+            left -= len(b)
+        if self.take(1) != b'\n':
+            raise ValueError('cat-file framing mismatch')
+        digest = h.hexdigest()
+        if digest != oid:
+            raise ValueError('Git SHA-1 mismatch: expected '+oid+' got '+digest)
+        linked = edges(kind, structured, inv)
+        return {'oid': oid, 'type': kind, 'bytes': n, 'git_hash': digest,
+                'hash_algorithm': 'sha1', 'connectivity': 'PASS', **linked}
+
+    def close(self):
+        # Only this verifier's child is affected. EOF normally exits cat-file;
+        # deadline interruption closes the pipe and terminates this child only.
+        self.p.stdin.close()
+        self.p.stdout.close()
+        try:
+            self.p.wait(timeout=.2)
+        except subprocess.TimeoutExpired:
+            self.p.terminate()
+            self.p.wait(timeout=2)
+        self.entry['exit'] = self.p.returncode
+        self.err.close()
+
+
+def read_receipts(receipts, binding, inv):
+    done = {}
+    torn = []
+    for path in sorted(Path(receipts).glob('segment-*.jsonl')):
+        prev = binding
+        seq = 0
+        with path.open('rb') as f:
+            for raw in f:
+                if not raw.endswith(b'\n'):
+                    torn.append({'path': str(path), 'uncredited_tail_bytes': len(raw)})
+                    break
+                row = json.loads(raw)
+                digest = row.pop('receipt_sha256')
+                if hashlib.sha256(canon(row)).hexdigest() != digest:
+                    raise ValueError('receipt tamper: ' + str(path))
+                if row['binding'] != binding or row['prev'] != prev or row['seq'] != seq:
+                    raise ValueError('receipt binding/chain mismatch')
+                oid = row['oid']
+                if oid in done or oid not in inv:
+                    raise ValueError('duplicate or foreign receipt')
+                if (row['type'], row['bytes']) != inv[oid][:2] or row['git_hash'] != oid:
+                    raise ValueError('receipt object identity mismatch')
+                if row['connectivity'] != 'PASS':
+                    raise ValueError('failed receipt cannot be credited')
+                done[oid] = row
+                prev = digest
+                seq += 1
+    return done, torn
+
+
+def run(repo, inventory_path, manifest_path, output, seconds=600, limit=None,
+        require_immutable=False, audit=False):
+    started = time.monotonic()
+    deadline = started + min(seconds, 600)
+    runid = str(uuid.uuid4())
+    output = Path(output)
+    output.mkdir(exist_ok=True, parents=True)
+    receipts = output/'receipts'
+    receipts.mkdir(exist_ok=True)
+    commands = []
+    report = {'version': VERSION, 'run_id': runid, 'started_epoch': time.time(),
+              'data_budget_seconds': min(seconds, 600), 'max_workers': 2,
+              'python_blob_chunk_bytes': CHUNK, 'structured_cap_bytes': STRUCT_LIMIT,
+              'source': str(repo), 'full_fsck_semantics': False}
+    try:
+        if GUARD.read_bytes() != b'ZERO_COST_REQUIRED\n':
+            raise ValueError('canonical zero-cost guard changed')
+        inv = inventory(inventory_path)
+        pins = {'version': VERSION, 'verifier_sha256': sha(__file__),
+                'source': str(Path(repo).resolve()),
+                'inventory_sha256': sha(inventory_path), 'manifest_sha256': sha(manifest_path),
+                'object_count': len(inv), 'logical_bytes': sum(x[1] for x in inv.values()),
+                'require_immutable': require_immutable}
+        binding = hashlib.sha256(canon(pins)).hexdigest()
+        pinpath = output/'pins.json'
+        if pinpath.exists():
+            if json.loads(pinpath.read_text()) != pins:
+                raise ValueError('resume input/verifier pins changed')
+        else:
+            write_json(pinpath, pins)
+        report['binding'] = binding
+        report['pins'] = pins
+        report['source_manifest'] = inspect_source(Path(repo), manifest_path, require_immutable, deadline)
+        raw = command(repo, ['cat-file', '--batch-all-objects', '--batch-check=%(objectname) %(objecttype) %(objectsize) %(objectsize:disk)'], deadline, commands)
+        actual = sorted(raw.decode().splitlines())
+        expected = sorted(Path(inventory_path).read_text().splitlines())
+        if actual != expected:
+            raise ValueError('pinned inventory is not complete/exact for source')
+        report['inventory_exact'] = True
+        refs = command(repo, ['for-each-ref', '--format=%(objectname) %(refname)'], deadline, commands).decode().splitlines()
+        head = command(repo, ['rev-parse', '--verify', 'HEAD'], deadline, commands).decode().strip()
+        for root in [head, *[x.split()[0] for x in refs]]:
+            if root not in inv:
+                raise ValueError('missing ref/HEAD root: '+root)
+        report['roots'] = {'HEAD': head, 'refs': refs, 'all_in_inventory': True}
+        done, torn = read_receipts(receipts, binding, inv)
+        report['resume_credited'] = len(done)
+        report['retained_uncredited_tails'] = torn
+        pending = sorted(set(inv)-set(done), key=lambda oid: (inv[oid][0]=='blob', inv[oid][1], oid))
+        if limit is not None:
+            pending = pending[:limit]
+        q = queue.Queue()
+        for oid in pending:
+            q.put(oid)
+        stop = threading.Event()
+        errors = []
+        lock = threading.Lock()
+
+        def worker(idx):
+            batch = None
+            path = receipts/('segment-'+runid+'-'+str(idx)+'.jsonl')
+            prev = binding
+            seq = 0
+            try:
+                batch = Batch(repo, deadline, output/('cat-file-'+runid+'-'+str(idx)+'.stderr'), commands)
+                with path.open('xb', buffering=0) as out:
+                    while not stop.is_set() and time.monotonic() < deadline:
+                        try:
+                            oid = q.get_nowait()
+                        except queue.Empty:
+                            break
+                        row = batch.validate(oid, inv)
+                        row.update(binding=binding, prev=prev, seq=seq, completed_epoch=time.time())
+                        digest = hashlib.sha256(canon(row)).hexdigest()
+                        row['receipt_sha256'] = digest
+                        out.write(canon(row)+b'\n')
+                        os.fsync(out.fileno())
+                        with lock:
+                            done[oid] = row
+                        prev = digest
+                        seq += 1
+            except Exception as ex:
+                with lock:
+                    errors.append({'worker': idx, 'error': str(ex), 'class': type(ex).__name__})
+                stop.set()
+            finally:
+                if batch:
+                    batch.close()
+
+        if not audit and pending:
+            with concurrent.futures.ThreadPoolExecutor(max_workers=2) as pool:
+                futures = [pool.submit(worker, i) for i in range(2)]
+                for f in futures:
+                    f.result()
+        done, torn = read_receipts(receipts, binding, inv)
+        complete = len(done) == len(inv)
+        report.update(completed=len(done), remaining=len(inv)-len(done),
+                      completed_bytes=sum(inv[o][1] for o in done),
+                      remaining_bytes=sum(v[1] for o,v in inv.items() if o not in done),
+                      completed_by_type={t: sum(inv[o][0]==t for o in done) for t in ('blob','tree','commit','tag')},
+                      internal_edges_checked=sum(r['internal_edges'] for r in done.values()),
+                      gitlinks_external=sum(r['external_gitlinks'] for r in done.values()),
+                      structured_objects_remaining=sum(v[0]!='blob' for o,v in inv.items() if o not in done),
+                      roots_hash_verified=all(x in done for x in [head,*[r.split()[0] for r in refs]]),
+                      retained_uncredited_tails=torn, errors=errors)
+        report['verdict'] = 'PASS' if complete and not errors else ('FAIL' if any(e['class']!='TimeoutError' for e in errors) else 'PARTIAL')
+        report['completion_claim_allowed'] = complete and not errors
+        report['receipts'] = {str(p): sha(p) for p in receipts.glob('segment-*.jsonl')}
+        write_json(output/('remaining-'+runid+'.json'), [o for o in inv if o not in done])
+    except Exception as ex:
+        report.update(verdict='FAIL', completion_claim_allowed=False, error=str(ex), error_class=type(ex).__name__)
+    report['elapsed_seconds'] = time.monotonic()-started
+    report['finished_epoch'] = time.time()
+    report['commands'] = commands
+    write_json(output/('report-'+runid+'.json'), report)
+    print(json.dumps({k:v for k,v in report.items() if k not in ('commands','receipts')}), flush=True)
+    return report
+
+
+if __name__ == '__main__':
+    a = argparse.ArgumentParser()
+    a.add_argument('--repo', required=True, type=Path)
+    a.add_argument('--inventory', required=True, type=Path)
+    a.add_argument('--manifest', required=True, type=Path)
+    a.add_argument('--output', required=True, type=Path)
+    a.add_argument('--seconds', type=float, default=600)
+    a.add_argument('--limit', type=int)
+    a.add_argument('--require-immutable', action='store_true')
+    a.add_argument('--audit', action='store_true')
+    x = a.parse_args()
+    r = run(x.repo,x.inventory,x.manifest,x.output,x.seconds,x.limit,x.require_immutable,x.audit)
+    raise SystemExit(0 if r['verdict']=='PASS' else 2 if r['verdict']=='PARTIAL' else 1)
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-five-render-proof.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-five-render-proof.json
new file mode 100644
index 00000000..b4a45d56
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-five-render-proof.json
@@ -0,0 +1,46 @@
+{
+  "checks": [
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4",
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-02-25.mp4",
+      "bytes": 54076657,
+      "sha256": "02c63daaf51ec448e1e81038515573b90b493020ca63e64b815b13c3348c7807",
+      "git_oid": "efbba50e8faff2c98d5cd58654619ffcc85b7e92",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4",
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-29-23.mp4",
+      "bytes": 57230151,
+      "sha256": "78958f5c3bd6eb81c4859f51171636c2e39b60311922793dba8126a224e95ee2",
+      "git_oid": "b43f1788d2681871ff6ac918be7b5857a2e5cdd5",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4",
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-22-08.mp4",
+      "bytes": 57075907,
+      "sha256": "86af0a15c7feeaadacb6cfa72cfdf24c1b42ebb7112a0dc8f95056c7c1190712",
+      "git_oid": "4744083a7a07447f55cde597cdbb14b530e82371",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4",
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_08-16-11.mp4",
+      "bytes": 31563007,
+      "sha256": "3757002784c48ce9055d75a90420ee59e0853c054b5009cc3105467876bbaf40",
+      "git_oid": "f868b83b92bc085314fd49cd1f791c7ea3b114bf",
+      "verdict": "PASS"
+    },
+    {
+      "path": "rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4",
+      "destination": "/private/tmp/ops-TK10928-integrity.SDj0y8/five-render-restore/rentv-slideshow/renders/rentv-slideshow_2026-07-29_07-49-53.mp4",
+      "bytes": 28635596,
+      "sha256": "8d86bfc65054c3368209d2875133ed5f7511a231b46973fa5326bcad5d845d08",
+      "git_oid": "dbf6ed038c5be1d119c9f8956cbe83dd72bb1e42",
+      "verdict": "PASS"
+    }
+  ],
+  "verdict": "PASS",
+  "scope": "Independent current source and persisted restored hashes;5exactrenderfiles only"
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-independent-cli-proof.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-independent-cli-proof.json
new file mode 100644
index 00000000..2f9e6001
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-independent-cli-proof.json
@@ -0,0 +1,550 @@
+{
+  "verifier": "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+  "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+  "scratch": "/private/tmp/yf-parent-object-proof.IfaKBO",
+  "checks": [
+    {
+      "name": "actual CLI incomplete coverage refuses success",
+      "pass": true,
+      "returncode": 2,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "db2c575c-a50e-4566-abc9-fc243affff0e",
+        "started_epoch": 1788874517.636676,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 4,
+          "logical_bytes": 333,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "inventory_exact": true,
+        "roots": {
+          "HEAD": "573dcef079b46b3f05d3b2c6025a16293db06bbb",
+          "refs": [
+            "573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master"
+          ],
+          "all_in_inventory": true
+        },
+        "resume_credited": 0,
+        "retained_uncredited_tails": [],
+        "completed": 1,
+        "remaining": 3,
+        "completed_bytes": 70,
+        "remaining_bytes": 263,
+        "completed_by_type": {
+          "blob": 0,
+          "tree": 1,
+          "commit": 0,
+          "tag": 0
+        },
+        "internal_edges_checked": 2,
+        "gitlinks_external": 0,
+        "structured_objects_remaining": 1,
+        "roots_hash_verified": false,
+        "errors": [],
+        "verdict": "PARTIAL",
+        "completion_claim_allowed": false,
+        "elapsed_seconds": 0.23938954202458262,
+        "finished_epoch": 1788874517.8753011
+      }
+    },
+    {
+      "name": "actual CLI audit does not manufacture coverage",
+      "pass": true,
+      "returncode": 2,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "8058808c-2bd9-42cc-b25f-38dc551fb4ab",
+        "started_epoch": 1788874518.063709,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 4,
+          "logical_bytes": 333,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "inventory_exact": true,
+        "roots": {
+          "HEAD": "573dcef079b46b3f05d3b2c6025a16293db06bbb",
+          "refs": [
+            "573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master"
+          ],
+          "all_in_inventory": true
+        },
+        "resume_credited": 1,
+        "retained_uncredited_tails": [],
+        "completed": 1,
+        "remaining": 3,
+        "completed_bytes": 70,
+        "remaining_bytes": 263,
+        "completed_by_type": {
+          "blob": 0,
+          "tree": 1,
+          "commit": 0,
+          "tag": 0
+        },
+        "internal_edges_checked": 2,
+        "gitlinks_external": 0,
+        "structured_objects_remaining": 1,
+        "roots_hash_verified": false,
+        "errors": [],
+        "verdict": "PARTIAL",
+        "completion_claim_allowed": false,
+        "elapsed_seconds": 0.06955704209394753,
+        "finished_epoch": 1788874518.133068
+      }
+    },
+    {
+      "name": "actual CLI resume completes four fixed objects",
+      "pass": true,
+      "returncode": 0,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "4426f5fa-eb36-4017-82b9-8baad4e29c89",
+        "started_epoch": 1788874518.3442008,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 4,
+          "logical_bytes": 333,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "inventory_exact": true,
+        "roots": {
+          "HEAD": "573dcef079b46b3f05d3b2c6025a16293db06bbb",
+          "refs": [
+            "573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master"
+          ],
+          "all_in_inventory": true
+        },
+        "resume_credited": 1,
+        "retained_uncredited_tails": [],
+        "completed": 4,
+        "remaining": 0,
+        "completed_bytes": 333,
+        "remaining_bytes": 0,
+        "completed_by_type": {
+          "blob": 2,
+          "tree": 1,
+          "commit": 1,
+          "tag": 0
+        },
+        "internal_edges_checked": 3,
+        "gitlinks_external": 0,
+        "structured_objects_remaining": 0,
+        "roots_hash_verified": true,
+        "errors": [],
+        "verdict": "PASS",
+        "completion_claim_allowed": true,
+        "elapsed_seconds": 0.1456033329013735,
+        "finished_epoch": 1788874518.489538
+      }
+    },
+    {
+      "name": "actual CLI completed audit idempotent",
+      "pass": true,
+      "returncode": 0,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "49d2e6c0-89f6-47fa-8d3d-9aebac46e0f5",
+        "started_epoch": 1788874518.657175,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 4,
+          "logical_bytes": 333,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "inventory_exact": true,
+        "roots": {
+          "HEAD": "573dcef079b46b3f05d3b2c6025a16293db06bbb",
+          "refs": [
+            "573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master"
+          ],
+          "all_in_inventory": true
+        },
+        "resume_credited": 4,
+        "retained_uncredited_tails": [],
+        "completed": 4,
+        "remaining": 0,
+        "completed_bytes": 333,
+        "remaining_bytes": 0,
+        "completed_by_type": {
+          "blob": 2,
+          "tree": 1,
+          "commit": 1,
+          "tag": 0
+        },
+        "internal_edges_checked": 3,
+        "gitlinks_external": 0,
+        "structured_objects_remaining": 0,
+        "roots_hash_verified": true,
+        "errors": [],
+        "verdict": "PASS",
+        "completion_claim_allowed": true,
+        "elapsed_seconds": 0.05943212495185435,
+        "finished_epoch": 1788874518.716444
+      }
+    },
+    {
+      "name": "actual CLI receipt tamper rejected",
+      "pass": true,
+      "returncode": 1,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "723c60c1-437f-4255-bcb5-f38ff8f39aa3",
+        "started_epoch": 1788874518.8966908,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 4,
+          "logical_bytes": 333,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "inventory_exact": true,
+        "roots": {
+          "HEAD": "573dcef079b46b3f05d3b2c6025a16293db06bbb",
+          "refs": [
+            "573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master"
+          ],
+          "all_in_inventory": true
+        },
+        "verdict": "FAIL",
+        "completion_claim_allowed": false,
+        "error": "receipt tamper: /private/tmp/yf-parent-object-proof.IfaKBO/tampered/receipts/segment-4426f5fa-eb36-4017-82b9-8baad4e29c89-0.jsonl",
+        "error_class": "ValueError",
+        "elapsed_seconds": 0.06590166711248457,
+        "finished_epoch": 1788874518.9624588
+      }
+    },
+    {
+      "name": "actual CLI incomplete pinned inventory rejected",
+      "pass": true,
+      "returncode": 1,
+      "summary": {
+        "version": "ops-object-verifier-v1",
+        "run_id": "89f9b5b9-2783-4463-8728-c1eaa4490449",
+        "started_epoch": 1788874519.1384,
+        "data_budget_seconds": 20.0,
+        "max_workers": 2,
+        "python_blob_chunk_bytes": 1048576,
+        "structured_cap_bytes": 2097152,
+        "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "full_fsck_semantics": false,
+        "binding": "a686b73f5ccacc40c84af3f0dd654d2da64038ec49e82398922bab2b9de9f1bd",
+        "pins": {
+          "version": "ops-object-verifier-v1",
+          "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+          "source": "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+          "inventory_sha256": "8d11eef32119be555a0f4f9c7152c594ba2dd71631a78964e5120e9f4cf852a4",
+          "manifest_sha256": "51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e",
+          "object_count": 3,
+          "logical_bytes": 116,
+          "require_immutable": false
+        },
+        "source_manifest": {
+          "files": 23,
+          "bytes": 27571,
+          "sha256_verified": 23,
+          "immutable_entries": 0
+        },
+        "verdict": "FAIL",
+        "completion_claim_allowed": false,
+        "error": "pinned inventory is not complete/exact for source",
+        "error_class": "ValueError",
+        "elapsed_seconds": 0.032494583865627646,
+        "finished_epoch": 1788874519.170264
+      }
+    }
+  ],
+  "commands": [
+    {
+      "argv": [
+        "git",
+        "init",
+        "--bare",
+        "--initial-branch=master",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git"
+      ],
+      "returncode": 0,
+      "stdout": "Initialized empty Git repository in /private/tmp/yf-parent-object-proof.IfaKBO/fixture.git/\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "hash-object",
+        "-w",
+        "--stdin"
+      ],
+      "returncode": 0,
+      "stdout": "96a3a99588bc31d5728102ecb55862704bae51f7\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "hash-object",
+        "-w",
+        "--stdin"
+      ],
+      "returncode": 0,
+      "stdout": "ebba7b9270022165b8f348a5cde5593347d06d71\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "mktree"
+      ],
+      "returncode": 0,
+      "stdout": "fd244b533ec97ccba20352ddedcca80147bb1c49\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "commit-tree",
+        "fd244b533ec97ccba20352ddedcca80147bb1c49",
+        "-m",
+        "retained fixture"
+      ],
+      "returncode": 0,
+      "stdout": "573dcef079b46b3f05d3b2c6025a16293db06bbb\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "update-ref",
+        "refs/heads/master",
+        "573dcef079b46b3f05d3b2c6025a16293db06bbb"
+      ],
+      "returncode": 0,
+      "stdout": "",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "git",
+        "--git-dir=/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "cat-file",
+        "--batch-all-objects",
+        "--batch-check=%(objectname) %(objecttype) %(objectsize) %(objectsize:disk)"
+      ],
+      "returncode": 0,
+      "stdout": "573dcef079b46b3f05d3b2c6025a16293db06bbb commit 217 143\n96a3a99588bc31d5728102ecb55862704bae51f7 blob 23 36\nebba7b9270022165b8f348a5cde5593347d06d71 blob 23 36\nfd244b533ec97ccba20352ddedcca80147bb1c49 tree 70 80\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/receipts-state",
+        "--limit",
+        "1"
+      ],
+      "returncode": 2,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"db2c575c-a50e-4566-abc9-fc243affff0e\", \"started_epoch\": 1788874517.636676, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 4, \"logical_bytes\": 333, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"inventory_exact\": true, \"roots\": {\"HEAD\": \"573dcef079b46b3f05d3b2c6025a16293db06bbb\", \"refs\": [\"573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master\"], \"all_in_inventory\": true}, \"resume_credited\": 0, \"retained_uncredited_tails\": [], \"completed\": 1, \"remaining\": 3, \"completed_bytes\": 70, \"remaining_bytes\": 263, \"completed_by_type\": {\"blob\": 0, \"tree\": 1, \"commit\": 0, \"tag\": 0}, \"internal_edges_checked\": 2, \"gitlinks_external\": 0, \"structured_objects_remaining\": 1, \"roots_hash_verified\": false, \"errors\": [], \"verdict\": \"PARTIAL\", \"completion_claim_allowed\": false, \"elapsed_seconds\": 0.23938954202458262, \"finished_epoch\": 1788874517.8753011}\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/receipts-state",
+        "--audit"
+      ],
+      "returncode": 2,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"8058808c-2bd9-42cc-b25f-38dc551fb4ab\", \"started_epoch\": 1788874518.063709, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 4, \"logical_bytes\": 333, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"inventory_exact\": true, \"roots\": {\"HEAD\": \"573dcef079b46b3f05d3b2c6025a16293db06bbb\", \"refs\": [\"573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master\"], \"all_in_inventory\": true}, \"resume_credited\": 1, \"retained_uncredited_tails\": [], \"completed\": 1, \"remaining\": 3, \"completed_bytes\": 70, \"remaining_bytes\": 263, \"completed_by_type\": {\"blob\": 0, \"tree\": 1, \"commit\": 0, \"tag\": 0}, \"internal_edges_checked\": 2, \"gitlinks_external\": 0, \"structured_objects_remaining\": 1, \"roots_hash_verified\": false, \"errors\": [], \"verdict\": \"PARTIAL\", \"completion_claim_allowed\": false, \"elapsed_seconds\": 0.06955704209394753, \"finished_epoch\": 1788874518.133068}\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/receipts-state"
+      ],
+      "returncode": 0,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"4426f5fa-eb36-4017-82b9-8baad4e29c89\", \"started_epoch\": 1788874518.3442008, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 4, \"logical_bytes\": 333, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"inventory_exact\": true, \"roots\": {\"HEAD\": \"573dcef079b46b3f05d3b2c6025a16293db06bbb\", \"refs\": [\"573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master\"], \"all_in_inventory\": true}, \"resume_credited\": 1, \"retained_uncredited_tails\": [], \"completed\": 4, \"remaining\": 0, \"completed_bytes\": 333, \"remaining_bytes\": 0, \"completed_by_type\": {\"blob\": 2, \"tree\": 1, \"commit\": 1, \"tag\": 0}, \"internal_edges_checked\": 3, \"gitlinks_external\": 0, \"structured_objects_remaining\": 0, \"roots_hash_verified\": true, \"errors\": [], \"verdict\": \"PASS\", \"completion_claim_allowed\": true, \"elapsed_seconds\": 0.1456033329013735, \"finished_epoch\": 1788874518.489538}\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/receipts-state",
+        "--audit"
+      ],
+      "returncode": 0,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"49d2e6c0-89f6-47fa-8d3d-9aebac46e0f5\", \"started_epoch\": 1788874518.657175, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 4, \"logical_bytes\": 333, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"inventory_exact\": true, \"roots\": {\"HEAD\": \"573dcef079b46b3f05d3b2c6025a16293db06bbb\", \"refs\": [\"573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master\"], \"all_in_inventory\": true}, \"resume_credited\": 4, \"retained_uncredited_tails\": [], \"completed\": 4, \"remaining\": 0, \"completed_bytes\": 333, \"remaining_bytes\": 0, \"completed_by_type\": {\"blob\": 2, \"tree\": 1, \"commit\": 1, \"tag\": 0}, \"internal_edges_checked\": 3, \"gitlinks_external\": 0, \"structured_objects_remaining\": 0, \"roots_hash_verified\": true, \"errors\": [], \"verdict\": \"PASS\", \"completion_claim_allowed\": true, \"elapsed_seconds\": 0.05943212495185435, \"finished_epoch\": 1788874518.716444}\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/tampered",
+        "--audit"
+      ],
+      "returncode": 1,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"723c60c1-437f-4255-bcb5-f38ff8f39aa3\", \"started_epoch\": 1788874518.8966908, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"1134cdd9c9700adf0ccf97e0a4c15e5966bfcc950f9f4c95ddcec75e84ebd8a1\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"c65f49f2347122910bd20b87dee1f85b64f03a1fa4ab06fc522ff63625b83049\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 4, \"logical_bytes\": 333, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"inventory_exact\": true, \"roots\": {\"HEAD\": \"573dcef079b46b3f05d3b2c6025a16293db06bbb\", \"refs\": [\"573dcef079b46b3f05d3b2c6025a16293db06bbb refs/heads/master\"], \"all_in_inventory\": true}, \"verdict\": \"FAIL\", \"completion_claim_allowed\": false, \"error\": \"receipt tamper: /private/tmp/yf-parent-object-proof.IfaKBO/tampered/receipts/segment-4426f5fa-eb36-4017-82b9-8baad4e29c89-0.jsonl\", \"error_class\": \"ValueError\", \"elapsed_seconds\": 0.06590166711248457, \"finished_epoch\": 1788874518.9624588}\n",
+      "stderr": ""
+    },
+    {
+      "argv": [
+        "python3",
+        "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py",
+        "--repo",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git",
+        "--inventory",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/missing-inventory.txt",
+        "--manifest",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/manifest.json",
+        "--seconds",
+        "20",
+        "--output",
+        "/private/tmp/yf-parent-object-proof.IfaKBO/missing-state",
+        "--audit"
+      ],
+      "returncode": 1,
+      "stdout": "{\"version\": \"ops-object-verifier-v1\", \"run_id\": \"89f9b5b9-2783-4463-8728-c1eaa4490449\", \"started_epoch\": 1788874519.1384, \"data_budget_seconds\": 20.0, \"max_workers\": 2, \"python_blob_chunk_bytes\": 1048576, \"structured_cap_bytes\": 2097152, \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"full_fsck_semantics\": false, \"binding\": \"a686b73f5ccacc40c84af3f0dd654d2da64038ec49e82398922bab2b9de9f1bd\", \"pins\": {\"version\": \"ops-object-verifier-v1\", \"verifier_sha256\": \"d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c\", \"source\": \"/private/tmp/yf-parent-object-proof.IfaKBO/fixture.git\", \"inventory_sha256\": \"8d11eef32119be555a0f4f9c7152c594ba2dd71631a78964e5120e9f4cf852a4\", \"manifest_sha256\": \"51722c371fb59c6fb8dd319b2107f35b5673f71c49526b43e36bc04adf96111e\", \"object_count\": 3, \"logical_bytes\": 116, \"require_immutable\": false}, \"source_manifest\": {\"files\": 23, \"bytes\": 27571, \"sha256_verified\": 23, \"immutable_entries\": 0}, \"verdict\": \"FAIL\", \"completion_claim_allowed\": false, \"error\": \"pinned inventory is not complete/exact for source\", \"error_class\": \"ValueError\", \"elapsed_seconds\": 0.032494583865627646, \"finished_epoch\": 1788874519.170264}\n",
+      "stderr": ""
+    }
+  ],
+  "passes": 6,
+  "source_mutations": "none; self-created bare fixture only",
+  "cleanup": "all retained",
+  "scope": "independent actual process entry boundary, not full real60GB verification"
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-original-capture-proof.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-original-capture-proof.json
new file mode 100644
index 00000000..8db74f7f
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-original-capture-proof.json
@@ -0,0 +1,11 @@
+{
+  "verdict": "PASS",
+  "files_verified": 4059,
+  "bytes_verified": 3167634917,
+  "failures": [],
+  "elapsed_seconds": 9.949747540988028,
+  "retained_capture": "/private/tmp/ops-TK10928-rehearsal.ndMwgA/original.git",
+  "manifest": "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1221Z.HzXvuQ/ops-source-git-manifest.json",
+  "manifest_sha256": "02f539816fccb989c307bece019b48c3dadf8bbead1c4f977395af3053c78746",
+  "scope": "Independent complete compressed file-byte identity and immutable/no-source-hardlink check. Does not prove logical Git object integrity, restore or live current state."
+}
diff --git a/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-real-integrity-proof.json b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-real-integrity-proof.json
new file mode 100644
index 00000000..444cea5f
--- /dev/null
+++ b/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-real-integrity-proof.json
@@ -0,0 +1,42 @@
+{
+  "verdict": "PASS",
+  "manifest_precheck": "parent-original-capture-proof.json4059PASS",
+  "verifier_sha256": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+  "exact_receipt_count": 14061,
+  "bytes": 60348642328,
+  "source_inventory_exact": true,
+  "receipt_chains": "PASS",
+  "direct_content_samples": [
+    {
+      "oid": "ada9d21265593b91fb6331d40f4aae8acd1053dc",
+      "kind": "blob",
+      "bytes": 723501447,
+      "rehash": "PASS"
+    },
+    {
+      "oid": "fcf92aad6c5f92fc9def3aa8ae525b7698978247",
+      "kind": "tree",
+      "bytes": 57319,
+      "rehash": "PASS"
+    },
+    {
+      "oid": "169db8c773a4b56a039916c4f19eba40e218e981",
+      "kind": "commit",
+      "bytes": 1418,
+      "rehash": "PASS"
+    }
+  ],
+  "render_proof_keys": [
+    "started_epoch",
+    "data_deadline_epoch",
+    "restores",
+    "source_scope",
+    "all_restored_files_retained",
+    "commands",
+    "object_validation_run_id",
+    "verdict",
+    "finished_epoch",
+    "combined_data_phase_seconds"
+  ],
+  "scope": "All receipt identity/coverage/chains independently checked, plus fresh Git content sample each object type.5file content verification follows exact artifact schema. Does not prove full fsck or full recovery."
+}
diff --git a/verification/cycle-20260908T1322Z-m4gNE5-integrity.json b/verification/cycle-20260908T1322Z-m4gNE5-integrity.json
new file mode 100644
index 00000000..15e9849a
--- /dev/null
+++ b/verification/cycle-20260908T1322Z-m4gNE5-integrity.json
@@ -0,0 +1,24 @@
+{
+  "ticket": "TK-10928-cron-issue-com-steve-dw-backup-canary",
+  "cycle": "cycle-20260908T1322Z.m4gNE5",
+  "bounded_increment": "Resumable immutable-copy integrity verifier and five render restores",
+  "verdict": "PASS local boundary; operational source UNRESOLVED",
+  "objects": 14061,
+  "logical_bytes": 60348642328,
+  "renders": 5,
+  "artifacts": {
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-verifier-v1.py": "d43e9998d12059b4b1adb12bdb63efcd54f7f939645e1c9ecb873467eaa35c6c",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-result.json": "54a4c2266c3c99bf07d27492f69146bda2442f7e8a0e0f1efe4c97c790920c9c",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-object-pins.json": "9cccc1d1ab29147480661ab461e11be5016459f47215810ef336d2dd415c047d",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-five-render-proof.json": "7ad4c3f66bf5e7ba929ed1f4d0363073fdf4bbf44e84253f9c74ee093f12ea2c",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-independent-cli-proof.json": "5bbea31533f3964443763bc6ba501c12828b8560839bb58f013f2c5c7e70ae1b",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-original-capture-proof.json": "4e7c2e789945651aa53f4dc93ea6f0641bed319cc361cff7a61f1feb0bfbf6d9",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-real-integrity-proof.json": "a2a7c8acdec88b0d941d8b75ca9abbe48dcad9c995f4bb2db8878e14e47f8e61",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/parent-five-render-proof.json": "00f2298629effb51448e2080f936d9defe5ca85abb30ad15bd4ad78c9816623e"
+  },
+  "retained_receipt_hashes": {
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-receipts/segment-ce98da6a-4528-4255-9c07-30543c8a1ea9-0.jsonl": "29aaa75416c36ae0e05f6ba234fe76906eaaff2b13cb04e27fd65eb4ea0e472a",
+    "/Users/macstudio3/Projects/ticket-system/data/codex-yoloforever/cycle-20260908T1322Z.m4gNE5/ops-receipts/segment-ce98da6a-4528-4255-9c07-30543c8a1ea9-1.jsonl": "45cbfe365bb32a9e08b4619f4a21902bc919dbaa1313173dfac4f2ecbf0d81f0"
+  },
+  "trust": "This local commit anchors artifact and receipt hashes; external raw scratch is retained. Receipt chains alone do not authenticate attacker-controlled edits. No fullfsck/fullrestore/packing/size/live/scheduler claim."
+}

← 5642d941 Record automatic canary ticket reopen after cycle snapshot  ·  back to Ticket System  ·  Rehearse backup reconstruction while preserving cached index 8c953a2e →