diff --git a/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.json b/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.json new file mode 100644 index 00000000..c02e9c0b --- /dev/null +++ b/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "newfi-dr221-final404-server-local-evidence-recovery", + "started_at_utc": "2026-09-21T17:10:11Z", + "finished_at_utc": "2026-09-21T17:10:11Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "0fbd6b2a22d5a7539552dea26ebccc0bc0d07135c1459a3919ce5b55d33cd87a", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": false, + "result_contract_valid": true, + "result_contract_status": null, + "result_contract_error": null, + "command_rc": 0, + "changes_made": false, + "rollback_started": false, + "rollback_restored": null, + "mutation_outcome": "NO_MUTATION", + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b", + "sanitized_output_sha256": "c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "DR221_SERVERRECOVER408_BEGIN=true\nCOMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\nTARGET_COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FINAL404\nIMMUTABLE_PLAN_CHECK=PASS\nRECOVERY_SCOPE=SERVER_LOCAL_RUNNER_EVIDENCE_ONLY\nTARGET_RUNNING_PROCESS_COUNT=0\nTARGET_RUNNING_PROCESS_IDS_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nFILES_SCANNED=1484\nMATCHED_FILE_COUNT=1\nMATCHED_EVIDENCE=[{\"bytes\":348,\"relative_path\":\"raw/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408-20260921T171011Z.log\",\"root\":\"/var/lib/homelab-chat-run\",\"safe_line_count\":2,\"safe_lines\":[\"DR221_SERVERRECOVER408_BEGIN=true\",\"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\"],\"sha256\":\"490f64e4b922e5d685978061c69887de693ad1df08ad91dbc28c1be923e07ea0\"}]\nRECOVERED_COMPLETE_LOCAL_RESULT=false\nDECISION_SERVERRECOVER408=HOLD_FINAL404_SERVER_EVIDENCE_INCOMPLETE\nNEXT_GATE_SERVERRECOVER408=RECONCILE_ONLY_MATCHED_SERVER_EVIDENCE\nBACKUP_EXECUTED_BY_SERVERRECOVER408=0\nCLOUD_ACTIONS_BY_SERVERRECOVER408=0\nVM_MUTATIONS_BY_SERVERRECOVER408=0\nPRODUCT_MUTATION_BY_SERVERRECOVER408=false\nRAW_UNFILTERED_EVIDENCE_INCLUDED=false\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nDR221_SERVERRECOVER408_END=true\n" +} diff --git a/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.txt b/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.txt new file mode 100644 index 00000000..751c62bc --- /dev/null +++ b/runtime/history/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408.txt @@ -0,0 +1,52 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=newfi-dr221-final404-server-local-evidence-recovery +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=0fbd6b2a22d5a7539552dea26ebccc0bc0d07135c1459a3919ce5b55d33cd87a +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b +SANITIZED_OUTPUT_SHA256=c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b +OUTPUT_BEGIN +DR221_SERVERRECOVER408_BEGIN=true +COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408 +TARGET_COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FINAL404 +IMMUTABLE_PLAN_CHECK=PASS +RECOVERY_SCOPE=SERVER_LOCAL_RUNNER_EVIDENCE_ONLY +TARGET_RUNNING_PROCESS_COUNT=0 +TARGET_RUNNING_PROCESS_IDS_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +FILES_SCANNED=1484 +MATCHED_FILE_COUNT=1 +MATCHED_EVIDENCE=[{"bytes":348,"relative_path":"raw/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408-20260921T171011Z.log","root":"/var/lib/homelab-chat-run","safe_line_count":2,"safe_lines":["DR221_SERVERRECOVER408_BEGIN=true","COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408"],"sha256":"490f64e4b922e5d685978061c69887de693ad1df08ad91dbc28c1be923e07ea0"}] +RECOVERED_COMPLETE_LOCAL_RESULT=false +DECISION_SERVERRECOVER408=HOLD_FINAL404_SERVER_EVIDENCE_INCOMPLETE +NEXT_GATE_SERVERRECOVER408=RECONCILE_ONLY_MATCHED_SERVER_EVIDENCE +BACKUP_EXECUTED_BY_SERVERRECOVER408=0 +CLOUD_ACTIONS_BY_SERVERRECOVER408=0 +VM_MUTATIONS_BY_SERVERRECOVER408=0 +PRODUCT_MUTATION_BY_SERVERRECOVER408=false +RAW_UNFILTERED_EVIDENCE_INCLUDED=false +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +DR221_SERVERRECOVER408_END=true + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 86943326..c02e9c0b 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260921-NEWFDOM-DR221-TARGETED-SOURCE-RECOVERY401R1", + "command_id": "NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "newfi-dr221-targeted-source-recovery", - "started_at_utc": "2026-09-21T16:42:40Z", - "finished_at_utc": "2026-09-21T16:54:52Z", + "component": "newfi-dr221-final404-server-local-evidence-recovery", + "started_at_utc": "2026-09-21T17:10:11Z", + "finished_at_utc": "2026-09-21T17:10:11Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "80f90a8aa52c17c2b3fcce96b808593ce8c9e9c60cd6170aea6a907a0727751b", + "command_sha256": "0fbd6b2a22d5a7539552dea26ebccc0bc0d07135c1459a3919ce5b55d33cd87a", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "2cad6495c7d3263cbdca6d967a94b345e54ecd639b1a267645b4469dbc96f9d6", - "sanitized_output_sha256": "2cad6495c7d3263cbdca6d967a94b345e54ecd639b1a267645b4469dbc96f9d6", + "raw_evidence_sha256": "c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b", + "sanitized_output_sha256": "c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nAUTHORITY_HASHES={\"/etc/pve/31_HOMELAB_REFERENCE.md\":{\"bytes\":201129,\"sha256\":\"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\"},\"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\":{\"bytes\":302058,\"sha256\":\"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\"}}\nWORKTREE_HEAD=9c4814db67759dc09a5469d254c41a7b73f4d89a\nWORKTREE_BRANCH=implementation/newfi-closed-mvp-20260906\nWORKTREE_CLEAN=true\nWORKTREE_HEAD_MATCH_399=true\nEXACT_399={\"json_sha256\":\"bfe2b596226b22144f515eed22afcdda9ff16a87e85c9e6329860f7914646782\",\"txt_sha256\":\"7ead1ea2779b0285aea060a90496afe6e75c7c7606718bec3a95d36c9053f3a3\",\"valid\":true}\nEXACT_400={\"json_sha256\":\"09cc4f9d642c29b2b8f05ae68c0cc2b6d64c3525aa48ccd9d47d3cb7a5f13772\",\"txt_sha256\":\"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764\",\"valid\":true}\nIMMUTABLE_PLAN_PREDECESSOR_399_PASS=true\nAUTHORITY_UNCHANGED_FROM_399=true\nPLAN_CARRY_FORWARD_FROM_EXACT_399=true\nIMMUTABLE_PLAN_SEARCH_FILES=12000\nIMMUTABLE_PLAN_DIRECT_MATCHES=[]\nIMMUTABLE_PLAN_DIRECT_CHECK=NOT_FOUND\nFULLRESTORE_EVIDENCE_COUNT=0\nFULLRESTORE_EVIDENCE=[]\nCURRENT_RESTORE_DOCS=[{\"lines\":[{\"line\":5,\"text\":\"Task 7 accepts the immutable VM211 generation:\"},{\"line\":7,\"text\":\"- Generation: `vm211-pve03-20260906T083057Z`\"},{\"line\":11,\"text\":\"- Canonical sealed state: `/var/lib/homelab-backup/cloud-quorum/vm211/vm211-pve03-20260906T083057Z.json`\"},{\"line\":12,\"text\":\"- Bounded Cloud-A evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z.json`\"},{\"line\":13,\"text\":\"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`\"},{\"line\":15,\"text\":\"The backup used the current homelab VM cloud-quorum worker/transport contract with a root-only bounded worker copy whose only allowlist extension was VM211 as `pve03/qemu`. The shared worker was not modified.\"},{\"line\":23,\"text\":\"- independent Cloud A and Cloud B verification\"},{\"line\":30,\"text\":\"Cloud A was subsequently read back for archive SHA, decompression and Proxmox configuration validation.\"},{\"line\":34,\"text\":\"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`.\"},{\"line\":39,\"text\":\"- VM9211 was restored stopped.\"},{\"line\":44,\"text\":\"- VM9211 was stopped and destroyed after validation.\"},{\"line\":45,\"text\":\"- No VM9211 LVM residue remained.\"},{\"line\":66,\"text\":\"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue.\"},{\"line\":68,\"text\":\"`NEWFI78` then completed a real isolated restore, but its acceptance verifier used a Cyrillic substring test for the language title. XenForo's authoritative restored record was `language_id=2`, `title=Russian (RU)`, `language_code=ru-RU`; therefore that result was a verifier false negative. Cleanup again left no VM9211 residue.\"},{\"line\":70,\"text\":\"`NEWFI80` uses the authoritative language ID/code contract and records the accepted full restore evidence.\"},{\"line\":78,\"text\":\"The verifier checks strict SEALED state, bounded Cloud-A recovery evidence, accepted full-restore evidence, VM9211/LV absence and performs a fresh remote seal verification.\"}],\"path\":\"docs/operations/backup-restore.md\",\"sha256\":\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\"},{\"lines\":[{\"line\":1,\"text\":\"# Newfi private staging — fresh backup and full restore gate\"},{\"line\":7,\"text\":\"Fresh generation: `vm211-pve03-20260906T213759Z`\"},{\"line\":9,\"text\":\"Sealed state: `/var/lib/homelab-backup/cloud-quorum/vm211/vm211-pve03-20260906T213759Z.json`\"},{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"},{\"line\":22,\"text\":\"- FINAL181 created the fresh VM211 backup and sealed it with Cloud A + Cloud B quorum 2;\"},{\"line\":24,\"text\":\"- FINAL183 reconstructed that exact sealed archive from Cloud A and verified its SHA256 and size;\"},{\"line\":25,\"text\":\"- temporary VM9211 was restored with unique MAC assignment and all restored NICs link-down before boot;\"},{\"line\":31,\"text\":\"- VM9211, its config, restore LVs and reconstruction work were removed after proof;\"},{\"line\":32,\"text\":\"- source VM211 remained system-running with zero failed units before and after the restore drill;\"},{\"line\":33,\"text\":\"- all ten current implementation verifiers passed again on source VM211 after cleanup;\"}],\"path\":\"docs/checkpoints/private-staging-backup-restore.md\",\"sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\"},{\"lines\":[{\"line\":7,\"text\":\"GEN=vm211-pve03-20260906T083057Z\"},{\"line\":10,\"text\":\"STATE=/var/lib/homelab-backup/cloud-quorum/vm211/$GEN.json\"},{\"line\":11,\"text\":\"BOUNDED=/var/lib/homelab-backup/vm-restore-validation/vm211/$GEN.json\"},{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":109,\"text\":\" and full.get(\\\"test_vmid\\\")==9211\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_proven\\\") is True\"},{\"line\":138,\"text\":\" [\\\"/usr/sbin/qm\\\",\\\"status\\\",\\\"9211\\\"],\"},{\"line\":159,\"text\":\" \\\"vm-9211-\\\" in x\"},{\"line\":169,\"text\":\" \\\"vm211\\\",\"},{\"line\":187,\"text\":\"print(\\\"FULL_RESTORE_PROVEN=true\\\")\"}],\"path\":\"scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\"}]\nLOCAL_PROVENANCE_FILES_SCANNED=2433\nLOCAL_SCHEMA_HITS=[{\"bytes\":3166,\"lines\":[{\"line\":13,\"text\":\"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`\"},{\"line\":34,\"text\":\"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`.\"},{\"line\":66,\"text\":\"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue.\"}],\"path\":\"/root/newfi-portal/.worktrees/foundation-newfi-foundation-20260904/docs/operations/backup-restore.md\",\"sha256\":\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\"},{\"bytes\":5019,\"lines\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":83,\"text\":\" state.get(\\\"schema\\\")==\\\"homelab-cloud-quorum-payload-v1\\\"\"},{\"line\":97,\"text\":\" and bounded.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\"\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":108,\"text\":\" and full.get(\\\"source_vmid\\\")==211\"},{\"line\":109,\"text\":\" and full.get(\\\"test_vmid\\\")==9211\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_proven\\\") is True\"},{\"line\":187,\"text\":\"print(\\\"FULL_RESTORE_PROVEN=true\\\")\"}],\"path\":\"/root/newfi-portal/.worktrees/foundation-newfi-foundation-20260904/scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\"},{\"bytes\":3166,\"lines\":[{\"line\":13,\"text\":\"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`\"},{\"line\":34,\"text\":\"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`.\"},{\"line\":66,\"text\":\"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue.\"}],\"path\":\"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/docs/operations/backup-restore.md\",\"sha256\":\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\"},{\"bytes\":2138,\"lines\":[{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"}],\"path\":\"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/docs/checkpoints/private-staging-backup-restore.md\",\"sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\"},{\"bytes\":5019,\"lines\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":83,\"text\":\" state.get(\\\"schema\\\")==\\\"homelab-cloud-quorum-payload-v1\\\"\"},{\"line\":97,\"text\":\" and bounded.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\"\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":108,\"text\":\" and full.get(\\\"source_vmid\\\")==211\"},{\"line\":109,\"text\":\" and full.get(\\\"test_vmid\\\")==9211\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_proven\\\") is True\"},{\"line\":187,\"text\":\"print(\\\"FULL_RESTORE_PROVEN=true\\\")\"}],\"path\":\"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\"},{\"bytes\":4575,\"lines\":[{\"line\":23,\"text\":\" if obj.get(\\\"schema\\\") != \\\"homelab-cloud-quorum-payload-v1\\\": return False\"},{\"line\":51,\"text\":\" e.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\" and e.get(\\\"logical_id\\\")==logical and\"},{\"line\":58,\"text\":\" e.get(\\\"full_restore_proven\\\") is False and e.get(\\\"result\\\")==\\\"OK\\\"\"},{\"line\":78,\"text\":\" \\\"schema\\\":\\\"homelab-boot-drill-state-export-v1\\\",\"},{\"line\":92,\"text\":\" print(json.dumps(out,separators=(\\\",\\\",\\\":\\\"),sort_keys=True))\"}],\"path\":\"/usr/local/sbin/homelab-rotating-boot-drill-state-export\",\"sha256\":\"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc\"},{\"bytes\":4575,\"lines\":[{\"line\":23,\"text\":\" if obj.get(\\\"schema\\\") != \\\"homelab-cloud-quorum-payload-v1\\\": return False\"},{\"line\":51,\"text\":\" e.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\" and e.get(\\\"logical_id\\\")==logical and\"},{\"line\":58,\"text\":\" e.get(\\\"full_restore_proven\\\") is False and e.get(\\\"result\\\")==\\\"OK\\\"\"},{\"line\":78,\"text\":\" \\\"schema\\\":\\\"homelab-boot-drill-state-export-v1\\\",\"},{\"line\":92,\"text\":\" print(json.dumps(out,separators=(\\\",\\\",\\\":\\\"),sort_keys=True))\"}],\"path\":\"/usr/local/libexec/homelab-rotating-boot-drill-state-export\",\"sha256\":\"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc\"},{\"bytes\":17702,\"lines\":[{\"line\":21,\"text\":\"active_backup_restore(){ local rc; if pgrep -af '(^|/)(vzdump|qmrestore|pctrestore|vma|zstd|rclone)([[:space:]]|$)'; then return 0; else rc=$?; [[ \\\"$rc\\\" == 1 ]] && return 0; die \\\"PGREP_FAILED_$rc\\\" 69; fi; }\"},{\"line\":85,\"text\":\" jq -e --arg l \\\"vm${vmid}\\\" --arg g \\\"$gen\\\" --arg s \\\"$state\\\" --arg sha \\\"$sha\\\" '.schema==\\\"homelab-vm-restore-validation-v1\\\" and .logical_id==$l and .generation==$g and .transport_state==\\\"SEALED\\\" and .transport_state_file==$s and .restore_source==\\\"Cloud A\\\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\\\"OK\\\"' \\\"$f\\\" >/dev/null\"},{\"line\":118,\"text\":\" jq -e '.schema==\\\"homelab-cloud-quorum-payload-v1\\\" and .status==\\\"SEALED\\\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\\\"OK\\\"' \\\"$state\\\" >/dev/null || die \\\"RESTORE_REQUIRES_STRICT_SEALED_$vmid\\\" 65\"},{\"line\":148,\"text\":\" jq -n --arg logical \\\"$logical\\\" --arg generation \\\"$gen\\\" --argjson vmid \\\"$vmid\\\" --arg vm_type \\\"$VM_TYPE\\\" --arg state \\\"$state\\\" --arg sha \\\"$expected_sha\\\" --arg config_sha \\\"$config_sha\\\" --arg level \\\"$level\\\" --argjson member_count \\\"$member_count\\\" --arg at \\\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\\\" '{schema:\\\"homelab-vm-restore-validation-v1\\\",logical_id:$logical,generation:$generation,vmid:$vmid,vm_type:$vm_type,transport_state:\\\"SEALED\\\",transport_state_file:$state,restore_source:\\\"Cloud A\\\",parts_manifest_verified:true,payload_sha256:$sha,payload_sha256_verified:true,payload_decompression_verified:true,proxmox_config_extract_verified:true,proxmox_config_sha256:$config_sha,lxc_member_count:$member_count,archiv\"}],\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker\",\"sha256\":\"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1\"},{\"bytes\":5271,\"lines\":[{\"line\":49,\"text\":\" if ! jq -e '.schema==\\\"homelab-cloud-quorum-payload-v1\\\" and .status==\\\"SEALED\\\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\\\"OK\\\"' \\\"$latest\\\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\\\nVMID=%s\\\\nDECISION=BACKUP_UNVERIFIED\\\\nREASON=LATEST_STATE_NOT_STRICT_SEALED\\\\nSTATE_FILE=%s\\\\n' \\\"$vmid\\\" \\\"$latest\\\"; return 0; fi\"},{\"line\":52,\"text\":\" if ! jq -e --arg l \\\"vm${vmid}\\\" --arg g \\\"$generation\\\" --arg s \\\"$latest\\\" --arg sha \\\"$sha\\\" '.schema==\\\"homelab-vm-restore-validation-v1\\\" and .logical_id==$l and .generation==$g and .transport_state==\\\"SEALED\\\" and .transport_state_file==$s and .restore_source==\\\"Cloud A\\\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\\\"OK\\\"' \\\"$restore\\\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\\\nVMID=%s\\\\nDECISION=BACKUP_UNVERIF\"}],\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe\",\"sha256\":\"bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T034236Z.json\",\"sha256\":\"f81ed0fff5c3bf1b18ac85876acf095089db6e23fea67c25e7b4591c6f6426e6\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T024055Z.json\",\"sha256\":\"93d75776422648f26f4427026f862e8d9d534762a8225c6ee96267af8861e8d6\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260812T175702Z.json\",\"sha256\":\"c131805a885df07e2ab620ecac440ee09dedd7573ec209804962d99e4e6a9b78\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260814T120018Z.json\",\"sha256\":\"e5cbacacf6d045c4089e4593ec25b0bd0ac646fbc6b880218835227b75d7103e\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T215206Z.json\",\"sha256\":\"19f80b27af8cecd051468de88ad3eaf978f531edf7ee3310cb4f5e3e98743cfe\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260910T093532Z.json\",\"sha256\":\"01629f57f58a84858a2addd3b39c3f2702f11dcc3c235ff0b811eb68f7763c99\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T055230Z.json\",\"sha256\":\"54c55120a65a679d79191560cfa4ce36d06024fd8aa0d255b5fcb7603fa47e3d\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260823T074138Z.json\",\"sha256\":\"4432a1ec79c6c225312f6a848324f8fcbe811fd6b5447843630d8c3cc897594a\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T003017Z.json\",\"sha256\":\"23edabc2ff232cc4a63c1925b7ca7af47a28957cd4ce2712c049c0a1eb9e1151\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T104801Z.json\",\"sha256\":\"3ac11c6db6ecbf018517a3797f32a100289f5104e43500243d2a6bfae9096e13\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T234523Z.json\",\"sha256\":\"42e2514cf1a7b289e58795ae05823e1d90bff25acfc9fd1f014ac0974724c63b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T064613Z.json\",\"sha256\":\"f7d3d86b8fc4dc7ead6a8b8c2259625bb65c02d046a89042e84c21934d6732d5\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T223254Z.json\",\"sha256\":\"d7f2dd19464e53087398fcfe6cbf4c335cbbcba25e00546a239a9f14bfab82b3\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T234419Z.json\",\"sha256\":\"0d3f575de4bc6cadf9ff949bf3344a5a6578c982fcdc7265ca0f2c1a7177b9eb\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T093438Z.json\",\"sha256\":\"4de0349f56d7f8643a2e9e4147a0fae67843412f763d2cfdf645678c2dabbb25\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T203019Z.json\",\"sha256\":\"dcc89a747399b09bee86ba9d5bcdea62545e267f02d9a2fe78b13c045109ea94\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T075421Z.json\",\"sha256\":\"46080ef31b42050cff03ec9be2f6254e52e8d21ee637c7d5f3876890c78ae253\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260810T065016Z.json\",\"sha256\":\"bbc5b01f6a5fb6abb7ecaa4f7e4306e8eea7c1bc228bcf91f7bbc7fb7e0df45f\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T023301Z.json\",\"sha256\":\"9a27a199d065fca0cb5d2b720889b32bd73ab5d26cf68e32041ceacb71c077b7\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T173439Z.json\",\"sha256\":\"9dd611fdc9399fe1b9ecd7672b475e919b85f9cc9c656b4e8f827f6136cdddf2\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260906T113503Z.json\",\"sha256\":\"2649baadc3eaab8f912ef768ff9b6e9f5741ce4286bd501364012c8a8e3eb7ca\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260901T133543Z.json\",\"sha256\":\"e8450eeec2735f8cb285bbff4a4e03bccd27940747e0d4d6aa403cea055158a8\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T145801Z.json\",\"sha256\":\"d411236d44ff6a0f1bc4712a8431c7c95fe87a7b899d2e95ab7bff6ccaa14723\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T144115Z.json\",\"sha256\":\"ee4dc8949ff9257752075c281aa8fd297912aa283da1ad870381ad780f5d83bd\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T003332Z.json\",\"sha256\":\"3950b3ae2f02c96aebe200593e3cdef5a1444c59ee65daba251a7651b1ccf79c\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T133338Z.json\",\"sha256\":\"52b9a34d69ca682bcac313a2b3d0014a0d45f5acf748f0219ff493e5fdec6e56\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260822T104254Z.json\",\"sha256\":\"73534cabc8b3ad2ca25059392be661b5db3f35a378d66cbd4afc87fabcae3d0b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260827T134805Z.json\",\"sha256\":\"5c87865cd1a6993b549b63f9bfff41537c64c05db0ccbe950d73c34df51b3c0a\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T214241Z.json\",\"sha256\":\"9795390bf1729da1034a20998a30cba7caa84d8a8e4f220c8c237acf938b6617\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T063016Z.json\",\"sha256\":\"cb19800a87307b1b1d48514e6c0b33bee7b93a9fa5b9c1e10c70aa6e6fe47ef7\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260818T025100Z.json\",\"sha256\":\"890c9fb27b0e6163e3520bd0f232f6071b3a3a20d24497ed5c4ae292aacd8a1d\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260815T110003Z.json\",\"sha256\":\"2bafe6dc44cedc06b6b895fb2f2c5bdc35f35bf9d71477986408e6d7a9e554a2\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260908T173740Z.json\",\"sha256\":\"85adc4da662f2be42dd79e544b0f2b4b09c4c3fc9fd6d43c03035a1b89b2b14c\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260908T033223Z.json\",\"sha256\":\"c8e62c5468a96766004777d34d5a921db8e2f5e812e5ef4452d11f9cd1cce5bb\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260821T140013Z.json\",\"sha256\":\"af74000f5895105a2984805bede5c7104476eeae1ead6e586d6d9873beed1753\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T021026Z.json\",\"sha256\":\"69a7f78ebc86548352696fcd83ef365d953fbbf0e321b2ff54c7426480509cc1\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260909T194007Z.json\",\"sha256\":\"122ff1f698eb4b664fdf1303df7580acd26360b2cc38a05434535cc6048d2a23\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260824T054150Z.json\",\"sha256\":\"9b30524a2b1c88d02f6154588db3f9a3aa7e7b0bfcf5beb4844229aa2bff389b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260811T195257Z.json\",\"sha256\":\"1b5445c3781b13fda8d0deff755b11816c2cd54bb33ec82b918714c10e8de3f0\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260813T150314Z.json\",\"sha256\":\"1ce1ee3dbf660ec09edb7dffbc833e8616bfd53655152e26cfa11fb94a9cd43a\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T174843Z.json\",\"sha256\":\"6963a016af5c8fb1accd46988448af09eb1b0b1e532f74b9dae0dcd93b2bbfc1\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260914T103009Z.json\",\"sha256\":\"851c4ca7ddd5d89d9c3fd3ea68d6297e59aaa50c132bd751e13541d9baaf3658\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260818T235518Z.json\",\"sha256\":\"f6dd4c714d1e92a5fbe5b28c14cb6be24d1844ba3dee10c0397ce3fa2308405d\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T133259Z.json\",\"sha256\":\"7f3d0a9d6c5ddb813f013c090b2186ef7bda905185211b8d0307df1a3ff214eb\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260916T023018Z.json\",\"sha256\":\"28dcd4ad5cfcd760573eccc6019e448965424af4b092393f4d1fd1fb9c1989d8\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T013234Z.json\",\"sha256\":\"7a76a7724cec777bbf5f302c4c73dad5cf788d3b18d8be5ec4d208901e9db16b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260828T155555Z.json\",\"sha256\":\"01218ef9b1f78f3ed1b85e8d076783a893424945ec6f32968fa51803790718b9\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260909T063725Z.json\",\"sha256\":\"4edd32734e89e9933be64146718ffcd958377fe4a1f98678211d38eae417b881\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260817T055309Z.json\",\"sha256\":\"091abc987e3849e15c0fc15c0da6a0c89247d0f71633f6caf78057fe6b55e8e2\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260828T024020Z.json\",\"sha256\":\"7c9551c0414a49045e060d729a7dfd3ba429b278dcb808fa18c11e25232423f2\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260819T215743Z.json\",\"sha256\":\"bb5e20a5df131464f433aae9e3cec0518aa7f3406b1579f6ed199d5fbe67d031\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T185633Z.json\",\"sha256\":\"410190ddfd00ef14f147e6776a7b0e90be1907c2cb7745e0664042d36a0b9db6\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T110112Z.json\",\"sha256\":\"28ee5b38662aee78f267156c9a998b7ceda4c28ffaf709fc0f453d4a662fe2eb\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T193324Z.json\",\"sha256\":\"ed7ad8328e23bd9c18033fe8b244c2598f90f3538e5481e1faf9a88421f30c22\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260816T075403Z.json\",\"sha256\":\"da860be9fad528f88e30e58100b9fbc51307de2fdf1d03d130cf79e9a13ca08b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260829T173717Z.json\",\"sha256\":\"810047d250a3b85f544f1f08aeecc89da22df1461587e719ee38b54264809301\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260901T103753Z.json\",\"sha256\":\"6b053a00b1d9ebef3be04063bb609fc4a14cc3c64e5d2bdd53f2700962cf1afc\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260827T203624Z.json\",\"sha256\":\"48399c3c5cdb074bd33b648afe0cca45bdc50be0764e94e422432739786c12d4\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260812T181406Z.json\",\"sha256\":\"319c961a483a8b3fd746fc980d1c54f64acd0a956e80e90bb8e7df39d8efc1e7\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260817T003018Z.json\",\"sha256\":\"a1b5786d4f4983e298fad6bc7e0e62b1f7cba71c758ecc3321c1ed0b35a1d31c\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260830T203628Z.json\",\"sha256\":\"6e22767c5335eed0ad35f3e478666681aab3aa108aa4626893fd1ef09ef8592e\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260902T134020Z.json\",\"sha256\":\"859fd36372728e6a4daecfe228ad6452cc5551851a51796b4b00587c4a6768ff\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260816T035805Z.json\",\"sha256\":\"bd952868dc0b024d68ed93010534686065b80861140a17212bc5cceb9f4669c9\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260828T143617Z.json\",\"sha256\":\"512a0363c465f5f46297fc289f4611c285909e8bda6145293887004852c6c77a\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260819T143015Z.json\",\"sha256\":\"f972a575f38522a03e2afc9d30bc8877152ec5774e6918ba83f16242ca17faea\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260815T111713Z.json\",\"sha256\":\"f673cf505bbfb37750067290ffea64ede10643ec4a65b6e83dff94be16980995\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260830T063610Z.json\",\"sha256\":\"ba1a5cf555b65d81ae4dc60a79d9524bb56980e6f7977304a03d29f1c6f2f6fe\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260810T070246Z.json\",\"sha256\":\"08e297d26021fb18b02854a679fc64f1e2d885064adb26faef61f77ce2dcf6cd\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260824T183626Z.json\",\"sha256\":\"cbd7ad301a31edce811643cd0e2c0329bea968177183afee9aedea84c6721f60\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260903T023609Z.json\",\"sha256\":\"b361bb5f108a0174fec0845402cd7d5d01457266df7eac7a3d163c63bd8d4545\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260821T053611Z.json\",\"sha256\":\"8f2cd19ed285514de90ee23e98c118f5f17ef6a7ea49c33b2ae2e0406d24b516\"}]\nGITEA_HISTORY_CANDIDATES_SCANNED=260\nGITEA_FULLRESTORE_HISTORY_HITS=[{\"lines\":[{\"line\":2,\"text\":\"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1\"},{\"line\":3,\"text\":\"STATUS=OK\"},{\"line\":44,\"text\":\"CURRENT_SCHEMA_MATCHES=[{\\\"bytes\\\":4306,\\\"hits\\\":[{\\\"line\\\":25,\\\"text\\\":\\\"- `verify-foundation-restore.sh` — `cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186` — fresh PASS\\\"},{\\\"line\\\":59,\\\"text\\\":\\\"Fresh `verify-foundation-restore.sh` PASS is part of this acceptance.\\\"}],\\\"path\\\":\\\"docs/checkpoints/foundation-v1.md\\\",\\\"sha256\\\":\\\"75ce90e0e021989a6216888eb9f3f7ffe976ae1c136eb317c8d5e46ea64176f0\\\"},{\\\"bytes\\\":2138,\\\"hits\\\":[{\\\"line\\\":11,\\\"text\\\":\\\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\\\"}],\\\"path\\\":\\\"docs/checkpoints/private-staging-backup-restore.md\\\",\\\"sha256\\\":\\\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5\"},{\"line\":46,\"text\":\"PRODUCER_CANDIDATES=[{\\\"path\\\":\\\"scripts/verify-foundation-restore.sh\\\",\\\"sha256\\\":\\\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\\\",\\\"structural\\\":[{\\\"line\\\":12,\\\"text\\\":\\\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\\\"},{\\\"line\\\":83,\\\"text\\\":\\\" state.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"homelab-cloud-quorum-payload-v1\\\\\\\"\\\"},{\\\"line\\\":97,\\\"text\\\":\\\" and bounded.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"homelab-vm-restore-validation-v1\\\\\\\"\\\"},{\\\"line\\\":105,\\\"text\\\":\\\" and full.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"newfi-foundation-full-restore-v1\\\\\\\"\\\"},{\\\"line\\\":108,\\\"text\\\":\\\" and full.get(\\\\\\\"source_vmid\\\\\\\")==211\\\"},{\\\"line\\\":109,\\\"text\\\":\\\" and full.get(\\\\\\\"test_vmid\\\\\\\")==9211\\\"},{\\\"line\\\":115,\\\"text\\\":\\\" and full.get(\\\\\\\"full_restore_prov\"},{\"line\":48,\"text\":\"VERIFIER_CANDIDATES=[{\\\"bytes\\\":5019,\\\"hits\\\":[{\\\"line\\\":12,\\\"text\\\":\\\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\\\"},{\\\"line\\\":105,\\\"text\\\":\\\" and full.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"newfi-foundation-full-restore-v1\\\\\\\"\\\"},{\\\"line\\\":115,\\\"text\\\":\\\" and full.get(\\\\\\\"full_restore_proven\\\\\\\") is True\\\"}],\\\"path\\\":\\\"scripts/verify-foundation-restore.sh\\\",\\\"sha256\\\":\\\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\\\"}]\"},{\"line\":52,\"text\":\"HISTORICAL_SCHEMA_FILES=[{\\\"blob_sha256\\\":\\\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\\\",\\\"commit\\\":\\\"9c1405588883f2e5ecd0c285d2b1ac561b045ee8\\\",\\\"path\\\":\\\"docs/checkpoints/private-staging-backup-restore.md\\\",\\\"structural\\\":[{\\\"line\\\":11,\\\"text\\\":\\\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\\\"}],\\\"subject\\\":\\\"docs: seal Newfi private staging backup restore gate\\\"},{\\\"blob_sha256\\\":\\\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\\\",\\\"commit\\\":\\\"beb054ee374142a9b65c28b0ac985156cfac5da8\\\",\\\"path\\\":\\\"docs/operations/backup-restore.md\\\",\\\"structural\\\":[{\\\"line\\\":13,\\\"text\\\":\\\"- Full isolated restore evidence: `/va\"}],\"path\":\"runtime/history/NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1.txt\",\"sha256\":\"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764\"},{\"lines\":[{\"line\":2,\"text\":\"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76\"},{\"line\":3,\"text\":\"STATUS=OK\"},{\"line\":30,\"text\":\"NEWFI76_BEGIN\"},{\"line\":31,\"text\":\"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76\"},{\"line\":36,\"text\":\"NEWFI76_GIT={\\\"branch\\\":\\\"implementation/newfi-closed-mvp-20260906\\\",\\\"clean\\\":true,\\\"exact\\\":true,\\\"head\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"remote_head\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\"}\"},{\"line\":37,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":363,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":38,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":5213,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":39,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":11021,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"29c1dadd480f597f612a41d10081f39097ad90e12c480eec244b671f49074d28\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":40,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":41,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":42,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":43,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":44,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":45,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":46,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":47,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":48,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":49,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":50,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":51,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":52,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":53,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":54,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1362,\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"f9cb47d48418a9eae3e5fc8f9dd2830e0499f62f1b82d574362186e7f78a7eb2\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":55,\"text\":\"NEWFI76_CLUSTER={\\\"selected\\\":{\\\"210\\\":{\\\"name\\\":\\\"newfi-prod\\\",\\\"node\\\":\\\"pve01\\\",\\\"status\\\":\\\"running\\\",\\\"type\\\":\\\"qemu\\\",\\\"vmid\\\":210},\\\"211\\\":{\\\"name\\\":\\\"newfi-staging\\\",\\\"node\\\":\\\"pve03\\\",\\\"status\\\":\\\"running\\\",\\\"type\\\":\\\"qemu\\\",\\\"vmid\\\":211}},\\\"state\\\":\\\"OK\\\"}\"},{\"line\":56,\"text\":\"NEWFI76_PRODUCTION_QGA={\\\"state\\\":\\\"COMPLETE\\\"}\"},{\"line\":57,\"text\":\"NEWFI76_PRODUCTION_ROOT={\\\"active_candidate\\\":false,\\\"cmd_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"config_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"git_matches\\\":[],\\\"matches_current\\\":false,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"Service/PortalData.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"_data/templates.xml\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}},\\\"rebuild_help\\\":{\\\"state\\\":\\\"NO_CMD\\\"},\\\"root\\\":\\\"/var/www/forums/newfi\\\",\\\"templates_xml_parse\\\":\\\"NOT_AVAILABLE\\\",\\\"xf_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}}\"},{\"line\":58,\"text\":\"NEWFI76_PRODUCTION_ROOT={\\\"active_candidate\\\":true,\\\"cmd_php\\\":{\\\"bytes\\\":336,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\\\",\\\"state\\\":\\\"OK\\\"},\\\"config_php\\\":{\\\"bytes\\\":310,\\\"mode\\\":\\\"0640\\\",\\\"state\\\":\\\"OK\\\"},\\\"git_matches\\\":[{\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\"}],\\\"matches_current\\\":true,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"bytes\\\":363,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"},\\\"Service/PortalData.php\\\":{\\\"bytes\\\":5213,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"},\\\"_data/templates.xml\\\":{\\\"bytes\\\":11021,\\\"mode\\\":\\\"0644\\\",\\\"s\"},{\"line\":59,\"text\":\"NEWFI76_PRODUCTION_ACTIVE_COUNT=1\"},{\"line\":60,\"text\":\"NEWFI76_STAGING_QGA={\\\"state\\\":\\\"COMPLETE\\\"}\"},{\"line\":61,\"text\":\"NEWFI76_STAGING_ROOT={\\\"active_candidate\\\":false,\\\"cmd_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"config_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"git_matches\\\":[],\\\"matches_current\\\":false,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"Service/PortalData.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"_data/templates.xml\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}},\\\"rebuild_help\\\":{\\\"state\\\":\\\"NO_CMD\\\"},\\\"root\\\":\\\"/var/www/forums/newfi\\\",\\\"templates_xml_parse\\\":\\\"NOT_AVAILABLE\\\",\\\"xf_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}}\"},{\"line\":62,\"text\":\"NEWFI76_STAGING_ROOT={\\\"active_candidate\\\":true,\\\"cmd_php\\\":{\\\"bytes\\\":336,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\\\",\\\"state\\\":\\\"OK\\\"},\\\"config_php\\\":{\\\"bytes\\\":310,\\\"mode\\\":\\\"0640\\\",\\\"state\\\":\\\"OK\\\"},\\\"git_matches\\\":[{\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\"}],\\\"matches_current\\\":true,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"bytes\\\":363,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"},\\\"Service/PortalData.php\\\":{\\\"bytes\\\":5213,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"},\\\"_data/templates.xml\\\":{\\\"bytes\\\":11021,\\\"mode\\\":\\\"0644\\\",\\\"sha2\"},{\"line\":63,\"text\":\"NEWFI76_STAGING_ACTIVE_COUNT=1\"},{\"line\":64,\"text\":\"NEWFI76_GAPS=[]\"},{\"line\":65,\"text\":\"NEWFI76_MUTATION_SCOPE=NONE_READ_ONLY\"},{\"line\":66,\"text\":\"NEWFI76_DECISION=PORTAL_ROOT_IDENTITY_PROVEN\"},{\"line\":67,\"text\":\"NEWFI76_COLLECTION_COMPLETE=true\"},{\"line\":68,\"text\":\"NEWFI76_END\"}],\"path\":\"runtime/history/NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76.txt\",\"sha256\":\"d69446b6a16aeec4daa07c4be4e8ccaa334dda78bee3581eac831c4718553eb2\"}]\nNON_VERIFIER_PRODUCER_HITS=[{\"bytes\":4575,\"lines\":[{\"line\":23,\"text\":\" if obj.get(\\\"schema\\\") != \\\"homelab-cloud-quorum-payload-v1\\\": return False\"},{\"line\":51,\"text\":\" e.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\" and e.get(\\\"logical_id\\\")==logical and\"},{\"line\":58,\"text\":\" e.get(\\\"full_restore_proven\\\") is False and e.get(\\\"result\\\")==\\\"OK\\\"\"},{\"line\":78,\"text\":\" \\\"schema\\\":\\\"homelab-boot-drill-state-export-v1\\\",\"},{\"line\":92,\"text\":\" print(json.dumps(out,separators=(\\\",\\\",\\\":\\\"),sort_keys=True))\"}],\"path\":\"/usr/local/sbin/homelab-rotating-boot-drill-state-export\",\"sha256\":\"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc\"},{\"bytes\":4575,\"lines\":[{\"line\":23,\"text\":\" if obj.get(\\\"schema\\\") != \\\"homelab-cloud-quorum-payload-v1\\\": return False\"},{\"line\":51,\"text\":\" e.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\" and e.get(\\\"logical_id\\\")==logical and\"},{\"line\":58,\"text\":\" e.get(\\\"full_restore_proven\\\") is False and e.get(\\\"result\\\")==\\\"OK\\\"\"},{\"line\":78,\"text\":\" \\\"schema\\\":\\\"homelab-boot-drill-state-export-v1\\\",\"},{\"line\":92,\"text\":\" print(json.dumps(out,separators=(\\\",\\\",\\\":\\\"),sort_keys=True))\"}],\"path\":\"/usr/local/libexec/homelab-rotating-boot-drill-state-export\",\"sha256\":\"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc\"},{\"bytes\":17702,\"lines\":[{\"line\":21,\"text\":\"active_backup_restore(){ local rc; if pgrep -af '(^|/)(vzdump|qmrestore|pctrestore|vma|zstd|rclone)([[:space:]]|$)'; then return 0; else rc=$?; [[ \\\"$rc\\\" == 1 ]] && return 0; die \\\"PGREP_FAILED_$rc\\\" 69; fi; }\"},{\"line\":85,\"text\":\" jq -e --arg l \\\"vm${vmid}\\\" --arg g \\\"$gen\\\" --arg s \\\"$state\\\" --arg sha \\\"$sha\\\" '.schema==\\\"homelab-vm-restore-validation-v1\\\" and .logical_id==$l and .generation==$g and .transport_state==\\\"SEALED\\\" and .transport_state_file==$s and .restore_source==\\\"Cloud A\\\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\\\"OK\\\"' \\\"$f\\\" >/dev/null\"},{\"line\":118,\"text\":\" jq -e '.schema==\\\"homelab-cloud-quorum-payload-v1\\\" and .status==\\\"SEALED\\\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\\\"OK\\\"' \\\"$state\\\" >/dev/null || die \\\"RESTORE_REQUIRES_STRICT_SEALED_$vmid\\\" 65\"},{\"line\":148,\"text\":\" jq -n --arg logical \\\"$logical\\\" --arg generation \\\"$gen\\\" --argjson vmid \\\"$vmid\\\" --arg vm_type \\\"$VM_TYPE\\\" --arg state \\\"$state\\\" --arg sha \\\"$expected_sha\\\" --arg config_sha \\\"$config_sha\\\" --arg level \\\"$level\\\" --argjson member_count \\\"$member_count\\\" --arg at \\\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\\\" '{schema:\\\"homelab-vm-restore-validation-v1\\\",logical_id:$logical,generation:$generation,vmid:$vmid,vm_type:$vm_type,transport_state:\\\"SEALED\\\",transport_state_file:$state,restore_source:\\\"Cloud A\\\",parts_manifest_verified:true,payload_sha256:$sha,payload_sha256_verified:true,payload_decompression_verified:true,proxmox_config_extract_verified:true,proxmox_config_sha256:$config_sha,lxc_member_count:$member_count,archiv\"}],\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker\",\"sha256\":\"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1\"},{\"bytes\":5271,\"lines\":[{\"line\":49,\"text\":\" if ! jq -e '.schema==\\\"homelab-cloud-quorum-payload-v1\\\" and .status==\\\"SEALED\\\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\\\"OK\\\"' \\\"$latest\\\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\\\nVMID=%s\\\\nDECISION=BACKUP_UNVERIFIED\\\\nREASON=LATEST_STATE_NOT_STRICT_SEALED\\\\nSTATE_FILE=%s\\\\n' \\\"$vmid\\\" \\\"$latest\\\"; return 0; fi\"},{\"line\":52,\"text\":\" if ! jq -e --arg l \\\"vm${vmid}\\\" --arg g \\\"$generation\\\" --arg s \\\"$latest\\\" --arg sha \\\"$sha\\\" '.schema==\\\"homelab-vm-restore-validation-v1\\\" and .logical_id==$l and .generation==$g and .transport_state==\\\"SEALED\\\" and .transport_state_file==$s and .restore_source==\\\"Cloud A\\\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\\\"OK\\\"' \\\"$restore\\\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\\\nVMID=%s\\\\nDECISION=BACKUP_UNVERIF\"}],\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe\",\"sha256\":\"bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T034236Z.json\",\"sha256\":\"f81ed0fff5c3bf1b18ac85876acf095089db6e23fea67c25e7b4591c6f6426e6\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T024055Z.json\",\"sha256\":\"93d75776422648f26f4427026f862e8d9d534762a8225c6ee96267af8861e8d6\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260812T175702Z.json\",\"sha256\":\"c131805a885df07e2ab620ecac440ee09dedd7573ec209804962d99e4e6a9b78\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260814T120018Z.json\",\"sha256\":\"e5cbacacf6d045c4089e4593ec25b0bd0ac646fbc6b880218835227b75d7103e\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T215206Z.json\",\"sha256\":\"19f80b27af8cecd051468de88ad3eaf978f531edf7ee3310cb4f5e3e98743cfe\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260910T093532Z.json\",\"sha256\":\"01629f57f58a84858a2addd3b39c3f2702f11dcc3c235ff0b811eb68f7763c99\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T055230Z.json\",\"sha256\":\"54c55120a65a679d79191560cfa4ce36d06024fd8aa0d255b5fcb7603fa47e3d\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260823T074138Z.json\",\"sha256\":\"4432a1ec79c6c225312f6a848324f8fcbe811fd6b5447843630d8c3cc897594a\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T003017Z.json\",\"sha256\":\"23edabc2ff232cc4a63c1925b7ca7af47a28957cd4ce2712c049c0a1eb9e1151\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T104801Z.json\",\"sha256\":\"3ac11c6db6ecbf018517a3797f32a100289f5104e43500243d2a6bfae9096e13\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T234523Z.json\",\"sha256\":\"42e2514cf1a7b289e58795ae05823e1d90bff25acfc9fd1f014ac0974724c63b\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T064613Z.json\",\"sha256\":\"f7d3d86b8fc4dc7ead6a8b8c2259625bb65c02d046a89042e84c21934d6732d5\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T223254Z.json\",\"sha256\":\"d7f2dd19464e53087398fcfe6cbf4c335cbbcba25e00546a239a9f14bfab82b3\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T234419Z.json\",\"sha256\":\"0d3f575de4bc6cadf9ff949bf3344a5a6578c982fcdc7265ca0f2c1a7177b9eb\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T093438Z.json\",\"sha256\":\"4de0349f56d7f8643a2e9e4147a0fae67843412f763d2cfdf645678c2dabbb25\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T203019Z.json\",\"sha256\":\"dcc89a747399b09bee86ba9d5bcdea62545e267f02d9a2fe78b13c045109ea94\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T075421Z.json\",\"sha256\":\"46080ef31b42050cff03ec9be2f6254e52e8d21ee637c7d5f3876890c78ae253\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260810T065016Z.json\",\"sha256\":\"bbc5b01f6a5fb6abb7ecaa4f7e4306e8eea7c1bc228bcf91f7bbc7fb7e0df45f\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T023301Z.json\",\"sha256\":\"9a27a199d065fca0cb5d2b720889b32bd73ab5d26cf68e32041ceacb71c077b7\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T173439Z.json\",\"sha256\":\"9dd611fdc9399fe1b9ecd7672b475e919b85f9cc9c656b4e8f827f6136cdddf2\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260906T113503Z.json\",\"sha256\":\"2649baadc3eaab8f912ef768ff9b6e9f5741ce4286bd501364012c8a8e3eb7ca\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260901T133543Z.json\",\"sha256\":\"e8450eeec2735f8cb285bbff4a4e03bccd27940747e0d4d6aa403cea055158a8\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T145801Z.json\",\"sha256\":\"d411236d44ff6a0f1bc4712a8431c7c95fe87a7b899d2e95ab7bff6ccaa14723\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T144115Z.json\",\"sha256\":\"ee4dc8949ff9257752075c281aa8fd297912aa283da1ad870381ad780f5d83bd\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T003332Z.json\",\"sha256\":\"3950b3ae2f02c96aebe200593e3cdef5a1444c59ee65daba251a7651b1ccf79c\"},{\"bytes\":1021,\"lines\":[{\"line\":2,\"text\":\" \\\"schema\\\": \\\"homelab-vm-restore-validation-v1\\\",\"},{\"line\":21,\"text\":\" \\\"full_restore_proven\\\": false,\"}],\"path\":\"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T133338Z.json\",\"sha256\":\"52b9a34d69ca682bcac313a2b3d0014a0d45f5acf748f0219ff493e5fdec6e56\"}]\nSUCCESSFUL_HISTORY_PROVENANCE=[{\"lines\":[{\"line\":2,\"text\":\"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1\"},{\"line\":3,\"text\":\"STATUS=OK\"},{\"line\":44,\"text\":\"CURRENT_SCHEMA_MATCHES=[{\\\"bytes\\\":4306,\\\"hits\\\":[{\\\"line\\\":25,\\\"text\\\":\\\"- `verify-foundation-restore.sh` — `cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186` — fresh PASS\\\"},{\\\"line\\\":59,\\\"text\\\":\\\"Fresh `verify-foundation-restore.sh` PASS is part of this acceptance.\\\"}],\\\"path\\\":\\\"docs/checkpoints/foundation-v1.md\\\",\\\"sha256\\\":\\\"75ce90e0e021989a6216888eb9f3f7ffe976ae1c136eb317c8d5e46ea64176f0\\\"},{\\\"bytes\\\":2138,\\\"hits\\\":[{\\\"line\\\":11,\\\"text\\\":\\\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\\\"}],\\\"path\\\":\\\"docs/checkpoints/private-staging-backup-restore.md\\\",\\\"sha256\\\":\\\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5\"},{\"line\":46,\"text\":\"PRODUCER_CANDIDATES=[{\\\"path\\\":\\\"scripts/verify-foundation-restore.sh\\\",\\\"sha256\\\":\\\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\\\",\\\"structural\\\":[{\\\"line\\\":12,\\\"text\\\":\\\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\\\"},{\\\"line\\\":83,\\\"text\\\":\\\" state.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"homelab-cloud-quorum-payload-v1\\\\\\\"\\\"},{\\\"line\\\":97,\\\"text\\\":\\\" and bounded.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"homelab-vm-restore-validation-v1\\\\\\\"\\\"},{\\\"line\\\":105,\\\"text\\\":\\\" and full.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"newfi-foundation-full-restore-v1\\\\\\\"\\\"},{\\\"line\\\":108,\\\"text\\\":\\\" and full.get(\\\\\\\"source_vmid\\\\\\\")==211\\\"},{\\\"line\\\":109,\\\"text\\\":\\\" and full.get(\\\\\\\"test_vmid\\\\\\\")==9211\\\"},{\\\"line\\\":115,\\\"text\\\":\\\" and full.get(\\\\\\\"full_restore_prov\"},{\"line\":48,\"text\":\"VERIFIER_CANDIDATES=[{\\\"bytes\\\":5019,\\\"hits\\\":[{\\\"line\\\":12,\\\"text\\\":\\\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\\\"},{\\\"line\\\":105,\\\"text\\\":\\\" and full.get(\\\\\\\"schema\\\\\\\")==\\\\\\\"newfi-foundation-full-restore-v1\\\\\\\"\\\"},{\\\"line\\\":115,\\\"text\\\":\\\" and full.get(\\\\\\\"full_restore_proven\\\\\\\") is True\\\"}],\\\"path\\\":\\\"scripts/verify-foundation-restore.sh\\\",\\\"sha256\\\":\\\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\\\"}]\"},{\"line\":52,\"text\":\"HISTORICAL_SCHEMA_FILES=[{\\\"blob_sha256\\\":\\\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\\\",\\\"commit\\\":\\\"9c1405588883f2e5ecd0c285d2b1ac561b045ee8\\\",\\\"path\\\":\\\"docs/checkpoints/private-staging-backup-restore.md\\\",\\\"structural\\\":[{\\\"line\\\":11,\\\"text\\\":\\\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\\\"}],\\\"subject\\\":\\\"docs: seal Newfi private staging backup restore gate\\\"},{\\\"blob_sha256\\\":\\\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\\\",\\\"commit\\\":\\\"beb054ee374142a9b65c28b0ac985156cfac5da8\\\",\\\"path\\\":\\\"docs/operations/backup-restore.md\\\",\\\"structural\\\":[{\\\"line\\\":13,\\\"text\\\":\\\"- Full isolated restore evidence: `/va\"}],\"path\":\"runtime/history/NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1.txt\",\"sha256\":\"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764\"},{\"lines\":[{\"line\":2,\"text\":\"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76\"},{\"line\":3,\"text\":\"STATUS=OK\"},{\"line\":30,\"text\":\"NEWFI76_BEGIN\"},{\"line\":31,\"text\":\"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76\"},{\"line\":36,\"text\":\"NEWFI76_GIT={\\\"branch\\\":\\\"implementation/newfi-closed-mvp-20260906\\\",\\\"clean\\\":true,\\\"exact\\\":true,\\\"head\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"remote_head\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\"}\"},{\"line\":37,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":363,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":38,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":5213,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":39,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":11021,\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"29c1dadd480f597f612a41d10081f39097ad90e12c480eec244b671f49074d28\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":40,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":41,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":42,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"06bab5acd124e768f70305b3d7eca2f595871890\\\",\\\"label\\\":\\\"STYLE199B\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":43,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":44,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":45,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"4ade504e649ce35d05322a6b69d758a1ef1803b5\\\",\\\"label\\\":\\\"BRAND198\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":46,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":47,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":48,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\\\",\\\"label\\\":\\\"PROD195\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":49,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":50,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":51,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1461,\\\"commit\\\":\\\"ca07bfc20953585887f7cc2f1d443cf8313912c8\\\",\\\"label\\\":\\\"PortalNav\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":52,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":247,\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rel\\\":\\\"Pub/Controller/Portal.php\\\",\\\"sha256\\\":\\\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":53,\"text\":\"NEWFI76_GIT_BLOB={\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rc\\\":128,\\\"rel\\\":\\\"Service/PortalData.php\\\",\\\"state\\\":\\\"ABSENT\\\"}\"},{\"line\":54,\"text\":\"NEWFI76_GIT_BLOB={\\\"bytes\\\":1362,\\\"commit\\\":\\\"82dd2066df377ba9d904f68f90898e009413eec9\\\",\\\"label\\\":\\\"PortalInitial\\\",\\\"rel\\\":\\\"_data/templates.xml\\\",\\\"sha256\\\":\\\"f9cb47d48418a9eae3e5fc8f9dd2830e0499f62f1b82d574362186e7f78a7eb2\\\",\\\"state\\\":\\\"OK\\\"}\"},{\"line\":55,\"text\":\"NEWFI76_CLUSTER={\\\"selected\\\":{\\\"210\\\":{\\\"name\\\":\\\"newfi-prod\\\",\\\"node\\\":\\\"pve01\\\",\\\"status\\\":\\\"running\\\",\\\"type\\\":\\\"qemu\\\",\\\"vmid\\\":210},\\\"211\\\":{\\\"name\\\":\\\"newfi-staging\\\",\\\"node\\\":\\\"pve03\\\",\\\"status\\\":\\\"running\\\",\\\"type\\\":\\\"qemu\\\",\\\"vmid\\\":211}},\\\"state\\\":\\\"OK\\\"}\"},{\"line\":56,\"text\":\"NEWFI76_PRODUCTION_QGA={\\\"state\\\":\\\"COMPLETE\\\"}\"},{\"line\":57,\"text\":\"NEWFI76_PRODUCTION_ROOT={\\\"active_candidate\\\":false,\\\"cmd_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"config_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"git_matches\\\":[],\\\"matches_current\\\":false,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"Service/PortalData.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"_data/templates.xml\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}},\\\"rebuild_help\\\":{\\\"state\\\":\\\"NO_CMD\\\"},\\\"root\\\":\\\"/var/www/forums/newfi\\\",\\\"templates_xml_parse\\\":\\\"NOT_AVAILABLE\\\",\\\"xf_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}}\"},{\"line\":58,\"text\":\"NEWFI76_PRODUCTION_ROOT={\\\"active_candidate\\\":true,\\\"cmd_php\\\":{\\\"bytes\\\":336,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\\\",\\\"state\\\":\\\"OK\\\"},\\\"config_php\\\":{\\\"bytes\\\":310,\\\"mode\\\":\\\"0640\\\",\\\"state\\\":\\\"OK\\\"},\\\"git_matches\\\":[{\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\"}],\\\"matches_current\\\":true,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"bytes\\\":363,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"},\\\"Service/PortalData.php\\\":{\\\"bytes\\\":5213,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"},\\\"_data/templates.xml\\\":{\\\"bytes\\\":11021,\\\"mode\\\":\\\"0644\\\",\\\"s\"},{\"line\":59,\"text\":\"NEWFI76_PRODUCTION_ACTIVE_COUNT=1\"},{\"line\":60,\"text\":\"NEWFI76_STAGING_QGA={\\\"state\\\":\\\"COMPLETE\\\"}\"},{\"line\":61,\"text\":\"NEWFI76_STAGING_ROOT={\\\"active_candidate\\\":false,\\\"cmd_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"config_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"git_matches\\\":[],\\\"matches_current\\\":false,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"Service/PortalData.php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"},\\\"_data/templates.xml\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}},\\\"rebuild_help\\\":{\\\"state\\\":\\\"NO_CMD\\\"},\\\"root\\\":\\\"/var/www/forums/newfi\\\",\\\"templates_xml_parse\\\":\\\"NOT_AVAILABLE\\\",\\\"xf_php\\\":{\\\"error\\\":\\\"FileNotFoundError\\\",\\\"state\\\":\\\"MISSING\\\"}}\"},{\"line\":62,\"text\":\"NEWFI76_STAGING_ROOT={\\\"active_candidate\\\":true,\\\"cmd_php\\\":{\\\"bytes\\\":336,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\\\",\\\"state\\\":\\\"OK\\\"},\\\"config_php\\\":{\\\"bytes\\\":310,\\\"mode\\\":\\\"0640\\\",\\\"state\\\":\\\"OK\\\"},\\\"git_matches\\\":[{\\\"commit\\\":\\\"a1efc08a15ba91971c2297d886b25ca2097e6935\\\",\\\"label\\\":\\\"Portal200\\\"}],\\\"matches_current\\\":true,\\\"portal_files\\\":{\\\"Pub/Controller/Portal.php\\\":{\\\"bytes\\\":363,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\\\",\\\"state\\\":\\\"OK\\\"},\\\"Service/PortalData.php\\\":{\\\"bytes\\\":5213,\\\"mode\\\":\\\"0644\\\",\\\"sha256\\\":\\\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\\\",\\\"state\\\":\\\"OK\\\"},\\\"_data/templates.xml\\\":{\\\"bytes\\\":11021,\\\"mode\\\":\\\"0644\\\",\\\"sha2\"},{\"line\":63,\"text\":\"NEWFI76_STAGING_ACTIVE_COUNT=1\"},{\"line\":64,\"text\":\"NEWFI76_GAPS=[]\"},{\"line\":65,\"text\":\"NEWFI76_MUTATION_SCOPE=NONE_READ_ONLY\"},{\"line\":66,\"text\":\"NEWFI76_DECISION=PORTAL_ROOT_IDENTITY_PROVEN\"},{\"line\":67,\"text\":\"NEWFI76_COLLECTION_COMPLETE=true\"},{\"line\":68,\"text\":\"NEWFI76_END\"}],\"path\":\"runtime/history/NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76.txt\",\"sha256\":\"d69446b6a16aeec4daa07c4be4e8ccaa334dda78bee3581eac831c4718553eb2\"}]\nFULLRESTORE_EVIDENCE_PROVEN=false\nIMMUTABLE_PLAN_RECOVERY_RESOLVED=true\nFULLRESTORE_PRODUCER_RECOVERY_RESOLVED=true\nDECISION=PASS_TARGETED_READONLY_SOURCE_RECOVERY\nNEXT_GATE=RUN_DR221_FINAL_CURRENT_PRODUCTION_BACKUP_RESTORE_ACCEPTANCE\nACTIVE_MAJOR_STAGE=DR221\nMAJOR_STAGES_REMAINING=1\nHELPERS_EXECUTED=0\nCLOUD_READS=GITEA_PUBLIC_ONLY\nCLOUD_WRITES=0\nVM_MUTATIONS=0\nPRODUCTION_MUTATION=false\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260921-NEWFDOM-DR221-TARGETED-SOURCE-RECOVERY401R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n" + "output": "DR221_SERVERRECOVER408_BEGIN=true\nCOMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\nTARGET_COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FINAL404\nIMMUTABLE_PLAN_CHECK=PASS\nRECOVERY_SCOPE=SERVER_LOCAL_RUNNER_EVIDENCE_ONLY\nTARGET_RUNNING_PROCESS_COUNT=0\nTARGET_RUNNING_PROCESS_IDS_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nFILES_SCANNED=1484\nMATCHED_FILE_COUNT=1\nMATCHED_EVIDENCE=[{\"bytes\":348,\"relative_path\":\"raw/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408-20260921T171011Z.log\",\"root\":\"/var/lib/homelab-chat-run\",\"safe_line_count\":2,\"safe_lines\":[\"DR221_SERVERRECOVER408_BEGIN=true\",\"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\"],\"sha256\":\"490f64e4b922e5d685978061c69887de693ad1df08ad91dbc28c1be923e07ea0\"}]\nRECOVERED_COMPLETE_LOCAL_RESULT=false\nDECISION_SERVERRECOVER408=HOLD_FINAL404_SERVER_EVIDENCE_INCOMPLETE\nNEXT_GATE_SERVERRECOVER408=RECONCILE_ONLY_MATCHED_SERVER_EVIDENCE\nBACKUP_EXECUTED_BY_SERVERRECOVER408=0\nCLOUD_ACTIONS_BY_SERVERRECOVER408=0\nVM_MUTATIONS_BY_SERVERRECOVER408=0\nPRODUCT_MUTATION_BY_SERVERRECOVER408=false\nRAW_UNFILTERED_EVIDENCE_INCLUDED=false\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nDR221_SERVERRECOVER408_END=true\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 1872ff73..751c62bc 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-TARGETED-SOURCE-RECOVERY401R1 +COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=newfi-dr221-targeted-source-recovery +COMPONENT=newfi-dr221-final404-server-local-evidence-recovery REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=80f90a8aa52c17c2b3fcce96b808593ce8c9e9c60cd6170aea6a907a0727751b +COMMAND_SHA256=0fbd6b2a22d5a7539552dea26ebccc0bc0d07135c1459a3919ce5b55d33cd87a DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,47 +24,29 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=2cad6495c7d3263cbdca6d967a94b345e54ecd639b1a267645b4469dbc96f9d6 -SANITIZED_OUTPUT_SHA256=2cad6495c7d3263cbdca6d967a94b345e54ecd639b1a267645b4469dbc96f9d6 +RAW_EVIDENCE_SHA256=c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b +SANITIZED_OUTPUT_SHA256=c840fc57fd4cf98ac6759f333c97d2010eb06c3bb047ae7075a918ffa027000b OUTPUT_BEGIN -ERROR_REGISTER_CHECK=OK -REFERENCE_CHECK=OK -AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -AUTHORITY_HASHES={"/etc/pve/31_HOMELAB_REFERENCE.md":{"bytes":201129,"sha256":"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66"},"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md":{"bytes":302058,"sha256":"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0"}} -WORKTREE_HEAD=9c4814db67759dc09a5469d254c41a7b73f4d89a -WORKTREE_BRANCH=implementation/newfi-closed-mvp-20260906 -WORKTREE_CLEAN=true -WORKTREE_HEAD_MATCH_399=true -EXACT_399={"json_sha256":"bfe2b596226b22144f515eed22afcdda9ff16a87e85c9e6329860f7914646782","txt_sha256":"7ead1ea2779b0285aea060a90496afe6e75c7c7606718bec3a95d36c9053f3a3","valid":true} -EXACT_400={"json_sha256":"09cc4f9d642c29b2b8f05ae68c0cc2b6d64c3525aa48ccd9d47d3cb7a5f13772","txt_sha256":"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764","valid":true} -IMMUTABLE_PLAN_PREDECESSOR_399_PASS=true -AUTHORITY_UNCHANGED_FROM_399=true -PLAN_CARRY_FORWARD_FROM_EXACT_399=true -IMMUTABLE_PLAN_SEARCH_FILES=12000 -IMMUTABLE_PLAN_DIRECT_MATCHES=[] -IMMUTABLE_PLAN_DIRECT_CHECK=NOT_FOUND -FULLRESTORE_EVIDENCE_COUNT=0 -FULLRESTORE_EVIDENCE=[] -CURRENT_RESTORE_DOCS=[{"lines":[{"line":5,"text":"Task 7 accepts the immutable VM211 generation:"},{"line":7,"text":"- Generation: `vm211-pve03-20260906T083057Z`"},{"line":11,"text":"- Canonical sealed state: `/var/lib/homelab-backup/cloud-quorum/vm211/vm211-pve03-20260906T083057Z.json`"},{"line":12,"text":"- Bounded Cloud-A evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z.json`"},{"line":13,"text":"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`"},{"line":15,"text":"The backup used the current homelab VM cloud-quorum worker/transport contract with a root-only bounded worker copy whose only allowlist extension was VM211 as `pve03/qemu`. The shared worker was not modified."},{"line":23,"text":"- independent Cloud A and Cloud B verification"},{"line":30,"text":"Cloud A was subsequently read back for archive SHA, decompression and Proxmox configuration validation."},{"line":34,"text":"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`."},{"line":39,"text":"- VM9211 was restored stopped."},{"line":44,"text":"- VM9211 was stopped and destroyed after validation."},{"line":45,"text":"- No VM9211 LVM residue remained."},{"line":66,"text":"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue."},{"line":68,"text":"`NEWFI78` then completed a real isolated restore, but its acceptance verifier used a Cyrillic substring test for the language title. XenForo's authoritative restored record was `language_id=2`, `title=Russian (RU)`, `language_code=ru-RU`; therefore that result was a verifier false negative. Cleanup again left no VM9211 residue."},{"line":70,"text":"`NEWFI80` uses the authoritative language ID/code contract and records the accepted full restore evidence."},{"line":78,"text":"The verifier checks strict SEALED state, bounded Cloud-A recovery evidence, accepted full-restore evidence, VM9211/LV absence and performs a fresh remote seal verification."}],"path":"docs/operations/backup-restore.md","sha256":"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f"},{"lines":[{"line":1,"text":"# Newfi private staging — fresh backup and full restore gate"},{"line":7,"text":"Fresh generation: `vm211-pve03-20260906T213759Z`"},{"line":9,"text":"Sealed state: `/var/lib/homelab-backup/cloud-quorum/vm211/vm211-pve03-20260906T213759Z.json`"},{"line":11,"text":"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`"},{"line":22,"text":"- FINAL181 created the fresh VM211 backup and sealed it with Cloud A + Cloud B quorum 2;"},{"line":24,"text":"- FINAL183 reconstructed that exact sealed archive from Cloud A and verified its SHA256 and size;"},{"line":25,"text":"- temporary VM9211 was restored with unique MAC assignment and all restored NICs link-down before boot;"},{"line":31,"text":"- VM9211, its config, restore LVs and reconstruction work were removed after proof;"},{"line":32,"text":"- source VM211 remained system-running with zero failed units before and after the restore drill;"},{"line":33,"text":"- all ten current implementation verifiers passed again on source VM211 after cleanup;"}],"path":"docs/checkpoints/private-staging-backup-restore.md","sha256":"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37"},{"lines":[{"line":7,"text":"GEN=vm211-pve03-20260906T083057Z"},{"line":10,"text":"STATE=/var/lib/homelab-backup/cloud-quorum/vm211/$GEN.json"},{"line":11,"text":"BOUNDED=/var/lib/homelab-backup/vm-restore-validation/vm211/$GEN.json"},{"line":12,"text":"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json"},{"line":109,"text":" and full.get(\"test_vmid\")==9211"},{"line":115,"text":" and full.get(\"full_restore_proven\") is True"},{"line":138,"text":" [\"/usr/sbin/qm\",\"status\",\"9211\"],"},{"line":159,"text":" \"vm-9211-\" in x"},{"line":169,"text":" \"vm211\","},{"line":187,"text":"print(\"FULL_RESTORE_PROVEN=true\")"}],"path":"scripts/verify-foundation-restore.sh","sha256":"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186"}] -LOCAL_PROVENANCE_FILES_SCANNED=2433 -LOCAL_SCHEMA_HITS=[{"bytes":3166,"lines":[{"line":13,"text":"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`"},{"line":34,"text":"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`."},{"line":66,"text":"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue."}],"path":"/root/newfi-portal/.worktrees/foundation-newfi-foundation-20260904/docs/operations/backup-restore.md","sha256":"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f"},{"bytes":5019,"lines":[{"line":12,"text":"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json"},{"line":83,"text":" state.get(\"schema\")==\"homelab-cloud-quorum-payload-v1\""},{"line":97,"text":" and bounded.get(\"schema\")==\"homelab-vm-restore-validation-v1\""},{"line":105,"text":" and full.get(\"schema\")==\"newfi-foundation-full-restore-v1\""},{"line":108,"text":" and full.get(\"source_vmid\")==211"},{"line":109,"text":" and full.get(\"test_vmid\")==9211"},{"line":115,"text":" and full.get(\"full_restore_proven\") is True"},{"line":187,"text":"print(\"FULL_RESTORE_PROVEN=true\")"}],"path":"/root/newfi-portal/.worktrees/foundation-newfi-foundation-20260904/scripts/verify-foundation-restore.sh","sha256":"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186"},{"bytes":3166,"lines":[{"line":13,"text":"- Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T083057Z-newfi-full.json`"},{"line":34,"text":"The same sealed generation was reconstructed from Cloud A and restored with native Proxmox `qmrestore` into temporary VMID `9211`."},{"line":66,"text":"`NEWFI76` reconstructed the correct bytes and archive SHA but used the temporary basename `archive.vma.zst`. Proxmox `qmrestore` determines archive metadata from the filename and rejected it before restore. Committed-state checks proved no VM9211 residue."}],"path":"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/docs/operations/backup-restore.md","sha256":"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f"},{"bytes":2138,"lines":[{"line":11,"text":"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`"}],"path":"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/docs/checkpoints/private-staging-backup-restore.md","sha256":"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37"},{"bytes":5019,"lines":[{"line":12,"text":"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json"},{"line":83,"text":" state.get(\"schema\")==\"homelab-cloud-quorum-payload-v1\""},{"line":97,"text":" and bounded.get(\"schema\")==\"homelab-vm-restore-validation-v1\""},{"line":105,"text":" and full.get(\"schema\")==\"newfi-foundation-full-restore-v1\""},{"line":108,"text":" and full.get(\"source_vmid\")==211"},{"line":109,"text":" and full.get(\"test_vmid\")==9211"},{"line":115,"text":" and full.get(\"full_restore_proven\") is True"},{"line":187,"text":"print(\"FULL_RESTORE_PROVEN=true\")"}],"path":"/root/newfi-portal/.worktrees/implementation-newfi-closed-mvp-20260906/scripts/verify-foundation-restore.sh","sha256":"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186"},{"bytes":4575,"lines":[{"line":23,"text":" if obj.get(\"schema\") != \"homelab-cloud-quorum-payload-v1\": return False"},{"line":51,"text":" e.get(\"schema\")==\"homelab-vm-restore-validation-v1\" and e.get(\"logical_id\")==logical and"},{"line":58,"text":" e.get(\"full_restore_proven\") is False and e.get(\"result\")==\"OK\""},{"line":78,"text":" \"schema\":\"homelab-boot-drill-state-export-v1\","},{"line":92,"text":" print(json.dumps(out,separators=(\",\",\":\"),sort_keys=True))"}],"path":"/usr/local/sbin/homelab-rotating-boot-drill-state-export","sha256":"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc"},{"bytes":4575,"lines":[{"line":23,"text":" if obj.get(\"schema\") != \"homelab-cloud-quorum-payload-v1\": return False"},{"line":51,"text":" e.get(\"schema\")==\"homelab-vm-restore-validation-v1\" and e.get(\"logical_id\")==logical and"},{"line":58,"text":" e.get(\"full_restore_proven\") is False and e.get(\"result\")==\"OK\""},{"line":78,"text":" \"schema\":\"homelab-boot-drill-state-export-v1\","},{"line":92,"text":" print(json.dumps(out,separators=(\",\",\":\"),sort_keys=True))"}],"path":"/usr/local/libexec/homelab-rotating-boot-drill-state-export","sha256":"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc"},{"bytes":17702,"lines":[{"line":21,"text":"active_backup_restore(){ local rc; if pgrep -af '(^|/)(vzdump|qmrestore|pctrestore|vma|zstd|rclone)([[:space:]]|$)'; then return 0; else rc=$?; [[ \"$rc\" == 1 ]] && return 0; die \"PGREP_FAILED_$rc\" 69; fi; }"},{"line":85,"text":" jq -e --arg l \"vm${vmid}\" --arg g \"$gen\" --arg s \"$state\" --arg sha \"$sha\" '.schema==\"homelab-vm-restore-validation-v1\" and .logical_id==$l and .generation==$g and .transport_state==\"SEALED\" and .transport_state_file==$s and .restore_source==\"Cloud A\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\"OK\"' \"$f\" >/dev/null"},{"line":118,"text":" jq -e '.schema==\"homelab-cloud-quorum-payload-v1\" and .status==\"SEALED\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\"OK\"' \"$state\" >/dev/null || die \"RESTORE_REQUIRES_STRICT_SEALED_$vmid\" 65"},{"line":148,"text":" jq -n --arg logical \"$logical\" --arg generation \"$gen\" --argjson vmid \"$vmid\" --arg vm_type \"$VM_TYPE\" --arg state \"$state\" --arg sha \"$expected_sha\" --arg config_sha \"$config_sha\" --arg level \"$level\" --argjson member_count \"$member_count\" --arg at \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" '{schema:\"homelab-vm-restore-validation-v1\",logical_id:$logical,generation:$generation,vmid:$vmid,vm_type:$vm_type,transport_state:\"SEALED\",transport_state_file:$state,restore_source:\"Cloud A\",parts_manifest_verified:true,payload_sha256:$sha,payload_sha256_verified:true,payload_decompression_verified:true,proxmox_config_extract_verified:true,proxmox_config_sha256:$config_sha,lxc_member_count:$member_count,archiv"}],"path":"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker","sha256":"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1"},{"bytes":5271,"lines":[{"line":49,"text":" if ! jq -e '.schema==\"homelab-cloud-quorum-payload-v1\" and .status==\"SEALED\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\"OK\"' \"$latest\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\nVMID=%s\\nDECISION=BACKUP_UNVERIFIED\\nREASON=LATEST_STATE_NOT_STRICT_SEALED\\nSTATE_FILE=%s\\n' \"$vmid\" \"$latest\"; return 0; fi"},{"line":52,"text":" if ! jq -e --arg l \"vm${vmid}\" --arg g \"$generation\" --arg s \"$latest\" --arg sha \"$sha\" '.schema==\"homelab-vm-restore-validation-v1\" and .logical_id==$l and .generation==$g and .transport_state==\"SEALED\" and .transport_state_file==$s and .restore_source==\"Cloud A\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\"OK\"' \"$restore\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\nVMID=%s\\nDECISION=BACKUP_UNVERIF"}],"path":"/usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe","sha256":"bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T034236Z.json","sha256":"f81ed0fff5c3bf1b18ac85876acf095089db6e23fea67c25e7b4591c6f6426e6"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T024055Z.json","sha256":"93d75776422648f26f4427026f862e8d9d534762a8225c6ee96267af8861e8d6"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260812T175702Z.json","sha256":"c131805a885df07e2ab620ecac440ee09dedd7573ec209804962d99e4e6a9b78"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260814T120018Z.json","sha256":"e5cbacacf6d045c4089e4593ec25b0bd0ac646fbc6b880218835227b75d7103e"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T215206Z.json","sha256":"19f80b27af8cecd051468de88ad3eaf978f531edf7ee3310cb4f5e3e98743cfe"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260910T093532Z.json","sha256":"01629f57f58a84858a2addd3b39c3f2702f11dcc3c235ff0b811eb68f7763c99"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T055230Z.json","sha256":"54c55120a65a679d79191560cfa4ce36d06024fd8aa0d255b5fcb7603fa47e3d"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260823T074138Z.json","sha256":"4432a1ec79c6c225312f6a848324f8fcbe811fd6b5447843630d8c3cc897594a"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T003017Z.json","sha256":"23edabc2ff232cc4a63c1925b7ca7af47a28957cd4ce2712c049c0a1eb9e1151"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T104801Z.json","sha256":"3ac11c6db6ecbf018517a3797f32a100289f5104e43500243d2a6bfae9096e13"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T234523Z.json","sha256":"42e2514cf1a7b289e58795ae05823e1d90bff25acfc9fd1f014ac0974724c63b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T064613Z.json","sha256":"f7d3d86b8fc4dc7ead6a8b8c2259625bb65c02d046a89042e84c21934d6732d5"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T223254Z.json","sha256":"d7f2dd19464e53087398fcfe6cbf4c335cbbcba25e00546a239a9f14bfab82b3"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T234419Z.json","sha256":"0d3f575de4bc6cadf9ff949bf3344a5a6578c982fcdc7265ca0f2c1a7177b9eb"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T093438Z.json","sha256":"4de0349f56d7f8643a2e9e4147a0fae67843412f763d2cfdf645678c2dabbb25"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T203019Z.json","sha256":"dcc89a747399b09bee86ba9d5bcdea62545e267f02d9a2fe78b13c045109ea94"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T075421Z.json","sha256":"46080ef31b42050cff03ec9be2f6254e52e8d21ee637c7d5f3876890c78ae253"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260810T065016Z.json","sha256":"bbc5b01f6a5fb6abb7ecaa4f7e4306e8eea7c1bc228bcf91f7bbc7fb7e0df45f"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T023301Z.json","sha256":"9a27a199d065fca0cb5d2b720889b32bd73ab5d26cf68e32041ceacb71c077b7"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T173439Z.json","sha256":"9dd611fdc9399fe1b9ecd7672b475e919b85f9cc9c656b4e8f827f6136cdddf2"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260906T113503Z.json","sha256":"2649baadc3eaab8f912ef768ff9b6e9f5741ce4286bd501364012c8a8e3eb7ca"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260901T133543Z.json","sha256":"e8450eeec2735f8cb285bbff4a4e03bccd27940747e0d4d6aa403cea055158a8"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T145801Z.json","sha256":"d411236d44ff6a0f1bc4712a8431c7c95fe87a7b899d2e95ab7bff6ccaa14723"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T144115Z.json","sha256":"ee4dc8949ff9257752075c281aa8fd297912aa283da1ad870381ad780f5d83bd"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T003332Z.json","sha256":"3950b3ae2f02c96aebe200593e3cdef5a1444c59ee65daba251a7651b1ccf79c"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T133338Z.json","sha256":"52b9a34d69ca682bcac313a2b3d0014a0d45f5acf748f0219ff493e5fdec6e56"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260822T104254Z.json","sha256":"73534cabc8b3ad2ca25059392be661b5db3f35a378d66cbd4afc87fabcae3d0b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260827T134805Z.json","sha256":"5c87865cd1a6993b549b63f9bfff41537c64c05db0ccbe950d73c34df51b3c0a"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T214241Z.json","sha256":"9795390bf1729da1034a20998a30cba7caa84d8a8e4f220c8c237acf938b6617"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T063016Z.json","sha256":"cb19800a87307b1b1d48514e6c0b33bee7b93a9fa5b9c1e10c70aa6e6fe47ef7"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260818T025100Z.json","sha256":"890c9fb27b0e6163e3520bd0f232f6071b3a3a20d24497ed5c4ae292aacd8a1d"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260815T110003Z.json","sha256":"2bafe6dc44cedc06b6b895fb2f2c5bdc35f35bf9d71477986408e6d7a9e554a2"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260908T173740Z.json","sha256":"85adc4da662f2be42dd79e544b0f2b4b09c4c3fc9fd6d43c03035a1b89b2b14c"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260908T033223Z.json","sha256":"c8e62c5468a96766004777d34d5a921db8e2f5e812e5ef4452d11f9cd1cce5bb"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260821T140013Z.json","sha256":"af74000f5895105a2984805bede5c7104476eeae1ead6e586d6d9873beed1753"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T021026Z.json","sha256":"69a7f78ebc86548352696fcd83ef365d953fbbf0e321b2ff54c7426480509cc1"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260909T194007Z.json","sha256":"122ff1f698eb4b664fdf1303df7580acd26360b2cc38a05434535cc6048d2a23"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260824T054150Z.json","sha256":"9b30524a2b1c88d02f6154588db3f9a3aa7e7b0bfcf5beb4844229aa2bff389b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260811T195257Z.json","sha256":"1b5445c3781b13fda8d0deff755b11816c2cd54bb33ec82b918714c10e8de3f0"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260813T150314Z.json","sha256":"1ce1ee3dbf660ec09edb7dffbc833e8616bfd53655152e26cfa11fb94a9cd43a"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T174843Z.json","sha256":"6963a016af5c8fb1accd46988448af09eb1b0b1e532f74b9dae0dcd93b2bbfc1"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260914T103009Z.json","sha256":"851c4ca7ddd5d89d9c3fd3ea68d6297e59aaa50c132bd751e13541d9baaf3658"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260818T235518Z.json","sha256":"f6dd4c714d1e92a5fbe5b28c14cb6be24d1844ba3dee10c0397ce3fa2308405d"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T133259Z.json","sha256":"7f3d0a9d6c5ddb813f013c090b2186ef7bda905185211b8d0307df1a3ff214eb"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260916T023018Z.json","sha256":"28dcd4ad5cfcd760573eccc6019e448965424af4b092393f4d1fd1fb9c1989d8"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T013234Z.json","sha256":"7a76a7724cec777bbf5f302c4c73dad5cf788d3b18d8be5ec4d208901e9db16b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260828T155555Z.json","sha256":"01218ef9b1f78f3ed1b85e8d076783a893424945ec6f32968fa51803790718b9"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260909T063725Z.json","sha256":"4edd32734e89e9933be64146718ffcd958377fe4a1f98678211d38eae417b881"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260817T055309Z.json","sha256":"091abc987e3849e15c0fc15c0da6a0c89247d0f71633f6caf78057fe6b55e8e2"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260828T024020Z.json","sha256":"7c9551c0414a49045e060d729a7dfd3ba429b278dcb808fa18c11e25232423f2"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260819T215743Z.json","sha256":"bb5e20a5df131464f433aae9e3cec0518aa7f3406b1579f6ed199d5fbe67d031"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T185633Z.json","sha256":"410190ddfd00ef14f147e6776a7b0e90be1907c2cb7745e0664042d36a0b9db6"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T110112Z.json","sha256":"28ee5b38662aee78f267156c9a998b7ceda4c28ffaf709fc0f453d4a662fe2eb"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T193324Z.json","sha256":"ed7ad8328e23bd9c18033fe8b244c2598f90f3538e5481e1faf9a88421f30c22"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260816T075403Z.json","sha256":"da860be9fad528f88e30e58100b9fbc51307de2fdf1d03d130cf79e9a13ca08b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260829T173717Z.json","sha256":"810047d250a3b85f544f1f08aeecc89da22df1461587e719ee38b54264809301"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260901T103753Z.json","sha256":"6b053a00b1d9ebef3be04063bb609fc4a14cc3c64e5d2bdd53f2700962cf1afc"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260827T203624Z.json","sha256":"48399c3c5cdb074bd33b648afe0cca45bdc50be0764e94e422432739786c12d4"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260812T181406Z.json","sha256":"319c961a483a8b3fd746fc980d1c54f64acd0a956e80e90bb8e7df39d8efc1e7"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260817T003018Z.json","sha256":"a1b5786d4f4983e298fad6bc7e0e62b1f7cba71c758ecc3321c1ed0b35a1d31c"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260830T203628Z.json","sha256":"6e22767c5335eed0ad35f3e478666681aab3aa108aa4626893fd1ef09ef8592e"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260902T134020Z.json","sha256":"859fd36372728e6a4daecfe228ad6452cc5551851a51796b4b00587c4a6768ff"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260816T035805Z.json","sha256":"bd952868dc0b024d68ed93010534686065b80861140a17212bc5cceb9f4669c9"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260828T143617Z.json","sha256":"512a0363c465f5f46297fc289f4611c285909e8bda6145293887004852c6c77a"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260819T143015Z.json","sha256":"f972a575f38522a03e2afc9d30bc8877152ec5774e6918ba83f16242ca17faea"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260815T111713Z.json","sha256":"f673cf505bbfb37750067290ffea64ede10643ec4a65b6e83dff94be16980995"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260830T063610Z.json","sha256":"ba1a5cf555b65d81ae4dc60a79d9524bb56980e6f7977304a03d29f1c6f2f6fe"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260810T070246Z.json","sha256":"08e297d26021fb18b02854a679fc64f1e2d885064adb26faef61f77ce2dcf6cd"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260824T183626Z.json","sha256":"cbd7ad301a31edce811643cd0e2c0329bea968177183afee9aedea84c6721f60"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260903T023609Z.json","sha256":"b361bb5f108a0174fec0845402cd7d5d01457266df7eac7a3d163c63bd8d4545"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm150/vm150-pve01-20260821T053611Z.json","sha256":"8f2cd19ed285514de90ee23e98c118f5f17ef6a7ea49c33b2ae2e0406d24b516"}] -GITEA_HISTORY_CANDIDATES_SCANNED=260 -GITEA_FULLRESTORE_HISTORY_HITS=[{"lines":[{"line":2,"text":"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1"},{"line":3,"text":"STATUS=OK"},{"line":44,"text":"CURRENT_SCHEMA_MATCHES=[{\"bytes\":4306,\"hits\":[{\"line\":25,\"text\":\"- `verify-foundation-restore.sh` — `cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186` — fresh PASS\"},{\"line\":59,\"text\":\"Fresh `verify-foundation-restore.sh` PASS is part of this acceptance.\"}],\"path\":\"docs/checkpoints/foundation-v1.md\",\"sha256\":\"75ce90e0e021989a6216888eb9f3f7ffe976ae1c136eb317c8d5e46ea64176f0\"},{\"bytes\":2138,\"hits\":[{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"}],\"path\":\"docs/checkpoints/private-staging-backup-restore.md\",\"sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5"},{"line":46,"text":"PRODUCER_CANDIDATES=[{\"path\":\"scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\",\"structural\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":83,\"text\":\" state.get(\\\"schema\\\")==\\\"homelab-cloud-quorum-payload-v1\\\"\"},{\"line\":97,\"text\":\" and bounded.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\"\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":108,\"text\":\" and full.get(\\\"source_vmid\\\")==211\"},{\"line\":109,\"text\":\" and full.get(\\\"test_vmid\\\")==9211\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_prov"},{"line":48,"text":"VERIFIER_CANDIDATES=[{\"bytes\":5019,\"hits\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_proven\\\") is True\"}],\"path\":\"scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\"}]"},{"line":52,"text":"HISTORICAL_SCHEMA_FILES=[{\"blob_sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\",\"commit\":\"9c1405588883f2e5ecd0c285d2b1ac561b045ee8\",\"path\":\"docs/checkpoints/private-staging-backup-restore.md\",\"structural\":[{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"}],\"subject\":\"docs: seal Newfi private staging backup restore gate\"},{\"blob_sha256\":\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\",\"commit\":\"beb054ee374142a9b65c28b0ac985156cfac5da8\",\"path\":\"docs/operations/backup-restore.md\",\"structural\":[{\"line\":13,\"text\":\"- Full isolated restore evidence: `/va"}],"path":"runtime/history/NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1.txt","sha256":"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764"},{"lines":[{"line":2,"text":"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76"},{"line":3,"text":"STATUS=OK"},{"line":30,"text":"NEWFI76_BEGIN"},{"line":31,"text":"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76"},{"line":36,"text":"NEWFI76_GIT={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"exact\":true,\"head\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"remote_head\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\"}"},{"line":37,"text":"NEWFI76_GIT_BLOB={\"bytes\":363,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"}"},{"line":38,"text":"NEWFI76_GIT_BLOB={\"bytes\":5213,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"Service/PortalData.php\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"}"},{"line":39,"text":"NEWFI76_GIT_BLOB={\"bytes\":11021,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"_data/templates.xml\",\"sha256\":\"29c1dadd480f597f612a41d10081f39097ad90e12c480eec244b671f49074d28\",\"state\":\"OK\"}"},{"line":40,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":41,"text":"NEWFI76_GIT_BLOB={\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":42,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":43,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":44,"text":"NEWFI76_GIT_BLOB={\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":45,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":46,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":47,"text":"NEWFI76_GIT_BLOB={\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":48,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":49,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":50,"text":"NEWFI76_GIT_BLOB={\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":51,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":52,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":53,"text":"NEWFI76_GIT_BLOB={\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":54,"text":"NEWFI76_GIT_BLOB={\"bytes\":1362,\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rel\":\"_data/templates.xml\",\"sha256\":\"f9cb47d48418a9eae3e5fc8f9dd2830e0499f62f1b82d574362186e7f78a7eb2\",\"state\":\"OK\"}"},{"line":55,"text":"NEWFI76_CLUSTER={\"selected\":{\"210\":{\"name\":\"newfi-prod\",\"node\":\"pve01\",\"status\":\"running\",\"type\":\"qemu\",\"vmid\":210},\"211\":{\"name\":\"newfi-staging\",\"node\":\"pve03\",\"status\":\"running\",\"type\":\"qemu\",\"vmid\":211}},\"state\":\"OK\"}"},{"line":56,"text":"NEWFI76_PRODUCTION_QGA={\"state\":\"COMPLETE\"}"},{"line":57,"text":"NEWFI76_PRODUCTION_ROOT={\"active_candidate\":false,\"cmd_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"config_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"git_matches\":[],\"matches_current\":false,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"Service/PortalData.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"_data/templates.xml\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}},\"rebuild_help\":{\"state\":\"NO_CMD\"},\"root\":\"/var/www/forums/newfi\",\"templates_xml_parse\":\"NOT_AVAILABLE\",\"xf_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}}"},{"line":58,"text":"NEWFI76_PRODUCTION_ROOT={\"active_candidate\":true,\"cmd_php\":{\"bytes\":336,\"mode\":\"0644\",\"sha256\":\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\",\"state\":\"OK\"},\"config_php\":{\"bytes\":310,\"mode\":\"0640\",\"state\":\"OK\"},\"git_matches\":[{\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\"}],\"matches_current\":true,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"bytes\":363,\"mode\":\"0644\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"},\"Service/PortalData.php\":{\"bytes\":5213,\"mode\":\"0644\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"},\"_data/templates.xml\":{\"bytes\":11021,\"mode\":\"0644\",\"s"},{"line":59,"text":"NEWFI76_PRODUCTION_ACTIVE_COUNT=1"},{"line":60,"text":"NEWFI76_STAGING_QGA={\"state\":\"COMPLETE\"}"},{"line":61,"text":"NEWFI76_STAGING_ROOT={\"active_candidate\":false,\"cmd_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"config_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"git_matches\":[],\"matches_current\":false,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"Service/PortalData.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"_data/templates.xml\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}},\"rebuild_help\":{\"state\":\"NO_CMD\"},\"root\":\"/var/www/forums/newfi\",\"templates_xml_parse\":\"NOT_AVAILABLE\",\"xf_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}}"},{"line":62,"text":"NEWFI76_STAGING_ROOT={\"active_candidate\":true,\"cmd_php\":{\"bytes\":336,\"mode\":\"0644\",\"sha256\":\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\",\"state\":\"OK\"},\"config_php\":{\"bytes\":310,\"mode\":\"0640\",\"state\":\"OK\"},\"git_matches\":[{\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\"}],\"matches_current\":true,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"bytes\":363,\"mode\":\"0644\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"},\"Service/PortalData.php\":{\"bytes\":5213,\"mode\":\"0644\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"},\"_data/templates.xml\":{\"bytes\":11021,\"mode\":\"0644\",\"sha2"},{"line":63,"text":"NEWFI76_STAGING_ACTIVE_COUNT=1"},{"line":64,"text":"NEWFI76_GAPS=[]"},{"line":65,"text":"NEWFI76_MUTATION_SCOPE=NONE_READ_ONLY"},{"line":66,"text":"NEWFI76_DECISION=PORTAL_ROOT_IDENTITY_PROVEN"},{"line":67,"text":"NEWFI76_COLLECTION_COMPLETE=true"},{"line":68,"text":"NEWFI76_END"}],"path":"runtime/history/NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76.txt","sha256":"d69446b6a16aeec4daa07c4be4e8ccaa334dda78bee3581eac831c4718553eb2"}] -NON_VERIFIER_PRODUCER_HITS=[{"bytes":4575,"lines":[{"line":23,"text":" if obj.get(\"schema\") != \"homelab-cloud-quorum-payload-v1\": return False"},{"line":51,"text":" e.get(\"schema\")==\"homelab-vm-restore-validation-v1\" and e.get(\"logical_id\")==logical and"},{"line":58,"text":" e.get(\"full_restore_proven\") is False and e.get(\"result\")==\"OK\""},{"line":78,"text":" \"schema\":\"homelab-boot-drill-state-export-v1\","},{"line":92,"text":" print(json.dumps(out,separators=(\",\",\":\"),sort_keys=True))"}],"path":"/usr/local/sbin/homelab-rotating-boot-drill-state-export","sha256":"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc"},{"bytes":4575,"lines":[{"line":23,"text":" if obj.get(\"schema\") != \"homelab-cloud-quorum-payload-v1\": return False"},{"line":51,"text":" e.get(\"schema\")==\"homelab-vm-restore-validation-v1\" and e.get(\"logical_id\")==logical and"},{"line":58,"text":" e.get(\"full_restore_proven\") is False and e.get(\"result\")==\"OK\""},{"line":78,"text":" \"schema\":\"homelab-boot-drill-state-export-v1\","},{"line":92,"text":" print(json.dumps(out,separators=(\",\",\":\"),sort_keys=True))"}],"path":"/usr/local/libexec/homelab-rotating-boot-drill-state-export","sha256":"59904778208ae592a47ba28bfd54cebbf22718e4bb6c968481da5671149289dc"},{"bytes":17702,"lines":[{"line":21,"text":"active_backup_restore(){ local rc; if pgrep -af '(^|/)(vzdump|qmrestore|pctrestore|vma|zstd|rclone)([[:space:]]|$)'; then return 0; else rc=$?; [[ \"$rc\" == 1 ]] && return 0; die \"PGREP_FAILED_$rc\" 69; fi; }"},{"line":85,"text":" jq -e --arg l \"vm${vmid}\" --arg g \"$gen\" --arg s \"$state\" --arg sha \"$sha\" '.schema==\"homelab-vm-restore-validation-v1\" and .logical_id==$l and .generation==$g and .transport_state==\"SEALED\" and .transport_state_file==$s and .restore_source==\"Cloud A\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\"OK\"' \"$f\" >/dev/null"},{"line":118,"text":" jq -e '.schema==\"homelab-cloud-quorum-payload-v1\" and .status==\"SEALED\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\"OK\"' \"$state\" >/dev/null || die \"RESTORE_REQUIRES_STRICT_SEALED_$vmid\" 65"},{"line":148,"text":" jq -n --arg logical \"$logical\" --arg generation \"$gen\" --argjson vmid \"$vmid\" --arg vm_type \"$VM_TYPE\" --arg state \"$state\" --arg sha \"$expected_sha\" --arg config_sha \"$config_sha\" --arg level \"$level\" --argjson member_count \"$member_count\" --arg at \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\" '{schema:\"homelab-vm-restore-validation-v1\",logical_id:$logical,generation:$generation,vmid:$vmid,vm_type:$vm_type,transport_state:\"SEALED\",transport_state_file:$state,restore_source:\"Cloud A\",parts_manifest_verified:true,payload_sha256:$sha,payload_sha256_verified:true,payload_decompression_verified:true,proxmox_config_extract_verified:true,proxmox_config_sha256:$config_sha,lxc_member_count:$member_count,archiv"}],"path":"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker","sha256":"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1"},{"bytes":5271,"lines":[{"line":49,"text":" if ! jq -e '.schema==\"homelab-cloud-quorum-payload-v1\" and .status==\"SEALED\" and .cloud_quorum==2 and .cloud_a_verified==true and .cloud_b_verified==true and .part_hashes_verified==true and .seal_written==true and .cloud_a_seal_verified==true and .cloud_b_seal_verified==true and .local_payload_present==false and .local_cleanup==\"OK\"' \"$latest\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\nVMID=%s\\nDECISION=BACKUP_UNVERIFIED\\nREASON=LATEST_STATE_NOT_STRICT_SEALED\\nSTATE_FILE=%s\\n' \"$vmid\" \"$latest\"; return 0; fi"},{"line":52,"text":" if ! jq -e --arg l \"vm${vmid}\" --arg g \"$generation\" --arg s \"$latest\" --arg sha \"$sha\" '.schema==\"homelab-vm-restore-validation-v1\" and .logical_id==$l and .generation==$g and .transport_state==\"SEALED\" and .transport_state_file==$s and .restore_source==\"Cloud A\" and .parts_manifest_verified==true and .payload_sha256==$sha and .payload_sha256_verified==true and .payload_decompression_verified==true and .proxmox_config_extract_verified==true and .archive_recovery_readback_verified==true and .bounded_staging==true and .full_local_payload_written==false and .full_restore_proven==false and .result==\"OK\"' \"$restore\" >/dev/null; then printf 'FRESHNESS_STATUS=OK\\nVMID=%s\\nDECISION=BACKUP_UNVERIF"}],"path":"/usr/local/libexec/homelab-vm-cloud-quorum-freshness-probe","sha256":"bd6257397c6ea910df2ea0dd57252b33bccd0bbd965175840486dfe5e079bf96"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260903T034236Z.json","sha256":"f81ed0fff5c3bf1b18ac85876acf095089db6e23fea67c25e7b4591c6f6426e6"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260825T024055Z.json","sha256":"93d75776422648f26f4427026f862e8d9d534762a8225c6ee96267af8861e8d6"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260812T175702Z.json","sha256":"c131805a885df07e2ab620ecac440ee09dedd7573ec209804962d99e4e6a9b78"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260814T120018Z.json","sha256":"e5cbacacf6d045c4089e4593ec25b0bd0ac646fbc6b880218835227b75d7103e"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T215206Z.json","sha256":"19f80b27af8cecd051468de88ad3eaf978f531edf7ee3310cb4f5e3e98743cfe"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260910T093532Z.json","sha256":"01629f57f58a84858a2addd3b39c3f2702f11dcc3c235ff0b811eb68f7763c99"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260829T055230Z.json","sha256":"54c55120a65a679d79191560cfa4ce36d06024fd8aa0d255b5fcb7603fa47e3d"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260823T074138Z.json","sha256":"4432a1ec79c6c225312f6a848324f8fcbe811fd6b5447843630d8c3cc897594a"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260915T003017Z.json","sha256":"23edabc2ff232cc4a63c1925b7ca7af47a28957cd4ce2712c049c0a1eb9e1151"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T104801Z.json","sha256":"3ac11c6db6ecbf018517a3797f32a100289f5104e43500243d2a6bfae9096e13"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260831T234523Z.json","sha256":"42e2514cf1a7b289e58795ae05823e1d90bff25acfc9fd1f014ac0974724c63b"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260904T064613Z.json","sha256":"f7d3d86b8fc4dc7ead6a8b8c2259625bb65c02d046a89042e84c21934d6732d5"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T223254Z.json","sha256":"d7f2dd19464e53087398fcfe6cbf4c335cbbcba25e00546a239a9f14bfab82b3"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260826T234419Z.json","sha256":"0d3f575de4bc6cadf9ff949bf3344a5a6578c982fcdc7265ca0f2c1a7177b9eb"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260905T093438Z.json","sha256":"4de0349f56d7f8643a2e9e4147a0fae67843412f763d2cfdf645678c2dabbb25"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260913T203019Z.json","sha256":"dcc89a747399b09bee86ba9d5bcdea62545e267f02d9a2fe78b13c045109ea94"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260830T075421Z.json","sha256":"46080ef31b42050cff03ec9be2f6254e52e8d21ee637c7d5f3876890c78ae253"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260810T065016Z.json","sha256":"bbc5b01f6a5fb6abb7ecaa4f7e4306e8eea7c1bc228bcf91f7bbc7fb7e0df45f"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T023301Z.json","sha256":"9a27a199d065fca0cb5d2b720889b32bd73ab5d26cf68e32041ceacb71c077b7"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260912T173439Z.json","sha256":"9dd611fdc9399fe1b9ecd7672b475e919b85f9cc9c656b4e8f827f6136cdddf2"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260906T113503Z.json","sha256":"2649baadc3eaab8f912ef768ff9b6e9f5741ce4286bd501364012c8a8e3eb7ca"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260901T133543Z.json","sha256":"e8450eeec2735f8cb285bbff4a4e03bccd27940747e0d4d6aa403cea055158a8"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260902T145801Z.json","sha256":"d411236d44ff6a0f1bc4712a8431c7c95fe87a7b899d2e95ab7bff6ccaa14723"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260907T144115Z.json","sha256":"ee4dc8949ff9257752075c281aa8fd297912aa283da1ad870381ad780f5d83bd"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T003332Z.json","sha256":"3950b3ae2f02c96aebe200593e3cdef5a1444c59ee65daba251a7651b1ccf79c"},{"bytes":1021,"lines":[{"line":2,"text":" \"schema\": \"homelab-vm-restore-validation-v1\","},{"line":21,"text":" \"full_restore_proven\": false,"}],"path":"/var/lib/homelab-backup/vm-restore-validation/vm171/vm171-pve01-20260911T133338Z.json","sha256":"52b9a34d69ca682bcac313a2b3d0014a0d45f5acf748f0219ff493e5fdec6e56"}] -SUCCESSFUL_HISTORY_PROVENANCE=[{"lines":[{"line":2,"text":"COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1"},{"line":3,"text":"STATUS=OK"},{"line":44,"text":"CURRENT_SCHEMA_MATCHES=[{\"bytes\":4306,\"hits\":[{\"line\":25,\"text\":\"- `verify-foundation-restore.sh` — `cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186` — fresh PASS\"},{\"line\":59,\"text\":\"Fresh `verify-foundation-restore.sh` PASS is part of this acceptance.\"}],\"path\":\"docs/checkpoints/foundation-v1.md\",\"sha256\":\"75ce90e0e021989a6216888eb9f3f7ffe976ae1c136eb317c8d5e46ea64176f0\"},{\"bytes\":2138,\"hits\":[{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"}],\"path\":\"docs/checkpoints/private-staging-backup-restore.md\",\"sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5"},{"line":46,"text":"PRODUCER_CANDIDATES=[{\"path\":\"scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\",\"structural\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":83,\"text\":\" state.get(\\\"schema\\\")==\\\"homelab-cloud-quorum-payload-v1\\\"\"},{\"line\":97,\"text\":\" and bounded.get(\\\"schema\\\")==\\\"homelab-vm-restore-validation-v1\\\"\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":108,\"text\":\" and full.get(\\\"source_vmid\\\")==211\"},{\"line\":109,\"text\":\" and full.get(\\\"test_vmid\\\")==9211\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_prov"},{"line":48,"text":"VERIFIER_CANDIDATES=[{\"bytes\":5019,\"hits\":[{\"line\":12,\"text\":\"FULL=/var/lib/homelab-backup/vm-restore-validation/vm211/${GEN}-newfi-full.json\"},{\"line\":105,\"text\":\" and full.get(\\\"schema\\\")==\\\"newfi-foundation-full-restore-v1\\\"\"},{\"line\":115,\"text\":\" and full.get(\\\"full_restore_proven\\\") is True\"}],\"path\":\"scripts/verify-foundation-restore.sh\",\"sha256\":\"cc8b821ffd64c8b2d780eb6efaf96f3724230c2bfe50c7db08c4162f79dc2186\"}]"},{"line":52,"text":"HISTORICAL_SCHEMA_FILES=[{\"blob_sha256\":\"d8692f662ec16017b4f49c60aa3add6a14c8fab822ab0a9d2272eb20fb9c5e37\",\"commit\":\"9c1405588883f2e5ecd0c285d2b1ac561b045ee8\",\"path\":\"docs/checkpoints/private-staging-backup-restore.md\",\"structural\":[{\"line\":11,\"text\":\"Full isolated restore evidence: `/var/lib/homelab-backup/vm-restore-validation/vm211/vm211-pve03-20260906T213759Z-newfi-full.json`\"}],\"subject\":\"docs: seal Newfi private staging backup restore gate\"},{\"blob_sha256\":\"0d0bb33f688f2a44271eaed49b63560619a2442104db886d9c21ec87758f105f\",\"commit\":\"beb054ee374142a9b65c28b0ac985156cfac5da8\",\"path\":\"docs/operations/backup-restore.md\",\"structural\":[{\"line\":13,\"text\":\"- Full isolated restore evidence: `/va"}],"path":"runtime/history/NEWFI-260921-NEWFDOM-DR221-FULLRESTORE-PRODUCER-DISCOVERY400R1.txt","sha256":"ab7e08cf1e9dd7c5e9b2193cf364f2ac8b04301f18eaf775cdb9e4d5e732c764"},{"lines":[{"line":2,"text":"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76"},{"line":3,"text":"STATUS=OK"},{"line":30,"text":"NEWFI76_BEGIN"},{"line":31,"text":"COMMAND_ID=NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76"},{"line":36,"text":"NEWFI76_GIT={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"exact\":true,\"head\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"remote_head\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\"}"},{"line":37,"text":"NEWFI76_GIT_BLOB={\"bytes\":363,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"}"},{"line":38,"text":"NEWFI76_GIT_BLOB={\"bytes\":5213,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"Service/PortalData.php\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"}"},{"line":39,"text":"NEWFI76_GIT_BLOB={\"bytes\":11021,\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\",\"rel\":\"_data/templates.xml\",\"sha256\":\"29c1dadd480f597f612a41d10081f39097ad90e12c480eec244b671f49074d28\",\"state\":\"OK\"}"},{"line":40,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":41,"text":"NEWFI76_GIT_BLOB={\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":42,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"label\":\"STYLE199B\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":43,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":44,"text":"NEWFI76_GIT_BLOB={\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":45,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"4ade504e649ce35d05322a6b69d758a1ef1803b5\",\"label\":\"BRAND198\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":46,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":47,"text":"NEWFI76_GIT_BLOB={\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":48,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"9f7e0ca285d8ddfdd97e4539daaa81695272b705\",\"label\":\"PROD195\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":49,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":50,"text":"NEWFI76_GIT_BLOB={\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":51,"text":"NEWFI76_GIT_BLOB={\"bytes\":1461,\"commit\":\"ca07bfc20953585887f7cc2f1d443cf8313912c8\",\"label\":\"PortalNav\",\"rel\":\"_data/templates.xml\",\"sha256\":\"c29c04f8b937284e821c87957653e87c2f6ac014fac30648a0f6b18e84392adf\",\"state\":\"OK\"}"},{"line":52,"text":"NEWFI76_GIT_BLOB={\"bytes\":247,\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rel\":\"Pub/Controller/Portal.php\",\"sha256\":\"53909e753ea5a011550fd280ad1c342a74ca9949be092dfbd95244243cae92f3\",\"state\":\"OK\"}"},{"line":53,"text":"NEWFI76_GIT_BLOB={\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rc\":128,\"rel\":\"Service/PortalData.php\",\"state\":\"ABSENT\"}"},{"line":54,"text":"NEWFI76_GIT_BLOB={\"bytes\":1362,\"commit\":\"82dd2066df377ba9d904f68f90898e009413eec9\",\"label\":\"PortalInitial\",\"rel\":\"_data/templates.xml\",\"sha256\":\"f9cb47d48418a9eae3e5fc8f9dd2830e0499f62f1b82d574362186e7f78a7eb2\",\"state\":\"OK\"}"},{"line":55,"text":"NEWFI76_CLUSTER={\"selected\":{\"210\":{\"name\":\"newfi-prod\",\"node\":\"pve01\",\"status\":\"running\",\"type\":\"qemu\",\"vmid\":210},\"211\":{\"name\":\"newfi-staging\",\"node\":\"pve03\",\"status\":\"running\",\"type\":\"qemu\",\"vmid\":211}},\"state\":\"OK\"}"},{"line":56,"text":"NEWFI76_PRODUCTION_QGA={\"state\":\"COMPLETE\"}"},{"line":57,"text":"NEWFI76_PRODUCTION_ROOT={\"active_candidate\":false,\"cmd_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"config_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"git_matches\":[],\"matches_current\":false,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"Service/PortalData.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"_data/templates.xml\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}},\"rebuild_help\":{\"state\":\"NO_CMD\"},\"root\":\"/var/www/forums/newfi\",\"templates_xml_parse\":\"NOT_AVAILABLE\",\"xf_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}}"},{"line":58,"text":"NEWFI76_PRODUCTION_ROOT={\"active_candidate\":true,\"cmd_php\":{\"bytes\":336,\"mode\":\"0644\",\"sha256\":\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\",\"state\":\"OK\"},\"config_php\":{\"bytes\":310,\"mode\":\"0640\",\"state\":\"OK\"},\"git_matches\":[{\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\"}],\"matches_current\":true,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"bytes\":363,\"mode\":\"0644\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"},\"Service/PortalData.php\":{\"bytes\":5213,\"mode\":\"0644\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"},\"_data/templates.xml\":{\"bytes\":11021,\"mode\":\"0644\",\"s"},{"line":59,"text":"NEWFI76_PRODUCTION_ACTIVE_COUNT=1"},{"line":60,"text":"NEWFI76_STAGING_QGA={\"state\":\"COMPLETE\"}"},{"line":61,"text":"NEWFI76_STAGING_ROOT={\"active_candidate\":false,\"cmd_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"config_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"git_matches\":[],\"matches_current\":false,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"Service/PortalData.php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"},\"_data/templates.xml\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}},\"rebuild_help\":{\"state\":\"NO_CMD\"},\"root\":\"/var/www/forums/newfi\",\"templates_xml_parse\":\"NOT_AVAILABLE\",\"xf_php\":{\"error\":\"FileNotFoundError\",\"state\":\"MISSING\"}}"},{"line":62,"text":"NEWFI76_STAGING_ROOT={\"active_candidate\":true,\"cmd_php\":{\"bytes\":336,\"mode\":\"0644\",\"sha256\":\"bfb376075435890c11a1e8bc88357d51c60df4b2ac69efda52357ce707ddf52b\",\"state\":\"OK\"},\"config_php\":{\"bytes\":310,\"mode\":\"0640\",\"state\":\"OK\"},\"git_matches\":[{\"commit\":\"a1efc08a15ba91971c2297d886b25ca2097e6935\",\"label\":\"Portal200\"}],\"matches_current\":true,\"portal_files\":{\"Pub/Controller/Portal.php\":{\"bytes\":363,\"mode\":\"0644\",\"sha256\":\"619d489f7cc3b461479c702fa8825097ae22d3c6cfeb911e9f14ea1de9c36d6d\",\"state\":\"OK\"},\"Service/PortalData.php\":{\"bytes\":5213,\"mode\":\"0644\",\"sha256\":\"4da03f26294ab6d163a1a746dee4bb6a82d7d4f39e66b24246bc0eb4c455dd1d\",\"state\":\"OK\"},\"_data/templates.xml\":{\"bytes\":11021,\"mode\":\"0644\",\"sha2"},{"line":63,"text":"NEWFI76_STAGING_ACTIVE_COUNT=1"},{"line":64,"text":"NEWFI76_GAPS=[]"},{"line":65,"text":"NEWFI76_MUTATION_SCOPE=NONE_READ_ONLY"},{"line":66,"text":"NEWFI76_DECISION=PORTAL_ROOT_IDENTITY_PROVEN"},{"line":67,"text":"NEWFI76_COLLECTION_COMPLETE=true"},{"line":68,"text":"NEWFI76_END"}],"path":"runtime/history/NEWFI-260909-NEWFDOM-PORTAL-ROOT-RCA76.txt","sha256":"d69446b6a16aeec4daa07c4be4e8ccaa334dda78bee3581eac831c4718553eb2"}] -FULLRESTORE_EVIDENCE_PROVEN=false -IMMUTABLE_PLAN_RECOVERY_RESOLVED=true -FULLRESTORE_PRODUCER_RECOVERY_RESOLVED=true -DECISION=PASS_TARGETED_READONLY_SOURCE_RECOVERY -NEXT_GATE=RUN_DR221_FINAL_CURRENT_PRODUCTION_BACKUP_RESTORE_ACCEPTANCE -ACTIVE_MAJOR_STAGE=DR221 -MAJOR_STAGES_REMAINING=1 -HELPERS_EXECUTED=0 -CLOUD_READS=GITEA_PUBLIC_ONLY -CLOUD_WRITES=0 -VM_MUTATIONS=0 -PRODUCTION_MUTATION=false -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260921-NEWFDOM-DR221-TARGETED-SOURCE-RECOVERY401R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +DR221_SERVERRECOVER408_BEGIN=true +COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408 +TARGET_COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-FINAL404 +IMMUTABLE_PLAN_CHECK=PASS +RECOVERY_SCOPE=SERVER_LOCAL_RUNNER_EVIDENCE_ONLY +TARGET_RUNNING_PROCESS_COUNT=0 +TARGET_RUNNING_PROCESS_IDS_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +FILES_SCANNED=1484 +MATCHED_FILE_COUNT=1 +MATCHED_EVIDENCE=[{"bytes":348,"relative_path":"raw/NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408-20260921T171011Z.log","root":"/var/lib/homelab-chat-run","safe_line_count":2,"safe_lines":["DR221_SERVERRECOVER408_BEGIN=true","COMMAND_ID=NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408"],"sha256":"490f64e4b922e5d685978061c69887de693ad1df08ad91dbc28c1be923e07ea0"}] +RECOVERED_COMPLETE_LOCAL_RESULT=false +DECISION_SERVERRECOVER408=HOLD_FINAL404_SERVER_EVIDENCE_INCOMPLETE +NEXT_GATE_SERVERRECOVER408=RECONCILE_ONLY_MATCHED_SERVER_EVIDENCE +BACKUP_EXECUTED_BY_SERVERRECOVER408=0 +CLOUD_ACTIONS_BY_SERVERRECOVER408=0 +VM_MUTATIONS_BY_SERVERRECOVER408=0 +PRODUCT_MUTATION_BY_SERVERRECOVER408=false +RAW_UNFILTERED_EVIDENCE_INCLUDED=false +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260921-NEWFDOM-DR221-SERVERRECOVER408","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +DR221_SERVERRECOVER408_END=true OUTPUT_END CHAT_OUTPUT_END