From 552123c4ee34e7193c16c89789063f8e9b3a4119 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sun, 26 Jul 2026 16:17:03 +0000 Subject: [PATCH] runtime: publish CONTEXT-AUTO-20260726T161701Z --- .../CONTEXT-AUTO-20260726T161701Z.json | 1 + .../history/CONTEXT-AUTO-20260726T161701Z.txt | 163 ++++++++++++++++ runtime/latest.json | 31 +-- runtime/latest.txt | 178 +++++++++++++++--- 4 files changed, 322 insertions(+), 51 deletions(-) create mode 100644 runtime/history/CONTEXT-AUTO-20260726T161701Z.json create mode 100644 runtime/history/CONTEXT-AUTO-20260726T161701Z.txt diff --git a/runtime/history/CONTEXT-AUTO-20260726T161701Z.json b/runtime/history/CONTEXT-AUTO-20260726T161701Z.json new file mode 100644 index 0000000..905663d --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260726T161701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260726T161701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-07-26T16:17:01Z","finished_at_utc":"2026-07-26T16: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-20260726T161701Z.txt b/runtime/history/CONTEXT-AUTO-20260726T161701Z.txt new file mode 100644 index 0000000..f19a1d8 --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260726T161701Z.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]T16:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Sun 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":269749,"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":269592,"vmid":111},{"cpu":[PRIVATE_IP]193e-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":269752,"vmid":112},{"cpu":[PRIVATE_IP]227e-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":269595,"vmid":113},{"cpu":[PRIVATE_IP]08256,"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":269689,"vmid":130},{"cpu":[PRIVATE_IP]10465,"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":269746,"vmid":150},{"cpu":[PRIVATE_IP]944678,"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":269589,"vmid":160},{"cpu":[PRIVATE_IP]85426,"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":269742,"vmid":170},{"cpu":[PRIVATE_IP]26589,"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":269739,"vmid":171},{"cpu":[PRIVATE_IP]690198,"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":269586,"vmid":180},{"cpu":[PRIVATE_IP]816017,"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":269685,"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]87628,"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":269779},{"cgroup-mode":2,"cpu":[PRIVATE_IP]43124,"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":269707},{"cgroup-mode":2,"cpu":[PRIVATE_IP]65432,"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":269656},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","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/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/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","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.70% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 38.43% + 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 +Sun [PRIVATE_IP] 19:17:10 MSK 7s Sun [PRIVATE_IP] 19:15:09 MSK 1min 53s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Sun [PRIVATE_IP] 19:17:15 MSK 12s Sun [PRIVATE_IP] 19:07:15 MSK 9min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sun [PRIVATE_IP] 19:17:33 MSK 30s Sun [PRIVATE_IP] 19:12:29 MSK 4min 33s ago homelab-health-metrics.timer homelab-health-metrics.service +Sun [PRIVATE_IP] 19:17:39 MSK 36s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Sun [PRIVATE_IP] 19:17:39 MSK 36s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sun [PRIVATE_IP] 19:17:41 MSK 38s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sun [PRIVATE_IP] 19:18:45 MSK 1min 42s Sun [PRIVATE_IP] 19:13:31 MSK 3min 31s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Sun [PRIVATE_IP] 19:20:15 MSK 3min 12s Sun [PRIVATE_IP] 19:15:15 MSK 1min 47s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sun [PRIVATE_IP] 19:20:15 MSK 3min 12s Sun [PRIVATE_IP] 19:15:15 MSK 1min 47s ago netbird-peers-health.timer netbird-peers-health.service +Sun [PRIVATE_IP] 19:28:15 MSK 11min Sun [PRIVATE_IP] 19:13:15 MSK 3min 47s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sun [PRIVATE_IP] 19:28:18 MSK 11min Sun [PRIVATE_IP] 19:13:18 MSK 3min 44s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sun [PRIVATE_IP] 19:28:29 MSK 11min Sun [PRIVATE_IP] 19:13:29 MSK 3min 33s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sun [PRIVATE_IP] 19:28:29 MSK 11min Sun [PRIVATE_IP] 19:13:29 MSK 3min 33s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sun [PRIVATE_IP] 19:30:00 MSK 12min Sun [PRIVATE_IP] 19:15:04 MSK 1min 58s ago homelab-incident-journal.timer homelab-incident-journal.service +Sun [PRIVATE_IP] 19:30:11 MSK 13min Sun [PRIVATE_IP] 19:15:09 MSK 1min 53s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sun [PRIVATE_IP] 19:30:33 MSK 13min Sun [PRIVATE_IP] 19:15:54 MSK 1min 8s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sun [PRIVATE_IP] 19:31:07 MSK 14min Sun [PRIVATE_IP] 19:16:04 MSK 58s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sun [PRIVATE_IP] 19:31:45 MSK 14min Sun [PRIVATE_IP] 19:02:50 MSK 14min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sun [PRIVATE_IP] 19:48:52 MSK 31min Sun [PRIVATE_IP] 19:14:15 MSK 2min 47s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sun [PRIVATE_IP] 21:06:49 MSK 1h 49min Sun [PRIVATE_IP] 07:42:38 MSK 11h ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 22:24:15 MSK 3h 7min Sun [PRIVATE_IP] 16:24:15 MSK 2h 52min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 00:00:00 MSK 4h 42min Sun [PRIVATE_IP] 00:00:04 MSK 19h ago dpkg-db-backup.timer dpkg-db-backup.service +Mon [PRIVATE_IP] 00:01:56 MSK 4h 44min Sun [PRIVATE_IP] 00:00:15 MSK 19h ago homelab-docker-health.timer homelab-docker-health.service +Mon [PRIVATE_IP] 00:03:49 MSK 4h 46min Sun [PRIVATE_IP] 00:38:29 MSK 18h ago logrotate.timer logrotate.service +Mon [PRIVATE_IP] 00:03:54 MSK 4h 46min Sun [PRIVATE_IP] 00:06:04 MSK 19h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Mon [PRIVATE_IP] 00:11:38 MSK 4h 54min Sun [PRIVATE_IP] 00:09:29 MSK 19h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Mon [PRIVATE_IP] 00:13:25 MSK 4h 56min Mon [PRIVATE_IP] 00:00:29 MSK - homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:15:18 MSK 4h 58min Sun [PRIVATE_IP] 00:11:04 MSK 19h ago homelab-quality-gate.timer homelab-quality-gate.service +Mon [PRIVATE_IP] 01:17:55 MSK 6h Mon [PRIVATE_IP] 00:51:14 MSK - fstrim.timer fstrim.service +Mon [PRIVATE_IP] 02:36:56 MSK 7h Sun [PRIVATE_IP] 05:58:48 MSK 13h ago pve-daily-update.timer pve-daily-update.service +Mon [PRIVATE_IP] 03:50:00 MSK 8h Sun [PRIVATE_IP] 03:50:04 MSK 15h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Mon [PRIVATE_IP] 04:52:03 MSK 9h Sun [PRIVATE_IP] 04:44:28 MSK 14h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Mon [PRIVATE_IP] 05:04:46 MSK 9h Sun [PRIVATE_IP] 05:14:37 MSK 14h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Mon [PRIVATE_IP] 05:04:47 MSK 9h Sun [PRIVATE_IP] 06:05:19 MSK 13h ago man-db.timer man-db.service +Mon [PRIVATE_IP] 06:01:10 MSK 10h Sun [PRIVATE_IP] 06:15:38 MSK 13h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Mon [PRIVATE_IP] 07:10:05 MSK 11h Sun [PRIVATE_IP] 07:04:15 MSK 12h ago homelab-drift-check.timer homelab-drift-check.service +Mon [PRIVATE_IP] 07:39:10 MSK 12h Sun [PRIVATE_IP] 07:33:28 MSK 11h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Mon [PRIVATE_IP] 07:52:53 MSK 12h Sun [PRIVATE_IP] 07:54:04 MSK 11h ago homelab-alerting-health.timer homelab-alerting-health.service +Mon [PRIVATE_IP] 07:57:55 MSK 12h Sun [PRIVATE_IP] 07:49:31 MSK 11h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Mon [PRIVATE_IP] 07:59:28 MSK 12h Sun [PRIVATE_IP] 07:42:29 MSK 11h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Mon [PRIVATE_IP] 08:00:53 MSK 12h Sun [PRIVATE_IP] 08:14:04 MSK 11h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Mon [PRIVATE_IP] 08:03:36 MSK 12h Sun [PRIVATE_IP] 08:02:37 MSK 11h ago homelab-overall-health.timer homelab-overall-health.service +Mon [PRIVATE_IP] 08:07:41 MSK 12h Sun [PRIVATE_IP] 07:51:04 MSK 11h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Mon [PRIVATE_IP] 08:09:45 MSK 12h Sun [PRIVATE_IP] 08:16:38 MSK 11h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Mon [PRIVATE_IP] 08:17:59 MSK 13h Sun [PRIVATE_IP] 08:24:58 MSK 10h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Mon [PRIVATE_IP] 08:26:42 MSK 13h Sun [PRIVATE_IP] 08:29:26 MSK 10h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Mon [PRIVATE_IP] 08:39:35 MSK 13h Sun [PRIVATE_IP] 08:38:04 MSK 10h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Mon [PRIVATE_IP] 08:47:05 MSK 13h Sun [PRIVATE_IP] 08:43:29 MSK 10h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Mon [PRIVATE_IP] 08:52:59 MSK 13h Sun [PRIVATE_IP] 08:48:08 MSK 10h ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Mon [PRIVATE_IP] 09:01:44 MSK 13h Sun [PRIVATE_IP] 09:01:04 MSK 10h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Mon [PRIVATE_IP] 09:15:59 MSK 13h Sun [PRIVATE_IP] 09:09:04 MSK 10h ago memos-offhost-sync.timer memos-offhost-sync.service +Mon [PRIVATE_IP] 10:15:00 MSK 14h Sun [PRIVATE_IP] 10:15:04 MSK 9h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Mon [PRIVATE_IP] 16:35:54 MSK 21h Sun [PRIVATE_IP] 16:35:54 MSK 2h 41min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Sun [PRIVATE_IP] 03:10:03 MSK 6 days Sun [PRIVATE_IP] 03:10:15 MSK 16h ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:09 MSK 6 days Sun [PRIVATE_IP] 03:10:15 MSK 16h ago xfs_scrub_all.timer xfs_scrub_all.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 9c20400..905663d 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,30 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "RUN7P1-IMMUTABLE-RESULT-PLAN-20260726T154634Z", - "status": "FAIL", - "rc": 2, - "host": "pve01", - "mode": "verify", - "component": "evidence-delivery", - "started_at_utc": "2026-07-26T15:54:51Z", - "finished_at_utc": "2026-07-26T15:54:52Z", - "reference_register_checked": true, - "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", - "error_register_checked": true, - "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "317b507e77cebd2da1bfa6929e277df3bc09ecfd115d5b15d32b9705445d03ee", - "duplicate_failed_command_blocked": false, - "block_reason": null, - "execution_started": true, - "changes_made": false, - "sanitized": true, - "secrets_included": false, - "private_addresses_included": false, - "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "3e4c291c2612a19e2f249cc30480639c87a6d497643f07022f10dcec1ebe9800", - "sanitized_output_sha256": "3e4c291c2612a19e2f249cc30480639c87a6d497643f07022f10dcec1ebe9800", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "RUN7P1_IMMUTABLE_RESULT_PLAN=BLOCKED\nPLAN_SHA256=40dee3f5a655b78fb38477b146c651f0c9a46a56111211876f56df41538c74ca\n{\"PLAN_SHA256\":\"40dee3f5a655b78fb38477b146c651f0c9a46a56111211876f56df41538c74ca\",\"acceptance_requires_separate_capsule\":true,\"anti_regression\":[\"AR-P1-001 stale latest cannot satisfy runner\",\"AR-P1-002 exact command_id and command_sha256 required\",\"AR-P1-003 exact command TXT SHA required\",\"AR-P1-004 context-auto cannot overwrite by-command result\",\"AR-P1-005 same ID same payload is idempotent\",\"AR-P1-006 same ID different payload is rejected\",\"AR-P1-007 JSON is readiness marker published after TXT\",\"AR-P1-008 sanitizer does not cross line boundaries\",\"AR-P1-009 public payload remains sanitized and address-free\",\"AR-P1-010 temporary files are cleaned\"],\"backup\":{\"core_apps\":\"/var/lib/homelab-runtime-receive/backups/homelab-runtime-receive.25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c\",\"exact_sha_required\":true,\"pve01\":\"/var/lib/homelab-chat-run/state/backups/homelab-chat-run.2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\"},\"blockers\":[\"REMOTE_RECEIVER_SHA_DISAGREEMENT\",\"REMOTE_SOURCE_LOCK_MISMATCH:receiver\",\"TRANSFORMATION_FAILED:RuntimeError\"],\"cleanup\":[\"remove all remote /tmp rehearsal and apply staging files\",\"retain verified rollback copies until phase seal\",\"do not remove historical runtime results\"],\"component\":\"evidence-delivery\",\"created_at_utc\":\"2026-07-26T15:54:52.541976+00:00\",\"declared_change_flags_for_apply\":{\"backup\":false,\"cluster\":false,\"gitea\":true,\"production\":true},\"exact_diff\":[\"add immutable .well-known/by-command/.json and .txt\",\"write TXT first and JSON last as readiness marker\",\"idempotent same COMMAND_ID with identical JSON/TXT\",\"fail closed on same COMMAND_ID with differing JSON/TXT\",\"prevent Git history overwrite on COMMAND_ID conflict\",\"retain latest.json/latest.txt as non-authoritative convenience\",\"runner publishes own immutable TXT URL\",\"runner polls exact immutable JSON and TXT\",\"runner verifies command_id, command_sha256 and sanitized flags\",\"fix multiline sanitizer false-positive with horizontal whitespace\",\"add persistent --self-test anti-regression entrypoints\"],\"gates\":{\"G0_context_lock\":{\"source_evidence_sha256\":\"844bd57846acb2dcb939392fd22eeae005b348bd346f3aace0bc219f6bafa38a\",\"source_preplan_basis_sha256\":\"6ae59d4b7877710758ecb8e315a8322e71c475b6dcda680864eff8c1f7e7e0d9\",\"status\":\"FAIL\"},\"G1_read_only_discovery\":{\"source_hashes\":{\"adapter\":\"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0\",\"adapter_unit\":\"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7\",\"portal\":\"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2\",\"portal_unit\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"receiver\":\"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c\",\"runner\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\"},\"status\":\"PASS\",\"units\":{\"adapter\":{\"active\":\"active\",\"enabled\":\"enabled\",\"group\":\"homelab-command-portal\",\"restarts\":\"0\",\"user\":\"root\"},\"portal\":{\"active\":\"active\",\"enabled\":\"enabled\",\"group\":\"homelab-command-portal\",\"restarts\":\"0\",\"user\":\"homelab-command-portal\"}}},\"G2_static_validation\":{\"status\":\"FAIL\",\"target_hashes\":{}},\"G3_identity_equivalent\":{\"current_receiver_sudo_contract_rc\":64,\"remote_install_available\":true,\"remote_mkdir_available\":true,\"status\":\"PASS\"},\"G4_integration_rehearsal\":{\"production_mutation\":false,\"results\":{\"remote_cleanup_rc\":0},\"status\":\"PASS\"}},\"kind\":\"homelab-change-plan\",\"mutation_journal\":{\"core_apps\":\"/var/lib/homelab-runtime-receive/RUN7P1-immutable-result-mutation.json\",\"pve01\":\"/var/lib/homelab-chat-run/state/RUN7P1-immutable-result-mutation.json\"},\"plan_id\":\"RUN7P1-IMMUTABLE-PUBLIC-RESULT\",\"postconditions\":[\"installed files match planned target SHA-256\",\"installed runner --self-test returns PASS\",\"installed receiver --self-test via sudo returns PASS\",\"APPLY itself completes through backward-compatible latest channel\",\"separate acceptance capsule is fetched by exact by-command URL\",\"context-auto overwrite of latest does not change acceptance result\",\"same-ID same-content receiver test is idempotent\",\"same-ID different-content receiver test fails closed\"],\"preconditions\":[\"all source SHA-256 values exactly match this plan\",\"Portal and Adapter remain active/enabled with NRestarts=0\",\"no unresolved mutating failure or rollback\",\"exact PLAN_SHA256 is embedded in APPLY capsule\",\"APPLY capsule source evidence SHA matches RUN7P1 evidence\"],\"risk\":{\"backup_subsystem_touched\":false,\"level\":\"MEDIUM\",\"reason\":\"changes public sanitized-result transport on two hosts\",\"second_runner_created\":false},\"rollback\":[\"capture diagnostics before rollback\",\"record file SHA/mode/owner, runner and receiver self-tests\",\"record exact by-command HTTP status and response SHA\",\"restore both exact source files from verified backups\",\"verify restored SHA/mode/owner\",\"do not restart unrelated services\"],\"schema\":1,\"scope\":[{\"group\":\"root\",\"host\":\"pve01\",\"mode\":\"0750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-chat-run\",\"source_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"target_sha256\":null},{\"group\":\"root\",\"host\":\"core-apps\",\"mode\":\"0750\",\"owner\":\"root\",\"path\":\"/usr/local/sbin/homelab-runtime-receive\",\"source_sha256\":\"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c\",\"target_sha256\":null}],\"service_identity_test\":{\"proposed_receiver_self_test\":\"PASS\",\"proposed_runner_self_test\":\"PASS\",\"receiver_current_sudo_usage_rc\":64},\"source\":{\"live_source_hashes\":{\"core_apps_receiver\":\"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c\",\"pve01_runner\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\"},\"run7a_capsule_sha256\":\"b45c17b1b5f4ac00868c84dd66ef8b59a6033b92c9886f7f3e6c5b48ea5da5a8\",\"run7a_evidence_sha256\":\"844bd57846acb2dcb939392fd22eeae005b348bd346f3aace0bc219f6bafa38a\",\"run7a_preplan_basis_sha256\":\"6ae59d4b7877710758ecb8e315a8322e71c475b6dcda680864eff8c1f7e7e0d9\",\"run7a_runner_json_sha256\":\"7c77a1aa9f229e7d67ab7a74769bcf4dee22b2fbd474c9c909fb796123b5a7bb\"},\"target\":{\"core_apps_receiver_sha256\":null,\"pve01_runner_sha256\":null},\"warnings\":[]}\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260726T161701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-07-26T16:17:01Z","finished_at_utc":"2026-07-26T16: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 3e1077a..f19a1d8 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,27 +1,163 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=RUN7P1-IMMUTABLE-RESULT-PLAN-20260726T154634Z -STATUS=FAIL -RC=2 +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +STATUS=OK +RC=0 HOST=pve01 -MODE=verify -COMPONENT=evidence-delivery -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=317b507e77cebd2da1bfa6929e277df3bc09ecfd115d5b15d32b9705445d03ee -DUPLICATE_FAILED_COMMAND_BLOCKED=false -EXECUTION_STARTED=true -CHANGES_MADE=false -SANITIZED=yes -SECRETS_INCLUDED=no -PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=3e4c291c2612a19e2f249cc30480639c87a6d497643f07022f10dcec1ebe9800 -SANITIZED_OUTPUT_SHA256=3e4c291c2612a19e2f249cc30480639c87a6d497643f07022f10dcec1ebe9800 +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 -RUN7P1_IMMUTABLE_RESULT_PLAN=BLOCKED -PLAN_SHA256=40dee3f5a655b78fb38477b146c651f0c9a46a56111211876f56df41538c74ca -{"PLAN_SHA256":"40dee3f5a655b78fb38477b146c651f0c9a46a56111211876f56df41538c74ca","acceptance_requires_separate_capsule":true,"anti_regression":["AR-P1-001 stale latest cannot satisfy runner","AR-P1-002 exact command_id and command_sha256 required","AR-P1-003 exact command TXT SHA required","AR-P1-004 context-auto cannot overwrite by-command result","AR-P1-005 same ID same payload is idempotent","AR-P1-006 same ID different payload is rejected","AR-P1-007 JSON is readiness marker published after TXT","AR-P1-008 sanitizer does not cross line boundaries","AR-P1-009 public payload remains sanitized and address-free","AR-P1-010 temporary files are cleaned"],"backup":{"core_apps":"/var/lib/homelab-runtime-receive/backups/homelab-runtime-receive.25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c","exact_sha_required":true,"pve01":"/var/lib/homelab-chat-run/state/backups/homelab-chat-run.2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9"},"blockers":["REMOTE_RECEIVER_SHA_DISAGREEMENT","REMOTE_SOURCE_LOCK_MISMATCH:receiver","TRANSFORMATION_FAILED:RuntimeError"],"cleanup":["remove all remote /tmp rehearsal and apply staging files","retain verified rollback copies until phase seal","do not remove historical runtime results"],"component":"evidence-delivery","created_at_utc":"2026-07-26T15:54:52.541976+00:00","declared_change_flags_for_apply":{"backup":false,"cluster":false,"gitea":true,"production":true},"exact_diff":["add immutable .well-known/by-command/.json and .txt","write TXT first and JSON last as readiness marker","idempotent same COMMAND_ID with identical JSON/TXT","fail closed on same COMMAND_ID with differing JSON/TXT","prevent Git history overwrite on COMMAND_ID conflict","retain latest.json/latest.txt as non-authoritative convenience","runner publishes own immutable TXT URL","runner polls exact immutable JSON and TXT","runner verifies command_id, command_sha256 and sanitized flags","fix multiline sanitizer false-positive with horizontal whitespace","add persistent --self-test anti-regression entrypoints"],"gates":{"G0_context_lock":{"source_evidence_sha256":"844bd57846acb2dcb939392fd22eeae005b348bd346f3aace0bc219f6bafa38a","source_preplan_basis_sha256":"6ae59d4b7877710758ecb8e315a8322e71c475b6dcda680864eff8c1f7e7e0d9","status":"FAIL"},"G1_read_only_discovery":{"source_hashes":{"adapter":"f2410cd328e2837b99e8ce4a28e25cb031a6bdd596d0286ac77a1822ef1cecd0","adapter_unit":"74d0f37878652ed9d46b53ae8556bbb30ebd683741f293c3f59b3527876ed2d7","portal":"8056faf4ef6348f0b06319ad3c49fbfeeadf25b6370f857ea19569bd27652ee2","portal_unit":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","receiver":"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c","runner":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9"},"status":"PASS","units":{"adapter":{"active":"active","enabled":"enabled","group":"homelab-command-portal","restarts":"0","user":"root"},"portal":{"active":"active","enabled":"enabled","group":"homelab-command-portal","restarts":"0","user":"homelab-command-portal"}}},"G2_static_validation":{"status":"FAIL","target_hashes":{}},"G3_identity_equivalent":{"current_receiver_sudo_contract_rc":64,"remote_install_available":true,"remote_mkdir_available":true,"status":"PASS"},"G4_integration_rehearsal":{"production_mutation":false,"results":{"remote_cleanup_rc":0},"status":"PASS"}},"kind":"homelab-change-plan","mutation_journal":{"core_apps":"/var/lib/homelab-runtime-receive/RUN7P1-immutable-result-mutation.json","pve01":"/var/lib/homelab-chat-run/state/RUN7P1-immutable-result-mutation.json"},"plan_id":"RUN7P1-IMMUTABLE-PUBLIC-RESULT","postconditions":["installed files match planned target SHA-256","installed runner --self-test returns PASS","installed receiver --self-test via sudo returns PASS","APPLY itself completes through backward-compatible latest channel","separate acceptance capsule is fetched by exact by-command URL","context-auto overwrite of latest does not change acceptance result","same-ID same-content receiver test is idempotent","same-ID different-content receiver test fails closed"],"preconditions":["all source SHA-256 values exactly match this plan","Portal and Adapter remain active/enabled with NRestarts=0","no unresolved mutating failure or rollback","exact PLAN_SHA256 is embedded in APPLY capsule","APPLY capsule source evidence SHA matches RUN7P1 evidence"],"risk":{"backup_subsystem_touched":false,"level":"MEDIUM","reason":"changes public sanitized-result transport on two hosts","second_runner_created":false},"rollback":["capture diagnostics before rollback","record file SHA/mode/owner, runner and receiver self-tests","record exact by-command HTTP status and response SHA","restore both exact source files from verified backups","verify restored SHA/mode/owner","do not restart unrelated services"],"schema":1,"scope":[{"group":"root","host":"pve01","mode":"0750","owner":"root","path":"/usr/local/sbin/homelab-chat-run","source_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","target_sha256":null},{"group":"root","host":"core-apps","mode":"0750","owner":"root","path":"/usr/local/sbin/homelab-runtime-receive","source_sha256":"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c","target_sha256":null}],"service_identity_test":{"proposed_receiver_self_test":"PASS","proposed_runner_self_test":"PASS","receiver_current_sudo_usage_rc":64},"source":{"live_source_hashes":{"core_apps_receiver":"25b1d3ddb71ea76fa8a067c4ab97e5f2a17c6dd7657440e74517647ab25ae72c","pve01_runner":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9"},"run7a_capsule_sha256":"b45c17b1b5f4ac00868c84dd66ef8b59a6033b92c9886f7f3e6c5b48ea5da5a8","run7a_evidence_sha256":"844bd57846acb2dcb939392fd22eeae005b348bd346f3aace0bc219f6bafa38a","run7a_preplan_basis_sha256":"6ae59d4b7877710758ecb8e315a8322e71c475b6dcda680864eff8c1f7e7e0d9","run7a_runner_json_sha256":"7c77a1aa9f229e7d67ab7a74769bcf4dee22b2fbd474c9c909fb796123b5a7bb"},"target":{"core_apps_receiver_sha256":null,"pve01_runner_sha256":null},"warnings":[]} +GENERATED_AT_UTC=[PRIVATE_IP]T16:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Sun 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":269749,"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":269592,"vmid":111},{"cpu":[PRIVATE_IP]193e-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":269752,"vmid":112},{"cpu":[PRIVATE_IP]227e-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":269595,"vmid":113},{"cpu":[PRIVATE_IP]08256,"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":269689,"vmid":130},{"cpu":[PRIVATE_IP]10465,"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":269746,"vmid":150},{"cpu":[PRIVATE_IP]944678,"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":269589,"vmid":160},{"cpu":[PRIVATE_IP]85426,"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":269742,"vmid":170},{"cpu":[PRIVATE_IP]26589,"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":269739,"vmid":171},{"cpu":[PRIVATE_IP]690198,"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":269586,"vmid":180},{"cpu":[PRIVATE_IP]816017,"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":269685,"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]87628,"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":269779},{"cgroup-mode":2,"cpu":[PRIVATE_IP]43124,"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":269707},{"cgroup-mode":2,"cpu":[PRIVATE_IP]65432,"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":269656},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,vztmpl,iso,backup","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","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/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/pve02/local-lvm","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"lvmthin","shared":0,"status":"available","storage":"local-lvm","type":"storage"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","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.70% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 38.43% + 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 +Sun [PRIVATE_IP] 19:17:10 MSK 7s Sun [PRIVATE_IP] 19:15:09 MSK 1min 53s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Sun [PRIVATE_IP] 19:17:15 MSK 12s Sun [PRIVATE_IP] 19:07:15 MSK 9min ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Sun [PRIVATE_IP] 19:17:33 MSK 30s Sun [PRIVATE_IP] 19:12:29 MSK 4min 33s ago homelab-health-metrics.timer homelab-health-metrics.service +Sun [PRIVATE_IP] 19:17:39 MSK 36s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Sun [PRIVATE_IP] 19:17:39 MSK 36s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Sun [PRIVATE_IP] 19:17:41 MSK 38s Sun [PRIVATE_IP] 19:16:39 MSK 23s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Sun [PRIVATE_IP] 19:18:45 MSK 1min 42s Sun [PRIVATE_IP] 19:13:31 MSK 3min 31s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Sun [PRIVATE_IP] 19:20:15 MSK 3min 12s Sun [PRIVATE_IP] 19:15:15 MSK 1min 47s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Sun [PRIVATE_IP] 19:20:15 MSK 3min 12s Sun [PRIVATE_IP] 19:15:15 MSK 1min 47s ago netbird-peers-health.timer netbird-peers-health.service +Sun [PRIVATE_IP] 19:28:15 MSK 11min Sun [PRIVATE_IP] 19:13:15 MSK 3min 47s ago homelab-disk-space-health.timer homelab-disk-space-health.service +Sun [PRIVATE_IP] 19:28:18 MSK 11min Sun [PRIVATE_IP] 19:13:18 MSK 3min 44s ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Sun [PRIVATE_IP] 19:28:29 MSK 11min Sun [PRIVATE_IP] 19:13:29 MSK 3min 33s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Sun [PRIVATE_IP] 19:28:29 MSK 11min Sun [PRIVATE_IP] 19:13:29 MSK 3min 33s ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Sun [PRIVATE_IP] 19:30:00 MSK 12min Sun [PRIVATE_IP] 19:15:04 MSK 1min 58s ago homelab-incident-journal.timer homelab-incident-journal.service +Sun [PRIVATE_IP] 19:30:11 MSK 13min Sun [PRIVATE_IP] 19:15:09 MSK 1min 53s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Sun [PRIVATE_IP] 19:30:33 MSK 13min Sun [PRIVATE_IP] 19:15:54 MSK 1min 8s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Sun [PRIVATE_IP] 19:31:07 MSK 14min Sun [PRIVATE_IP] 19:16:04 MSK 58s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Sun [PRIVATE_IP] 19:31:45 MSK 14min Sun [PRIVATE_IP] 19:02:50 MSK 14min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Sun [PRIVATE_IP] 19:48:52 MSK 31min Sun [PRIVATE_IP] 19:14:15 MSK 2min 47s ago homelab-reference-refresh.timer homelab-reference-refresh.service +Sun [PRIVATE_IP] 21:06:49 MSK 1h 49min Sun [PRIVATE_IP] 07:42:38 MSK 11h ago apt-daily.timer apt-daily.service +Sun [PRIVATE_IP] 22:24:15 MSK 3h 7min Sun [PRIVATE_IP] 16:24:15 MSK 2h 52min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 00:00:00 MSK 4h 42min Sun [PRIVATE_IP] 00:00:04 MSK 19h ago dpkg-db-backup.timer dpkg-db-backup.service +Mon [PRIVATE_IP] 00:01:56 MSK 4h 44min Sun [PRIVATE_IP] 00:00:15 MSK 19h ago homelab-docker-health.timer homelab-docker-health.service +Mon [PRIVATE_IP] 00:03:49 MSK 4h 46min Sun [PRIVATE_IP] 00:38:29 MSK 18h ago logrotate.timer logrotate.service +Mon [PRIVATE_IP] 00:03:54 MSK 4h 46min Sun [PRIVATE_IP] 00:06:04 MSK 19h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Mon [PRIVATE_IP] 00:11:38 MSK 4h 54min Sun [PRIVATE_IP] 00:09:29 MSK 19h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Mon [PRIVATE_IP] 00:13:25 MSK 4h 56min Mon [PRIVATE_IP] 00:00:29 MSK - homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 00:15:18 MSK 4h 58min Sun [PRIVATE_IP] 00:11:04 MSK 19h ago homelab-quality-gate.timer homelab-quality-gate.service +Mon [PRIVATE_IP] 01:17:55 MSK 6h Mon [PRIVATE_IP] 00:51:14 MSK - fstrim.timer fstrim.service +Mon [PRIVATE_IP] 02:36:56 MSK 7h Sun [PRIVATE_IP] 05:58:48 MSK 13h ago pve-daily-update.timer pve-daily-update.service +Mon [PRIVATE_IP] 03:50:00 MSK 8h Sun [PRIVATE_IP] 03:50:04 MSK 15h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Mon [PRIVATE_IP] 04:52:03 MSK 9h Sun [PRIVATE_IP] 04:44:28 MSK 14h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Mon [PRIVATE_IP] 05:04:46 MSK 9h Sun [PRIVATE_IP] 05:14:37 MSK 14h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Mon [PRIVATE_IP] 05:04:47 MSK 9h Sun [PRIVATE_IP] 06:05:19 MSK 13h ago man-db.timer man-db.service +Mon [PRIVATE_IP] 06:01:10 MSK 10h Sun [PRIVATE_IP] 06:15:38 MSK 13h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Mon [PRIVATE_IP] 07:10:05 MSK 11h Sun [PRIVATE_IP] 07:04:15 MSK 12h ago homelab-drift-check.timer homelab-drift-check.service +Mon [PRIVATE_IP] 07:39:10 MSK 12h Sun [PRIVATE_IP] 07:33:28 MSK 11h ago homelab-service-registry-check.timer homelab-service-registry-check.service +Mon [PRIVATE_IP] 07:52:53 MSK 12h Sun [PRIVATE_IP] 07:54:04 MSK 11h ago homelab-alerting-health.timer homelab-alerting-health.service +Mon [PRIVATE_IP] 07:57:55 MSK 12h Sun [PRIVATE_IP] 07:49:31 MSK 11h ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Mon [PRIVATE_IP] 07:59:28 MSK 12h Sun [PRIVATE_IP] 07:42:29 MSK 11h ago homelab-runbook-generate.timer homelab-runbook-generate.service +Mon [PRIVATE_IP] 08:00:53 MSK 12h Sun [PRIVATE_IP] 08:14:04 MSK 11h ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Mon [PRIVATE_IP] 08:03:36 MSK 12h Sun [PRIVATE_IP] 08:02:37 MSK 11h ago homelab-overall-health.timer homelab-overall-health.service +Mon [PRIVATE_IP] 08:07:41 MSK 12h Sun [PRIVATE_IP] 07:51:04 MSK 11h ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Mon [PRIVATE_IP] 08:09:45 MSK 12h Sun [PRIVATE_IP] 08:16:38 MSK 11h ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Mon [PRIVATE_IP] 08:17:59 MSK 13h Sun [PRIVATE_IP] 08:24:58 MSK 10h ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Mon [PRIVATE_IP] 08:26:42 MSK 13h Sun [PRIVATE_IP] 08:29:26 MSK 10h ago homelab-capacity-risk.timer homelab-capacity-risk.service +Mon [PRIVATE_IP] 08:39:35 MSK 13h Sun [PRIVATE_IP] 08:38:04 MSK 10h ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Mon [PRIVATE_IP] 08:47:05 MSK 13h Sun [PRIVATE_IP] 08:43:29 MSK 10h ago homelab-cluster-passport.timer homelab-cluster-passport.service +Mon [PRIVATE_IP] 08:52:59 MSK 13h Sun [PRIVATE_IP] 08:48:08 MSK 10h ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Mon [PRIVATE_IP] 09:01:44 MSK 13h Sun [PRIVATE_IP] 09:01:04 MSK 10h ago homelab-golden-state-index.timer homelab-golden-state-index.service +Mon [PRIVATE_IP] 09:15:59 MSK 13h Sun [PRIVATE_IP] 09:09:04 MSK 10h ago memos-offhost-sync.timer memos-offhost-sync.service +Mon [PRIVATE_IP] 10:15:00 MSK 14h Sun [PRIVATE_IP] 10:15:04 MSK 9h ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Mon [PRIVATE_IP] 16:35:54 MSK 21h Sun [PRIVATE_IP] 16:35:54 MSK 2h 41min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Sun [PRIVATE_IP] 03:10:03 MSK 6 days Sun [PRIVATE_IP] 03:10:15 MSK 16h ago e2scrub_all.timer e2scrub_all.service +Sun [PRIVATE_IP] 03:10:09 MSK 6 days Sun [PRIVATE_IP] 03:10:15 MSK 16h ago xfs_scrub_all.timer xfs_scrub_all.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