From 3021e87f719c8a86e07698bdfa70f9bda8550ef6 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sat, 1 Aug 2026 14:17:03 +0000 Subject: [PATCH] runtime: publish CONTEXT-AUTO-20260801T141701Z --- .../CONTEXT-AUTO-20260801T141701Z.json | 1 + .../history/CONTEXT-AUTO-20260801T141701Z.txt | 164 ++++++++++++++++ runtime/latest.json | 39 +--- runtime/latest.txt | 182 +++++++++++++++--- 4 files changed, 322 insertions(+), 64 deletions(-) create mode 100644 runtime/history/CONTEXT-AUTO-20260801T141701Z.json create mode 100644 runtime/history/CONTEXT-AUTO-20260801T141701Z.txt diff --git a/runtime/history/CONTEXT-AUTO-20260801T141701Z.json b/runtime/history/CONTEXT-AUTO-20260801T141701Z.json new file mode 100644 index 0000000..b4c1933 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260801T141701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260801T141701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-08-01T14:17:01Z","finished_at_utc":"2026-08-01T14:17:02Z","reference_register_checked":true,"reference_sha256":"5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e","error_register_checked":true,"error_register_sha256":"24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} diff --git a/runtime/history/CONTEXT-AUTO-20260801T141701Z.txt b/runtime/history/CONTEXT-AUTO-20260801T141701Z.txt new file mode 100644 index 0000000..7a47284 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260801T141701Z.txt @@ -0,0 +1,164 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +STATUS=OK +RC=0 +HOST=pve01 +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e +ERROR_REGISTER_SHA[PRIVATE_IP]c7fa[PRIVATE_IP]583c4aefac[PRIVATE_IP]1736ed[PRIVATE_IP]ab83 +OUTPUT_BEGIN +GENERATED_AT_UTC=[PRIVATE_IP]T14:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Sat Aug [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.db +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]668e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":356995,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":357079,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":357040,"vmid":112},{"cpu":[PRIVATE_IP]763e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":357083,"vmid":113},{"cpu":[PRIVATE_IP]49921,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":357026,"vmid":130},{"cpu":[PRIVATE_IP]42314,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"nextcloud","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356992,"vmid":150},{"cpu":[PRIVATE_IP]779118,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":357076,"vmid":160},{"cpu":[PRIVATE_IP]41361,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356988,"vmid":170},{"cpu":[PRIVATE_IP]12987,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356985,"vmid":171},{"cpu":[PRIVATE_IP]003447,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/180","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"cluster-admin","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":357073,"vmid":180},{"cpu":[PRIVATE_IP]421217,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":357023,"vmid":190},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]32053,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":357044},{"cgroup-mode":2,"cpu":[PRIVATE_IP]26893,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":357097},{"cgroup-mode":2,"cpu":[PRIVATE_IP]67589,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":357116},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.66% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.31% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● homelab-crypto-portfolio-chart-health.service loaded failed failed Crypto portfolio chart health check +● skladchik-reports-monitor-supervisor.service loaded failed failed Skladchik reports monitor full supervisor + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sat [PRIVATE_IP] 17:17:08 MSK 5s Sat [PRIVATE_IP] 17:15:07 MSK 1min 55s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Sat [PRIVATE_IP] 17:17:14 MSK 12s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Sat [PRIVATE_IP] 17:17:14 MSK 12s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sat [PRIVATE_IP] 17:17:18 MSK 15s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sat [PRIVATE_IP] 17:18:07 MSK 1min 4s Sat [PRIVATE_IP] 17:13:07 MSK 3min 55s ago netbird-peers-health.timer netbird-peers-health.service +Sat [PRIVATE_IP] 17:18:43 MSK 1min 40s Sat [PRIVATE_IP] 17:13:34 MSK 3min 28s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Sat [PRIVATE_IP] 17:19:13 MSK 2min 10s Sat [PRIVATE_IP] 17:09:13 MSK 7min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sat [PRIVATE_IP] 17:19:31 MSK 2min 28s Sat [PRIVATE_IP] 17:14:14 MSK 2min 47s ago homelab-health-metrics.timer homelab-health-metrics.service +Sat [PRIVATE_IP] 17:28:25 MSK 11min Sat [PRIVATE_IP] 17:13:25 MSK 3min 37s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sat [PRIVATE_IP] 17:30:00 MSK 12min Sat [PRIVATE_IP] 17:15:07 MSK 1min 55s ago homelab-incident-journal.timer homelab-incident-journal.service +Sat [PRIVATE_IP] 17:30:30 MSK 13min Sat [PRIVATE_IP] 16:57:07 MSK 19min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sat [PRIVATE_IP] 17:30:31 MSK 13min Sat [PRIVATE_IP] 17:15:53 MSK 1min 8s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sat [PRIVATE_IP] 17:30:45 MSK 13min Sat [PRIVATE_IP] 17:15:14 MSK 1min 47s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sat [PRIVATE_IP] 17:31:15 MSK 14min Sat [PRIVATE_IP] 17:15:50 MSK 1min 12s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sat [PRIVATE_IP] 17:34:31 MSK 17min Sat [PRIVATE_IP] 17:03:50 MSK 13min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sat [PRIVATE_IP] 20:08:25 MSK 2h 51min Sat [PRIVATE_IP] 14:08:25 MSK 3h 8min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sat [PRIVATE_IP] 23:42:29 MSK 6h Sat [PRIVATE_IP] 13:19:25 MSK 3h 57min ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 00:00:00 MSK 6h Sat [PRIVATE_IP] 00:00:07 MSK 17h ago dpkg-db-backup.timer dpkg-db-backup.service +Sun [PRIVATE_IP] 00:03:20 MSK 6h Sat [PRIVATE_IP] 00:09:14 MSK 17h ago homelab-docker-health.timer homelab-docker-health.service +Sun [PRIVATE_IP] 00:05:18 MSK 6h Sat [PRIVATE_IP] 00:46:47 MSK 16h ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 00:13:15 MSK 6h Sat [PRIVATE_IP] 00:13:50 MSK 17h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Sun [PRIVATE_IP] 00:15:01 MSK 6h Sat [PRIVATE_IP] 00:19:05 MSK 16h ago homelab-quality-gate.timer homelab-quality-gate.service +Sun [PRIVATE_IP] 00:19:54 MSK 7h Sat [PRIVATE_IP] 00:08:50 MSK 17h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Sun [PRIVATE_IP] 02:57:37 MSK 9h Sat [PRIVATE_IP] 04:22:14 MSK 12h ago man-db.timer man-db.service +Sun [PRIVATE_IP] 03:10:25 MSK 9h Sun [PRIVATE_IP] 03:10:15 MSK - xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:49 MSK 9h Sun [PRIVATE_IP] 03:10:15 MSK - e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:50:00 MSK 10h Sat [PRIVATE_IP] 03:50:07 MSK 13h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Sun [PRIVATE_IP] 04:29:55 MSK 11h Sat [PRIVATE_IP] 04:46:05 MSK 12h ago pve-daily-update.timer pve-daily-update.service +Sun [PRIVATE_IP] 04:51:05 MSK 11h Sat [PRIVATE_IP] 04:43:14 MSK 12h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Sun [PRIVATE_IP] 04:54:47 MSK 11h Sat [PRIVATE_IP] 05:12:42 MSK 12h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Sun [PRIVATE_IP] 06:29:37 MSK 13h Sat [PRIVATE_IP] 06:40:57 MSK 10h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sun [PRIVATE_IP] 07:02:42 MSK 13h Sat [PRIVATE_IP] 07:19:50 MSK 9h ago homelab-drift-check.timer homelab-drift-check.service +Sun [PRIVATE_IP] 07:22:50 MSK 14h Sat [PRIVATE_IP] 07:24:32 MSK 9h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sun [PRIVATE_IP] 07:54:48 MSK 14h Sat [PRIVATE_IP] 07:48:32 MSK 9h ago homelab-alerting-health.timer homelab-alerting-health.service +Sun [PRIVATE_IP] 07:56:11 MSK 14h Sat [PRIVATE_IP] 08:05:50 MSK 9h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sun [PRIVATE_IP] 07:56:38 MSK 14h Sat [PRIVATE_IP] 07:54:12 MSK 9h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sun [PRIVATE_IP] 08:00:13 MSK 14h Sat [PRIVATE_IP] 07:59:49 MSK 9h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sun [PRIVATE_IP] 08:10:52 MSK 14h Sat [PRIVATE_IP] 08:07:24 MSK 9h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sun [PRIVATE_IP] 08:12:48 MSK 14h Sat [PRIVATE_IP] 08:21:36 MSK 8h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sun [PRIVATE_IP] 08:13:55 MSK 14h Sat [PRIVATE_IP] 08:14:50 MSK 9h ago homelab-overall-health.timer homelab-overall-health.service +Sun [PRIVATE_IP] 08:21:50 MSK 15h Sat [PRIVATE_IP] 08:11:08 MSK 9h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sun [PRIVATE_IP] 08:33:48 MSK 15h Sat [PRIVATE_IP] 08:31:50 MSK 8h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sun [PRIVATE_IP] 08:35:29 MSK 15h Sat [PRIVATE_IP] 08:34:24 MSK 8h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sun [PRIVATE_IP] 08:48:18 MSK 15h Sat [PRIVATE_IP] 08:41:36 MSK 8h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sun [PRIVATE_IP] 08:50:21 MSK 15h Sat [PRIVATE_IP] 08:51:13 MSK 8h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sun [PRIVATE_IP] 08:51:19 MSK 15h Sat [PRIVATE_IP] 08:51:13 MSK 8h ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Sun [PRIVATE_IP] 09:19:14 MSK 16h Sat [PRIVATE_IP] 09:06:18 MSK 8h ago memos-offhost-sync.timer memos-offhost-sync.service +Sun [PRIVATE_IP] 10:15:00 MSK 16h Sat [PRIVATE_IP] 10:15:00 MSK 7h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 14:20:23 MSK 21h Sat [PRIVATE_IP] 14:20:23 MSK 2h 56min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Mon [PRIVATE_IP] 00:11:49 MSK 1 day 6h Mon [PRIVATE_IP] 00:13:29 MSK - homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:17:32 MSK 1 day 8h Mon [PRIVATE_IP] 01:18:15 MSK - fstrim.timer fstrim.service +- - Sat [PRIVATE_IP] 17:17:02 MSK 16ms ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +58 timers listed. +- Обрезанная, повреждённая или частично вставленная команда считается невыполненной; сначала проводится side-effect audit. +- Хвост parse-ошибки закрывается только после доказательства отсутствия изменений и временных артефактов. +- Proof: /var/lib/homelab-change-sets/operator-command-size-guard-v[PRIVATE_IP]T182653Z/report.txt + +## HOMELAB_ADMIN_CLI_CONTRACT_[PRIVATE_IP] +- Поддерживаемые команды: version, status, lint TASK_DIR, validate TASK_DIR, run TASK_DIR PHASE. +- Отдельная команда --help отсутствует. Неизвестный аргумент печатает usage и штатно возвращает RC=64. +- Нельзя трактовать RC=64 от --help как неисправность runner. +- Для проверки доступности runner использовать homelab-admin version; для структуры CLI использовать зафиксированную usage-строку. +- Proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v[PRIVATE_IP]T183338Z/report.txt + +AUTOMATIC_CLUSTER_CONTEXT_REFRESH_[PRIVATE_IP] +Collector: /usr/local/sbin/homelab-context-collect +Scheduler: hourly at minute 17 via /etc/cron.d/homelab-context-refresh +Destination: immutable Gitea runtime history with CONTEXT-AUTO UTC command IDs. + +AUTOMATIC_CLUSTER_CONTEXT_REFRESH_DIRECT_[PRIVATE_IP] +Publisher: /usr/local/sbin/homelab-context-refresh-direct +Schedule: hourly at minute 17. +Destination: immutable assistant-runtime history with CONTEXT-AUTO UTC IDs. +ANTI_REGRESSION_TOKEN=HOMELAB_VM_2CLOUD_444_OUTER_LAUNCHER_BOUNDARY_REQUIRED +- Anti-regression: validate the complete outer launcher with a shell syntax check and verify the wrapper argument boundary before issuing it. +- Infrastructure action executed: none. +- Backup payload impact: none. +- Production impact: none. +- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +- Registered at: [PRIVATE_IP]T11:20:32Z + +## ERROR_[PRIVATE_IP]_HOMELAB_VM_2CLOUD_DRAIN_CLOSURE_PREFLIGHT_446 +COMMAND_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446 +- Symptom: homelab-chat-run-linked printed Usage and skipped result-feed publication as invalid input. +- Root cause: the diagnostic script was piped to wrapper stdin and the mandatory double-dash command separator was omitted. +- Correction: invoke homelab-chat-run-linked as COMMAND_ID MODE COMPONENT -- command arguments; stdin is not its command interface. +ANTI_REGRESSION_TOKEN=HOMELAB_CHAT_RUN_COMMAND_REQUIRES_DOUBLE_DASH +- Anti-regression: treat wrapper Usage as the authoritative CLI contract and syntax-check the complete launcher, not only its inner payload. +- Infrastructure action executed: none. +- Backup payload impact: none. +- Production impact: none. +- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +- Registered at: [PRIVATE_IP]T11:20:32Z +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 628a5ba..b4c1933 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "verify", - "component": "cluster-v41-deep-audit", - "started_at_utc": "2026-08-01T13:48:51Z", - "finished_at_utc": "2026-08-01T13:48:56Z", - "reference_register_checked": true, - "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", - "error_register_checked": true, - "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c", - "duplicate_failed_command_blocked": false, - "block_reason": null, - "execution_started": true, - "change_declared": false, - "result_contract_valid": true, - "result_contract_status": null, - "result_contract_error": null, - "command_rc": 0, - "changes_made": false, - "rollback_started": false, - "rollback_restored": null, - "mutation_outcome": "NO_MUTATION", - "sanitized": true, - "secrets_included": false, - "private_addresses_included": false, - "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", - "sanitized_output_sha256": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"audit_duration_seconds\":5.276,\"audit_scope\":\"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities\",\"changes_made\":false,\"command_evidence\":{\"apt_simulated_upgrade\":{\"duration_seconds\":0.63,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\",\"stdout_truncated\":false},\"backup_jobs\":{\"duration_seconds\":0.47,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"backup_tasks\":{\"duration_seconds\":0.484,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"ceph_health\":{\"duration_seconds\":0.061,\"rc\":1,\"stderr_excerpt\":\"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\\n\",\"stderr_sha256\":\"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cert_pve-ssl.pem\":{\"duration_seconds\":0.009,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"stdout_truncated\":false},\"cert_pveproxy-ssl.pem\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"stdout_truncated\":false},\"cluster_status_json\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cluster_vm_resources\":{\"duration_seconds\":0.465,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"df_bytes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d\",\"stdout_truncated\":false},\"df_inodes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774\",\"stdout_truncated\":false},\"ha_resources\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"hostname\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430\",\"stdout_truncated\":false},\"kernel\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471\",\"stdout_truncated\":false},\"kernel_errors_7d\":{\"duration_seconds\":0.047,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d\",\"stdout_truncated\":false},\"lvs_json\":{\"duration_seconds\":0.023,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196\",\"stdout_truncated\":false},\"nodes_json\":{\"duration_seconds\":0.459,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pve_firewall_status\":{\"duration_seconds\":0.352,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvecm_status\":{\"duration_seconds\":0.155,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvesm_status_json\":{\"duration_seconds\":0.232,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pveversion\":{\"duration_seconds\":0.36,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a\",\"stdout_truncated\":false},\"replication_jobs\":{\"duration_seconds\":0.472,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"service_corosync\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pve-cluster\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvedaemon\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pveproxy\":{\"duration_seconds\":0.004,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvescheduler\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvestatd\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"smart_health_0\":{\"duration_seconds\":0.011,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a\",\"stdout_truncated\":false},\"smart_scan\":{\"duration_seconds\":0.008,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb\",\"stdout_truncated\":false},\"sshd_effective\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c\",\"stdout_truncated\":false},\"systemd_failed\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0\",\"stdout_truncated\":false},\"timedatectl\":{\"duration_seconds\":0.044,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179\",\"stdout_truncated\":false},\"uptime\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64\",\"stdout_truncated\":false},\"zpool_status\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac\",\"stderr_truncated\":false,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false}},\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"control_plane_error\":null,\"fatal_errors\":[],\"findings\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"},{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"},{\"action\":\"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.\",\"category\":\"network\",\"evidence\":{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2},\"severity\":\"MEDIUM\",\"task_id\":\"NET-DROPS-wt0\",\"title\":\"Есть сетевые ошибки/дропы на wt0\"},{\"action\":\"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.\",\"category\":\"security\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"MEDIUM\",\"task_id\":\"FIREWALL-STATE\",\"title\":\"Proxmox firewall не подтверждён как enabled/running\"},{\"action\":\"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"MEDIUM\",\"task_id\":\"SSH-ROOT-LOGIN\",\"title\":\"Разрешён прямой SSH-доступ root\"},{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}],\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"production_site_changed\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"sections\":{\"backups\":{\"backup_storages\":[],\"failed_recent\":[],\"guest_backup_state\":[],\"inventory_count\":0,\"jobs\":[],\"recent_tasks\":[]},\"capacity\":{\"guests\":[],\"memory_overcommit\":[],\"nodes\":[]},\"cluster_nodes\":[],\"cluster_quorum\":{\"parsed\":{},\"raw_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"hardware\":{\"cpu_count\":24,\"kernel_critical_pattern_count_7d\":0,\"kernel_priority_0_3_count_7d\":9,\"load_15_per_cpu\":0.02,\"load_1_5_15\":[0.41,0.4,0.42],\"memory_available\":8871043072,\"memory_available_percent\":26.58,\"memory_total\":33379028992,\"smart_health\":[{\"device\":\"/dev/nvme0\",\"output_sha256\":\"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105\",\"passed\":true,\"rc\":0,\"unknown\":false}],\"swap_total\":10737414144,\"swap_used_percent\":0.0,\"temperatures\":[{\"celsius\":27.8,\"sensor\":\"acpitz\"},{\"celsius\":41.0,\"sensor\":\"x86_pkg_temp\"}]},\"identity\":{\"audit_utc\":\"2026-08-01T13:48:52.070106+00:00\",\"hostname\":\"pve01.gram1.ru\",\"kernel\":\"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux\",\"pveversion\":\"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\\nproxmox-kernel-helper: 9.2.0\\nproxmox-kernel-7.0: 7.0.12-1\\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\\nceph-fuse: 19.2.3-pve4\\ncorosync: 3.1.10-pve2\\ncriu: 4.1.1-1\\nfrr-pythontools: 10.6.1-1+pve2\\nifupdown2: 3.3.0-1+pmx12\\nintel-microcode: 3.20251111.1~deb13u1\\nksm-control-daemon: 1.5-1\\nlibjs-extjs: 7.0.0-5\\nlibproxmox-acme-perl: 1.7.1\\nlibproxmox-backup-qemu0: 2.0.2\\nlibproxmox-rs-perl: 0.4.1\\nlibpve-access-control: 9.1.1\\nlibpve-apiclient-perl: 3.4.2\\nlibpve-cluster-api-perl: 9.1.6\\nlibpve-cluster-perl: 9.1.6\\nlibpve-common-perl: 9.1.16\\nlibpve-guest-common-perl: 6.0.4\\nlibpve-http-server-perl: 6.0.5\\nlibpve-network-perl: 1.6.6\\nlibpve-notify-perl: 9.1.6\\nlibpve-rs-perl: 0.15.3\\nlibpve-storage-perl: 9.1.6\\nlibspice-server1: 0.15.2-1+b1\\nlvm2: 2.03.31-2+pmx1\\nlxc-pve: 7.0.0-2\\nlxcfs: 7.0.0-pve1\\nnovnc-pve: 1.7.0-1\\nproxmox-backup-client: 4.2.2-1\\nproxmox-backup-file-restore: 4.2.2-1\\nproxmox-backup-restore-image: 1.0.0\\nproxmox-firewall: 1.2.3\\nproxmox-kernel-helper: 9.2.0\\nproxmox-mail-forward: 1.0.3\\nproxmox-mini-journalreader: 1.6\\nproxmox-offline-mirror-helper: 0.7.4\\nproxmox-widget-toolkit: 5.2.5\\npve-cluster: 9.1.6\\npve-container: 6.1.10\\npve-docs: 9.2.2\\npve-edk2-firmware: 4.2025.05-2\\npve-esxi-import-tools: 1.0.1\\npve-firewall: 6.0.4\\npve-firmware: 3.18-4\\npve-ha-manager: 5.2.4\\npve-i18n: 3.8.0\\npve-qemu-kvm: 11.0.0-4\\npve-xtermjs: 6.0.0-1\\nqemu-server: 9.1.17\\nsmartmontools: 7.5-pve2\\nspiceterm: 3.4.2\\nswtpm: 0.8.0+pve3\\nvncterm: 1.9.2\\nzfsutils-linux: 2.4.2-pve1\",\"uptime\":\"up 4 days, 2 hours, 43 minutes\"},\"network\":{\"bonds\":[],\"interfaces\":[{\"interface\":\"bonding_masters\",\"mtu\":null,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"enx6c1ff7c17576\",\"mtu\":1500,\"operstate\":\"down\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"nic0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":11827,\"rx_errors\":0,\"tx_dropped\":6,\"tx_errors\":0},{\"interface\":\"podman0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap150i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap170i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap171i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth110i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth112i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"vmbr0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":9,\"tx_errors\":0},{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2}]},\"resilience\":{\"ha_resources\":[],\"replication_jobs\":[],\"snapshots\":[]},\"security_updates\":{\"certificates\":[{\"days_remaining\":680.7,\"not_after\":\"2028-06-12T07:27:09+00:00\",\"output_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"path\":\"/etc/pve/local/pve-ssl.pem\"},{\"days_remaining\":45.1,\"not_after\":\"2026-09-15T16:01:38+00:00\",\"output_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"path\":\"/etc/pve/local/pveproxy-ssl.pem\"}],\"firewall_status\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"reboot_required\":false,\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"time\":{\"NTP\":\"yes\",\"NTPSynchronized\":\"yes\",\"Timezone\":\"Europe/Moscow\"},\"upgradable_count\":92,\"upgradable_packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"]},\"services\":{\"failed_units\":[{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"}],\"key_services\":{\"corosync\":\"active\",\"pve-cluster\":\"active\",\"pvedaemon\":\"active\",\"pveproxy\":\"active\",\"pvescheduler\":\"active\",\"pvestatd\":\"active\"}},\"storage\":{\"ceph_health\":null,\"filesystems\":[{\"available\":85349027840,\"filesystem\":\"/dev/mapper/pve-root\",\"inode_used_percent\":3.0,\"mount\":\"/\",\"total\":105089261568,\"type\":\"ext4\",\"used\":14354747392,\"used_percent\":15.0},{\"available\":53818,\"filesystem\":\"efivarfs\",\"inode_used_percent\":null,\"mount\":\"/sys/firmware/efi/efivars\",\"total\":196608,\"type\":\"efivarfs\",\"used\":137670,\"used_percent\":72.0},{\"available\":1062166528,\"filesystem\":\"/dev/nvme0n1p2\",\"inode_used_percent\":null,\"mount\":\"/boot/efi\",\"total\":1071628288,\"type\":\"vfat\",\"used\":9461760,\"used_percent\":1.0},{\"available\":141639290880,\"filesystem\":\"/dev/mapper/pve-homelab--staging\",\"inode_used_percent\":1.0,\"mount\":\"/mnt/staging\",\"total\":315926315008,\"type\":\"ext4\",\"used\":158164119552,\"used_percent\":53.0},{\"available\":132767744,\"filesystem\":\"/dev/fuse\",\"inode_used_percent\":1.0,\"mount\":\"/etc/pve\",\"total\":134217728,\"type\":\"fuse\",\"used\":1449984,\"used_percent\":2.0},{\"available\":85349027840,\"filesystem\":\"overlay\",\"inode_used_percent\":3.0,\"mount\":\"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged\",\"total\":105089261568,\"type\":\"overlay\",\"used\":14354747392,\"used_percent\":15.0}],\"lvm_report_present\":true,\"mdstat_sha256\":\"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8\",\"pvesm\":[],\"zpool_summary\":\"\"}},\"status\":\"OK\",\"summary\":{\"critical_count\":2,\"critical_tasks\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"}],\"high_count\":5,\"high_priority_tasks\":[{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"}],\"info_count\":0,\"low_count\":0,\"medium_count\":3,\"opportunity_count\":4,\"recommended_next_projects\":[{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}]}}\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260801T141701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-08-01T14:17:01Z","finished_at_utc":"2026-08-01T14:17:02Z","reference_register_checked":true,"reference_sha256":"5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e","error_register_checked":true,"error_register_sha256":"24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83","changes_made":false,"sanitized":true,"secrets_included":false,"private_addresses_included":false,"output":"AUTOMATIC_CLUSTER_CONTEXT_REFRESH=OK"} diff --git a/runtime/latest.txt b/runtime/latest.txt index a7e0e15..7a47284 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,34 +1,164 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=verify -COMPONENT=cluster-v41-deep-audit -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c -DUPLICATE_FAILED_COMMAND_BLOCKED=false -EXECUTION_STARTED=true -CHANGE_DECLARED=false -RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE -RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=0 -CHANGES_MADE=false -ROLLBACK_STARTED=false -ROLLBACK_RESTORED=null -MUTATION_OUTCOME=NO_MUTATION -SANITIZED=yes -SECRETS_INCLUDED=no -PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 -SANITIZED_OUTPUT_SHA256=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e +ERROR_REGISTER_SHA[PRIVATE_IP]c7fa[PRIVATE_IP]583c4aefac[PRIVATE_IP]1736ed[PRIVATE_IP]ab83 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"audit_duration_seconds":5.276,"audit_scope":"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities","changes_made":false,"command_evidence":{"apt_simulated_upgrade":{"duration_seconds":0.63,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8","stdout_truncated":false},"backup_jobs":{"duration_seconds":0.47,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"backup_tasks":{"duration_seconds":0.484,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"ceph_health":{"duration_seconds":0.061,"rc":1,"stderr_excerpt":"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\n","stderr_sha256":"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cert_pve-ssl.pem":{"duration_seconds":0.009,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","stdout_truncated":false},"cert_pveproxy-ssl.pem":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","stdout_truncated":false},"cluster_status_json":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cluster_vm_resources":{"duration_seconds":0.465,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"df_bytes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d","stdout_truncated":false},"df_inodes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774","stdout_truncated":false},"ha_resources":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"hostname":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430","stdout_truncated":false},"kernel":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471","stdout_truncated":false},"kernel_errors_7d":{"duration_seconds":0.047,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d","stdout_truncated":false},"lvs_json":{"duration_seconds":0.023,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196","stdout_truncated":false},"nodes_json":{"duration_seconds":0.459,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pve_firewall_status":{"duration_seconds":0.352,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvecm_status":{"duration_seconds":0.155,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvesm_status_json":{"duration_seconds":0.232,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pveversion":{"duration_seconds":0.36,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a","stdout_truncated":false},"replication_jobs":{"duration_seconds":0.472,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"service_corosync":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pve-cluster":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvedaemon":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pveproxy":{"duration_seconds":0.004,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvescheduler":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvestatd":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"smart_health_0":{"duration_seconds":0.011,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a","stdout_truncated":false},"smart_scan":{"duration_seconds":0.008,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb","stdout_truncated":false},"sshd_effective":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c","stdout_truncated":false},"systemd_failed":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0","stdout_truncated":false},"timedatectl":{"duration_seconds":0.044,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179","stdout_truncated":false},"uptime":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64","stdout_truncated":false},"zpool_status":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac","stderr_truncated":false,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false}},"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","control_plane_error":null,"fatal_errors":[],"findings":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"},{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"},{"action":"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.","category":"network","evidence":{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2},"severity":"MEDIUM","task_id":"NET-DROPS-wt0","title":"Есть сетевые ошибки/дропы на wt0"},{"action":"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.","category":"security","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"MEDIUM","task_id":"FIREWALL-STATE","title":"Proxmox firewall не подтверждён как enabled/running"},{"action":"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"MEDIUM","task_id":"SSH-ROOT-LOGIN","title":"Разрешён прямой SSH-доступ root"},{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}],"gitea_changed":false,"mutation_outcome":"NO_MUTATION","production_site_changed":false,"rc":0,"rollback_restored":null,"rollback_started":false,"schema":1,"sections":{"backups":{"backup_storages":[],"failed_recent":[],"guest_backup_state":[],"inventory_count":0,"jobs":[],"recent_tasks":[]},"capacity":{"guests":[],"memory_overcommit":[],"nodes":[]},"cluster_nodes":[],"cluster_quorum":{"parsed":{},"raw_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"hardware":{"cpu_count":24,"kernel_critical_pattern_count_7d":0,"kernel_priority_0_3_count_7d":9,"load_15_per_cpu":0.02,"load_1_5_15":[0.41,0.4,0.42],"memory_available":8871043072,"memory_available_percent":26.58,"memory_total":33379028992,"smart_health":[{"device":"/dev/nvme0","output_sha256":"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105","passed":true,"rc":0,"unknown":false}],"swap_total":10737414144,"swap_used_percent":0.0,"temperatures":[{"celsius":27.8,"sensor":"acpitz"},{"celsius":41.0,"sensor":"x86_pkg_temp"}]},"identity":{"audit_utc":"2026-08-01T13:48:52.070106+00:00","hostname":"pve01.gram1.ru","kernel":"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux","pveversion":"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\nproxmox-kernel-helper: 9.2.0\nproxmox-kernel-7.0: 7.0.12-1\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\nceph-fuse: 19.2.3-pve4\ncorosync: 3.1.10-pve2\ncriu: 4.1.1-1\nfrr-pythontools: 10.6.1-1+pve2\nifupdown2: 3.3.0-1+pmx12\nintel-microcode: 3.20251111.1~deb13u1\nksm-control-daemon: 1.5-1\nlibjs-extjs: 7.0.0-5\nlibproxmox-acme-perl: 1.7.1\nlibproxmox-backup-qemu0: 2.0.2\nlibproxmox-rs-perl: 0.4.1\nlibpve-access-control: 9.1.1\nlibpve-apiclient-perl: 3.4.2\nlibpve-cluster-api-perl: 9.1.6\nlibpve-cluster-perl: 9.1.6\nlibpve-common-perl: 9.1.16\nlibpve-guest-common-perl: 6.0.4\nlibpve-http-server-perl: 6.0.5\nlibpve-network-perl: 1.6.6\nlibpve-notify-perl: 9.1.6\nlibpve-rs-perl: 0.15.3\nlibpve-storage-perl: 9.1.6\nlibspice-server1: 0.15.2-1+b1\nlvm2: 2.03.31-2+pmx1\nlxc-pve: 7.0.0-2\nlxcfs: 7.0.0-pve1\nnovnc-pve: 1.7.0-1\nproxmox-backup-client: 4.2.2-1\nproxmox-backup-file-restore: 4.2.2-1\nproxmox-backup-restore-image: 1.0.0\nproxmox-firewall: 1.2.3\nproxmox-kernel-helper: 9.2.0\nproxmox-mail-forward: 1.0.3\nproxmox-mini-journalreader: 1.6\nproxmox-offline-mirror-helper: 0.7.4\nproxmox-widget-toolkit: 5.2.5\npve-cluster: 9.1.6\npve-container: 6.1.10\npve-docs: 9.2.2\npve-edk2-firmware: 4.2025.05-2\npve-esxi-import-tools: 1.0.1\npve-firewall: 6.0.4\npve-firmware: 3.18-4\npve-ha-manager: 5.2.4\npve-i18n: 3.8.0\npve-qemu-kvm: 11.0.0-4\npve-xtermjs: 6.0.0-1\nqemu-server: 9.1.17\nsmartmontools: 7.5-pve2\nspiceterm: 3.4.2\nswtpm: 0.8.0+pve3\nvncterm: 1.9.2\nzfsutils-linux: 2.4.2-pve1","uptime":"up 4 days, 2 hours, 43 minutes"},"network":{"bonds":[],"interfaces":[{"interface":"bonding_masters","mtu":null,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"enx6c1ff7c17576","mtu":1500,"operstate":"down","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"nic0","mtu":1500,"operstate":"up","rx_dropped":11827,"rx_errors":0,"tx_dropped":6,"tx_errors":0},{"interface":"podman0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap150i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap170i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap171i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth110i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth112i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"vmbr0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":9,"tx_errors":0},{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2}]},"resilience":{"ha_resources":[],"replication_jobs":[],"snapshots":[]},"security_updates":{"certificates":[{"days_remaining":680.7,"not_after":"2028-06-12T07:27:09+00:00","output_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","path":"/etc/pve/local/pve-ssl.pem"},{"days_remaining":45.1,"not_after":"2026-09-15T16:01:38+00:00","output_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","path":"/etc/pve/local/pveproxy-ssl.pem"}],"firewall_status":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","reboot_required":false,"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"time":{"NTP":"yes","NTPSynchronized":"yes","Timezone":"Europe/Moscow"},"upgradable_count":92,"upgradable_packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"]},"services":{"failed_units":[{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"}],"key_services":{"corosync":"active","pve-cluster":"active","pvedaemon":"active","pveproxy":"active","pvescheduler":"active","pvestatd":"active"}},"storage":{"ceph_health":null,"filesystems":[{"available":85349027840,"filesystem":"/dev/mapper/pve-root","inode_used_percent":3.0,"mount":"/","total":105089261568,"type":"ext4","used":14354747392,"used_percent":15.0},{"available":53818,"filesystem":"efivarfs","inode_used_percent":null,"mount":"/sys/firmware/efi/efivars","total":196608,"type":"efivarfs","used":137670,"used_percent":72.0},{"available":1062166528,"filesystem":"/dev/nvme0n1p2","inode_used_percent":null,"mount":"/boot/efi","total":1071628288,"type":"vfat","used":9461760,"used_percent":1.0},{"available":141639290880,"filesystem":"/dev/mapper/pve-homelab--staging","inode_used_percent":1.0,"mount":"/mnt/staging","total":315926315008,"type":"ext4","used":158164119552,"used_percent":53.0},{"available":132767744,"filesystem":"/dev/fuse","inode_used_percent":1.0,"mount":"/etc/pve","total":134217728,"type":"fuse","used":1449984,"used_percent":2.0},{"available":85349027840,"filesystem":"overlay","inode_used_percent":3.0,"mount":"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged","total":105089261568,"type":"overlay","used":14354747392,"used_percent":15.0}],"lvm_report_present":true,"mdstat_sha256":"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8","pvesm":[],"zpool_summary":""}},"status":"OK","summary":{"critical_count":2,"critical_tasks":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"}],"high_count":5,"high_priority_tasks":[{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"}],"info_count":0,"low_count":0,"medium_count":3,"opportunity_count":4,"recommended_next_projects":[{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}]}} +GENERATED_AT_UTC=[PRIVATE_IP]T14:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Sat Aug [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.db +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]668e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":356995,"vmid":110},{"cpu":[PRIVATE_IP][PRIVATE_IP],"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/111","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":357079,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":357040,"vmid":112},{"cpu":[PRIVATE_IP]763e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":357083,"vmid":113},{"cpu":[PRIVATE_IP]49921,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"edge-vm","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":357026,"vmid":130},{"cpu":[PRIVATE_IP]42314,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/150","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"nextcloud","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356992,"vmid":150},{"cpu":[PRIVATE_IP]779118,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/160","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"forum-prod","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":357076,"vmid":160},{"cpu":[PRIVATE_IP]41361,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/170","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"core-apps","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356988,"vmid":170},{"cpu":[PRIVATE_IP]12987,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/171","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"monitoring","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"qemu","uptime":356985,"vmid":171},{"cpu":[PRIVATE_IP]003447,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/180","maxcpu":2,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"cluster-admin","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"qemu","uptime":357073,"vmid":180},{"cpu":[PRIVATE_IP]421217,"disk":0,"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"qemu/190","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":[PRIVATE_IP],"name":"homelab-ops-worker","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve03","status":"running","template":0,"type":"qemu","uptime":357023,"vmid":190},{"cpu":0,"disk":0,"diskread":0,"diskwrite":0,"id":"qemu/9130","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":0,"memhost":0,"name":"edge-cold-standby","netin":0,"netout":0,"node":"pve02","status":"stopped","template":0,"type":"qemu","uptime":0,"vmid":9130},{"cgroup-mode":2,"cpu":[PRIVATE_IP]32053,"disk":[PRIVATE_IP],"id":"node/pve03","level":"","maxcpu":8,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve03","status":"online","type":"node","uptime":357044},{"cgroup-mode":2,"cpu":[PRIVATE_IP]26893,"disk":[PRIVATE_IP],"id":"node/pve01","level":"","maxcpu":24,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve01","status":"online","type":"node","uptime":357097},{"cgroup-mode":2,"cpu":[PRIVATE_IP]67589,"disk":[PRIVATE_IP],"id":"node/pve02","level":"","maxcpu":4,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"node":"pve02","status":"online","type":"node","uptime":357116},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"rootdir,images","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"iso,vztmpl,backup,import","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.66% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.31% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● homelab-crypto-portfolio-chart-health.service loaded failed failed Crypto portfolio chart health check +● skladchik-reports-monitor-supervisor.service loaded failed failed Skladchik reports monitor full supervisor + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Sat [PRIVATE_IP] 17:17:08 MSK 5s Sat [PRIVATE_IP] 17:15:07 MSK 1min 55s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Sat [PRIVATE_IP] 17:17:14 MSK 12s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Sat [PRIVATE_IP] 17:17:14 MSK 12s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sat [PRIVATE_IP] 17:17:18 MSK 15s Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sat [PRIVATE_IP] 17:18:07 MSK 1min 4s Sat [PRIVATE_IP] 17:13:07 MSK 3min 55s ago netbird-peers-health.timer netbird-peers-health.service +Sat [PRIVATE_IP] 17:18:43 MSK 1min 40s Sat [PRIVATE_IP] 17:13:34 MSK 3min 28s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Sat [PRIVATE_IP] 17:19:13 MSK 2min 10s Sat [PRIVATE_IP] 17:09:13 MSK 7min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sat [PRIVATE_IP] 17:19:31 MSK 2min 28s Sat [PRIVATE_IP] 17:14:14 MSK 2min 47s ago homelab-health-metrics.timer homelab-health-metrics.service +Sat [PRIVATE_IP] 17:28:25 MSK 11min Sat [PRIVATE_IP] 17:13:25 MSK 3min 37s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sat [PRIVATE_IP] 17:30:00 MSK 12min Sat [PRIVATE_IP] 17:15:07 MSK 1min 55s ago homelab-incident-journal.timer homelab-incident-journal.service +Sat [PRIVATE_IP] 17:30:30 MSK 13min Sat [PRIVATE_IP] 16:57:07 MSK 19min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sat [PRIVATE_IP] 17:30:31 MSK 13min Sat [PRIVATE_IP] 17:15:53 MSK 1min 8s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sat [PRIVATE_IP] 17:30:45 MSK 13min Sat [PRIVATE_IP] 17:15:14 MSK 1min 47s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sat [PRIVATE_IP] 17:31:14 MSK 14min Sat [PRIVATE_IP] 17:16:14 MSK 47s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sat [PRIVATE_IP] 17:31:15 MSK 14min Sat [PRIVATE_IP] 17:15:50 MSK 1min 12s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sat [PRIVATE_IP] 17:34:31 MSK 17min Sat [PRIVATE_IP] 17:03:50 MSK 13min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sat [PRIVATE_IP] 20:08:25 MSK 2h 51min Sat [PRIVATE_IP] 14:08:25 MSK 3h 8min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Sat [PRIVATE_IP] 23:42:29 MSK 6h Sat [PRIVATE_IP] 13:19:25 MSK 3h 57min ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 00:00:00 MSK 6h Sat [PRIVATE_IP] 00:00:07 MSK 17h ago dpkg-db-backup.timer dpkg-db-backup.service +Sun [PRIVATE_IP] 00:03:20 MSK 6h Sat [PRIVATE_IP] 00:09:14 MSK 17h ago homelab-docker-health.timer homelab-docker-health.service +Sun [PRIVATE_IP] 00:05:18 MSK 6h Sat [PRIVATE_IP] 00:46:47 MSK 16h ago logrotate.timer logrotate.service +Sun [PRIVATE_IP] 00:13:15 MSK 6h Sat [PRIVATE_IP] 00:13:50 MSK 17h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Sun [PRIVATE_IP] 00:15:01 MSK 6h Sat [PRIVATE_IP] 00:19:05 MSK 16h ago homelab-quality-gate.timer homelab-quality-gate.service +Sun [PRIVATE_IP] 00:19:54 MSK 7h Sat [PRIVATE_IP] 00:08:50 MSK 17h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Sun [PRIVATE_IP] 02:57:37 MSK 9h Sat [PRIVATE_IP] 04:22:14 MSK 12h ago man-db.timer man-db.service +Sun [PRIVATE_IP] 03:10:25 MSK 9h Sun [PRIVATE_IP] 03:10:15 MSK - xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:49 MSK 9h Sun [PRIVATE_IP] 03:10:15 MSK - e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:50:00 MSK 10h Sat [PRIVATE_IP] 03:50:07 MSK 13h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Sun [PRIVATE_IP] 04:29:55 MSK 11h Sat [PRIVATE_IP] 04:46:05 MSK 12h ago pve-daily-update.timer pve-daily-update.service +Sun [PRIVATE_IP] 04:51:05 MSK 11h Sat [PRIVATE_IP] 04:43:14 MSK 12h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Sun [PRIVATE_IP] 04:54:47 MSK 11h Sat [PRIVATE_IP] 05:12:42 MSK 12h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Sun [PRIVATE_IP] 06:29:37 MSK 13h Sat [PRIVATE_IP] 06:40:57 MSK 10h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Sun [PRIVATE_IP] 07:02:42 MSK 13h Sat [PRIVATE_IP] 07:19:50 MSK 9h ago homelab-drift-check.timer homelab-drift-check.service +Sun [PRIVATE_IP] 07:22:50 MSK 14h Sat [PRIVATE_IP] 07:24:32 MSK 9h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Sun [PRIVATE_IP] 07:54:48 MSK 14h Sat [PRIVATE_IP] 07:48:32 MSK 9h ago homelab-alerting-health.timer homelab-alerting-health.service +Sun [PRIVATE_IP] 07:56:11 MSK 14h Sat [PRIVATE_IP] 08:05:50 MSK 9h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Sun [PRIVATE_IP] 07:56:38 MSK 14h Sat [PRIVATE_IP] 07:54:12 MSK 9h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Sun [PRIVATE_IP] 08:00:13 MSK 14h Sat [PRIVATE_IP] 07:59:49 MSK 9h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Sun [PRIVATE_IP] 08:10:52 MSK 14h Sat [PRIVATE_IP] 08:07:24 MSK 9h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Sun [PRIVATE_IP] 08:12:48 MSK 14h Sat [PRIVATE_IP] 08:21:36 MSK 8h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Sun [PRIVATE_IP] 08:13:55 MSK 14h Sat [PRIVATE_IP] 08:14:50 MSK 9h ago homelab-overall-health.timer homelab-overall-health.service +Sun [PRIVATE_IP] 08:21:50 MSK 15h Sat [PRIVATE_IP] 08:11:08 MSK 9h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Sun [PRIVATE_IP] 08:33:48 MSK 15h Sat [PRIVATE_IP] 08:31:50 MSK 8h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Sun [PRIVATE_IP] 08:35:29 MSK 15h Sat [PRIVATE_IP] 08:34:24 MSK 8h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Sun [PRIVATE_IP] 08:48:18 MSK 15h Sat [PRIVATE_IP] 08:41:36 MSK 8h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Sun [PRIVATE_IP] 08:50:21 MSK 15h Sat [PRIVATE_IP] 08:51:13 MSK 8h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Sun [PRIVATE_IP] 08:51:19 MSK 15h Sat [PRIVATE_IP] 08:51:13 MSK 8h ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Sun [PRIVATE_IP] 09:19:14 MSK 16h Sat [PRIVATE_IP] 09:06:18 MSK 8h ago memos-offhost-sync.timer memos-offhost-sync.service +Sun [PRIVATE_IP] 10:15:00 MSK 16h Sat [PRIVATE_IP] 10:15:00 MSK 7h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 14:20:23 MSK 21h Sat [PRIVATE_IP] 14:20:23 MSK 2h 56min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Mon [PRIVATE_IP] 00:11:49 MSK 1 day 6h Mon [PRIVATE_IP] 00:13:29 MSK - homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:17:32 MSK 1 day 8h Mon [PRIVATE_IP] 01:18:15 MSK - fstrim.timer fstrim.service +- - Sat [PRIVATE_IP] 17:17:02 MSK 16ms ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +- - - - prometheus-node-exporter-ipmitool-sensor.timer prometheus-node-exporter-ipmitool-sensor.service +- - - - prometheus-node-exporter-mellanox-hca-temp.timer prometheus-node-exporter-mellanox-hca-temp.service +- - - - prometheus-node-exporter-smartmon.timer prometheus-node-exporter-smartmon.service + +58 timers listed. +- Обрезанная, повреждённая или частично вставленная команда считается невыполненной; сначала проводится side-effect audit. +- Хвост parse-ошибки закрывается только после доказательства отсутствия изменений и временных артефактов. +- Proof: /var/lib/homelab-change-sets/operator-command-size-guard-v[PRIVATE_IP]T182653Z/report.txt + +## HOMELAB_ADMIN_CLI_CONTRACT_[PRIVATE_IP] +- Поддерживаемые команды: version, status, lint TASK_DIR, validate TASK_DIR, run TASK_DIR PHASE. +- Отдельная команда --help отсутствует. Неизвестный аргумент печатает usage и штатно возвращает RC=64. +- Нельзя трактовать RC=64 от --help как неисправность runner. +- Для проверки доступности runner использовать homelab-admin version; для структуры CLI использовать зафиксированную usage-строку. +- Proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v[PRIVATE_IP]T183338Z/report.txt + +AUTOMATIC_CLUSTER_CONTEXT_REFRESH_[PRIVATE_IP] +Collector: /usr/local/sbin/homelab-context-collect +Scheduler: hourly at minute 17 via /etc/cron.d/homelab-context-refresh +Destination: immutable Gitea runtime history with CONTEXT-AUTO UTC command IDs. + +AUTOMATIC_CLUSTER_CONTEXT_REFRESH_DIRECT_[PRIVATE_IP] +Publisher: /usr/local/sbin/homelab-context-refresh-direct +Schedule: hourly at minute 17. +Destination: immutable assistant-runtime history with CONTEXT-AUTO UTC IDs. +ANTI_REGRESSION_TOKEN=HOMELAB_VM_2CLOUD_444_OUTER_LAUNCHER_BOUNDARY_REQUIRED +- Anti-regression: validate the complete outer launcher with a shell syntax check and verify the wrapper argument boundary before issuing it. +- Infrastructure action executed: none. +- Backup payload impact: none. +- Production impact: none. +- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +- Registered at: [PRIVATE_IP]T11:20:32Z + +## ERROR_[PRIVATE_IP]_HOMELAB_VM_2CLOUD_DRAIN_CLOSURE_PREFLIGHT_446 +COMMAND_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446 +- Symptom: homelab-chat-run-linked printed Usage and skipped result-feed publication as invalid input. +- Root cause: the diagnostic script was piped to wrapper stdin and the mandatory double-dash command separator was omitted. +- Correction: invoke homelab-chat-run-linked as COMMAND_ID MODE COMPONENT -- command arguments; stdin is not its command interface. +ANTI_REGRESSION_TOKEN=HOMELAB_CHAT_RUN_COMMAND_REQUIRES_DOUBLE_DASH +- Anti-regression: treat wrapper Usage as the authoritative CLI contract and syntax-check the complete launcher, not only its inner payload. +- Infrastructure action executed: none. +- Backup payload impact: none. +- Production impact: none. +- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +- Registered at: [PRIVATE_IP]T11:20:32Z OUTPUT_END CHAT_OUTPUT_END