diff --git a/runtime/history/CONTEXT-AUTO-20260727T091701Z.json b/runtime/history/CONTEXT-AUTO-20260727T091701Z.json new file mode 100644 index 0000000..d4bdaf4 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260727T091701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260727T091701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-07-27T09:17:01Z","finished_at_utc":"2026-07-27T09: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-20260727T091701Z.txt b/runtime/history/CONTEXT-AUTO-20260727T091701Z.txt new file mode 100644 index 0000000..4a7fe6f --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260727T091701Z.txt @@ -0,0 +1,163 @@ +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]T09:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Mon Jul [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.c6 +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][PRIVATE_IP],"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":330953,"vmid":110},{"cpu":[PRIVATE_IP]094e-05,"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":330793,"vmid":111},{"cpu":[PRIVATE_IP]966e-05,"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":330956,"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":330796,"vmid":113},{"cpu":[PRIVATE_IP]3066,"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":330891,"vmid":130},{"cpu":[PRIVATE_IP]92673,"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":330950,"vmid":150},{"cpu":[PRIVATE_IP]103626,"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":330790,"vmid":160},{"cpu":[PRIVATE_IP]02415,"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":330946,"vmid":170},{"cpu":[PRIVATE_IP]43894,"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":330943,"vmid":171},{"cpu":[PRIVATE_IP]573055,"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":330787,"vmid":180},{"cpu":[PRIVATE_IP]309899,"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":330887,"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]51803,"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":330908},{"cgroup-mode":2,"cpu":[PRIVATE_IP]70932,"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":330984},{"cgroup-mode":2,"cpu":[PRIVATE_IP]53086,"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":330857},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"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] 12.81% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.22% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● 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. + +2 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Mon [PRIVATE_IP] 12:17:05 MSK 2s Mon [PRIVATE_IP] 12:16:04 MSK 58s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Mon [PRIVATE_IP] 12:17:15 MSK 13s Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Mon [PRIVATE_IP] 12:17:15 MSK 13s Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Mon [PRIVATE_IP] 12:17:42 MSK 39s Mon [PRIVATE_IP] 12:15:29 MSK 1min 32s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Mon [PRIVATE_IP] 12:19:01 MSK 1min 59s Mon [PRIVATE_IP] 12:13:38 MSK 3min 24s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Mon [PRIVATE_IP] 12:19:15 MSK 2min 13s Mon [PRIVATE_IP] 12:14:15 MSK 2min 46s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Mon [PRIVATE_IP] 12:19:15 MSK 2min 13s Mon [PRIVATE_IP] 12:14:15 MSK 2min 46s ago netbird-peers-health.timer netbird-peers-health.service +Mon [PRIVATE_IP] 12:20:15 MSK 3min 13s Mon [PRIVATE_IP] 12:10:15 MSK 6min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Mon [PRIVATE_IP] 12:29:38 MSK 12min Mon [PRIVATE_IP] 12:14:38 MSK 2min 24s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Mon [PRIVATE_IP] 12:30:00 MSK 12min Mon [PRIVATE_IP] 12:15:04 MSK 1min 58s ago homelab-incident-journal.timer homelab-incident-journal.service +Mon [PRIVATE_IP] 12:30:14 MSK 13min Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Mon [PRIVATE_IP] 12:30:43 MSK 13min Mon [PRIVATE_IP] 12:15:38 MSK 1min 24s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Mon [PRIVATE_IP] 12:30:45 MSK 13min Mon [PRIVATE_IP] 12:16:04 MSK 58s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Mon [PRIVATE_IP] 12:34:49 MSK 17min Mon [PRIVATE_IP] 12:01:15 MSK 15min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Mon [PRIVATE_IP] 12:37:07 MSK 20min Mon [PRIVATE_IP] 12:06:38 MSK 10min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Mon [PRIVATE_IP] 16:24:29 MSK 4h 7min Mon [PRIVATE_IP] 10:24:29 MSK 1h 52min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 16:35:54 MSK 4h 18min Sun [PRIVATE_IP] 16:35:54 MSK 19h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Tue [PRIVATE_IP] 00:00:00 MSK 11h Mon [PRIVATE_IP] 00:00:04 MSK 12h ago dpkg-db-backup.timer dpkg-db-backup.service +Tue [PRIVATE_IP] 00:11:16 MSK 11h Mon [PRIVATE_IP] 00:04:04 MSK 12h ago logrotate.timer logrotate.service +Tue [PRIVATE_IP] 00:11:22 MSK 11h Mon [PRIVATE_IP] 00:02:04 MSK 12h ago homelab-docker-health.timer homelab-docker-health.service +Tue [PRIVATE_IP] 00:12:08 MSK 11h Mon [PRIVATE_IP] 00:15:19 MSK 12h ago homelab-quality-gate.timer homelab-quality-gate.service +Tue [PRIVATE_IP] 00:14:05 MSK 11h Mon [PRIVATE_IP] 00:04:04 MSK 12h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Tue [PRIVATE_IP] 00:14:06 MSK 11h Mon [PRIVATE_IP] 00:11:39 MSK 12h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Tue [PRIVATE_IP] 02:37:29 MSK 14h Mon [PRIVATE_IP] 07:44:04 MSK 4h 32min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 03:32:12 MSK 15h Mon [PRIVATE_IP] 02:36:58 MSK 9h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 03:50:00 MSK 15h Mon [PRIVATE_IP] 03:50:04 MSK 8h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Tue [PRIVATE_IP] 04:01:27 MSK 15h Mon [PRIVATE_IP] 05:04:49 MSK 7h ago man-db.timer man-db.service +Tue [PRIVATE_IP] 04:45:40 MSK 16h Mon [PRIVATE_IP] 04:52:04 MSK 7h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Tue [PRIVATE_IP] 04:57:33 MSK 16h Mon [PRIVATE_IP] 05:04:49 MSK 7h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Tue [PRIVATE_IP] 06:14:52 MSK 17h Mon [PRIVATE_IP] 06:01:15 MSK 6h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:19:16 MSK 19h Mon [PRIVATE_IP] 07:10:07 MSK 5h 6min ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:20:23 MSK 19h Mon [PRIVATE_IP] 07:39:15 MSK 4h 37min ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:42:44 MSK 19h Mon [PRIVATE_IP] 07:53:04 MSK 4h 23min ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:49:20 MSK 19h Mon [PRIVATE_IP] 07:59:29 MSK 4h 17min ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:52:26 MSK 19h Mon [PRIVATE_IP] 08:08:04 MSK 4h 8min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 07:57:54 MSK 19h Mon [PRIVATE_IP] 07:57:57 MSK 4h 19min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 08:07:03 MSK 19h Mon [PRIVATE_IP] 08:03:38 MSK 4h 13min ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:07:53 MSK 19h Mon [PRIVATE_IP] 08:01:04 MSK 4h 15min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:14:23 MSK 19h Mon [PRIVATE_IP] 08:09:50 MSK 4h 7min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:24:53 MSK 20h Mon [PRIVATE_IP] 08:27:04 MSK 3h 49min ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:31:29 MSK 20h Mon [PRIVATE_IP] 08:18:04 MSK 3h 58min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:37:23 MSK 20h Mon [PRIVATE_IP] 08:47:15 MSK 3h 29min ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 08:40:07 MSK 20h Mon [PRIVATE_IP] 08:39:38 MSK 3h 37min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:49:42 MSK 20h Mon [PRIVATE_IP] 08:53:04 MSK 3h 23min ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Tue [PRIVATE_IP] 08:54:45 MSK 20h Mon [PRIVATE_IP] 09:01:45 MSK 3h 15min ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 09:21:36 MSK 21h Mon [PRIVATE_IP] 09:16:04 MSK 3h 0min ago memos-offhost-sync.timer memos-offhost-sync.service +Tue [PRIVATE_IP] 10:15:00 MSK 21h Mon [PRIVATE_IP] 10:15:04 MSK 2h 1min ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 03:10:22 MSK 5 days Sun [PRIVATE_IP] 03:10:15 MSK 1 day 9h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:46 MSK 5 days Sun [PRIVATE_IP] 03:10:15 MSK 1 day 9h ago e2scrub_all.timer e2scrub_all.service +Mon [PRIVATE_IP] 00:07:12 MSK 6 days Mon [PRIVATE_IP] 00:13:29 MSK 12h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:18:39 MSK 6 days Mon [PRIVATE_IP] 01:18:15 MSK 10h ago fstrim.timer fstrim.service +- - Mon [PRIVATE_IP] 12:17:02 MSK 12ms ago homelab-health-metrics.timer homelab-health-metrics.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 8a99dbc..d4bdaf4 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "MINIMAL-RESULT-FEED-PLAN-20260727T084859Z", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "verify", - "component": "result-integration", - "started_at_utc": "2026-07-27T08:50:53Z", - "finished_at_utc": "2026-07-27T08:50:53Z", - "reference_register_checked": true, - "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", - "error_register_checked": true, - "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "681260cb555ddf0930b26fb4aea15a10d5e8c9e6834e30754cb9eaecf659948a", - "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": "9a09864d952dce1a9f67544e66c2c6f7b4ca54664fd3045c6210922293b1c16f", - "sanitized_output_sha256": "9a09864d952dce1a9f67544e66c2c6f7b4ca54664fd3045c6210922293b1c16f", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "{\"PLAN_SHA256\":\"7635b754e1881b6dc050f462a36662f9334dea3f2cbc13459376f6e64d4b7c2e\",\"backup_changed\":false,\"changes_made\":false,\"cluster_changed\":false,\"functional_tests\":{\"adapter_compile\":true,\"adapter_function_added\":true,\"adapter_terminal_builder_added\":true,\"exact_two_terminal_results\":true,\"fail_result_complete\":true,\"forbidden_scan_clean\":true,\"free_text_not_published\":true,\"invalid_identity_excluded\":true,\"no_cryptographic_key_code\":true,\"no_new_public_route\":true,\"ok_result_complete\":true,\"portal_compile\":true,\"portal_health_version_3\":true,\"portal_recent_operation\":true,\"portal_recent_results_field\":true,\"runner_unchanged\":true,\"running_excluded\":true,\"sequence_is_sha256\":true,\"sequence_stable\":true},\"gitea_changed\":false,\"plan\":{\"anti_regression\":[\"adapter_compile\",\"adapter_function_added\",\"adapter_terminal_builder_added\",\"exact_two_terminal_results\",\"fail_result_complete\",\"forbidden_scan_clean\",\"free_text_not_published\",\"invalid_identity_excluded\",\"no_cryptographic_key_code\",\"no_new_public_route\",\"ok_result_complete\",\"portal_compile\",\"portal_health_version_3\",\"portal_recent_operation\",\"portal_recent_results_field\",\"runner_unchanged\",\"running_excluded\",\"sequence_is_sha256\",\"sequence_stable\"],\"apply_sequence\":[\"verify exact source SHA and no other RUNNING state\",\"create fresh rollback copies\",\"write candidate files to same-filesystem temporary paths\",\"compile candidates before service stop\",\"stop Portal\",\"stop Adapter\",\"atomically replace Adapter and Portal\",\"start Adapter and verify stable health\",\"start Portal and verify healthz version 3\",\"verify current APPLY result appears by exact identity\"],\"change_flags\":{\"backup\":false,\"cluster\":false,\"gitea\":false,\"production\":true},\"operation\":\"INSTALL_MINIMAL_RECENT_RESULT_FEED\",\"postconditions\":[\"Adapter and Portal target SHA installed\",\"Runner SHA unchanged\",\"no files or keys created\",\"Adapter and Portal active with NRestarts=0\",\"healthz version is 3\",\"recent_results contains exact APPLY identity\",\"terminal states only\",\"free-text error message is absent\",\"sanitized flags are fixed safe values\",\"backup, cluster and Gitea unchanged\"],\"public_contract\":{\"cache_policy\":\"existing Portal no-store policy\",\"free_text_published\":false,\"identity\":[\"command_id\",\"capsule_sha256\"],\"max_results\":32,\"new_public_routes\":false,\"signing_keys\":false,\"terminal_statuses\":[\"OK\",\"FAIL\",\"BLOCKED\"],\"url\":\"https://run.vpn.gram1.ru/healthz\",\"version\":3},\"risk\":\"REVERSIBLE\",\"rollback\":{\"diagnostics_before_rollback\":[\"installed SHA and file metadata\",\"systemd show for Adapter and Portal\",\"journals since APPLY start\",\"local Adapter socket response\",\"public healthz response\",\"process tree\",\"state summary\"],\"fresh_directory\":\"/var/lib/homelab-change-rollback/MINIMAL-RESULT-FEED-APPLY-20260727\",\"restore_only\":[\"/usr/local/sbin/homelab-command-adapter\",\"/usr/local/sbin/homelab-command-portal\"]},\"schema\":1,\"scope\":{\"backup\":false,\"cluster\":false,\"create\":[],\"gitea\":false,\"modify\":[\"/usr/local/sbin/homelab-command-adapter\",\"/usr/local/sbin/homelab-command-portal\"],\"preserve\":[\"/usr/local/sbin/homelab-chat-run\",\"Adapter state files\",\"evidence objects\",\"Gitea runtime publication\",\"backup\",\"cluster\"],\"production\":true},\"source_lock\":{\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"8d0af84dcfcf6ddbfd1c4e6cbb059cef66b4cfc6c75bfd66da649acc229c7f5e\",\"/usr/local/sbin/homelab-command-portal\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\"},\"target\":\"pve01\",\"target_lock\":{\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"/usr/local/sbin/homelab-command-portal\":\"493eed48b5ed23b77ea3f554e8264438c0aea91744efb98363a325b4548b179b\"}},\"preconditions\":{\"adapter_healthy\":true,\"adapter_source_lock\":true,\"current_running_once\":true,\"host_pve01\":true,\"no_invalid_states\":true,\"no_other_running\":true,\"portal_healthy\":true,\"portal_source_lock\":true,\"root\":true,\"runner_source_lock\":true},\"rollback_started\":false,\"runner_sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"source_adapter_sha256\":\"8d0af84dcfcf6ddbfd1c4e6cbb059cef66b4cfc6c75bfd66da649acc229c7f5e\",\"source_portal_sha256\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"status\":\"PASS\",\"target_adapter_sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"target_portal_sha256\":\"493eed48b5ed23b77ea3f554e8264438c0aea91744efb98363a325b4548b179b\"}\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260727T091701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-07-27T09:17:01Z","finished_at_utc":"2026-07-27T09: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 bec5b09..4a7fe6f 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,33 +1,163 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=MINIMAL-RESULT-FEED-PLAN-20260727T084859Z +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=verify -COMPONENT=result-integration -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=681260cb555ddf0930b26fb4aea15a10d5e8c9e6834e30754cb9eaecf659948a -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=9a09864d952dce1a9f67544e66c2c6f7b4ca54664fd3045c6210922293b1c16f -SANITIZED_OUTPUT_SHA256=9a09864d952dce1a9f67544e66c2c6f7b4ca54664fd3045c6210922293b1c16f +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 -{"PLAN_SHA256":"7635b754e1881b6dc050f462a36662f9334dea3f2cbc13459376f6e64d4b7c2e","backup_changed":false,"changes_made":false,"cluster_changed":false,"functional_tests":{"adapter_compile":true,"adapter_function_added":true,"adapter_terminal_builder_added":true,"exact_two_terminal_results":true,"fail_result_complete":true,"forbidden_scan_clean":true,"free_text_not_published":true,"invalid_identity_excluded":true,"no_cryptographic_key_code":true,"no_new_public_route":true,"ok_result_complete":true,"portal_compile":true,"portal_health_version_3":true,"portal_recent_operation":true,"portal_recent_results_field":true,"runner_unchanged":true,"running_excluded":true,"sequence_is_sha256":true,"sequence_stable":true},"gitea_changed":false,"plan":{"anti_regression":["adapter_compile","adapter_function_added","adapter_terminal_builder_added","exact_two_terminal_results","fail_result_complete","forbidden_scan_clean","free_text_not_published","invalid_identity_excluded","no_cryptographic_key_code","no_new_public_route","ok_result_complete","portal_compile","portal_health_version_3","portal_recent_operation","portal_recent_results_field","runner_unchanged","running_excluded","sequence_is_sha256","sequence_stable"],"apply_sequence":["verify exact source SHA and no other RUNNING state","create fresh rollback copies","write candidate files to same-filesystem temporary paths","compile candidates before service stop","stop Portal","stop Adapter","atomically replace Adapter and Portal","start Adapter and verify stable health","start Portal and verify healthz version 3","verify current APPLY result appears by exact identity"],"change_flags":{"backup":false,"cluster":false,"gitea":false,"production":true},"operation":"INSTALL_MINIMAL_RECENT_RESULT_FEED","postconditions":["Adapter and Portal target SHA installed","Runner SHA unchanged","no files or keys created","Adapter and Portal active with NRestarts=0","healthz version is 3","recent_results contains exact APPLY identity","terminal states only","free-text error message is absent","sanitized flags are fixed safe values","backup, cluster and Gitea unchanged"],"public_contract":{"cache_policy":"existing Portal no-store policy","free_text_published":false,"identity":["command_id","capsule_sha256"],"max_results":32,"new_public_routes":false,"signing_keys":false,"terminal_statuses":["OK","FAIL","BLOCKED"],"url":"https://run.vpn.gram1.ru/healthz","version":3},"risk":"REVERSIBLE","rollback":{"diagnostics_before_rollback":["installed SHA and file metadata","systemd show for Adapter and Portal","journals since APPLY start","local Adapter socket response","public healthz response","process tree","state summary"],"fresh_directory":"/var/lib/homelab-change-rollback/MINIMAL-RESULT-FEED-APPLY-20260727","restore_only":["/usr/local/sbin/homelab-command-adapter","/usr/local/sbin/homelab-command-portal"]},"schema":1,"scope":{"backup":false,"cluster":false,"create":[],"gitea":false,"modify":["/usr/local/sbin/homelab-command-adapter","/usr/local/sbin/homelab-command-portal"],"preserve":["/usr/local/sbin/homelab-chat-run","Adapter state files","evidence objects","Gitea runtime publication","backup","cluster"],"production":true},"source_lock":{"/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"8d0af84dcfcf6ddbfd1c4e6cbb059cef66b4cfc6c75bfd66da649acc229c7f5e","/usr/local/sbin/homelab-command-portal":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2"},"target":"pve01","target_lock":{"/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","/usr/local/sbin/homelab-command-portal":"493eed48b5ed23b77ea3f554e8264438c0aea91744efb98363a325b4548b179b"}},"preconditions":{"adapter_healthy":true,"adapter_source_lock":true,"current_running_once":true,"host_pve01":true,"no_invalid_states":true,"no_other_running":true,"portal_healthy":true,"portal_source_lock":true,"root":true,"runner_source_lock":true},"rollback_started":false,"runner_sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","source_adapter_sha256":"8d0af84dcfcf6ddbfd1c4e6cbb059cef66b4cfc6c75bfd66da649acc229c7f5e","source_portal_sha256":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","status":"PASS","target_adapter_sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","target_portal_sha256":"493eed48b5ed23b77ea3f554e8264438c0aea91744efb98363a325b4548b179b"} +GENERATED_AT_UTC=[PRIVATE_IP]T09:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Mon Jul [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.c6 +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][PRIVATE_IP],"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":330953,"vmid":110},{"cpu":[PRIVATE_IP]094e-05,"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":330793,"vmid":111},{"cpu":[PRIVATE_IP]966e-05,"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":330956,"vmid":112},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/113","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound2","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve02","status":"running","template":0,"type":"lxc","uptime":330796,"vmid":113},{"cpu":[PRIVATE_IP]3066,"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":330891,"vmid":130},{"cpu":[PRIVATE_IP]92673,"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":330950,"vmid":150},{"cpu":[PRIVATE_IP]103626,"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":330790,"vmid":160},{"cpu":[PRIVATE_IP]02415,"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":330946,"vmid":170},{"cpu":[PRIVATE_IP]43894,"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":330943,"vmid":171},{"cpu":[PRIVATE_IP]573055,"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":330787,"vmid":180},{"cpu":[PRIVATE_IP]309899,"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":330887,"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]51803,"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":330908},{"cgroup-mode":2,"cpu":[PRIVATE_IP]70932,"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":330984},{"cgroup-mode":2,"cpu":[PRIVATE_IP]53086,"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":330857},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,iso,backup,vztmpl","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve03/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve01/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"content":"images,rootdir","disk":[PRIVATE_IP],"id":"storage/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"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] 12.81% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.22% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● 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. + +2 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Mon [PRIVATE_IP] 12:17:05 MSK 2s Mon [PRIVATE_IP] 12:16:04 MSK 58s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Mon [PRIVATE_IP] 12:17:15 MSK 13s Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Mon [PRIVATE_IP] 12:17:15 MSK 13s Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Mon [PRIVATE_IP] 12:17:42 MSK 39s Mon [PRIVATE_IP] 12:15:29 MSK 1min 32s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Mon [PRIVATE_IP] 12:19:01 MSK 1min 59s Mon [PRIVATE_IP] 12:13:38 MSK 3min 24s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Mon [PRIVATE_IP] 12:19:15 MSK 2min 13s Mon [PRIVATE_IP] 12:14:15 MSK 2min 46s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Mon [PRIVATE_IP] 12:19:15 MSK 2min 13s Mon [PRIVATE_IP] 12:14:15 MSK 2min 46s ago netbird-peers-health.timer netbird-peers-health.service +Mon [PRIVATE_IP] 12:20:15 MSK 3min 13s Mon [PRIVATE_IP] 12:10:15 MSK 6min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Mon [PRIVATE_IP] 12:29:29 MSK 12min Mon [PRIVATE_IP] 12:14:29 MSK 2min 32s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Mon [PRIVATE_IP] 12:29:38 MSK 12min Mon [PRIVATE_IP] 12:14:38 MSK 2min 24s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Mon [PRIVATE_IP] 12:30:00 MSK 12min Mon [PRIVATE_IP] 12:15:04 MSK 1min 58s ago homelab-incident-journal.timer homelab-incident-journal.service +Mon [PRIVATE_IP] 12:30:14 MSK 13min Mon [PRIVATE_IP] 12:16:15 MSK 46s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Mon [PRIVATE_IP] 12:30:43 MSK 13min Mon [PRIVATE_IP] 12:15:38 MSK 1min 24s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Mon [PRIVATE_IP] 12:30:45 MSK 13min Mon [PRIVATE_IP] 12:16:04 MSK 58s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Mon [PRIVATE_IP] 12:34:49 MSK 17min Mon [PRIVATE_IP] 12:01:15 MSK 15min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Mon [PRIVATE_IP] 12:37:07 MSK 20min Mon [PRIVATE_IP] 12:06:38 MSK 10min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Mon [PRIVATE_IP] 16:24:29 MSK 4h 7min Mon [PRIVATE_IP] 10:24:29 MSK 1h 52min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 16:35:54 MSK 4h 18min Sun [PRIVATE_IP] 16:35:54 MSK 19h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Tue [PRIVATE_IP] 00:00:00 MSK 11h Mon [PRIVATE_IP] 00:00:04 MSK 12h ago dpkg-db-backup.timer dpkg-db-backup.service +Tue [PRIVATE_IP] 00:11:16 MSK 11h Mon [PRIVATE_IP] 00:04:04 MSK 12h ago logrotate.timer logrotate.service +Tue [PRIVATE_IP] 00:11:22 MSK 11h Mon [PRIVATE_IP] 00:02:04 MSK 12h ago homelab-docker-health.timer homelab-docker-health.service +Tue [PRIVATE_IP] 00:12:08 MSK 11h Mon [PRIVATE_IP] 00:15:19 MSK 12h ago homelab-quality-gate.timer homelab-quality-gate.service +Tue [PRIVATE_IP] 00:14:05 MSK 11h Mon [PRIVATE_IP] 00:04:04 MSK 12h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Tue [PRIVATE_IP] 00:14:06 MSK 11h Mon [PRIVATE_IP] 00:11:39 MSK 12h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Tue [PRIVATE_IP] 02:37:29 MSK 14h Mon [PRIVATE_IP] 07:44:04 MSK 4h 32min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 03:32:12 MSK 15h Mon [PRIVATE_IP] 02:36:58 MSK 9h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 03:50:00 MSK 15h Mon [PRIVATE_IP] 03:50:04 MSK 8h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Tue [PRIVATE_IP] 04:01:27 MSK 15h Mon [PRIVATE_IP] 05:04:49 MSK 7h ago man-db.timer man-db.service +Tue [PRIVATE_IP] 04:45:40 MSK 16h Mon [PRIVATE_IP] 04:52:04 MSK 7h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Tue [PRIVATE_IP] 04:57:33 MSK 16h Mon [PRIVATE_IP] 05:04:49 MSK 7h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Tue [PRIVATE_IP] 06:14:52 MSK 17h Mon [PRIVATE_IP] 06:01:15 MSK 6h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:19:16 MSK 19h Mon [PRIVATE_IP] 07:10:07 MSK 5h 6min ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:20:23 MSK 19h Mon [PRIVATE_IP] 07:39:15 MSK 4h 37min ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:42:44 MSK 19h Mon [PRIVATE_IP] 07:53:04 MSK 4h 23min ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:49:20 MSK 19h Mon [PRIVATE_IP] 07:59:29 MSK 4h 17min ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:52:26 MSK 19h Mon [PRIVATE_IP] 08:08:04 MSK 4h 8min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 07:57:54 MSK 19h Mon [PRIVATE_IP] 07:57:57 MSK 4h 19min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 08:07:03 MSK 19h Mon [PRIVATE_IP] 08:03:38 MSK 4h 13min ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:07:53 MSK 19h Mon [PRIVATE_IP] 08:01:04 MSK 4h 15min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:14:23 MSK 19h Mon [PRIVATE_IP] 08:09:50 MSK 4h 7min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:24:53 MSK 20h Mon [PRIVATE_IP] 08:27:04 MSK 3h 49min ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:31:29 MSK 20h Mon [PRIVATE_IP] 08:18:04 MSK 3h 58min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:37:23 MSK 20h Mon [PRIVATE_IP] 08:47:15 MSK 3h 29min ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 08:40:07 MSK 20h Mon [PRIVATE_IP] 08:39:38 MSK 3h 37min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:49:42 MSK 20h Mon [PRIVATE_IP] 08:53:04 MSK 3h 23min ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Tue [PRIVATE_IP] 08:54:45 MSK 20h Mon [PRIVATE_IP] 09:01:45 MSK 3h 15min ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 09:21:36 MSK 21h Mon [PRIVATE_IP] 09:16:04 MSK 3h 0min ago memos-offhost-sync.timer memos-offhost-sync.service +Tue [PRIVATE_IP] 10:15:00 MSK 21h Mon [PRIVATE_IP] 10:15:04 MSK 2h 1min ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 03:10:22 MSK 5 days Sun [PRIVATE_IP] 03:10:15 MSK 1 day 9h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:46 MSK 5 days Sun [PRIVATE_IP] 03:10:15 MSK 1 day 9h ago e2scrub_all.timer e2scrub_all.service +Mon [PRIVATE_IP] 00:07:12 MSK 6 days Mon [PRIVATE_IP] 00:13:29 MSK 12h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:18:39 MSK 6 days Mon [PRIVATE_IP] 01:18:15 MSK 10h ago fstrim.timer fstrim.service +- - Mon [PRIVATE_IP] 12:17:02 MSK 12ms ago homelab-health-metrics.timer homelab-health-metrics.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