From b2412e94162269e083ace6f684799bef1d5d332d Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sun, 26 Jul 2026 11:57:48 +0000 Subject: [PATCH] runtime: publish RUN5-CURRENT-STATE-READONLY-20260726T115048Z --- ...RRENT-STATE-READONLY-20260726T115048Z.json | 30 +++++++++++++++++++ ...URRENT-STATE-READONLY-20260726T115048Z.txt | 26 ++++++++++++++++ runtime/latest.json | 20 ++++++------- runtime/latest.txt | 19 ++++++------ 4 files changed, 75 insertions(+), 20 deletions(-) create mode 100644 runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.json create mode 100644 runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.txt diff --git a/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.json b/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.json new file mode 100644 index 0000000..1323a8a --- /dev/null +++ b/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "RUN5-CURRENT-STATE-READONLY-20260726T115048Z", + "status": "FAIL", + "rc": 1, + "host": "pve01", + "mode": "verify", + "component": "command-control-plane", + "started_at_utc": "2026-07-26T11:57:39Z", + "finished_at_utc": "2026-07-26T11:57:48Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "35bedfbf9a281687c60d70ccb18d0e132d4cfe6ba396954261af2c59bfa20673", + "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": "e31ec46e83926efa8688790bf56442d768181590405f102829f43ebe11c7ec46", + "sanitized_output_sha256": "51089cb42b66558532ae645b1961b6bdfef861a24e23d15d6888b339b5a20d08", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "RUN5_CURRENT_STATE_READONLY=BLOCKED\n{\"anti_regression_checks_exercised\":[\"QG-001-SOURCE-EVIDENCE-LOCK\",\"QG-003-SERVICE-IDENTITY-REHEARSAL\",\"QG-005-DIAGNOSTICS-BEFORE-ROLLBACK\",\"QG-008-FAILED-CAPSULE-REPLAN-REQUIRED\",\"QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED\",\"QG-010-PORTAL-SERVICE-USER-FILE-ACCESS\",\"QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP\",\"QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED\"],\"backup_changed\":false,\"checked_at_utc\":\"2026-07-26T11:57:48.018107+00:00\",\"cluster_changed\":false,\"command_id\":\"RUN5-CURRENT-STATE-READONLY-20260726T115048Z\",\"diagnostics_collected_before_any_rollback\":true,\"dns\":{\"evidence.vpn.gram1.ru\":[\"95.84.154.183\"],\"run.vpn.gram1.ru\":[\"100.100.60.182\"]},\"executables\":{\"/usr/bin/journalctl\":{\"is_symlink\":false,\"path\":\"/usr/bin/journalctl\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/journalctl\",\"resolved_sha256\":\"6ad392fc8f1a10ac892fdb328e67761944c32707db5e97602cb84eed502e47f1\"},\"/usr/bin/python3\":{\"is_symlink\":true,\"path\":\"/usr/bin/python3\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/python3.13\",\"resolved_sha256\":\"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b\"},\"/usr/bin/systemctl\":{\"is_symlink\":false,\"path\":\"/usr/bin/systemctl\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/systemctl\",\"resolved_sha256\":\"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a\"},\"/usr/sbin/runuser\":{\"is_symlink\":false,\"path\":\"/usr/sbin/runuser\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/sbin/runuser\",\"resolved_sha256\":\"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7\"}},\"failures\":[\"local health request failed\",\"overlay health request failed\"],\"files\":{\"/etc/systemd/system/homelab-command-adapter.service\":{\"bytes\":665,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-adapter.service\",\"sha256\":\"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7\",\"uid\":0},\"/etc/systemd/system/homelab-command-portal.service\":{\"bytes\":981,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-portal.service\",\"sha256\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"uid\":0},\"/root/_1/run3d.json\":{\"bytes\":6966,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run3d.json\",\"sha256\":\"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69\",\"uid\":0},\"/root/_1/run4.json\":{\"bytes\":3115,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run4.json\",\"sha256\":\"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07\",\"uid\":0},\"/usr/local/sbin/homelab-chat-run\":{\"bytes\":11864,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-chat-run\",\"sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"uid\":0},\"/usr/local/sbin/homelab-command-adapter\":{\"bytes\":77441,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"uid\":0},\"/usr/local/sbin/homelab-command-portal\":{\"bytes\":39362,\"gid\":990,\"group\":\"homelab-command-portal\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-portal\",\"sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"uid\":0}},\"gitea_changed\":false,\"health\":{\"local\":{\"attempts\":5,\"errors\":[\"attempt=1:HTTPError:HTTP Error 403: Forbidden\",\"attempt=2:HTTPError:HTTP Error 403: Forbidden\",\"attempt=3:HTTPError:HTTP Error 403: Forbidden\",\"attempt=4:HTTPError:HTTP Error 403: Forbidden\",\"attempt=5:HTTPError:HTTP Error 403: Forbidden\"],\"ok\":false},\"overlay\":{\"attempts\":5,\"errors\":[\"attempt=1:HTTPError:HTTP Error 404: Not Found\",\"attempt=2:HTTPError:HTTP Error 404: Not Found\",\"attempt=3:HTTPError:HTTP Error 404: Not Found\",\"attempt=4:HTTPError:HTTP Error 404: Not Found\",\"attempt=5:HTTPError:HTTP Error 404: Not Found\"],\"ok\":false}},\"journals\":{\"adapter\":{\"entries\":4,\"rc\":0,\"stderr_tail\":\"\",\"suspicious_count\":0,\"suspicious_tail\":[]},\"portal\":{\"entries\":35,\"rc\":0,\"stderr_tail\":\"\",\"suspicious_count\":0,\"suspicious_tail\":[]}},\"listeners\":{\"adapter_expected_socket_count\":1,\"adapter_main_pid\":\"364681\",\"adapter_socket_exists\":true,\"adapter_socket_lines\":[\"u_str LISTEN 0 5 /run/homelab-command-adapter/adapter.sock 21903727 * 0 users:((\\\"python3\\\",pid=364681,fd=3)) \"],\"adapter_tcp_listener_count\":0,\"adapter_unix_listener_count\":1,\"portal_expected_listener_count\":1,\"portal_listener_lines\":[\"LISTEN 0 5 [PRIVATE_IP]:18094 0.0.0.0:* users:((\\\"python3\\\",pid=536586,fd=3)) \"],\"portal_main_pid\":\"536586\",\"portal_tcp_listener_count\":1,\"ss_path\":\"/usr/bin/ss\"},\"next_safe_action\":\"DIAGNOSE_FROM_THIS_EVIDENCE;DO_NOT_ROLLBACK_YET\",\"production_changed\":false,\"rollback_started\":false,\"schema_version\":1,\"service_identity_tests\":{\"adapter_as_root_identity\":{\"rc\":0,\"status\":\"PASS\",\"stderr_tail\":\"\",\"stdout_marker_present\":true},\"portal_as_service_user\":{\"rc\":0,\"status\":\"PASS\",\"stderr_tail\":\"\",\"stdout_marker_present\":true}},\"source_anchor\":{\"note\":\"Evidence archive SHA is an external handoff anchor; live server state is checked separately.\",\"run5_capsule_sha256\":\"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff\",\"run5_command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"run5_evidence_archive_sha256\":\"2f5e4fe6eba2c985bade1d1623aeae6a57459f2fce8d6bfe1455c72b8c0eaec5\",\"run5_expires_at_utc\":\"2026-07-27T06:40:45.886243+00:00\",\"run5_plan_sha256\":\"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607\",\"run5_plan_unexpired\":true},\"stage\":\"RUN5_CURRENT_STATE_READONLY\",\"state_inventory\":{\"active_rollbacks\":[],\"capsule_root\":\"/var/lib/homelab-command-adapter/capsules\",\"capsule_root_present\":true,\"counts\":{\"BLOCKED\":0,\"FAIL\":0,\"IMPORTED\":1,\"OK\":2,\"RUNNING\":1,\"UNKNOWN\":0},\"duplicate_command_ids\":[],\"imported_nonfailure_count\":1,\"items\":[{\"command_id\":\"PORTAL-BROWSER-TEST-20260726T062104Z\",\"is_current\":false,\"mode\":\"read-only\",\"state_file\":\"7DOGTE6NK5.json\",\"status\":\"OK\",\"updated_at_utc\":null},{\"command_id\":\"RUN5-CURRENT-STATE-READONLY-20260726T115048Z\",\"is_current\":true,\"mode\":\"verify\",\"state_file\":\"CIIPI7AQFM.json\",\"status\":\"RUNNING\",\"updated_at_utc\":null},{\"command_id\":\"PORTAL-LINK-TEST-20260726T060415Z\",\"is_current\":false,\"mode\":\"read-only\",\"state_file\":\"MHM2MLFB3M.json\",\"status\":\"IMPORTED\",\"updated_at_utc\":null},{\"command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"is_current\":false,\"mode\":\"verify\",\"state_file\":\"VVPO47GNHZ.json\",\"status\":\"OK\",\"updated_at_utc\":null}],\"previous_running\":[],\"run5_plan_state\":{\"capsule_sha256\":\"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff\",\"command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"contains_plan_sha256\":false,\"evidence_sha256\":null,\"is_current\":false,\"mode\":\"verify\",\"state_file\":\"VVPO47GNHZ.json\",\"status\":\"OK\",\"updated_at_utc\":null},\"state_root\":\"/var/lib/homelab-command-adapter/state\",\"terminal_failures\":[],\"total\":4,\"unfinished_change_capsules\":[],\"unknown_states\":[]},\"status\":\"BLOCKED\",\"target\":{\"expected\":\"pve01\",\"hostname\":\"pve01\"},\"units\":{\"adapter\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-adapter.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-adapter.service\",\"LoadState\":\"loaded\",\"MainPID\":\"364681\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"root\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"},\"portal\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }\",\"ExecStartPre\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-portal.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-portal.service\",\"LoadState\":\"loaded\",\"MainPID\":\"536586\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"homelab-command-portal\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"}},\"warnings\":[],\"windows_bridge_verification_boundary\":{\"association_and_upload_proven_only_if_opened_through_installed_hcmd_bridge\":true,\"client_token_acl_checked_by_server\":false,\"client_token_content_read\":false,\"server_side_checks\":\"This capsule checks Portal/Adapter/runner after import and approval.\"}}\n" +} diff --git a/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.txt b/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.txt new file mode 100644 index 0000000..47f33b3 --- /dev/null +++ b/runtime/history/RUN5-CURRENT-STATE-READONLY-20260726T115048Z.txt @@ -0,0 +1,26 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=RUN5-CURRENT-STATE-READONLY-20260726T115048Z +STATUS=FAIL +RC=1 +HOST=pve01 +MODE=verify +COMPONENT=command-control-plane +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=35bedfbf9a281687c60d70ccb18d0e132d4cfe6ba396954261af2c59bfa20673 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=e31ec46e83926efa8688790bf56442d768181590405f102829f43ebe11c7ec46 +SANITIZED_OUTPUT_SHA256=51089cb42b66558532ae645b1961b6bdfef861a24e23d15d6888b339b5a20d08 +OUTPUT_BEGIN +RUN5_CURRENT_STATE_READONLY=BLOCKED +{"anti_regression_checks_exercised":["QG-001-SOURCE-EVIDENCE-LOCK","QG-003-SERVICE-IDENTITY-REHEARSAL","QG-005-DIAGNOSTICS-BEFORE-ROLLBACK","QG-008-FAILED-CAPSULE-REPLAN-REQUIRED","QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED","QG-010-PORTAL-SERVICE-USER-FILE-ACCESS","QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP","QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED"],"backup_changed":false,"checked_at_utc":"2026-07-26T11:57:48.018107+00:00","cluster_changed":false,"command_id":"RUN5-CURRENT-STATE-READONLY-20260726T115048Z","diagnostics_collected_before_any_rollback":true,"dns":{"evidence.vpn.gram1.ru":["95.84.154.183"],"run.vpn.gram1.ru":["100.100.60.182"]},"executables":{"/usr/bin/journalctl":{"is_symlink":false,"path":"/usr/bin/journalctl","resolved_mode":"0o755","resolved_path":"/usr/bin/journalctl","resolved_sha256":"6ad392fc8f1a10ac892fdb328e67761944c32707db5e97602cb84eed502e47f1"},"/usr/bin/python3":{"is_symlink":true,"path":"/usr/bin/python3","resolved_mode":"0o755","resolved_path":"/usr/bin/python3.13","resolved_sha256":"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b"},"/usr/bin/systemctl":{"is_symlink":false,"path":"/usr/bin/systemctl","resolved_mode":"0o755","resolved_path":"/usr/bin/systemctl","resolved_sha256":"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a"},"/usr/sbin/runuser":{"is_symlink":false,"path":"/usr/sbin/runuser","resolved_mode":"0o755","resolved_path":"/usr/sbin/runuser","resolved_sha256":"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7"}},"failures":["local health request failed","overlay health request failed"],"files":{"/etc/systemd/system/homelab-command-adapter.service":{"bytes":665,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-adapter.service","sha256":"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7","uid":0},"/etc/systemd/system/homelab-command-portal.service":{"bytes":981,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-portal.service","sha256":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","uid":0},"/root/_1/run3d.json":{"bytes":6966,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run3d.json","sha256":"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69","uid":0},"/root/_1/run4.json":{"bytes":3115,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run4.json","sha256":"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07","uid":0},"/usr/local/sbin/homelab-chat-run":{"bytes":11864,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-chat-run","sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","uid":0},"/usr/local/sbin/homelab-command-adapter":{"bytes":77441,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-adapter","sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","uid":0},"/usr/local/sbin/homelab-command-portal":{"bytes":39362,"gid":990,"group":"homelab-command-portal","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-portal","sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","uid":0}},"gitea_changed":false,"health":{"local":{"attempts":5,"errors":["attempt=1:HTTPError:HTTP Error 403: Forbidden","attempt=2:HTTPError:HTTP Error 403: Forbidden","attempt=3:HTTPError:HTTP Error 403: Forbidden","attempt=4:HTTPError:HTTP Error 403: Forbidden","attempt=5:HTTPError:HTTP Error 403: Forbidden"],"ok":false},"overlay":{"attempts":5,"errors":["attempt=1:HTTPError:HTTP Error 404: Not Found","attempt=2:HTTPError:HTTP Error 404: Not Found","attempt=3:HTTPError:HTTP Error 404: Not Found","attempt=4:HTTPError:HTTP Error 404: Not Found","attempt=5:HTTPError:HTTP Error 404: Not Found"],"ok":false}},"journals":{"adapter":{"entries":4,"rc":0,"stderr_tail":"","suspicious_count":0,"suspicious_tail":[]},"portal":{"entries":35,"rc":0,"stderr_tail":"","suspicious_count":0,"suspicious_tail":[]}},"listeners":{"adapter_expected_socket_count":1,"adapter_main_pid":"364681","adapter_socket_exists":true,"adapter_socket_lines":["u_str LISTEN 0 5 /run/homelab-command-adapter/adapter.sock 21903727 * 0 users:((\"python3\",pid=364681,fd=3)) "],"adapter_tcp_listener_count":0,"adapter_unix_listener_count":1,"portal_expected_listener_count":1,"portal_listener_lines":["LISTEN 0 5 [PRIVATE_IP]:18094 0.0.0.0:* users:((\"python3\",pid=536586,fd=3)) "],"portal_main_pid":"536586","portal_tcp_listener_count":1,"ss_path":"/usr/bin/ss"},"next_safe_action":"DIAGNOSE_FROM_THIS_EVIDENCE;DO_NOT_ROLLBACK_YET","production_changed":false,"rollback_started":false,"schema_version":1,"service_identity_tests":{"adapter_as_root_identity":{"rc":0,"status":"PASS","stderr_tail":"","stdout_marker_present":true},"portal_as_service_user":{"rc":0,"status":"PASS","stderr_tail":"","stdout_marker_present":true}},"source_anchor":{"note":"Evidence archive SHA is an external handoff anchor; live server state is checked separately.","run5_capsule_sha256":"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff","run5_command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","run5_evidence_archive_sha256":"2f5e4fe6eba2c985bade1d1623aeae6a57459f2fce8d6bfe1455c72b8c0eaec5","run5_expires_at_utc":"2026-07-27T06:40:45.886243+00:00","run5_plan_sha256":"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607","run5_plan_unexpired":true},"stage":"RUN5_CURRENT_STATE_READONLY","state_inventory":{"active_rollbacks":[],"capsule_root":"/var/lib/homelab-command-adapter/capsules","capsule_root_present":true,"counts":{"BLOCKED":0,"FAIL":0,"IMPORTED":1,"OK":2,"RUNNING":1,"UNKNOWN":0},"duplicate_command_ids":[],"imported_nonfailure_count":1,"items":[{"command_id":"PORTAL-BROWSER-TEST-20260726T062104Z","is_current":false,"mode":"read-only","state_file":"7DOGTE6NK5.json","status":"OK","updated_at_utc":null},{"command_id":"RUN5-CURRENT-STATE-READONLY-20260726T115048Z","is_current":true,"mode":"verify","state_file":"CIIPI7AQFM.json","status":"RUNNING","updated_at_utc":null},{"command_id":"PORTAL-LINK-TEST-20260726T060415Z","is_current":false,"mode":"read-only","state_file":"MHM2MLFB3M.json","status":"IMPORTED","updated_at_utc":null},{"command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","is_current":false,"mode":"verify","state_file":"VVPO47GNHZ.json","status":"OK","updated_at_utc":null}],"previous_running":[],"run5_plan_state":{"capsule_sha256":"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff","command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","contains_plan_sha256":false,"evidence_sha256":null,"is_current":false,"mode":"verify","state_file":"VVPO47GNHZ.json","status":"OK","updated_at_utc":null},"state_root":"/var/lib/homelab-command-adapter/state","terminal_failures":[],"total":4,"unfinished_change_capsules":[],"unknown_states":[]},"status":"BLOCKED","target":{"expected":"pve01","hostname":"pve01"},"units":{"adapter":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }","FragmentPath":"/etc/systemd/system/homelab-command-adapter.service","Group":"homelab-command-portal","Id":"homelab-command-adapter.service","LoadState":"loaded","MainPID":"364681","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"root","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"},"portal":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }","ExecStartPre":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-command-portal.service","Group":"homelab-command-portal","Id":"homelab-command-portal.service","LoadState":"loaded","MainPID":"536586","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"homelab-command-portal","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"}},"warnings":[],"windows_bridge_verification_boundary":{"association_and_upload_proven_only_if_opened_through_installed_hcmd_bridge":true,"client_token_acl_checked_by_server":false,"client_token_content_read":false,"server_side_checks":"This capsule checks Portal/Adapter/runner after import and approval."}} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 4e02e77..1323a8a 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "RUN5-QUALITY-GATE-PLAN-20260726T064045Z", - "status": "OK", - "rc": 0, + "command_id": "RUN5-CURRENT-STATE-READONLY-20260726T115048Z", + "status": "FAIL", + "rc": 1, "host": "pve01", "mode": "verify", - "component": "command-quality-gate", - "started_at_utc": "2026-07-26T11:23:43Z", - "finished_at_utc": "2026-07-26T11:23:43Z", + "component": "command-control-plane", + "started_at_utc": "2026-07-26T11:57:39Z", + "finished_at_utc": "2026-07-26T11:57:48Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "dc7bb28d40500504adc63f37c89ed919c69d503e2e71f570ecd636cdcd04bb1f", + "command_sha256": "35bedfbf9a281687c60d70ccb18d0e132d4cfe6ba396954261af2c59bfa20673", "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": "86cdb1747be64f368435b841ec9a8145646db26e6387fbb2a6b8e69176b236bc", - "sanitized_output_sha256": "86cdb1747be64f368435b841ec9a8145646db26e6387fbb2a6b8e69176b236bc", + "raw_evidence_sha256": "e31ec46e83926efa8688790bf56442d768181590405f102829f43ebe11c7ec46", + "sanitized_output_sha256": "51089cb42b66558532ae645b1961b6bdfef861a24e23d15d6888b339b5a20d08", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "RUN5_COMMAND_QUALITY_GATE_PLAN=PASS\nPLAN_SHA256=99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607\n{\"backup_changed\":false,\"cluster_changed\":false,\"gitea_changed\":false,\"plan\":{\"acceptance\":[\"new adapter self-test as root\",\"new portal self-test as homelab-command-portal\",\"schema-v1 read-only capsule remains accepted\",\"schema-v1 change capsule is rejected\",\"schema-v2 change missing any gate field is rejected\",\"schema-v2 APPLY with unknown plan is rejected\",\"schema-v2 APPLY with wrong plan SHA is rejected\",\"schema-v2 APPLY with failed plan is rejected\",\"valid PLAN accepted and stored\",\"valid APPLY bound to exact PLAN accepted\",\"Portal renders gate and disables execute on failure\",\"real read-only browser flow still passes\",\"temporary test state and MinIO evidence cleaned\"],\"adapter_enforcement\":{\"changed_plan_sha_forbidden\":true,\"duplicate_ids_forbidden\":true,\"empty_required_arrays_forbidden\":true,\"failed_plan_reuse_forbidden\":true,\"portal_is_display_and_approval_layer\":true,\"same_failed_apply_without_new_plan_forbidden\":true,\"security_boundary\":true,\"shell_string_forbidden\":true,\"undeclared_path_mutation_forbidden\":true,\"unknown_quality_gate_fields_forbidden\":true},\"anti_regression_ids\":[\"QG-001-SOURCE-EVIDENCE-LOCK\",\"QG-002-PLAN-APPLY-SHA-BINDING\",\"QG-003-SERVICE-IDENTITY-REHEARSAL\",\"QG-004-EXPECTED-DIFF-SCOPE\",\"QG-005-DIAGNOSTICS-BEFORE-ROLLBACK\",\"QG-006-CLEANUP-VERIFICATION\",\"QG-007-POSTCONDITION-SEAL\",\"QG-008-FAILED-CAPSULE-REPLAN-REQUIRED\",\"QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED\",\"QG-010-PORTAL-SERVICE-USER-FILE-ACCESS\",\"QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP\",\"QG-012-SESSION-BOUND-HMAC-CSRF\",\"QG-013-SIGV4-CANONICAL-QUERY-SORTED\",\"QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED\"],\"capsule_contract\":{\"apply_requires_exact_plan_capsule_sha256\":true,\"apply_requires_exact_plan_evidence_sha256\":true,\"apply_requires_no_unresolved_failure\":true,\"apply_requires_plan_status_ok\":true,\"apply_requires_prior_plan_state\":true,\"apply_requires_same_target\":true,\"apply_requires_source_evidence_sha256\":true,\"apply_requires_unexpired_plan\":true,\"change_capsule_required_schema\":2,\"change_capsule_requires_plan_phase\":true,\"change_capsule_requires_quality_gate\":true,\"read_only_compatibility\":\"SCHEMA_V1_PRESERVED\"},\"current_state\":{\"executables\":{\"/usr/bin/python3\":{\"is_symlink\":true,\"path\":\"/usr/bin/python3\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/python3.13\",\"resolved_sha256\":\"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b\"},\"/usr/bin/systemctl\":{\"is_symlink\":false,\"path\":\"/usr/bin/systemctl\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/systemctl\",\"resolved_sha256\":\"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a\"},\"/usr/sbin/runuser\":{\"is_symlink\":false,\"path\":\"/usr/sbin/runuser\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/sbin/runuser\",\"resolved_sha256\":\"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7\"}},\"files\":{\"/etc/systemd/system/homelab-command-adapter.service\":{\"bytes\":665,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-adapter.service\",\"sha256\":\"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7\",\"uid\":0},\"/etc/systemd/system/homelab-command-portal.service\":{\"bytes\":981,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-portal.service\",\"sha256\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"uid\":0},\"/root/_1/run3d.json\":{\"bytes\":6966,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run3d.json\",\"sha256\":\"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69\",\"uid\":0},\"/root/_1/run4.json\":{\"bytes\":3115,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run4.json\",\"sha256\":\"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07\",\"uid\":0},\"/usr/local/sbin/homelab-chat-run\":{\"bytes\":11864,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-chat-run\",\"sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"uid\":0},\"/usr/local/sbin/homelab-command-adapter\":{\"bytes\":77441,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"uid\":0},\"/usr/local/sbin/homelab-command-portal\":{\"bytes\":39362,\"gid\":990,\"group\":\"homelab-command-portal\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-portal\",\"sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"uid\":0}},\"service_identity_tests\":{\"adapter_as_root_identity\":\"PASS\",\"portal_as_service_user\":\"PASS\"},\"source_features\":{\"adapter\":{\"change_requires_production_true\":true,\"change_requires_rollback\":true,\"plan_apply_binding_present\":false,\"quality_gate_present\":false,\"schema_version_1_only\":true,\"unknown_top_level_fields_forbidden\":false},\"portal\":{\"csrf_present\":true,\"plan_apply_render_present\":false,\"quality_gate_render_present\":false}},\"state_inventory\":{\"BLOCKED\":0,\"FAIL\":0,\"IMPORTED\":1,\"OK\":1,\"RUNNING\":1,\"UNKNOWN\":0,\"capsule_root_present\":true,\"change_total\":0,\"change_unfinished\":0,\"duplicate_command_ids\":[],\"total\":3},\"units\":{\"adapter\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-adapter.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-adapter.service\",\"LoadState\":\"loaded\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"root\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"},\"portal\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }\",\"ExecStartPre\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-portal.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-portal.service\",\"LoadState\":\"loaded\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"homelab-command-portal\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"}}},\"declared_changes\":{\"backup\":false,\"cluster\":false,\"gitea\":false,\"production\":true,\"service_evidence_publication\":true},\"exact_diff_scope\":[{\"action\":\"REPLACE\",\"after_sha256\":\"TO_BE_FIXED_IN_APPLY_CAPSULE\",\"before_sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"group\":\"root\",\"mode\":\"0750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-adapter\"},{\"action\":\"REPLACE\",\"after_sha256\":\"TO_BE_FIXED_IN_APPLY_CAPSULE\",\"before_sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"group\":\"homelab-command-portal\",\"mode\":\"0750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-portal\"}],\"explicitly_out_of_scope\":[\"homelab-chat-run source\",\"systemd unit files\",\"Nginx\",\"Windows Bridge\",\"MinIO bucket policies\",\"backup configuration\",\"cluster topology\",\"Gitea repository configuration\"],\"kind\":\"homelab-command-quality-gate-plan\",\"plan_id\":\"RUN5-COMMAND-QUALITY-GATE\",\"portal_display\":{\"disable_execute_button_on_gate_failure\":true,\"show_anti_regression_ids\":true,\"show_cleanup\":true,\"show_diagnostics_before_rollback\":true,\"show_exact_diff\":true,\"show_gate_status\":true,\"show_plan_reference\":true,\"show_plan_sha\":true,\"show_postconditions\":true,\"show_rollback\":true,\"show_service_identity_tests\":true,\"show_source_evidence_sha\":true},\"quality_gate_version\":1,\"required_change_fields\":[\"phase\",\"source_evidence\",\"plan_reference\",\"target_identity\",\"preconditions\",\"expected_diff\",\"service_identity_tests\",\"rollback_plan\",\"postconditions\",\"diagnostics_plan\",\"cleanup_plan\",\"anti_regression_ids\"],\"rollback\":{\"diagnostics_before_restore\":true,\"post_restore_external_browser_path_test\":true,\"post_restore_service_identity_test\":true,\"restore_adapter_sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"restore_portal_sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"strategy\":\"EXACT_TWO_FILE_RESTORE\"},\"schema_version\":1,\"source_lock\":{\"adapter_unit_sha256\":\"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7\",\"installed_adapter_sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"installed_portal_sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"portal_unit_sha256\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"run3d_report_sha256\":\"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69\",\"run4_report_sha256\":\"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07\",\"runner_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\"},\"structured_requirements\":{\"check_item\":[\"id\",\"type\",\"target\",\"expected\"],\"expected_diff_item\":[\"path\",\"action\",\"before_sha256\",\"after_sha256\",\"owner\",\"group\",\"mode\"],\"plan_reference\":[\"command_id\",\"capsule_sha256\",\"evidence_sha256\",\"plan_sha256\"],\"source_evidence\":[\"command_id\",\"capsule_sha256\",\"evidence_sha256\"],\"target_identity\":[\"node\",\"component\",\"service_user\",\"service_group\"]}},\"plan_sha256\":\"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607\",\"production_changed\":false,\"stage\":\"RUN5_COMMAND_QUALITY_GATE_PLAN\",\"status\":\"PASS\"}\n" + "output": "RUN5_CURRENT_STATE_READONLY=BLOCKED\n{\"anti_regression_checks_exercised\":[\"QG-001-SOURCE-EVIDENCE-LOCK\",\"QG-003-SERVICE-IDENTITY-REHEARSAL\",\"QG-005-DIAGNOSTICS-BEFORE-ROLLBACK\",\"QG-008-FAILED-CAPSULE-REPLAN-REQUIRED\",\"QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED\",\"QG-010-PORTAL-SERVICE-USER-FILE-ACCESS\",\"QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP\",\"QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED\"],\"backup_changed\":false,\"checked_at_utc\":\"2026-07-26T11:57:48.018107+00:00\",\"cluster_changed\":false,\"command_id\":\"RUN5-CURRENT-STATE-READONLY-20260726T115048Z\",\"diagnostics_collected_before_any_rollback\":true,\"dns\":{\"evidence.vpn.gram1.ru\":[\"95.84.154.183\"],\"run.vpn.gram1.ru\":[\"100.100.60.182\"]},\"executables\":{\"/usr/bin/journalctl\":{\"is_symlink\":false,\"path\":\"/usr/bin/journalctl\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/journalctl\",\"resolved_sha256\":\"6ad392fc8f1a10ac892fdb328e67761944c32707db5e97602cb84eed502e47f1\"},\"/usr/bin/python3\":{\"is_symlink\":true,\"path\":\"/usr/bin/python3\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/python3.13\",\"resolved_sha256\":\"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b\"},\"/usr/bin/systemctl\":{\"is_symlink\":false,\"path\":\"/usr/bin/systemctl\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/bin/systemctl\",\"resolved_sha256\":\"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a\"},\"/usr/sbin/runuser\":{\"is_symlink\":false,\"path\":\"/usr/sbin/runuser\",\"resolved_mode\":\"0o755\",\"resolved_path\":\"/usr/sbin/runuser\",\"resolved_sha256\":\"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7\"}},\"failures\":[\"local health request failed\",\"overlay health request failed\"],\"files\":{\"/etc/systemd/system/homelab-command-adapter.service\":{\"bytes\":665,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-adapter.service\",\"sha256\":\"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7\",\"uid\":0},\"/etc/systemd/system/homelab-command-portal.service\":{\"bytes\":981,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o644\",\"owner\":\"root\",\"path\":\"/etc/systemd/system/homelab-command-portal.service\",\"sha256\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"uid\":0},\"/root/_1/run3d.json\":{\"bytes\":6966,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run3d.json\",\"sha256\":\"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69\",\"uid\":0},\"/root/_1/run4.json\":{\"bytes\":3115,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o600\",\"owner\":\"root\",\"path\":\"/root/_1/run4.json\",\"sha256\":\"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07\",\"uid\":0},\"/usr/local/sbin/homelab-chat-run\":{\"bytes\":11864,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-chat-run\",\"sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"uid\":0},\"/usr/local/sbin/homelab-command-adapter\":{\"bytes\":77441,\"gid\":0,\"group\":\"root\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"sha256\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"uid\":0},\"/usr/local/sbin/homelab-command-portal\":{\"bytes\":39362,\"gid\":990,\"group\":\"homelab-command-portal\",\"is_symlink\":false,\"mode\":\"0o750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-command-portal\",\"sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"uid\":0}},\"gitea_changed\":false,\"health\":{\"local\":{\"attempts\":5,\"errors\":[\"attempt=1:HTTPError:HTTP Error 403: Forbidden\",\"attempt=2:HTTPError:HTTP Error 403: Forbidden\",\"attempt=3:HTTPError:HTTP Error 403: Forbidden\",\"attempt=4:HTTPError:HTTP Error 403: Forbidden\",\"attempt=5:HTTPError:HTTP Error 403: Forbidden\"],\"ok\":false},\"overlay\":{\"attempts\":5,\"errors\":[\"attempt=1:HTTPError:HTTP Error 404: Not Found\",\"attempt=2:HTTPError:HTTP Error 404: Not Found\",\"attempt=3:HTTPError:HTTP Error 404: Not Found\",\"attempt=4:HTTPError:HTTP Error 404: Not Found\",\"attempt=5:HTTPError:HTTP Error 404: Not Found\"],\"ok\":false}},\"journals\":{\"adapter\":{\"entries\":4,\"rc\":0,\"stderr_tail\":\"\",\"suspicious_count\":0,\"suspicious_tail\":[]},\"portal\":{\"entries\":35,\"rc\":0,\"stderr_tail\":\"\",\"suspicious_count\":0,\"suspicious_tail\":[]}},\"listeners\":{\"adapter_expected_socket_count\":1,\"adapter_main_pid\":\"364681\",\"adapter_socket_exists\":true,\"adapter_socket_lines\":[\"u_str LISTEN 0 5 /run/homelab-command-adapter/adapter.sock 21903727 * 0 users:((\\\"python3\\\",pid=364681,fd=3)) \"],\"adapter_tcp_listener_count\":0,\"adapter_unix_listener_count\":1,\"portal_expected_listener_count\":1,\"portal_listener_lines\":[\"LISTEN 0 5 [PRIVATE_IP]:18094 0.0.0.0:* users:((\\\"python3\\\",pid=536586,fd=3)) \"],\"portal_main_pid\":\"536586\",\"portal_tcp_listener_count\":1,\"ss_path\":\"/usr/bin/ss\"},\"next_safe_action\":\"DIAGNOSE_FROM_THIS_EVIDENCE;DO_NOT_ROLLBACK_YET\",\"production_changed\":false,\"rollback_started\":false,\"schema_version\":1,\"service_identity_tests\":{\"adapter_as_root_identity\":{\"rc\":0,\"status\":\"PASS\",\"stderr_tail\":\"\",\"stdout_marker_present\":true},\"portal_as_service_user\":{\"rc\":0,\"status\":\"PASS\",\"stderr_tail\":\"\",\"stdout_marker_present\":true}},\"source_anchor\":{\"note\":\"Evidence archive SHA is an external handoff anchor; live server state is checked separately.\",\"run5_capsule_sha256\":\"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff\",\"run5_command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"run5_evidence_archive_sha256\":\"2f5e4fe6eba2c985bade1d1623aeae6a57459f2fce8d6bfe1455c72b8c0eaec5\",\"run5_expires_at_utc\":\"2026-07-27T06:40:45.886243+00:00\",\"run5_plan_sha256\":\"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607\",\"run5_plan_unexpired\":true},\"stage\":\"RUN5_CURRENT_STATE_READONLY\",\"state_inventory\":{\"active_rollbacks\":[],\"capsule_root\":\"/var/lib/homelab-command-adapter/capsules\",\"capsule_root_present\":true,\"counts\":{\"BLOCKED\":0,\"FAIL\":0,\"IMPORTED\":1,\"OK\":2,\"RUNNING\":1,\"UNKNOWN\":0},\"duplicate_command_ids\":[],\"imported_nonfailure_count\":1,\"items\":[{\"command_id\":\"PORTAL-BROWSER-TEST-20260726T062104Z\",\"is_current\":false,\"mode\":\"read-only\",\"state_file\":\"7DOGTE6NK5.json\",\"status\":\"OK\",\"updated_at_utc\":null},{\"command_id\":\"RUN5-CURRENT-STATE-READONLY-20260726T115048Z\",\"is_current\":true,\"mode\":\"verify\",\"state_file\":\"CIIPI7AQFM.json\",\"status\":\"RUNNING\",\"updated_at_utc\":null},{\"command_id\":\"PORTAL-LINK-TEST-20260726T060415Z\",\"is_current\":false,\"mode\":\"read-only\",\"state_file\":\"MHM2MLFB3M.json\",\"status\":\"IMPORTED\",\"updated_at_utc\":null},{\"command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"is_current\":false,\"mode\":\"verify\",\"state_file\":\"VVPO47GNHZ.json\",\"status\":\"OK\",\"updated_at_utc\":null}],\"previous_running\":[],\"run5_plan_state\":{\"capsule_sha256\":\"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff\",\"command_id\":\"RUN5-QUALITY-GATE-PLAN-20260726T064045Z\",\"contains_plan_sha256\":false,\"evidence_sha256\":null,\"is_current\":false,\"mode\":\"verify\",\"state_file\":\"VVPO47GNHZ.json\",\"status\":\"OK\",\"updated_at_utc\":null},\"state_root\":\"/var/lib/homelab-command-adapter/state\",\"terminal_failures\":[],\"total\":4,\"unfinished_change_capsules\":[],\"unknown_states\":[]},\"status\":\"BLOCKED\",\"target\":{\"expected\":\"pve01\",\"hostname\":\"pve01\"},\"units\":{\"adapter\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-adapter.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-adapter.service\",\"LoadState\":\"loaded\",\"MainPID\":\"364681\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"root\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"},\"portal\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"ExecStart\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }\",\"ExecStartPre\":\"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-portal.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-portal.service\",\"LoadState\":\"loaded\",\"MainPID\":\"536586\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"homelab-command-portal\",\"is_active_rc\":\"0\",\"is_active_value\":\"active\",\"is_enabled_rc\":\"0\",\"is_enabled_value\":\"enabled\"}},\"warnings\":[],\"windows_bridge_verification_boundary\":{\"association_and_upload_proven_only_if_opened_through_installed_hcmd_bridge\":true,\"client_token_acl_checked_by_server\":false,\"client_token_content_read\":false,\"server_side_checks\":\"This capsule checks Portal/Adapter/runner after import and approval.\"}}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index b77b751..47f33b3 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,27 +1,26 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=RUN5-QUALITY-GATE-PLAN-20260726T064045Z -STATUS=OK -RC=0 +COMMAND_ID=RUN5-CURRENT-STATE-READONLY-20260726T115048Z +STATUS=FAIL +RC=1 HOST=pve01 MODE=verify -COMPONENT=command-quality-gate +COMPONENT=command-control-plane REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=dc7bb28d40500504adc63f37c89ed919c69d503e2e71f570ecd636cdcd04bb1f +COMMAND_SHA256=35bedfbf9a281687c60d70ccb18d0e132d4cfe6ba396954261af2c59bfa20673 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGES_MADE=false SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=86cdb1747be64f368435b841ec9a8145646db26e6387fbb2a6b8e69176b236bc -SANITIZED_OUTPUT_SHA256=86cdb1747be64f368435b841ec9a8145646db26e6387fbb2a6b8e69176b236bc +RAW_EVIDENCE_SHA256=e31ec46e83926efa8688790bf56442d768181590405f102829f43ebe11c7ec46 +SANITIZED_OUTPUT_SHA256=51089cb42b66558532ae645b1961b6bdfef861a24e23d15d6888b339b5a20d08 OUTPUT_BEGIN -RUN5_COMMAND_QUALITY_GATE_PLAN=PASS -PLAN_SHA256=99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607 -{"backup_changed":false,"cluster_changed":false,"gitea_changed":false,"plan":{"acceptance":["new adapter self-test as root","new portal self-test as homelab-command-portal","schema-v1 read-only capsule remains accepted","schema-v1 change capsule is rejected","schema-v2 change missing any gate field is rejected","schema-v2 APPLY with unknown plan is rejected","schema-v2 APPLY with wrong plan SHA is rejected","schema-v2 APPLY with failed plan is rejected","valid PLAN accepted and stored","valid APPLY bound to exact PLAN accepted","Portal renders gate and disables execute on failure","real read-only browser flow still passes","temporary test state and MinIO evidence cleaned"],"adapter_enforcement":{"changed_plan_sha_forbidden":true,"duplicate_ids_forbidden":true,"empty_required_arrays_forbidden":true,"failed_plan_reuse_forbidden":true,"portal_is_display_and_approval_layer":true,"same_failed_apply_without_new_plan_forbidden":true,"security_boundary":true,"shell_string_forbidden":true,"undeclared_path_mutation_forbidden":true,"unknown_quality_gate_fields_forbidden":true},"anti_regression_ids":["QG-001-SOURCE-EVIDENCE-LOCK","QG-002-PLAN-APPLY-SHA-BINDING","QG-003-SERVICE-IDENTITY-REHEARSAL","QG-004-EXPECTED-DIFF-SCOPE","QG-005-DIAGNOSTICS-BEFORE-ROLLBACK","QG-006-CLEANUP-VERIFICATION","QG-007-POSTCONDITION-SEAL","QG-008-FAILED-CAPSULE-REPLAN-REQUIRED","QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED","QG-010-PORTAL-SERVICE-USER-FILE-ACCESS","QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP","QG-012-SESSION-BOUND-HMAC-CSRF","QG-013-SIGV4-CANONICAL-QUERY-SORTED","QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED"],"capsule_contract":{"apply_requires_exact_plan_capsule_sha256":true,"apply_requires_exact_plan_evidence_sha256":true,"apply_requires_no_unresolved_failure":true,"apply_requires_plan_status_ok":true,"apply_requires_prior_plan_state":true,"apply_requires_same_target":true,"apply_requires_source_evidence_sha256":true,"apply_requires_unexpired_plan":true,"change_capsule_required_schema":2,"change_capsule_requires_plan_phase":true,"change_capsule_requires_quality_gate":true,"read_only_compatibility":"SCHEMA_V1_PRESERVED"},"current_state":{"executables":{"/usr/bin/python3":{"is_symlink":true,"path":"/usr/bin/python3","resolved_mode":"0o755","resolved_path":"/usr/bin/python3.13","resolved_sha256":"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b"},"/usr/bin/systemctl":{"is_symlink":false,"path":"/usr/bin/systemctl","resolved_mode":"0o755","resolved_path":"/usr/bin/systemctl","resolved_sha256":"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a"},"/usr/sbin/runuser":{"is_symlink":false,"path":"/usr/sbin/runuser","resolved_mode":"0o755","resolved_path":"/usr/sbin/runuser","resolved_sha256":"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7"}},"files":{"/etc/systemd/system/homelab-command-adapter.service":{"bytes":665,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-adapter.service","sha256":"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7","uid":0},"/etc/systemd/system/homelab-command-portal.service":{"bytes":981,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-portal.service","sha256":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","uid":0},"/root/_1/run3d.json":{"bytes":6966,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run3d.json","sha256":"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69","uid":0},"/root/_1/run4.json":{"bytes":3115,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run4.json","sha256":"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07","uid":0},"/usr/local/sbin/homelab-chat-run":{"bytes":11864,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-chat-run","sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","uid":0},"/usr/local/sbin/homelab-command-adapter":{"bytes":77441,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-adapter","sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","uid":0},"/usr/local/sbin/homelab-command-portal":{"bytes":39362,"gid":990,"group":"homelab-command-portal","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-portal","sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","uid":0}},"service_identity_tests":{"adapter_as_root_identity":"PASS","portal_as_service_user":"PASS"},"source_features":{"adapter":{"change_requires_production_true":true,"change_requires_rollback":true,"plan_apply_binding_present":false,"quality_gate_present":false,"schema_version_1_only":true,"unknown_top_level_fields_forbidden":false},"portal":{"csrf_present":true,"plan_apply_render_present":false,"quality_gate_render_present":false}},"state_inventory":{"BLOCKED":0,"FAIL":0,"IMPORTED":1,"OK":1,"RUNNING":1,"UNKNOWN":0,"capsule_root_present":true,"change_total":0,"change_unfinished":0,"duplicate_command_ids":[],"total":3},"units":{"adapter":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }","FragmentPath":"/etc/systemd/system/homelab-command-adapter.service","Group":"homelab-command-portal","Id":"homelab-command-adapter.service","LoadState":"loaded","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"root","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"},"portal":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }","ExecStartPre":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-command-portal.service","Group":"homelab-command-portal","Id":"homelab-command-portal.service","LoadState":"loaded","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"homelab-command-portal","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"}}},"declared_changes":{"backup":false,"cluster":false,"gitea":false,"production":true,"service_evidence_publication":true},"exact_diff_scope":[{"action":"REPLACE","after_sha256":"TO_BE_FIXED_IN_APPLY_CAPSULE","before_sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","group":"root","mode":"0750","owner":"root","path":"/usr/local/sbin/homelab-command-adapter"},{"action":"REPLACE","after_sha256":"TO_BE_FIXED_IN_APPLY_CAPSULE","before_sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","group":"homelab-command-portal","mode":"0750","owner":"root","path":"/usr/local/sbin/homelab-command-portal"}],"explicitly_out_of_scope":["homelab-chat-run source","systemd unit files","Nginx","Windows Bridge","MinIO bucket policies","backup configuration","cluster topology","Gitea repository configuration"],"kind":"homelab-command-quality-gate-plan","plan_id":"RUN5-COMMAND-QUALITY-GATE","portal_display":{"disable_execute_button_on_gate_failure":true,"show_anti_regression_ids":true,"show_cleanup":true,"show_diagnostics_before_rollback":true,"show_exact_diff":true,"show_gate_status":true,"show_plan_reference":true,"show_plan_sha":true,"show_postconditions":true,"show_rollback":true,"show_service_identity_tests":true,"show_source_evidence_sha":true},"quality_gate_version":1,"required_change_fields":["phase","source_evidence","plan_reference","target_identity","preconditions","expected_diff","service_identity_tests","rollback_plan","postconditions","diagnostics_plan","cleanup_plan","anti_regression_ids"],"rollback":{"diagnostics_before_restore":true,"post_restore_external_browser_path_test":true,"post_restore_service_identity_test":true,"restore_adapter_sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","restore_portal_sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","strategy":"EXACT_TWO_FILE_RESTORE"},"schema_version":1,"source_lock":{"adapter_unit_sha256":"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7","installed_adapter_sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","installed_portal_sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","portal_unit_sha256":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","run3d_report_sha256":"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69","run4_report_sha256":"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07","runner_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9"},"structured_requirements":{"check_item":["id","type","target","expected"],"expected_diff_item":["path","action","before_sha256","after_sha256","owner","group","mode"],"plan_reference":["command_id","capsule_sha256","evidence_sha256","plan_sha256"],"source_evidence":["command_id","capsule_sha256","evidence_sha256"],"target_identity":["node","component","service_user","service_group"]}},"plan_sha256":"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607","production_changed":false,"stage":"RUN5_COMMAND_QUALITY_GATE_PLAN","status":"PASS"} +RUN5_CURRENT_STATE_READONLY=BLOCKED +{"anti_regression_checks_exercised":["QG-001-SOURCE-EVIDENCE-LOCK","QG-003-SERVICE-IDENTITY-REHEARSAL","QG-005-DIAGNOSTICS-BEFORE-ROLLBACK","QG-008-FAILED-CAPSULE-REPLAN-REQUIRED","QG-009-EXECUTABLE-SYMLINK-TARGET-VERIFIED","QG-010-PORTAL-SERVICE-USER-FILE-ACCESS","QG-011-BOUNDED-HEALTH-AND-RESTART-LOOP","QG-014-OVERLAY-TECHNOLOGY-DETECTED-NOT-ASSUMED"],"backup_changed":false,"checked_at_utc":"2026-07-26T11:57:48.018107+00:00","cluster_changed":false,"command_id":"RUN5-CURRENT-STATE-READONLY-20260726T115048Z","diagnostics_collected_before_any_rollback":true,"dns":{"evidence.vpn.gram1.ru":["95.84.154.183"],"run.vpn.gram1.ru":["100.100.60.182"]},"executables":{"/usr/bin/journalctl":{"is_symlink":false,"path":"/usr/bin/journalctl","resolved_mode":"0o755","resolved_path":"/usr/bin/journalctl","resolved_sha256":"6ad392fc8f1a10ac892fdb328e67761944c32707db5e97602cb84eed502e47f1"},"/usr/bin/python3":{"is_symlink":true,"path":"/usr/bin/python3","resolved_mode":"0o755","resolved_path":"/usr/bin/python3.13","resolved_sha256":"4703a3d15898c0b5d81c3f939e93bdd8ca6116342093fb160ab1e01860dd7d8b"},"/usr/bin/systemctl":{"is_symlink":false,"path":"/usr/bin/systemctl","resolved_mode":"0o755","resolved_path":"/usr/bin/systemctl","resolved_sha256":"848c70d7e2c2f43f4f93287897ac8946e8eda45e7daa5f2975d9728071856b1a"},"/usr/sbin/runuser":{"is_symlink":false,"path":"/usr/sbin/runuser","resolved_mode":"0o755","resolved_path":"/usr/sbin/runuser","resolved_sha256":"572f3c018101cb1bb8885951388d4f4501e1354cb8ab986e18265265b54970d7"}},"failures":["local health request failed","overlay health request failed"],"files":{"/etc/systemd/system/homelab-command-adapter.service":{"bytes":665,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-adapter.service","sha256":"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7","uid":0},"/etc/systemd/system/homelab-command-portal.service":{"bytes":981,"gid":0,"group":"root","is_symlink":false,"mode":"0o644","owner":"root","path":"/etc/systemd/system/homelab-command-portal.service","sha256":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","uid":0},"/root/_1/run3d.json":{"bytes":6966,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run3d.json","sha256":"700db9263402ea88b838f04f971c768e1f1f9b7e8746d96ca73fa0f8a9789f69","uid":0},"/root/_1/run4.json":{"bytes":3115,"gid":0,"group":"root","is_symlink":false,"mode":"0o600","owner":"root","path":"/root/_1/run4.json","sha256":"f6da0ca4cf8ca18d301e4b45c683d1f2d6de103dfa7649cf91f600493d90ec07","uid":0},"/usr/local/sbin/homelab-chat-run":{"bytes":11864,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-chat-run","sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","uid":0},"/usr/local/sbin/homelab-command-adapter":{"bytes":77441,"gid":0,"group":"root","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-adapter","sha256":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","uid":0},"/usr/local/sbin/homelab-command-portal":{"bytes":39362,"gid":990,"group":"homelab-command-portal","is_symlink":false,"mode":"0o750","owner":"root","path":"/usr/local/sbin/homelab-command-portal","sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","uid":0}},"gitea_changed":false,"health":{"local":{"attempts":5,"errors":["attempt=1:HTTPError:HTTP Error 403: Forbidden","attempt=2:HTTPError:HTTP Error 403: Forbidden","attempt=3:HTTPError:HTTP Error 403: Forbidden","attempt=4:HTTPError:HTTP Error 403: Forbidden","attempt=5:HTTPError:HTTP Error 403: Forbidden"],"ok":false},"overlay":{"attempts":5,"errors":["attempt=1:HTTPError:HTTP Error 404: Not Found","attempt=2:HTTPError:HTTP Error 404: Not Found","attempt=3:HTTPError:HTTP Error 404: Not Found","attempt=4:HTTPError:HTTP Error 404: Not Found","attempt=5:HTTPError:HTTP Error 404: Not Found"],"ok":false}},"journals":{"adapter":{"entries":4,"rc":0,"stderr_tail":"","suspicious_count":0,"suspicious_tail":[]},"portal":{"entries":35,"rc":0,"stderr_tail":"","suspicious_count":0,"suspicious_tail":[]}},"listeners":{"adapter_expected_socket_count":1,"adapter_main_pid":"364681","adapter_socket_exists":true,"adapter_socket_lines":["u_str LISTEN 0 5 /run/homelab-command-adapter/adapter.sock 21903727 * 0 users:((\"python3\",pid=364681,fd=3)) "],"adapter_tcp_listener_count":0,"adapter_unix_listener_count":1,"portal_expected_listener_count":1,"portal_listener_lines":["LISTEN 0 5 [PRIVATE_IP]:18094 0.0.0.0:* users:((\"python3\",pid=536586,fd=3)) "],"portal_main_pid":"536586","portal_tcp_listener_count":1,"ss_path":"/usr/bin/ss"},"next_safe_action":"DIAGNOSE_FROM_THIS_EVIDENCE;DO_NOT_ROLLBACK_YET","production_changed":false,"rollback_started":false,"schema_version":1,"service_identity_tests":{"adapter_as_root_identity":{"rc":0,"status":"PASS","stderr_tail":"","stdout_marker_present":true},"portal_as_service_user":{"rc":0,"status":"PASS","stderr_tail":"","stdout_marker_present":true}},"source_anchor":{"note":"Evidence archive SHA is an external handoff anchor; live server state is checked separately.","run5_capsule_sha256":"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff","run5_command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","run5_evidence_archive_sha256":"2f5e4fe6eba2c985bade1d1623aeae6a57459f2fce8d6bfe1455c72b8c0eaec5","run5_expires_at_utc":"2026-07-27T06:40:45.886243+00:00","run5_plan_sha256":"99fac83369ee8d5098c07cf243398d8b6b144e4fbc9ef9b39ef75436b109d607","run5_plan_unexpired":true},"stage":"RUN5_CURRENT_STATE_READONLY","state_inventory":{"active_rollbacks":[],"capsule_root":"/var/lib/homelab-command-adapter/capsules","capsule_root_present":true,"counts":{"BLOCKED":0,"FAIL":0,"IMPORTED":1,"OK":2,"RUNNING":1,"UNKNOWN":0},"duplicate_command_ids":[],"imported_nonfailure_count":1,"items":[{"command_id":"PORTAL-BROWSER-TEST-20260726T062104Z","is_current":false,"mode":"read-only","state_file":"7DOGTE6NK5.json","status":"OK","updated_at_utc":null},{"command_id":"RUN5-CURRENT-STATE-READONLY-20260726T115048Z","is_current":true,"mode":"verify","state_file":"CIIPI7AQFM.json","status":"RUNNING","updated_at_utc":null},{"command_id":"PORTAL-LINK-TEST-20260726T060415Z","is_current":false,"mode":"read-only","state_file":"MHM2MLFB3M.json","status":"IMPORTED","updated_at_utc":null},{"command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","is_current":false,"mode":"verify","state_file":"VVPO47GNHZ.json","status":"OK","updated_at_utc":null}],"previous_running":[],"run5_plan_state":{"capsule_sha256":"ad5eee7ccd3e72fe59adbf0cd9985ba2f40735a32626b6753a6700f88376e3ff","command_id":"RUN5-QUALITY-GATE-PLAN-20260726T064045Z","contains_plan_sha256":false,"evidence_sha256":null,"is_current":false,"mode":"verify","state_file":"VVPO47GNHZ.json","status":"OK","updated_at_utc":null},"state_root":"/var/lib/homelab-command-adapter/state","terminal_failures":[],"total":4,"unfinished_change_capsules":[],"unknown_states":[]},"status":"BLOCKED","target":{"expected":"pve01","hostname":"pve01"},"units":{"adapter":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-adapter --serve ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=364681 ; code=(null) ; status=0/0 }","FragmentPath":"/etc/systemd/system/homelab-command-adapter.service","Group":"homelab-command-portal","Id":"homelab-command-adapter.service","LoadState":"loaded","MainPID":"364681","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"root","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"},"portal":{"ActiveState":"active","ExecMainStatus":"0","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[n/a] ; pid=536586 ; code=(null) ; status=0/0 }","ExecStartPre":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -B /usr/local/sbin/homelab-command-portal --self-test ; ignore_errors=no ; start_time=[Sun 2026-07-26 09:18:49 MSK] ; stop_time=[Sun 2026-07-26 09:18:49 MSK] ; pid=536585 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-command-portal.service","Group":"homelab-command-portal","Id":"homelab-command-portal.service","LoadState":"loaded","MainPID":"536586","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"homelab-command-portal","is_active_rc":"0","is_active_value":"active","is_enabled_rc":"0","is_enabled_value":"enabled"}},"warnings":[],"windows_bridge_verification_boundary":{"association_and_upload_proven_only_if_opened_through_installed_hcmd_bridge":true,"client_token_acl_checked_by_server":false,"client_token_content_read":false,"server_side_checks":"This capsule checks Portal/Adapter/runner after import and approval."}} OUTPUT_END CHAT_OUTPUT_END