diff --git a/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json b/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json new file mode 100644 index 0000000..7e8f69b --- /dev/null +++ b/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "GITEA-IMMUTABLE-RULE-RECORD-098", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "policy-audit", + "started_at_utc": "2026-07-21T14:18:01Z", + "finished_at_utc": "2026-07-21T14:18:01Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "884622dc0d4f5863c8404ae2ce77517bf3cc43fbcd99956deff4a5053b84a332", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": false, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692", + "sanitized_output_sha256": "b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "=== GITEA_IMMUTABLE_HISTORY_POLICY ===\n{\"known_error_correction\":{\"command_id\":\"GITEA-IMMUTABLE-LOOKUP-095\",\"correction\":\"Use the public Gitea repository/history interface or the runner's established publication mechanism; never infer a local Gitea storage path.\",\"failure\":\"Assumed local bare repository path /opt/stacks/gitea/data/gitea/repositories, which did not exist on pve01.\"},\"mandatory_rules\":[\"For every executed homelab command, identify the exact COMMAND_ID.\",\"Read runtime/history/.json and runtime/history/.txt for that exact command.\",\"Verify the immutable publication commit SHA or commit-scoped URL before interpreting status, rc, checks, or output.\",\"Never use .well-known/homelab-runtime/latest.json as authoritative evidence.\",\"Never use assistant-runtime/runtime/latest.json as authoritative evidence.\",\"Mutable latest pointers may only be used as non-authoritative locators and may be stale or overwritten by parallel commands.\",\"Do not ask the operator to paste terminal output when immutable history is available in Gitea.\",\"After verifying the exact immutable result, analyze it and immediately issue the next command.\",\"Before issuing a command, load the error register and reject known failed exact repeats.\"],\"policy_id\":\"gitea-immutable-history-command-result\",\"recorded_for\":\"homelab assistant workflow\",\"schema_version\":1,\"source_of_truth\":{\"bootstrap_field\":\"runtime.result_confirmation\",\"bootstrap_url\":\"https://git.gram1.ru/.well-known/homelab-bootstrap.json\",\"latest_json_is_authoritative\":false,\"required_value\":\"immutable_history_by_command_id\"},\"status\":\"ENFORCED\"}\n=== PERSISTENCE ===\nPERSISTENCE_MECHANISM=homelab-chat-run immutable history\nIMMUTABLE_HISTORY_JSON=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json\nIMMUTABLE_HISTORY_TXT=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt\nPOLICY_SHA256=a943b28b8d5d4abb6f2fd8688b69c7e43bad5d2ef693a634c48b277027d86fe2\nGITEA_POLICY_RECORD=COMPLETE\n" +} diff --git a/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt b/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt new file mode 100644 index 0000000..ac394b6 --- /dev/null +++ b/runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt @@ -0,0 +1,32 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=GITEA-IMMUTABLE-RULE-RECORD-098 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=policy-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=884622dc0d4f5863c8404ae2ce77517bf3cc43fbcd99956deff4a5053b84a332 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692 +SANITIZED_OUTPUT_SHA256=b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692 +OUTPUT_BEGIN +=== GITEA_IMMUTABLE_HISTORY_POLICY === +{"known_error_correction":{"command_id":"GITEA-IMMUTABLE-LOOKUP-095","correction":"Use the public Gitea repository/history interface or the runner's established publication mechanism; never infer a local Gitea storage path.","failure":"Assumed local bare repository path /opt/stacks/gitea/data/gitea/repositories, which did not exist on pve01."},"mandatory_rules":["For every executed homelab command, identify the exact COMMAND_ID.","Read runtime/history/.json and runtime/history/.txt for that exact command.","Verify the immutable publication commit SHA or commit-scoped URL before interpreting status, rc, checks, or output.","Never use .well-known/homelab-runtime/latest.json as authoritative evidence.","Never use assistant-runtime/runtime/latest.json as authoritative evidence.","Mutable latest pointers may only be used as non-authoritative locators and may be stale or overwritten by parallel commands.","Do not ask the operator to paste terminal output when immutable history is available in Gitea.","After verifying the exact immutable result, analyze it and immediately issue the next command.","Before issuing a command, load the error register and reject known failed exact repeats."],"policy_id":"gitea-immutable-history-command-result","recorded_for":"homelab assistant workflow","schema_version":1,"source_of_truth":{"bootstrap_field":"runtime.result_confirmation","bootstrap_url":"https://git.gram1.ru/.well-known/homelab-bootstrap.json","latest_json_is_authoritative":false,"required_value":"immutable_history_by_command_id"},"status":"ENFORCED"} +=== PERSISTENCE === +PERSISTENCE_MECHANISM=homelab-chat-run immutable history +IMMUTABLE_HISTORY_JSON=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json +IMMUTABLE_HISTORY_TXT=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt +POLICY_SHA256=a943b28b8d5d4abb6f2fd8688b69c7e43bad5d2ef693a634c48b277027d86fe2 +GITEA_POLICY_RECORD=COMPLETE + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 8253670..7e8f69b 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1 +1,30 @@ -{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260721T141701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-07-21T14:17:01Z","finished_at_utc":"2026-07-21T14:17:02Z","reference_register_checked":true,"reference_sha256":"5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e","error_register_checked":true,"error_register_sha256":"08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "GITEA-IMMUTABLE-RULE-RECORD-098", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "policy-audit", + "started_at_utc": "2026-07-21T14:18:01Z", + "finished_at_utc": "2026-07-21T14:18:01Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "884622dc0d4f5863c8404ae2ce77517bf3cc43fbcd99956deff4a5053b84a332", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": false, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692", + "sanitized_output_sha256": "b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "=== GITEA_IMMUTABLE_HISTORY_POLICY ===\n{\"known_error_correction\":{\"command_id\":\"GITEA-IMMUTABLE-LOOKUP-095\",\"correction\":\"Use the public Gitea repository/history interface or the runner's established publication mechanism; never infer a local Gitea storage path.\",\"failure\":\"Assumed local bare repository path /opt/stacks/gitea/data/gitea/repositories, which did not exist on pve01.\"},\"mandatory_rules\":[\"For every executed homelab command, identify the exact COMMAND_ID.\",\"Read runtime/history/.json and runtime/history/.txt for that exact command.\",\"Verify the immutable publication commit SHA or commit-scoped URL before interpreting status, rc, checks, or output.\",\"Never use .well-known/homelab-runtime/latest.json as authoritative evidence.\",\"Never use assistant-runtime/runtime/latest.json as authoritative evidence.\",\"Mutable latest pointers may only be used as non-authoritative locators and may be stale or overwritten by parallel commands.\",\"Do not ask the operator to paste terminal output when immutable history is available in Gitea.\",\"After verifying the exact immutable result, analyze it and immediately issue the next command.\",\"Before issuing a command, load the error register and reject known failed exact repeats.\"],\"policy_id\":\"gitea-immutable-history-command-result\",\"recorded_for\":\"homelab assistant workflow\",\"schema_version\":1,\"source_of_truth\":{\"bootstrap_field\":\"runtime.result_confirmation\",\"bootstrap_url\":\"https://git.gram1.ru/.well-known/homelab-bootstrap.json\",\"latest_json_is_authoritative\":false,\"required_value\":\"immutable_history_by_command_id\"},\"status\":\"ENFORCED\"}\n=== PERSISTENCE ===\nPERSISTENCE_MECHANISM=homelab-chat-run immutable history\nIMMUTABLE_HISTORY_JSON=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json\nIMMUTABLE_HISTORY_TXT=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt\nPOLICY_SHA256=a943b28b8d5d4abb6f2fd8688b69c7e43bad5d2ef693a634c48b277027d86fe2\nGITEA_POLICY_RECORD=COMPLETE\n" +} diff --git a/runtime/latest.txt b/runtime/latest.txt index bcbb4a1..ac394b6 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,201 +1,32 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +COMMAND_ID=GITEA-IMMUTABLE-RULE-RECORD-098 STATUS=OK RC=0 HOST=pve01 -COMPONENT=cluster-context -REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e -ERROR_REGISTER_SHA[PRIVATE_IP]b8e38eaa1acec915352fb[PRIVATE_IP]caa7ff6cd9d1ec0da[PRIVATE_IP] +MODE=read-only +COMPONENT=policy-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=884622dc0d4f5863c8404ae2ce77517bf3cc43fbcd99956deff4a5053b84a332 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692 +SANITIZED_OUTPUT_SHA256=b50f7b9db47938cdf78dbc3adfa1457bd89f42bbff098270ad8e72d67e15c692 OUTPUT_BEGIN -GENERATED_AT_UTC=[PRIVATE_IP]T14:17:01Z -Cluster information -------------------- -Name: homelab -Config Version: 3 -Transport: knet -Secure auth: on +=== GITEA_IMMUTABLE_HISTORY_POLICY === +{"known_error_correction":{"command_id":"GITEA-IMMUTABLE-LOOKUP-095","correction":"Use the public Gitea repository/history interface or the runner's established publication mechanism; never infer a local Gitea storage path.","failure":"Assumed local bare repository path /opt/stacks/gitea/data/gitea/repositories, which did not exist on pve01."},"mandatory_rules":["For every executed homelab command, identify the exact COMMAND_ID.","Read runtime/history/.json and runtime/history/.txt for that exact command.","Verify the immutable publication commit SHA or commit-scoped URL before interpreting status, rc, checks, or output.","Never use .well-known/homelab-runtime/latest.json as authoritative evidence.","Never use assistant-runtime/runtime/latest.json as authoritative evidence.","Mutable latest pointers may only be used as non-authoritative locators and may be stale or overwritten by parallel commands.","Do not ask the operator to paste terminal output when immutable history is available in Gitea.","After verifying the exact immutable result, analyze it and immediately issue the next command.","Before issuing a command, load the error register and reject known failed exact repeats."],"policy_id":"gitea-immutable-history-command-result","recorded_for":"homelab assistant workflow","schema_version":1,"source_of_truth":{"bootstrap_field":"runtime.result_confirmation","bootstrap_url":"https://git.gram1.ru/.well-known/homelab-bootstrap.json","latest_json_is_authoritative":false,"required_value":"immutable_history_by_command_id"},"status":"ENFORCED"} +=== PERSISTENCE === +PERSISTENCE_MECHANISM=homelab-chat-run immutable history +IMMUTABLE_HISTORY_JSON=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.json +IMMUTABLE_HISTORY_TXT=runtime/history/GITEA-IMMUTABLE-RULE-RECORD-098.txt +POLICY_SHA256=a943b28b8d5d4abb6f2fd8688b69c7e43bad5d2ef693a634c48b277027d86fe2 +GITEA_POLICY_RECORD=COMPLETE -Quorum information ------------------- -Date: Tue Jul [PRIVATE_IP] 2026 -Quorum provider: corosync_votequorum -Nodes: 3 -Node ID: [PRIVATE_IP] -Ring ID: 1.9d -Quorate: Yes - -Votequorum information ----------------------- -Expected votes: 3 -Highest expected: 3 -Total votes: 3 -Quorum: 2 -Flags: Quorate - -Membership information ----------------------- - Nodeid Votes Name -[PRIVATE_IP] [PRIVATE_IP].11 (local) -[PRIVATE_IP] [PRIVATE_IP].13 -[PRIVATE_IP] [PRIVATE_IP].12 - -Membership information ----------------------- - Nodeid Votes Name - 1 1 pve01 (local) - 2 1 pve03 - 3 1 pve02 -[{"cpu":[PRIVATE_IP]721e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":452274,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":452272,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":452277,"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":452275,"vmid":113},{"cpu":[PRIVATE_IP]51914,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":452137,"vmid":130},{"cpu":[PRIVATE_IP]51795,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"nextcloud","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":452272,"vmid":150},{"cpu":[PRIVATE_IP]818524,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":452270,"vmid":160},{"cpu":[PRIVATE_IP]85286,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":452268,"vmid":170},{"cpu":[PRIVATE_IP]11615,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":452265,"vmid":171},{"cpu":[PRIVATE_IP]046311,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/180","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"cluster-admin","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":452267,"vmid":180},{"cpu":[PRIVATE_IP]875905,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":447500,"vmid":190},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]63387,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":452308},{"cgroup-mode":2,"cpu":[PRIVATE_IP]75339,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":452154},{"cgroup-mode":2,"cpu":[PRIVATE_IP]74361,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":452291},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"backup,vztmpl,import,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"backup,vztmpl,import,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"backup,vztmpl,import,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"}] -Name Type Status Total (KiB) Used (KiB) Available (KiB) % -local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 40.86% -local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 33.01% - UNIT LOAD ACTIVE SUB DESCRIPTION -● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state -● homelab-cluster-admin-pull.service loaded failed failed Pull cluster-admin observer health into pve01 -● homelab-vm160-remote-backup.service loaded failed failed VM160 full-image backup streamed from pve02 to pve03 - -Legend: LOAD → Reflects whether the unit definition was properly loaded. - ACTIVE → The high-level unit activation state, i.e. generalization of SUB. - SUB → The low-level unit activation state, values depend on unit type. - -3 loaded units listed. -NEXT LEFT LAST PASSED UNIT ACTIVATES -Tue [PRIVATE_IP] 17:17:07 MSK 5s Tue [PRIVATE_IP] 17:16:07 MSK 54s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service -Tue [PRIVATE_IP] 17:17:07 MSK 5s Tue [PRIVATE_IP] 17:16:07 MSK 54s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service -Tue [PRIVATE_IP] 17:17:33 MSK 31s Tue [PRIVATE_IP] 17:12:25 MSK 4min 36s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service -Tue [PRIVATE_IP] 17:17:46 MSK 44s Tue [PRIVATE_IP] 17:16:45 MSK 16s ago homelab-router-watchdog.timer homelab-router-watchdog.service -Tue [PRIVATE_IP] 17:18:15 MSK 1min 13s Tue [PRIVATE_IP] 17:16:07 MSK 54s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service -Tue [PRIVATE_IP] 17:19:30 MSK 2min 28s Tue [PRIVATE_IP] 17:04:30 MSK 12min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service -Tue [PRIVATE_IP] 17:19:47 MSK 2min 45s Tue [PRIVATE_IP] 17:14:47 MSK 2min 14s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service -Tue [PRIVATE_IP] 17:19:47 MSK 2min 45s Tue [PRIVATE_IP] 17:14:47 MSK 2min 14s ago netbird-peers-health.timer netbird-peers-health.service -Tue [PRIVATE_IP] 17:20:23 MSK 3min 21s Tue [PRIVATE_IP] 17:15:05 MSK 1min 56s ago homelab-health-metrics.timer homelab-health-metrics.service -Tue [PRIVATE_IP] 17:23:30 MSK 6min Tue [PRIVATE_IP] 17:13:30 MSK 3min 31s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service -Tue [PRIVATE_IP] 17:29:30 MSK 12min Tue [PRIVATE_IP] 17:14:30 MSK 2min 31s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service -Tue [PRIVATE_IP] 17:30:00 MSK 12min Tue [PRIVATE_IP] 17:15:05 MSK 1min 56s ago homelab-incident-journal.timer homelab-incident-journal.service -Tue [PRIVATE_IP] 17:30:00 MSK 12min Tue [PRIVATE_IP] 17:15:05 MSK 1min 56s ago homelab-safe-autoheal.timer homelab-safe-autoheal.service -Tue [PRIVATE_IP] 17:30:18 MSK 13min Tue [PRIVATE_IP] 17:16:25 MSK 36s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service -Tue [PRIVATE_IP] 17:31:00 MSK 13min Tue [PRIVATE_IP] 17:16:07 MSK 54s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service -Tue [PRIVATE_IP] 17:31:09 MSK 14min Tue [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service -Tue [PRIVATE_IP] 17:31:30 MSK 14min Tue [PRIVATE_IP] 17:16:30 MSK 31s ago homelab-disk-space-health.timer homelab-disk-space-health.service -Tue [PRIVATE_IP] 17:31:30 MSK 14min Tue [PRIVATE_IP] 17:16:30 MSK 31s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service -Tue [PRIVATE_IP] 17:32:23 MSK 15min Tue [PRIVATE_IP] 17:04:08 MSK 12min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service -Tue [PRIVATE_IP] 17:42:30 MSK 25min Tue [PRIVATE_IP] 11:42:30 MSK 5h 34min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service -Tue [PRIVATE_IP] 19:22:04 MSK 2h 5min Tue [PRIVATE_IP] 10:10:25 MSK 7h ago apt-daily.timer apt-daily.service -Wed [PRIVATE_IP] 00:00:00 MSK 6h Tue [PRIVATE_IP] 00:00:14 MSK 17h ago dpkg-db-backup.timer dpkg-db-backup.service -Wed [PRIVATE_IP] 00:01:28 MSK 6h Tue [PRIVATE_IP] 00:06:03 MSK 17h ago homelab-storage-capacity.timer homelab-storage-capacity.service -Wed [PRIVATE_IP] 00:06:04 MSK 6h Tue [PRIVATE_IP] 00:03:14 MSK 17h ago homelab-quality-gate.timer homelab-quality-gate.service -Wed [PRIVATE_IP] 00:08:06 MSK 6h Tue [PRIVATE_IP] 00:09:32 MSK 17h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service -Wed [PRIVATE_IP] 00:09:43 MSK 6h Tue [PRIVATE_IP] 00:09:32 MSK 17h ago homelab-backup-freshness.timer homelab-backup-freshness.service -Wed [PRIVATE_IP] 00:10:12 MSK 6h Tue [PRIVATE_IP] 00:16:14 MSK 17h ago homelab-docker-health.timer homelab-docker-health.service -Wed [PRIVATE_IP] 00:29:37 MSK 7h Tue [PRIVATE_IP] 00:31:25 MSK 16h ago logrotate.timer logrotate.service -Wed [PRIVATE_IP] 01:22:18 MSK 8h Tue [PRIVATE_IP] 02:10:30 MSK 15h ago pve-daily-update.timer pve-daily-update.service -Wed [PRIVATE_IP] 02:15:00 MSK 8h Tue [PRIVATE_IP] 02:15:05 MSK 15h ago homelab-vm-full-backup.timer homelab-vm-full-backup.service -Wed [PRIVATE_IP] 03:10:02 MSK 9h Tue [PRIVATE_IP] 03:13:14 MSK 14h ago homelab-emergency-backup.timer homelab-emergency-backup.service -Wed [PRIVATE_IP] 03:35:00 MSK 10h Tue [PRIVATE_IP] 03:35:14 MSK 13h ago filebrowser-backup.timer filebrowser-backup.service -Wed [PRIVATE_IP] 03:50:00 MSK 10h Tue [PRIVATE_IP] 03:50:09 MSK 13h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service -Wed [PRIVATE_IP] 03:55:02 MSK 10h Tue [PRIVATE_IP] 03:51:25 MSK 13h ago homelab-appbackup-dockge-stacks.timer homelab-appbackup-dockge-stacks.service -Wed [PRIVATE_IP] 04:10:00 MSK 10h Tue [PRIVATE_IP] 04:10:07 MSK 13h ago filebrowser-restore-validate.timer filebrowser-restore-validate.service -Wed [PRIVATE_IP] 04:17:29 MSK 11h Tue [PRIVATE_IP] 04:19:17 MSK 12h ago homelab-appbackup-npmplus-edge.timer homelab-appbackup-npmplus-edge.service -Wed [PRIVATE_IP] 04:26:54 MSK 11h Tue [PRIVATE_IP] 04:28:14 MSK 12h ago homelab-gitea-secondary-backup.timer homelab-gitea-secondary-backup.service -Wed [PRIVATE_IP] 04:38:04 MSK 11h Tue [PRIVATE_IP] 04:34:48 MSK 12h ago skladchik-reports-monitor-backup.timer skladchik-reports-monitor-backup.service -Wed [PRIVATE_IP] 04:39:28 MSK 11h Tue [PRIVATE_IP] 04:48:40 MSK 12h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service -Wed [PRIVATE_IP] 05:01:44 MSK 11h Tue [PRIVATE_IP] 04:57:14 MSK 12h ago homelab-appbackup-sqlite-batch.timer homelab-appbackup-sqlite-batch.service -Wed [PRIVATE_IP] 05:12:13 MSK 11h Tue [PRIVATE_IP] 02:10:30 MSK 15h ago man-db.timer man-db.service -Wed [PRIVATE_IP] 05:13:38 MSK 11h Tue [PRIVATE_IP] 04:55:35 MSK 12h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service -Wed [PRIVATE_IP] 05:23:56 MSK 12h Tue [PRIVATE_IP] 05:17:57 MSK 11h ago homelab-router-running-config-mail-cloud.timer homelab-router-running-config-mail-cloud.service -Wed [PRIVATE_IP] 05:27:13 MSK 12h Tue [PRIVATE_IP] 05:29:05 MSK 11h ago homelab-appbackup-postgres-batch.timer homelab-appbackup-postgres-batch.service -Wed [PRIVATE_IP] 05:47:19 MSK 12h Tue [PRIVATE_IP] 05:46:14 MSK 11h ago homelab-appbackup-mariadb-batch.timer homelab-appbackup-mariadb-batch.service -Wed [PRIVATE_IP] 06:01:19 MSK 12h Tue [PRIVATE_IP] 05:57:30 MSK 11h ago homelab-extended-appbackup.timer homelab-extended-appbackup.service -Wed [PRIVATE_IP] 06:27:43 MSK 13h Tue [PRIVATE_IP] 06:32:25 MSK 10h ago homelab-crypto-portfolio-backup.timer homelab-crypto-portfolio-backup.service -Wed [PRIVATE_IP] 06:38:51 MSK 13h Tue [PRIVATE_IP] 06:43:54 MSK 10h ago homelab-verified-backup-health.timer homelab-verified-backup-health.service -Wed [PRIVATE_IP] 06:39:22 MSK 13h Tue [PRIVATE_IP] 06:40:25 MSK 10h ago homelab-alertmanager-backup.timer homelab-alertmanager-backup.service -Wed [PRIVATE_IP] 06:44:16 MSK 13h Tue [PRIVATE_IP] 06:40:25 MSK 10h ago homelab-mail-cloud-critical-upload.timer homelab-mail-cloud-critical-upload.service -Wed [PRIVATE_IP] 06:47:00 MSK 13h Tue [PRIVATE_IP] 06:18:13 MSK 10h ago apt-daily-upgrade.timer apt-daily-upgrade.service -Wed [PRIVATE_IP] 06:52:06 MSK 13h Tue [PRIVATE_IP] 06:47:47 MSK 10h ago homelab-beszel-backup.timer homelab-beszel-backup.service -Wed [PRIVATE_IP] 06:58:58 MSK 13h Tue [PRIVATE_IP] 06:57:30 MSK 10h ago homelab-blackbox-exporter-backup.timer homelab-blackbox-exporter-backup.service -Wed [PRIVATE_IP] 07:02:27 MSK 13h Tue [PRIVATE_IP] 07:05:30 MSK 10h ago homelab-backup-healthcheck.timer homelab-backup-healthcheck.service -Wed [PRIVATE_IP] 07:07:14 MSK 13h Tue [PRIVATE_IP] 07:18:55 MSK 9h ago homelab-legacy-monitoring-backups.timer homelab-legacy-monitoring-backups.service -Wed [PRIVATE_IP] 07:16:17 MSK 13h Tue [PRIVATE_IP] 07:15:45 MSK 10h ago homelab-drift-check.timer homelab-drift-check.service -Wed [PRIVATE_IP] 07:35:06 MSK 14h Tue [PRIVATE_IP] 07:36:59 MSK 9h ago homelab-vm-backup-health.timer homelab-vm-backup-health.service -Wed [PRIVATE_IP] 07:36:00 MSK 14h Tue [PRIVATE_IP] 07:21:14 MSK 9h ago homelab-service-registry-check.timer homelab-service-registry-check.service -Wed [PRIVATE_IP] 07:38:21 MSK 14h Tue [PRIVATE_IP] 07:36:14 MSK 9h ago homelab-cluster-admin-incident-engine-backup.timer homelab-cluster-admin-incident-engine-backup.service -Wed [PRIVATE_IP] 07:41:49 MSK 14h Tue [PRIVATE_IP] 07:53:41 MSK 9h ago homelab-mail-cloud-nextcloud-vm-upload.timer homelab-mail-cloud-nextcloud-vm-upload.service -Wed [PRIVATE_IP] 07:47:14 MSK 14h Tue [PRIVATE_IP] 07:51:41 MSK 9h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service -Wed [PRIVATE_IP] 07:49:26 MSK 14h Tue [PRIVATE_IP] 07:56:14 MSK 9h ago homelab-runbook-generate.timer homelab-runbook-generate.service -Wed [PRIVATE_IP] 07:53:13 MSK 14h Tue [PRIVATE_IP] 07:51:14 MSK 9h ago homelab-alerting-health.timer homelab-alerting-health.service -Wed [PRIVATE_IP] 07:58:00 MSK 14h Tue [PRIVATE_IP] 08:09:34 MSK 9h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service -Wed [PRIVATE_IP] 08:03:06 MSK 14h Tue [PRIVATE_IP] 07:49:14 MSK 9h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service -Wed [PRIVATE_IP] 08:10:37 MSK 14h Tue [PRIVATE_IP] 08:07:25 MSK 9h ago homelab-backup-sla-health.timer homelab-backup-sla-health.service -Wed [PRIVATE_IP] 08:18:43 MSK 15h Tue [PRIVATE_IP] 08:01:14 MSK 9h ago homelab-overall-health.timer homelab-overall-health.service -Wed [PRIVATE_IP] 08:24:56 MSK 15h Tue [PRIVATE_IP] 08:29:14 MSK 8h ago homelab-capacity-risk.timer homelab-capacity-risk.service -Wed [PRIVATE_IP] 08:24:58 MSK 15h Tue [PRIVATE_IP] 08:17:02 MSK 8h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service -Wed [PRIVATE_IP] 08:28:27 MSK 15h Tue [PRIVATE_IP] 08:31:30 MSK 8h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service -Wed [PRIVATE_IP] 08:37:02 MSK 15h Tue [PRIVATE_IP] 08:30:07 MSK 8h ago homelab-vm-backup-policy.timer homelab-vm-backup-policy.service -Wed [PRIVATE_IP] 08:40:13 MSK 15h Tue [PRIVATE_IP] 08:50:14 MSK 8h ago homelab-backup-coverage-matrix.timer homelab-backup-coverage-matrix.service -Wed [PRIVATE_IP] 08:43:29 MSK 15h Tue [PRIVATE_IP] 08:54:07 MSK 8h ago homelab-golden-state-index.timer homelab-golden-state-index.service -Wed [PRIVATE_IP] 08:44:57 MSK 15h Tue [PRIVATE_IP] 08:35:41 MSK 8h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service -Wed [PRIVATE_IP] 08:47:11 MSK 15h Tue [PRIVATE_IP] 08:51:14 MSK 8h ago immich-media-offhost-sync.timer immich-media-offhost-sync.service -Wed [PRIVATE_IP] 08:53:01 MSK 15h Tue [PRIVATE_IP] 08:51:14 MSK 8h ago homelab-cluster-passport.timer homelab-cluster-passport.service -Wed [PRIVATE_IP] 08:53:36 MSK 15h Tue [PRIVATE_IP] 08:41:14 MSK 8h ago memos-backup.timer memos-backup.service -Wed [PRIVATE_IP] 09:11:44 MSK 15h Tue [PRIVATE_IP] 09:15:30 MSK 8h ago memos-offhost-sync.timer memos-offhost-sync.service -Wed [PRIVATE_IP] 10:10:47 MSK 16h Tue [PRIVATE_IP] 10:02:41 MSK 7h ago paperless-restore-dry-run.timer paperless-restore-dry-run.service -Wed [PRIVATE_IP] 10:15:00 MSK 16h Tue [PRIVATE_IP] 10:15:14 MSK 7h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service -Wed [PRIVATE_IP] 11:54:14 MSK 18h Tue [PRIVATE_IP] 11:54:14 MSK 5h 22min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service -Sun [PRIVATE_IP] 03:10:21 MSK 4 days Sun [PRIVATE_IP] 03:10:29 MSK 2 days ago e2scrub_all.timer e2scrub_all.service -Sun [PRIVATE_IP] 03:10:52 MSK 4 days Sun [PRIVATE_IP] 03:10:14 MSK 2 days ago xfs_scrub_all.timer xfs_scrub_all.service -Sun [PRIVATE_IP] 03:34:47 MSK 4 days Sun [PRIVATE_IP] 03:45:37 MSK 2 days ago homelab-auto-backup.timer homelab-auto-backup.service -Sun [PRIVATE_IP] 05:17:43 MSK 4 days Sun [PRIVATE_IP] 05:11:25 MSK 2 days ago skladchik-reports-monitor-backup-restore-check.timer skladchik-reports-monitor-backup-restore-check.service -Sun [PRIVATE_IP] 09:32:36 MSK 4 days Sun [PRIVATE_IP] 09:32:29 MSK 2 days ago homelab-mail-cloud-edge-vm-upload.timer homelab-mail-cloud-edge-vm-upload.service -Sun [PRIVATE_IP] 10:29:15 MSK 4 days Sun [PRIVATE_IP] 10:06:07 MSK 2 days ago homelab-vm-local-dumps-2cloud.timer homelab-vm-local-dumps-2cloud.service -Sun [PRIVATE_IP] 11:13:32 MSK 4 days Sun [PRIVATE_IP] 11:08:41 MSK 2 days ago homelab-vm-local-dumps-retention.timer homelab-vm-local-dumps-retention.service -Mon [PRIVATE_IP] 00:09:19 MSK 5 days Mon [PRIVATE_IP] 00:00:29 MSK 1 day 17h ago homelab-secret-sanity.timer homelab-secret-sanity.service -Mon [PRIVATE_IP] 01:39:15 MSK 5 days Mon [PRIVATE_IP] 00:51:14 MSK 1 day 16h ago fstrim.timer fstrim.service -Mon [PRIVATE_IP] 07:34:51 MSK 5 days Mon [PRIVATE_IP] 07:25:14 MSK 1 day 9h ago homelab-mail-cloud-restore-drill.timer homelab-mail-cloud-restore-drill.service -Thu [PRIVATE_IP] 06:00:00 MSK 2 months 24 days Wed [PRIVATE_IP] 06:00:00 MSK - homelab-vm-full-restore-drill.timer homelab-vm-full-restore-drill.service -- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service -- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service -- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service - -95 timers listed. -- Обрезанная, повреждённая или частично вставленная команда считается невыполненной; сначала проводится side-effect audit. -- Хвост parse-ошибки закрывается только после доказательства отсутствия изменений и временных артефактов. -- Proof: /var/lib/homelab-change-sets/operator-command-size-guard-v[PRIVATE_IP]T182653Z/report.txt - -## HOMELAB_ADMIN_CLI_CONTRACT_[PRIVATE_IP] -- Поддерживаемые команды: version, status, lint TASK_DIR, validate TASK_DIR, run TASK_DIR PHASE. -- Отдельная команда --help отсутствует. Неизвестный аргумент печатает usage и штатно возвращает RC=64. -- Нельзя трактовать RC=64 от --help как неисправность runner. -- Для проверки доступности runner использовать homelab-admin version; для структуры CLI использовать зафиксированную usage-строку. -- Proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v[PRIVATE_IP]T183338Z/report.txt - -AUTOMATIC_CLUSTER_CONTEXT_REFRESH_[PRIVATE_IP] -Collector: /usr/local/sbin/homelab-context-collect -Scheduler: hourly at minute 17 via /etc/cron.d/homelab-context-refresh -Destination: immutable Gitea runtime history with CONTEXT-AUTO UTC command IDs. - -AUTOMATIC_CLUSTER_CONTEXT_REFRESH_DIRECT_[PRIVATE_IP] -Publisher: /usr/local/sbin/homelab-context-refresh-direct -Schedule: hourly at minute 17. -Destination: immutable assistant-runtime history with CONTEXT-AUTO UTC IDs. -- Registered at: [PRIVATE_IP]T06:27:06Z - -AUTOREFRESH_INLINE_FAILURE_[PRIVATE_IP] -Attempts 048 and 049 did not appear in immutable history. -Rule: use validated local helper scripts and a simple scheduler entry; never embed the full collector in cron or nested SSH quoting. - -AUTOREFRESH_WRAPPER_PUBLICATION_FAILURE_[PRIVATE_IP] -Commands [PRIVATE_IP] did not reach immutable history through homelab-chat-run. -Resolution: hourly snapshots use direct scp plus homelab-runtime-receive publication. - -AUTOREFRESH_052_NOT_PUBLISHED_[PRIVATE_IP] -CONTEXT-AUTOREFRESH-ACTIVATE-052 did not appear in immutable history; direct publisher retry requires sanitization before transmission. - -IMMUTABLE_HISTORY_FALSE_NEGATIVE_[PRIVATE_IP] -BACKUP-AUDIT-CONTROLPLANE-054 was successfully published at commit 2b966acfe[PRIVATE_IP]d4a62bf[PRIVATE_IP]bdd1a073, but was incorrectly reported missing because a stale directory listing was treated as authoritative. -Rule: verify the exact COMMAND_ID result, wrapper publication status and commit SHA; never infer absence from a cached directory listing. - -BACKUP_UNSAFE_SOURCE_CAPTURE_071_PARSE_ERROR_[PRIVATE_IP] -BACKUP-UNSAFE-SOURCE-CAPTURE-071 failed before execution: shell syntax error near unexpected token (. -Resolution: avoid nested quote layers; parse targets first and pass file paths as simple SSH arguments. OUTPUT_END CHAT_OUTPUT_END