diff --git a/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.json b/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.json new file mode 100644 index 0000000..5018266 --- /dev/null +++ b/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "cluster-audit", + "started_at_utc": "2026-07-22T11:02:00Z", + "finished_at_utc": "2026-07-22T11:02:00Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e", + "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": "0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f", + "sanitized_output_sha256": "0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "validation=PASS\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nBOOTSTRAP_CHECK=OK\nERROR_REGISTER_LOADED=YES\nPREVIOUS_RESULT=VERIFIED\nPRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED\n=== EXISTING_RECEIVER ===\nREMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4\nREMOTE_RUNTIME_RECEIVER_LINES=273\n=== RECEIVER_CONTRACT_LINES ===\n8:PUBLIC_DIR=\"${HOST_DATA}/gitea/public/.well-known/homelab-runtime\"\n99: raise SystemExit(\"FORBIDDEN_PUBLIC_CONTENT\")\n108: \"$PUBLIC_DIR\" \\\n116:install \\\n123:install \\\n184:mkdir -p runtime/history\n186:cp \"$STAGE/latest.json\" runtime/latest.json\n187:cp \"$STAGE/latest.txt\" runtime/latest.txt\n188:cp \"$STAGE/latest.json\" \"runtime/history/${COMMAND_ID}.json\"\n189:cp \"$STAGE/latest.txt\" \"runtime/history/${COMMAND_ID}.txt\"\n190:cp \"$STAGE/README.md\" README.md\n192:git add \\\n196: \"runtime/history/${COMMAND_ID}.json\"\n198:git add \"runtime/history/${COMMAND_ID}.txt\"\n204: git commit \\\n210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime\n219:JSON_TMP=\"$(mktemp \"${PUBLIC_DIR}/.latest.json.XXXXXX\")\"\n220:TXT_TMP=\"$(mktemp \"${PUBLIC_DIR}/.latest.txt.XXXXXX\")\"\n221:INDEX_TMP=\"$(mktemp \"${PUBLIC_DIR}/.index.json.XXXXXX\")\"\n223:install -m 0644 \"$JSON_FILE\" \"$JSON_TMP\"\n224:install -m 0644 \"$TXT_FILE\" \"$TXT_TMP\"\n243: \"https://git.gram1.ru/.well-known/\"\n247: \"https://git.gram1.ru/.well-known/\"\n255:mv -f \"$JSON_TMP\" \"$PUBLIC_DIR/latest.json\"\n256:mv -f \"$TXT_TMP\" \"$PUBLIC_DIR/latest.txt\"\n257:mv -f \"$INDEX_TMP\" \"$PUBLIC_DIR/index.json\"\n261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json |\n272:echo 'STATIC_PUBLICATION=OK'\n273:echo 'RAW_BRANCH_PUBLICATION=OK'\n=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS ===\n/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z\n/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z\n/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z\n/usr/local/sbin/homelab-runtime-receive\n/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z\n/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z\n/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z\n/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z\n=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES ===\n.well-known\n.well-known/homelab-runtime\n=== REMOTE_STATIC_WELL_KNOWN_FILES ===\n.well-known/gitea-auth-check-014.txt\n.well-known/gitea-auth-check-017.txt\n.well-known/gitea-push-auth-stage-012.txt\n.well-known/gitea-real-push-canary.txt\n.well-known/homelab-bootstrap.json\n.well-known/homelab-bootstrap.json.bak.20260721T092825Z\n.well-known/homelab-bootstrap.json.bak.20260721T093110Z\n.well-known/homelab-context.json\n.well-known/homelab-context-manifest.json\n.well-known/homelab-context.txt\n.well-known/homelab-runtime/index.json\n.well-known/homelab-runtime/latest.json\n.well-known/homelab-runtime/latest.txt\n.well-known/runtime-receiver-preflight-020.txt\n.well-known/runtime-receiver-state-026.txt\n=== LOCAL_REFERENCE_PUBLIC_MIRROR ===\nLOCAL_PUBLIC_FILE_COUNT=26\nLOCAL_PUBLIC_BYTES=492590\n6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json\nLOCAL_PUBLIC=effective/access.json SIZE=7732\nLOCAL_PUBLIC=effective/applications.json SIZE=184\nLOCAL_PUBLIC=effective/backups.json SIZE=28817\nLOCAL_PUBLIC=effective/certificates.json SIZE=184\nLOCAL_PUBLIC=effective/change_management.json SIZE=189\nLOCAL_PUBLIC=effective/cluster.json SIZE=2904\nLOCAL_PUBLIC=effective/containers.json SIZE=1396\nLOCAL_PUBLIC=effective/contracts.json SIZE=181\nLOCAL_PUBLIC=effective/dependencies.json SIZE=184\nLOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189\nLOCAL_PUBLIC=effective/dns.json SIZE=368\nLOCAL_PUBLIC=effective/domains.json SIZE=19160\nLOCAL_PUBLIC=effective/external_services.json SIZE=22902\nLOCAL_PUBLIC=effective/guests.json SIZE=4075\nLOCAL_PUBLIC=effective/ingress.json SIZE=179\nLOCAL_PUBLIC=effective/monitoring.json SIZE=31856\nLOCAL_PUBLIC=effective/networks.json SIZE=372\nLOCAL_PUBLIC=effective/nodes.json SIZE=1950\nLOCAL_PUBLIC=effective/owners.json SIZE=178\nLOCAL_PUBLIC=effective/runbooks.json SIZE=180\nLOCAL_PUBLIC=effective/security.json SIZE=488\nLOCAL_PUBLIC=effective/services.json SIZE=366949\nLOCAL_PUBLIC=effective/storage.json SIZE=916\nLOCAL_PUBLIC=effective/vendors.json SIZE=179\nLOCAL_PUBLIC=index.json SIZE=703\nLOCAL_PUBLIC=README.md SIZE=175\n=== LOCAL_PUBLICATION_METADATA ===\n/etc/homelab/reference/manifest.json:4: \"updated_at\": \"2026-07-22T08:12:10+00:00\",\n/etc/homelab/reference/manifest.json:85: \"publish sanitized mirror\",\n/etc/homelab/reference/state/current.json:3: \"status\": \"AUTO_REFRESH_READY\",\n/etc/homelab/reference/state/current.json:4: \"updated_at\": \"2026-07-22T10:32:25+00:00\",\n/etc/homelab/reference/state/current.json:83: \"public_index\": \"/etc/homelab/reference/public/index.json\",\n/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish\n=== BOOTSTRAP_STATE ===\nBOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z\n{\"status\":\"PARTIAL\",\"missing\":[\"automatic_refresh\",\"per_node_freshness\",\"structured_service_inventory\"]}\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nSECRET_PRINTED=NO\nPRIVATE_ADDRESS_PRINTED=NO\nPUBLISHER_TARGET_CONTRACT=COMPLETE\n" +} diff --git a/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.txt b/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.txt new file mode 100644 index 0000000..0928d47 --- /dev/null +++ b/runtime/history/CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176.txt @@ -0,0 +1,137 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=cluster-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f +SANITIZED_OUTPUT_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f +OUTPUT_BEGIN +validation=PASS +REFERENCE_CHECK=OK +ERROR_REGISTER_CHECK=OK +BOOTSTRAP_CHECK=OK +ERROR_REGISTER_LOADED=YES +PREVIOUS_RESULT=VERIFIED +PRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED +=== EXISTING_RECEIVER === +REMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4 +REMOTE_RUNTIME_RECEIVER_LINES=273 +=== RECEIVER_CONTRACT_LINES === +8:PUBLIC_DIR="${HOST_DATA}/gitea/public/.well-known/homelab-runtime" +99: raise SystemExit("FORBIDDEN_PUBLIC_CONTENT") +108: "$PUBLIC_DIR" \ +116:install \ +123:install \ +184:mkdir -p runtime/history +186:cp "$STAGE/latest.json" runtime/latest.json +187:cp "$STAGE/latest.txt" runtime/latest.txt +188:cp "$STAGE/latest.json" "runtime/history/${COMMAND_ID}.json" +189:cp "$STAGE/latest.txt" "runtime/history/${COMMAND_ID}.txt" +190:cp "$STAGE/README.md" README.md +192:git add \ +196: "runtime/history/${COMMAND_ID}.json" +198:git add "runtime/history/${COMMAND_ID}.txt" +204: git commit \ +210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime +219:JSON_TMP="$(mktemp "${PUBLIC_DIR}/.latest.json.XXXXXX")" +220:TXT_TMP="$(mktemp "${PUBLIC_DIR}/.latest.txt.XXXXXX")" +221:INDEX_TMP="$(mktemp "${PUBLIC_DIR}/.index.json.XXXXXX")" +223:install -m 0644 "$JSON_FILE" "$JSON_TMP" +224:install -m 0644 "$TXT_FILE" "$TXT_TMP" +243: "https://git.gram1.ru/.well-known/" +247: "https://git.gram1.ru/.well-known/" +255:mv -f "$JSON_TMP" "$PUBLIC_DIR/latest.json" +256:mv -f "$TXT_TMP" "$PUBLIC_DIR/latest.txt" +257:mv -f "$INDEX_TMP" "$PUBLIC_DIR/index.json" +261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json | +272:echo 'STATIC_PUBLICATION=OK' +273:echo 'RAW_BRANCH_PUBLICATION=OK' +=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS === +/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z +/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z +/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z +/usr/local/sbin/homelab-runtime-receive +/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z +/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z +/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z +/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z +=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES === +.well-known +.well-known/homelab-runtime +=== REMOTE_STATIC_WELL_KNOWN_FILES === +.well-known/gitea-auth-check-014.txt +.well-known/gitea-auth-check-017.txt +.well-known/gitea-push-auth-stage-012.txt +.well-known/gitea-real-push-canary.txt +.well-known/homelab-bootstrap.json +.well-known/homelab-bootstrap.json.bak.20260721T092825Z +.well-known/homelab-bootstrap.json.bak.20260721T093110Z +.well-known/homelab-context.json +.well-known/homelab-context-manifest.json +.well-known/homelab-context.txt +.well-known/homelab-runtime/index.json +.well-known/homelab-runtime/latest.json +.well-known/homelab-runtime/latest.txt +.well-known/runtime-receiver-preflight-020.txt +.well-known/runtime-receiver-state-026.txt +=== LOCAL_REFERENCE_PUBLIC_MIRROR === +LOCAL_PUBLIC_FILE_COUNT=26 +LOCAL_PUBLIC_BYTES=492590 +6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json +LOCAL_PUBLIC=effective/access.json SIZE=7732 +LOCAL_PUBLIC=effective/applications.json SIZE=184 +LOCAL_PUBLIC=effective/backups.json SIZE=28817 +LOCAL_PUBLIC=effective/certificates.json SIZE=184 +LOCAL_PUBLIC=effective/change_management.json SIZE=189 +LOCAL_PUBLIC=effective/cluster.json SIZE=2904 +LOCAL_PUBLIC=effective/containers.json SIZE=1396 +LOCAL_PUBLIC=effective/contracts.json SIZE=181 +LOCAL_PUBLIC=effective/dependencies.json SIZE=184 +LOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189 +LOCAL_PUBLIC=effective/dns.json SIZE=368 +LOCAL_PUBLIC=effective/domains.json SIZE=19160 +LOCAL_PUBLIC=effective/external_services.json SIZE=22902 +LOCAL_PUBLIC=effective/guests.json SIZE=4075 +LOCAL_PUBLIC=effective/ingress.json SIZE=179 +LOCAL_PUBLIC=effective/monitoring.json SIZE=31856 +LOCAL_PUBLIC=effective/networks.json SIZE=372 +LOCAL_PUBLIC=effective/nodes.json SIZE=1950 +LOCAL_PUBLIC=effective/owners.json SIZE=178 +LOCAL_PUBLIC=effective/runbooks.json SIZE=180 +LOCAL_PUBLIC=effective/security.json SIZE=488 +LOCAL_PUBLIC=effective/services.json SIZE=366949 +LOCAL_PUBLIC=effective/storage.json SIZE=916 +LOCAL_PUBLIC=effective/vendors.json SIZE=179 +LOCAL_PUBLIC=index.json SIZE=703 +LOCAL_PUBLIC=README.md SIZE=175 +=== LOCAL_PUBLICATION_METADATA === +/etc/homelab/reference/manifest.json:4: "updated_at": "2026-07-22T08:12:10+00:00", +/etc/homelab/reference/manifest.json:85: "publish sanitized mirror", +/etc/homelab/reference/state/current.json:3: "status": "AUTO_REFRESH_READY", +/etc/homelab/reference/state/current.json:4: "updated_at": "2026-07-22T10:32:25+00:00", +/etc/homelab/reference/state/current.json:83: "public_index": "/etc/homelab/reference/public/index.json", +/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish +=== BOOTSTRAP_STATE === +BOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z +{"status":"PARTIAL","missing":["automatic_refresh","per_node_freshness","structured_service_inventory"]} +REFERENCE_CHECK=OK +ERROR_REGISTER_CHECK=OK +SECRET_PRINTED=NO +PRIVATE_ADDRESS_PRINTED=NO +PUBLISHER_TARGET_CONTRACT=COMPLETE + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 0603335..5018266 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "CLUSTER-REFERENCE-PUBLISHER-SOURCE-EXTRACT-175", + "command_id": "CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", "component": "cluster-audit", - "started_at_utc": "2026-07-22T10:47:36Z", - "finished_at_utc": "2026-07-22T10:47:36Z", + "started_at_utc": "2026-07-22T11:02:00Z", + "finished_at_utc": "2026-07-22T11:02:00Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", - "command_sha256": "c7bfd2a11496ee580c4f487ad180de917052a698bfeb10fb1916d2dd2cf2acac", + "command_sha256": "01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -22,9 +22,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "dbcffd7aedbdb836ef10a48eecc98523d23e2c0db4017bba124caeeaab4a1b47", - "sanitized_output_sha256": "f76fc120b3d22cac5e9945e9e3287749dff8d0bdd35bfb2399f961933259130e", + "raw_evidence_sha256": "0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f", + "sanitized_output_sha256": "0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "validation=PASS\nAUTHORITATIVE_PREVIOUS=CLUSTER-REFERENCE-PUBLISHER-RECOVERY-AUDIT-170:OK\n=== LOCAL_174_EVIDENCE ===\n/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.json\n/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z-latest.txt\n/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.txt\nCOMMAND_ID=CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174\nSTATUS=OK\nRC=0\nERROR_REGISTER_CHECK=OK\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT\nLOCAL_LEDGER=2026-07-22T10:25:15Z\tCLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171\t1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5\t0\tOK\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT\nLOCAL_LEDGER=2026-07-22T10:31:23Z\tCLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172\t1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8\t0\tOK\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT\nLOCAL_LEDGER=2026-07-22T10:36:43Z\tCLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173\t5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e\t141\tFAIL\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nGAP_ERROR_REGISTERED=YES\nRUNNER_GAP_AUDIT=COMPLETE\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT\nLOCAL_LEDGER=2026-07-22T10:25:15Z\tCLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171\t1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5\t0\tOK\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT\nLOCAL_LEDGER=2026-07-22T10:31:23Z\tCLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172\t1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8\t0\tOK\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log\nREMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT\nLOCAL_LEDGER=2026-07-22T10:36:43Z\tCLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173\t5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e\t141\tFAIL\tcluster-audit\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt\nLOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nGAP_ERROR_REGISTERED=YES\nRUNNER_GAP_AUDIT=COMPLETE\n=== WORKING_RUNTIME_PUBLICATION_SOURCE ===\n \"raw_evidence_retained_locally\": True,\n \"raw_evidence_sha256\": raw_sha,\n \"sanitized_output_sha256\": sanitized_sha,\n \"output_truncated_in_json\": output_truncated,\n \"full_sanitized_output_url\": (\n \"https://git.gram1.ru/.well-known/\"\n \"homelab-runtime/latest.txt\"\n ),\n \"output\": output_preview,\n}\n\nPath(json_path).write_text(\n json.dumps(\n document,\n ensure_ascii=False,\n indent=2,\n )\n + \"\\n\",\n encoding=\"utf-8\",\n)\nPY\n\n{\n echo 'CHAT_OUTPUT_BEGIN'\n echo \"COMMAND_ID=$COMMAND_ID\"\n echo \"STATUS=$STATUS\"\n echo \"RC=$RC\"\n echo \"HOST=$HOST_SHORT\"\n echo \"MODE=$MODE\"\n echo \"COMPONENT=$COMPONENT\"\n echo 'REFERENCE_REGISTER_CHECK=OK'\n echo \"REFERENCE_SHA256=$REFERENCE_SHA256\"\n echo 'ERROR_REGISTER_CHECK=OK'\n echo \"ERROR_REGISTER_SHA256=$ERROR_REGISTER_SHA256\"\n echo \"COMMAND_SHA256=$COMMAND_SHA256\"\n echo \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\"\n echo \"EXECUTION_STARTED=$RUN_STARTED\"\n echo \"CHANGES_MADE=$CHANGES_MADE\"\n echo 'SANITIZED=yes'\n echo 'SECRETS_INCLUDED=no'\n echo 'PRIVATE_ADDRESSES_INCLUDED=no'\n echo \"RAW_EVIDENCE_SHA256=$RAW_SHA256\"\n echo \"SANITIZED_OUTPUT_SHA256=$SANITIZED_SHA256\"\n echo 'OUTPUT_BEGIN'\n cat \"$SANITIZED_FILE\"\n echo\n echo 'OUTPUT_END'\n echo 'CHAT_OUTPUT_END'\n} >\"$TXT_FILE\"\n\nchmod 0600 \\\n \"$RAW_FILE\" \\\n \"$SANITIZED_FILE\" \\\n \"$JSON_FILE\" \\\n \"$TXT_FILE\"\n\nTARGET=debian@[PRIVATE_IP]\nREMOTE_PREFIX=\"/tmp/homelab-runtime-${COMMAND_ID}-$$\"\n\nSSH_OPTS=(\n -o BatchMode=yes\n -o ConnectTimeout=10\n -o ConnectionAttempts=1\n -o StrictHostKeyChecking=yes\n -o UserKnownHostsFile=[SENSITIVE_PATH]\n)\n\nscp \\\n -q \\\n \"${SSH_OPTS[@]}\" \\\n \"$JSON_FILE\" \\\n \"${TARGET}:${REMOTE_PREFIX}.json\"\n\nscp \\\n -q \\\n \"${SSH_OPTS[@]}\" \\\n \"$TXT_FILE\" \\\n \"${TARGET}:${REMOTE_PREFIX}.txt\"\n\nssh \"${SSH_OPTS[@]}\" \"$TARGET\" \"\n set +e\n\n sudo -n /usr/local/sbin/homelab-runtime-receive \\\n '$COMMAND_ID' \\\n '${REMOTE_PREFIX}.json' \\\n '${REMOTE_PREFIX}.txt'\n\n receiver_rc=\\$?\n\n rm -f \\\n '${REMOTE_PREFIX}.json' \\\n '${REMOTE_PREFIX}.txt'\n\n exit \\$receiver_rc\n\"\n\nPUBLIC_URL='https://git.gram1.ru/.well-known/homelab-runtime/latest.json'\nPUBLIC_VISIBLE=false\n\nfor ATTEMPT in $(seq 1 30); do\n CONTENT=\"$(\n curl -fsS \\\n --max-time 15 \\\n \"$PUBLIC_URL\" 2>/dev/null ||\n true\n )\"\n\n if printf '%s\\n' \"$CONTENT\" |\n grep -Fq \"\\\"command_id\\\": \\\"$COMMAND_ID\\\"\"; then\n PUBLIC_VISIBLE=true\n break\n fi\n\n sleep 2\ndone\n\nif [ \"$PUBLIC_VISIBLE\" != true ]; then\n echo 'RESULT=FAIL'\n echo 'REASON=PUBLIC_RUNTIME_RESULT_NOT_VISIBLE'\n echo \"COMMAND_ID=$COMMAND_ID\"\n echo \"LOCAL_RAW_FILE=$RAW_FILE\"\n exit 75\nfi\n\nprintf '%s\\t%s\\t%s\\t%s\\t%s\\t%s\\n' \\\n \"$FINISHED_AT\" \\\n \"$COMMAND_ID\" \\\n \"$COMMAND_SHA256\" \\\n \"$RC\" \\\n \"$STATUS\" \\\n \"$COMPONENT\" >>\"$LEDGER\"\n\necho\necho '===== HOMELAB CHAT RUN COMPLETE ====='\necho \"COMMAND_ID=$COMMAND_ID\"\necho \"STATUS=$STATUS\"\necho \"RC=$RC\"\necho 'REFERENCE_REGISTER_CHECK=OK'\necho 'ERROR_REGISTER_CHECK=OK'\necho \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\"\necho 'GITEA_PUBLICATION=OK'\necho \"PUBLIC_URL=$PUBLIC_URL\"\necho \"LOCAL_RAW_FILE=$RAW_FILE\"\necho 'SHELL_SESSION_PRESERVED=yes'\n\nexit \"$RC\"\n=== REFERENCE_PUBLISH_CONTRACT ===\n1-# Operations\n2-\n3-List: homelab-reference list\n4-Read: homelab-reference get SECTION ID --layer effective\n5-Add: homelab-reference add SECTION JSON\n6-Edit: homelab-reference edit SECTION ID --set key=value\n7-Remove: homelab-reference remove SECTION ID\n8-Validate: homelab-reference validate\n9-Merge: homelab-reference merge\n10-Refresh: homelab-reference-refresh\n11:Publish: homelab-reference-publish\n12-\n13-Immutable runtime history for the exact COMMAND_ID is authoritative. latest.json is not authoritative.\n5:S=json.loads((R/\"manifest.json\").read_text())[\"sections\"]\n34: f=int(json.loads((R/\"manifest.json\").read_text()).get(\"freshness_seconds\",{}).get(s,3600));z=(t+datetime.timedelta(seconds=f)).isoformat()\n124: rec={\"cluster\":[{\"id\":\"cluster-homelab\",\"hostname\":socket.gethostname(),\"kernel\":os.uname().release,\"pve_version\":pv,\"quorum_status\":qu}],\"nodes\":[{**x,\"id\":\"node-\"+slug(x.get(\"node\") or x.get(\"id\"))} for x in nodes],\"guests\":[{\"id\":\"guest-\"+slug(x.get(\"vmid\")),\"vmid\":x.get(\"vmid\"),\"name\":x.get(\"name\"),\"type\":x.get(\"type\"),\"node\":x.get(\"node\"),\"status\":x.get(\"status\"),\"tags\":x.get(\"tags\")} for x in guests],\"containers\":[{\"id\":\"container-\"+slug(x.get(\"vmid\")),\"vmid\":x.get(\"vmid\"),\"name\":x.get(\"name\"),\"node\":x.get(\"node\"),\"status\":x.get(\"status\"),\"tags\":x.get(\"tags\")} for x in guests if x.get(\"type\")==\"lxc\"],\"services\":list(sv.values()),\"applications\":apps+comp,\"networks\":[{\"id\":\"network-state\",\"interfaces\":addr,\"routes\":routes}],\"dns\":[{\"id\":\"resolver-state\",\"resolv_conf\":dns}],\"domains\":[{\"id\":\"domain-\"+slug(x),\"name\":x} for x in sorted(dom)],\"certificates\":cert,\"ingress\":ing,\"storage\":[{**x,\"id\":\"storage-\"+slug(x.get(\"storage\") or x.get(\"id\"))} for x in stor],\"backups\":bk,\"monitoring\":[x for x in sv.values() if re.search(r\"prometheus|grafana|zabbix|uptime|kuma|alertmanager|exporter|health|monitor\",x.get(\"name\",\"\"),re.I)],\"external_services\":list(eps.values()),\"dependencies\":[{\"id\":\"dependency-\"+slug(x[\"id\"]),\"from\":x[\"id\"],\"to\":x.get(\"image\"),\"type\":\"container-image\"} for x in apps if x.get(\"image\")],\"access\":ac,\"security\":[{\"id\":\"reference-security-policy\",\"status\":\"enforced\",\"secret_values_stored\":False,\"public_mirror_sanitized\":True}]}\n125: cnt={s:write(s,x,\"automatic-reference-collector\",t) for s,x in rec.items()};eff={};pd=R/\"public\"/\"effective\";pd.mkdir(parents=True,exist_ok=True)\n128: atom(R/\"public\"/\"index.json\",{\"schema_version\":2,\"reference_id\":\"homelab-cluster-reference-public\",\"generated_at\":t.isoformat(),\"sections\":eff,\"secrets_included\":False,\"private_addresses_included\":False})\n131: st=load(\"state\",\"current\") if False else json.loads((R/\"state/current.json\").read_text());st.update({\"schema_version\":2,\"status\":\"AUTO_REFRESH_READY\",\"updated_at\":t.isoformat(),\"last_snapshot\":str(snap),\"observed_counts\":cnt,\"effective_counts\":eff,\"public_index\":str(R/\"public/index.json\"),\"collector\":str(pathlib.Path(__file__))});atom(R/\"state/current.json\",st)\n132: print(\"REFERENCE_REFRESH=PASS\");print(\"OBSERVED_RECORDS=\"+str(sum(cnt.values())));print(\"EFFECTIVE_RECORDS=\"+str(sum(eff.values())));print(\"PUBLIC_MIRROR=\"+str(R/\"public\"))\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nSECRET_PRINTED=NO\nPRIVATE_ADDRESS_PRINTED=NO\nPUBLISHER_SOURCE_EXTRACTION=COMPLETE\n" + "output": "validation=PASS\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nBOOTSTRAP_CHECK=OK\nERROR_REGISTER_LOADED=YES\nPREVIOUS_RESULT=VERIFIED\nPRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED\n=== EXISTING_RECEIVER ===\nREMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4\nREMOTE_RUNTIME_RECEIVER_LINES=273\n=== RECEIVER_CONTRACT_LINES ===\n8:PUBLIC_DIR=\"${HOST_DATA}/gitea/public/.well-known/homelab-runtime\"\n99: raise SystemExit(\"FORBIDDEN_PUBLIC_CONTENT\")\n108: \"$PUBLIC_DIR\" \\\n116:install \\\n123:install \\\n184:mkdir -p runtime/history\n186:cp \"$STAGE/latest.json\" runtime/latest.json\n187:cp \"$STAGE/latest.txt\" runtime/latest.txt\n188:cp \"$STAGE/latest.json\" \"runtime/history/${COMMAND_ID}.json\"\n189:cp \"$STAGE/latest.txt\" \"runtime/history/${COMMAND_ID}.txt\"\n190:cp \"$STAGE/README.md\" README.md\n192:git add \\\n196: \"runtime/history/${COMMAND_ID}.json\"\n198:git add \"runtime/history/${COMMAND_ID}.txt\"\n204: git commit \\\n210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime\n219:JSON_TMP=\"$(mktemp \"${PUBLIC_DIR}/.latest.json.XXXXXX\")\"\n220:TXT_TMP=\"$(mktemp \"${PUBLIC_DIR}/.latest.txt.XXXXXX\")\"\n221:INDEX_TMP=\"$(mktemp \"${PUBLIC_DIR}/.index.json.XXXXXX\")\"\n223:install -m 0644 \"$JSON_FILE\" \"$JSON_TMP\"\n224:install -m 0644 \"$TXT_FILE\" \"$TXT_TMP\"\n243: \"https://git.gram1.ru/.well-known/\"\n247: \"https://git.gram1.ru/.well-known/\"\n255:mv -f \"$JSON_TMP\" \"$PUBLIC_DIR/latest.json\"\n256:mv -f \"$TXT_TMP\" \"$PUBLIC_DIR/latest.txt\"\n257:mv -f \"$INDEX_TMP\" \"$PUBLIC_DIR/index.json\"\n261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json |\n272:echo 'STATIC_PUBLICATION=OK'\n273:echo 'RAW_BRANCH_PUBLICATION=OK'\n=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS ===\n/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z\n/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z\n/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z\n/usr/local/sbin/homelab-runtime-receive\n/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z\n/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z\n/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z\n/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z\n=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES ===\n.well-known\n.well-known/homelab-runtime\n=== REMOTE_STATIC_WELL_KNOWN_FILES ===\n.well-known/gitea-auth-check-014.txt\n.well-known/gitea-auth-check-017.txt\n.well-known/gitea-push-auth-stage-012.txt\n.well-known/gitea-real-push-canary.txt\n.well-known/homelab-bootstrap.json\n.well-known/homelab-bootstrap.json.bak.20260721T092825Z\n.well-known/homelab-bootstrap.json.bak.20260721T093110Z\n.well-known/homelab-context.json\n.well-known/homelab-context-manifest.json\n.well-known/homelab-context.txt\n.well-known/homelab-runtime/index.json\n.well-known/homelab-runtime/latest.json\n.well-known/homelab-runtime/latest.txt\n.well-known/runtime-receiver-preflight-020.txt\n.well-known/runtime-receiver-state-026.txt\n=== LOCAL_REFERENCE_PUBLIC_MIRROR ===\nLOCAL_PUBLIC_FILE_COUNT=26\nLOCAL_PUBLIC_BYTES=492590\n6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json\nLOCAL_PUBLIC=effective/access.json SIZE=7732\nLOCAL_PUBLIC=effective/applications.json SIZE=184\nLOCAL_PUBLIC=effective/backups.json SIZE=28817\nLOCAL_PUBLIC=effective/certificates.json SIZE=184\nLOCAL_PUBLIC=effective/change_management.json SIZE=189\nLOCAL_PUBLIC=effective/cluster.json SIZE=2904\nLOCAL_PUBLIC=effective/containers.json SIZE=1396\nLOCAL_PUBLIC=effective/contracts.json SIZE=181\nLOCAL_PUBLIC=effective/dependencies.json SIZE=184\nLOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189\nLOCAL_PUBLIC=effective/dns.json SIZE=368\nLOCAL_PUBLIC=effective/domains.json SIZE=19160\nLOCAL_PUBLIC=effective/external_services.json SIZE=22902\nLOCAL_PUBLIC=effective/guests.json SIZE=4075\nLOCAL_PUBLIC=effective/ingress.json SIZE=179\nLOCAL_PUBLIC=effective/monitoring.json SIZE=31856\nLOCAL_PUBLIC=effective/networks.json SIZE=372\nLOCAL_PUBLIC=effective/nodes.json SIZE=1950\nLOCAL_PUBLIC=effective/owners.json SIZE=178\nLOCAL_PUBLIC=effective/runbooks.json SIZE=180\nLOCAL_PUBLIC=effective/security.json SIZE=488\nLOCAL_PUBLIC=effective/services.json SIZE=366949\nLOCAL_PUBLIC=effective/storage.json SIZE=916\nLOCAL_PUBLIC=effective/vendors.json SIZE=179\nLOCAL_PUBLIC=index.json SIZE=703\nLOCAL_PUBLIC=README.md SIZE=175\n=== LOCAL_PUBLICATION_METADATA ===\n/etc/homelab/reference/manifest.json:4: \"updated_at\": \"2026-07-22T08:12:10+00:00\",\n/etc/homelab/reference/manifest.json:85: \"publish sanitized mirror\",\n/etc/homelab/reference/state/current.json:3: \"status\": \"AUTO_REFRESH_READY\",\n/etc/homelab/reference/state/current.json:4: \"updated_at\": \"2026-07-22T10:32:25+00:00\",\n/etc/homelab/reference/state/current.json:83: \"public_index\": \"/etc/homelab/reference/public/index.json\",\n/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish\n=== BOOTSTRAP_STATE ===\nBOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z\n{\"status\":\"PARTIAL\",\"missing\":[\"automatic_refresh\",\"per_node_freshness\",\"structured_service_inventory\"]}\nREFERENCE_CHECK=OK\nERROR_REGISTER_CHECK=OK\nSECRET_PRINTED=NO\nPRIVATE_ADDRESS_PRINTED=NO\nPUBLISHER_TARGET_CONTRACT=COMPLETE\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index c1a6525..0928d47 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,5 +1,5 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-SOURCE-EXTRACT-175 +COMMAND_ID=CLUSTER-REFERENCE-PUBLISHER-TARGET-CONTRACT-176 STATUS=OK RC=0 HOST=pve01 @@ -9,243 +9,129 @@ REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 -COMMAND_SHA256=c7bfd2a11496ee580c4f487ad180de917052a698bfeb10fb1916d2dd2cf2acac +COMMAND_SHA256=01b8504576da954cebe19fd1679257dc1dcf959e67d0d138616c0d3e0026fa9e DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGES_MADE=false SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=dbcffd7aedbdb836ef10a48eecc98523d23e2c0db4017bba124caeeaab4a1b47 -SANITIZED_OUTPUT_SHA256=f76fc120b3d22cac5e9945e9e3287749dff8d0bdd35bfb2399f961933259130e +RAW_EVIDENCE_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f +SANITIZED_OUTPUT_SHA256=0d8074606aafa496e20565b406a75e334bec6ebb6de78d3259fd8ace493c704f OUTPUT_BEGIN validation=PASS -AUTHORITATIVE_PREVIOUS=CLUSTER-REFERENCE-PUBLISHER-RECOVERY-AUDIT-170:OK -=== LOCAL_174_EVIDENCE === -/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.json -/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z-latest.txt -/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174-20260722T104212Z.txt -COMMAND_ID=CLUSTER-REFERENCE-RUNNER-GAP-AUDIT-174 -STATUS=OK -RC=0 -ERROR_REGISTER_CHECK=OK -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT -LOCAL_LEDGER=2026-07-22T10:25:15Z CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5 0 OK cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT -LOCAL_LEDGER=2026-07-22T10:31:23Z CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8 0 OK cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT -LOCAL_LEDGER=2026-07-22T10:36:43Z CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e 141 FAIL cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log REFERENCE_CHECK=OK ERROR_REGISTER_CHECK=OK -GAP_ERROR_REGISTERED=YES -RUNNER_GAP_AUDIT=COMPLETE -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 PRESENT -LOCAL_LEDGER=2026-07-22T10:25:15Z CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171 1299fe30eb30386fec901e120ab525ece490edc5eca767d9216466ecd225bef5 0 OK cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-CONTRACT-AUDIT-171-20260722T102515Z.log -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 PRESENT -LOCAL_LEDGER=2026-07-22T10:31:23Z CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172 1732aee566a83403f448dd74bbfed41489b1640081fd869e751d662ce82fabd8 0 OK cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-IMPLEMENTATION-INPUTS-172-20260722T103123Z.log -REMOTE_HISTORY=CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 PRESENT -LOCAL_LEDGER=2026-07-22T10:36:43Z CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173 5cdd947b6f70123b03dde2c7e4e6f2438293bf651fe1cf84f77374b982df1f7e 141 FAIL cluster-audit -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.json -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z-latest.txt -LOCAL_FILE=/var/lib/homelab-chat-run/public/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.txt -LOCAL_FILE=/var/lib/homelab-chat-run/raw/CLUSTER-REFERENCE-PUBLISHER-GAP-RECONCILE-173-20260722T103643Z.log -REFERENCE_CHECK=OK -ERROR_REGISTER_CHECK=OK -GAP_ERROR_REGISTERED=YES -RUNNER_GAP_AUDIT=COMPLETE -=== WORKING_RUNTIME_PUBLICATION_SOURCE === - "raw_evidence_retained_locally": True, - "raw_evidence_sha256": raw_sha, - "sanitized_output_sha256": sanitized_sha, - "output_truncated_in_json": output_truncated, - "full_sanitized_output_url": ( - "https://git.gram1.ru/.well-known/" - "homelab-runtime/latest.txt" - ), - "output": output_preview, -} - -Path(json_path).write_text( - json.dumps( - document, - ensure_ascii=False, - indent=2, - ) - + "\n", - encoding="utf-8", -) -PY - -{ - echo 'CHAT_OUTPUT_BEGIN' - echo "COMMAND_ID=$COMMAND_ID" - echo "STATUS=$STATUS" - echo "RC=$RC" - echo "HOST=$HOST_SHORT" - echo "MODE=$MODE" - echo "COMPONENT=$COMPONENT" - echo 'REFERENCE_REGISTER_CHECK=OK' - echo "REFERENCE_SHA256=$REFERENCE_SHA256" - echo 'ERROR_REGISTER_CHECK=OK' - echo "ERROR_REGISTER_SHA256=$ERROR_REGISTER_SHA256" - echo "COMMAND_SHA256=$COMMAND_SHA256" - echo "DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED" - echo "EXECUTION_STARTED=$RUN_STARTED" - echo "CHANGES_MADE=$CHANGES_MADE" - echo 'SANITIZED=yes' - echo 'SECRETS_INCLUDED=no' - echo 'PRIVATE_ADDRESSES_INCLUDED=no' - echo "RAW_EVIDENCE_SHA256=$RAW_SHA256" - echo "SANITIZED_OUTPUT_SHA256=$SANITIZED_SHA256" - echo 'OUTPUT_BEGIN' - cat "$SANITIZED_FILE" - echo - echo 'OUTPUT_END' - echo 'CHAT_OUTPUT_END' -} >"$TXT_FILE" - -chmod 0600 \ - "$RAW_FILE" \ - "$SANITIZED_FILE" \ - "$JSON_FILE" \ - "$TXT_FILE" - -TARGET=debian@[PRIVATE_IP] -REMOTE_PREFIX="/tmp/homelab-runtime-${COMMAND_ID}-$$" - -SSH_OPTS=( - -o BatchMode=yes - -o ConnectTimeout=10 - -o ConnectionAttempts=1 - -o StrictHostKeyChecking=yes - -o UserKnownHostsFile=[SENSITIVE_PATH] -) - -scp \ - -q \ - "${SSH_OPTS[@]}" \ - "$JSON_FILE" \ - "${TARGET}:${REMOTE_PREFIX}.json" - -scp \ - -q \ - "${SSH_OPTS[@]}" \ - "$TXT_FILE" \ - "${TARGET}:${REMOTE_PREFIX}.txt" - -ssh "${SSH_OPTS[@]}" "$TARGET" " - set +e - - sudo -n /usr/local/sbin/homelab-runtime-receive \ - '$COMMAND_ID' \ - '${REMOTE_PREFIX}.json' \ - '${REMOTE_PREFIX}.txt' - - receiver_rc=\$? - - rm -f \ - '${REMOTE_PREFIX}.json' \ - '${REMOTE_PREFIX}.txt' - - exit \$receiver_rc -" - -PUBLIC_URL='https://git.gram1.ru/.well-known/homelab-runtime/latest.json' -PUBLIC_VISIBLE=false - -for ATTEMPT in $(seq 1 30); do - CONTENT="$( - curl -fsS \ - --max-time 15 \ - "$PUBLIC_URL" 2>/dev/null || - true - )" - - if printf '%s\n' "$CONTENT" | - grep -Fq "\"command_id\": \"$COMMAND_ID\""; then - PUBLIC_VISIBLE=true - break - fi - - sleep 2 -done - -if [ "$PUBLIC_VISIBLE" != true ]; then - echo 'RESULT=FAIL' - echo 'REASON=PUBLIC_RUNTIME_RESULT_NOT_VISIBLE' - echo "COMMAND_ID=$COMMAND_ID" - echo "LOCAL_RAW_FILE=$RAW_FILE" - exit 75 -fi - -printf '%s\t%s\t%s\t%s\t%s\t%s\n' \ - "$FINISHED_AT" \ - "$COMMAND_ID" \ - "$COMMAND_SHA256" \ - "$RC" \ - "$STATUS" \ - "$COMPONENT" >>"$LEDGER" - -echo -echo '===== HOMELAB CHAT RUN COMPLETE =====' -echo "COMMAND_ID=$COMMAND_ID" -echo "STATUS=$STATUS" -echo "RC=$RC" -echo 'REFERENCE_REGISTER_CHECK=OK' -echo 'ERROR_REGISTER_CHECK=OK' -echo "DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED" -echo 'GITEA_PUBLICATION=OK' -echo "PUBLIC_URL=$PUBLIC_URL" -echo "LOCAL_RAW_FILE=$RAW_FILE" -echo 'SHELL_SESSION_PRESERVED=yes' - -exit "$RC" -=== REFERENCE_PUBLISH_CONTRACT === -1-# Operations -2- -3-List: homelab-reference list -4-Read: homelab-reference get SECTION ID --layer effective -5-Add: homelab-reference add SECTION JSON -6-Edit: homelab-reference edit SECTION ID --set key=value -7-Remove: homelab-reference remove SECTION ID -8-Validate: homelab-reference validate -9-Merge: homelab-reference merge -10-Refresh: homelab-reference-refresh -11:Publish: homelab-reference-publish -12- -13-Immutable runtime history for the exact COMMAND_ID is authoritative. latest.json is not authoritative. -5:S=json.loads((R/"manifest.json").read_text())["sections"] -34: f=int(json.loads((R/"manifest.json").read_text()).get("freshness_seconds",{}).get(s,3600));z=(t+datetime.timedelta(seconds=f)).isoformat() -124: rec={"cluster":[{"id":"cluster-homelab","hostname":socket.gethostname(),"kernel":os.uname().release,"pve_version":pv,"quorum_status":qu}],"nodes":[{**x,"id":"node-"+slug(x.get("node") or x.get("id"))} for x in nodes],"guests":[{"id":"guest-"+slug(x.get("vmid")),"vmid":x.get("vmid"),"name":x.get("name"),"type":x.get("type"),"node":x.get("node"),"status":x.get("status"),"tags":x.get("tags")} for x in guests],"containers":[{"id":"container-"+slug(x.get("vmid")),"vmid":x.get("vmid"),"name":x.get("name"),"node":x.get("node"),"status":x.get("status"),"tags":x.get("tags")} for x in guests if x.get("type")=="lxc"],"services":list(sv.values()),"applications":apps+comp,"networks":[{"id":"network-state","interfaces":addr,"routes":routes}],"dns":[{"id":"resolver-state","resolv_conf":dns}],"domains":[{"id":"domain-"+slug(x),"name":x} for x in sorted(dom)],"certificates":cert,"ingress":ing,"storage":[{**x,"id":"storage-"+slug(x.get("storage") or x.get("id"))} for x in stor],"backups":bk,"monitoring":[x for x in sv.values() if re.search(r"prometheus|grafana|zabbix|uptime|kuma|alertmanager|exporter|health|monitor",x.get("name",""),re.I)],"external_services":list(eps.values()),"dependencies":[{"id":"dependency-"+slug(x["id"]),"from":x["id"],"to":x.get("image"),"type":"container-image"} for x in apps if x.get("image")],"access":ac,"security":[{"id":"reference-security-policy","status":"enforced","secret_values_stored":False,"public_mirror_sanitized":True}]} -125: cnt={s:write(s,x,"automatic-reference-collector",t) for s,x in rec.items()};eff={};pd=R/"public"/"effective";pd.mkdir(parents=True,exist_ok=True) -128: atom(R/"public"/"index.json",{"schema_version":2,"reference_id":"homelab-cluster-reference-public","generated_at":t.isoformat(),"sections":eff,"secrets_included":False,"private_addresses_included":False}) -131: st=load("state","current") if False else json.loads((R/"state/current.json").read_text());st.update({"schema_version":2,"status":"AUTO_REFRESH_READY","updated_at":t.isoformat(),"last_snapshot":str(snap),"observed_counts":cnt,"effective_counts":eff,"public_index":str(R/"public/index.json"),"collector":str(pathlib.Path(__file__))});atom(R/"state/current.json",st) -132: print("REFERENCE_REFRESH=PASS");print("OBSERVED_RECORDS="+str(sum(cnt.values())));print("EFFECTIVE_RECORDS="+str(sum(eff.values())));print("PUBLIC_MIRROR="+str(R/"public")) +BOOTSTRAP_CHECK=OK +ERROR_REGISTER_LOADED=YES +PREVIOUS_RESULT=VERIFIED +PRIOR_FAILURE_173=RC141_EMPTY_OUTPUT_REGISTERED +=== EXISTING_RECEIVER === +REMOTE_RUNTIME_RECEIVER_SHA256=6f4eadda35241d984c30084430f60c456e943d3b17fea6b8c82cf3d5d6a318f4 +REMOTE_RUNTIME_RECEIVER_LINES=273 +=== RECEIVER_CONTRACT_LINES === +8:PUBLIC_DIR="${HOST_DATA}/gitea/public/.well-known/homelab-runtime" +99: raise SystemExit("FORBIDDEN_PUBLIC_CONTENT") +108: "$PUBLIC_DIR" \ +116:install \ +123:install \ +184:mkdir -p runtime/history +186:cp "$STAGE/latest.json" runtime/latest.json +187:cp "$STAGE/latest.txt" runtime/latest.txt +188:cp "$STAGE/latest.json" "runtime/history/${COMMAND_ID}.json" +189:cp "$STAGE/latest.txt" "runtime/history/${COMMAND_ID}.txt" +190:cp "$STAGE/README.md" README.md +192:git add \ +196: "runtime/history/${COMMAND_ID}.json" +198:git add "runtime/history/${COMMAND_ID}.txt" +204: git commit \ +210:GIT_ASKPASS=/data/gitea/runtime-auth/askpass GIT_TERMINAL_PROMPT=0 git push --quiet http://127.0.0.1:3000/homelab-admin/homelab-public-context.git HEAD:refs/heads/assistant-runtime +219:JSON_TMP="$(mktemp "${PUBLIC_DIR}/.latest.json.XXXXXX")" +220:TXT_TMP="$(mktemp "${PUBLIC_DIR}/.latest.txt.XXXXXX")" +221:INDEX_TMP="$(mktemp "${PUBLIC_DIR}/.index.json.XXXXXX")" +223:install -m 0644 "$JSON_FILE" "$JSON_TMP" +224:install -m 0644 "$TXT_FILE" "$TXT_TMP" +243: "https://git.gram1.ru/.well-known/" +247: "https://git.gram1.ru/.well-known/" +255:mv -f "$JSON_TMP" "$PUBLIC_DIR/latest.json" +256:mv -f "$TXT_TMP" "$PUBLIC_DIR/latest.txt" +257:mv -f "$INDEX_TMP" "$PUBLIC_DIR/index.json" +261: http://127.0.0.1:3002/.well-known/homelab-runtime/latest.json | +272:echo 'STATIC_PUBLICATION=OK' +273:echo 'RAW_BRANCH_PUBLICATION=OK' +=== REMOTE_RECEIVER_AND_PUBLISHER_TOOLS === +/usr/local/sbin/homelab-runtime-receive.before-clean-final.20260721T101829Z +/usr/local/sbin/homelab-runtime-receive.before-curl-pipe.20260721T065850Z +/usr/local/sbin/homelab-runtime-receive.before-history-txt.20260721T063221Z +/usr/local/sbin/homelab-runtime-receive +/usr/local/sbin/homelab-runtime-receive.before-clean.20260721T102823Z +/usr/local/sbin/homelab-runtime-receive.before-cleanup.20260721T101513Z +/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T094507Z +/usr/local/sbin/homelab-runtime-receive.before-real-push.20260721T095258Z +=== REMOTE_STATIC_WELL_KNOWN_DIRECTORIES === +.well-known +.well-known/homelab-runtime +=== REMOTE_STATIC_WELL_KNOWN_FILES === +.well-known/gitea-auth-check-014.txt +.well-known/gitea-auth-check-017.txt +.well-known/gitea-push-auth-stage-012.txt +.well-known/gitea-real-push-canary.txt +.well-known/homelab-bootstrap.json +.well-known/homelab-bootstrap.json.bak.20260721T092825Z +.well-known/homelab-bootstrap.json.bak.20260721T093110Z +.well-known/homelab-context.json +.well-known/homelab-context-manifest.json +.well-known/homelab-context.txt +.well-known/homelab-runtime/index.json +.well-known/homelab-runtime/latest.json +.well-known/homelab-runtime/latest.txt +.well-known/runtime-receiver-preflight-020.txt +.well-known/runtime-receiver-state-026.txt +=== LOCAL_REFERENCE_PUBLIC_MIRROR === +LOCAL_PUBLIC_FILE_COUNT=26 +LOCAL_PUBLIC_BYTES=492590 +6c1c36edcb16428cea7c0813a7272bc9d8741e1bbdae6d66b07fbb94b4a6b977 /etc/homelab/reference/public/index.json +LOCAL_PUBLIC=effective/access.json SIZE=7732 +LOCAL_PUBLIC=effective/applications.json SIZE=184 +LOCAL_PUBLIC=effective/backups.json SIZE=28817 +LOCAL_PUBLIC=effective/certificates.json SIZE=184 +LOCAL_PUBLIC=effective/change_management.json SIZE=189 +LOCAL_PUBLIC=effective/cluster.json SIZE=2904 +LOCAL_PUBLIC=effective/containers.json SIZE=1396 +LOCAL_PUBLIC=effective/contracts.json SIZE=181 +LOCAL_PUBLIC=effective/dependencies.json SIZE=184 +LOCAL_PUBLIC=effective/disaster_recovery.json SIZE=189 +LOCAL_PUBLIC=effective/dns.json SIZE=368 +LOCAL_PUBLIC=effective/domains.json SIZE=19160 +LOCAL_PUBLIC=effective/external_services.json SIZE=22902 +LOCAL_PUBLIC=effective/guests.json SIZE=4075 +LOCAL_PUBLIC=effective/ingress.json SIZE=179 +LOCAL_PUBLIC=effective/monitoring.json SIZE=31856 +LOCAL_PUBLIC=effective/networks.json SIZE=372 +LOCAL_PUBLIC=effective/nodes.json SIZE=1950 +LOCAL_PUBLIC=effective/owners.json SIZE=178 +LOCAL_PUBLIC=effective/runbooks.json SIZE=180 +LOCAL_PUBLIC=effective/security.json SIZE=488 +LOCAL_PUBLIC=effective/services.json SIZE=366949 +LOCAL_PUBLIC=effective/storage.json SIZE=916 +LOCAL_PUBLIC=effective/vendors.json SIZE=179 +LOCAL_PUBLIC=index.json SIZE=703 +LOCAL_PUBLIC=README.md SIZE=175 +=== LOCAL_PUBLICATION_METADATA === +/etc/homelab/reference/manifest.json:4: "updated_at": "2026-07-22T08:12:10+00:00", +/etc/homelab/reference/manifest.json:85: "publish sanitized mirror", +/etc/homelab/reference/state/current.json:3: "status": "AUTO_REFRESH_READY", +/etc/homelab/reference/state/current.json:4: "updated_at": "2026-07-22T10:32:25+00:00", +/etc/homelab/reference/state/current.json:83: "public_index": "/etc/homelab/reference/public/index.json", +/etc/homelab/reference/docs/OPERATIONS.md:11:Publish: homelab-reference-publish +=== BOOTSTRAP_STATE === +BOOTSTRAP_GENERATED_AT=2026-07-21T07:02:17Z +{"status":"PARTIAL","missing":["automatic_refresh","per_node_freshness","structured_service_inventory"]} REFERENCE_CHECK=OK ERROR_REGISTER_CHECK=OK SECRET_PRINTED=NO PRIVATE_ADDRESS_PRINTED=NO -PUBLISHER_SOURCE_EXTRACTION=COMPLETE +PUBLISHER_TARGET_CONTRACT=COMPLETE OUTPUT_END CHAT_OUTPUT_END