From 3e81e7e00ee5cf88f9a8cc29206c74df88c77c3d Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Mon, 3 Aug 2026 10:17:03 +0000 Subject: [PATCH] runtime: publish CONTEXT-AUTO-20260803T101701Z --- .../CONTEXT-AUTO-20260803T101701Z.json | 1 + .../history/CONTEXT-AUTO-20260803T101701Z.txt | 164 ++++++++++++++++ runtime/latest.json | 39 +--- runtime/latest.txt | 182 +++++++++++++++--- 4 files changed, 322 insertions(+), 64 deletions(-) create mode 100644 runtime/history/CONTEXT-AUTO-20260803T101701Z.json create mode 100644 runtime/history/CONTEXT-AUTO-20260803T101701Z.txt diff --git a/runtime/history/CONTEXT-AUTO-20260803T101701Z.json b/runtime/history/CONTEXT-AUTO-20260803T101701Z.json new file mode 100644 index 0000000..bef3abe --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260803T101701Z.json @@ -0,0 +1 @@ +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260803T101701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-08-03T10:17:01Z","finished_at_utc":"2026-08-03T10: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-20260803T101701Z.txt b/runtime/history/CONTEXT-AUTO-20260803T101701Z.txt new file mode 100644 index 0000000..18c606e --- /dev/null +++ b/runtime/history/CONTEXT-AUTO-20260803T101701Z.txt @@ -0,0 +1,164 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z +STATUS=OK +RC=0 +HOST=pve01 +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e +ERROR_REGISTER_SHA[PRIVATE_IP]c7fa[PRIVATE_IP]583c4aefac[PRIVATE_IP]1736ed[PRIVATE_IP]ab83 +OUTPUT_BEGIN +GENERATED_AT_UTC=[PRIVATE_IP]T10:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on + +Quorum information +------------------ +Date: Mon Aug [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.db +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]509e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":515400,"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":515484,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":515445,"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":515488,"vmid":113},{"cpu":[PRIVATE_IP]92308,"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":515429,"vmid":130},{"cpu":[PRIVATE_IP]06909,"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":515397,"vmid":150},{"cpu":[PRIVATE_IP]941043,"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":515480,"vmid":160},{"cpu":[PRIVATE_IP]48309,"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":515393,"vmid":170},{"cpu":[PRIVATE_IP]55184,"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":515390,"vmid":171},{"cpu":[PRIVATE_IP]49342,"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":515478,"vmid":180},{"cpu":[PRIVATE_IP]616625,"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":515425,"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]52186,"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":515447},{"cgroup-mode":2,"cpu":[PRIVATE_IP]98217,"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":515502},{"cgroup-mode":2,"cpu":[PRIVATE_IP]99556,"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":515521},{"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"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.98% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.31% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● homelab-crypto-portfolio-chart-health.service loaded failed failed Crypto portfolio chart health check +● skladchik-reports-monitor-supervisor.service loaded failed failed Skladchik reports monitor full supervisor + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Mon [PRIVATE_IP] 13:17:17 MSK 14s Mon [PRIVATE_IP] 13:12:07 MSK 4min 55s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Mon [PRIVATE_IP] 13:17:21 MSK 18s Mon [PRIVATE_IP] 13:16:17 MSK 45s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Mon [PRIVATE_IP] 13:17:26 MSK 23s Mon [PRIVATE_IP] 13:16:26 MSK 36s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Mon [PRIVATE_IP] 13:17:26 MSK 23s Mon [PRIVATE_IP] 13:16:26 MSK 36s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Mon [PRIVATE_IP] 13:17:27 MSK 24s Mon [PRIVATE_IP] 13:15:18 MSK 1min 44s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Mon [PRIVATE_IP] 13:19:14 MSK 2min 11s Mon [PRIVATE_IP] 13:14:14 MSK 2min 48s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Mon [PRIVATE_IP] 13:19:26 MSK 2min 23s Mon [PRIVATE_IP] 13:04:26 MSK 12min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Mon [PRIVATE_IP] 13:20:26 MSK 3min 23s Mon [PRIVATE_IP] 13:05:26 MSK 11min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Mon [PRIVATE_IP] 13:20:26 MSK 3min 23s Mon [PRIVATE_IP] 13:05:26 MSK 11min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Mon [PRIVATE_IP] 13:21:17 MSK 4min 14s Mon [PRIVATE_IP] 13:16:17 MSK 45s ago netbird-peers-health.timer netbird-peers-health.service +Mon [PRIVATE_IP] 13:21:34 MSK 4min 31s Mon [PRIVATE_IP] 13:16:28 MSK 34s ago homelab-health-metrics.timer homelab-health-metrics.service +Mon [PRIVATE_IP] 13:26:17 MSK 9min Mon [PRIVATE_IP] 13:16:17 MSK 45s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Mon [PRIVATE_IP] 13:30:00 MSK 12min Mon [PRIVATE_IP] 13:15:14 MSK 1min 48s ago homelab-incident-journal.timer homelab-incident-journal.service +Mon [PRIVATE_IP] 13:30:00 MSK 12min Mon [PRIVATE_IP] 13:15:50 MSK 1min 12s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Mon [PRIVATE_IP] 13:31:04 MSK 14min Mon [PRIVATE_IP] 13:15:28 MSK 1min 34s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Mon [PRIVATE_IP] 13:31:15 MSK 14min Mon [PRIVATE_IP] 13:15:53 MSK 1min 9s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Mon [PRIVATE_IP] 13:31:17 MSK 14min Mon [PRIVATE_IP] 13:16:17 MSK 45s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Mon [PRIVATE_IP] 13:32:21 MSK 15min Mon [PRIVATE_IP] 13:02:07 MSK 14min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Mon [PRIVATE_IP] 13:35:24 MSK 18min Mon [PRIVATE_IP] 13:00:50 MSK 16min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Mon [PRIVATE_IP] 14:08:25 MSK 51min Mon [PRIVATE_IP] 08:08:25 MSK 5h 8min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 14:20:25 MSK 1h 3min Sun [PRIVATE_IP] 14:20:25 MSK 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Tue [PRIVATE_IP] 00:00:00 MSK 10h Mon [PRIVATE_IP] 00:00:06 MSK 13h ago dpkg-db-backup.timer dpkg-db-backup.service +Tue [PRIVATE_IP] 00:05:03 MSK 10h Mon [PRIVATE_IP] 00:15:28 MSK 13h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Tue [PRIVATE_IP] 00:07:51 MSK 10h Mon [PRIVATE_IP] 00:02:07 MSK 13h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Tue [PRIVATE_IP] 00:08:11 MSK 10h Mon [PRIVATE_IP] 00:11:14 MSK 13h ago homelab-quality-gate.timer homelab-quality-gate.service +Tue [PRIVATE_IP] 00:08:26 MSK 10h Mon [PRIVATE_IP] 00:49:14 MSK 12h ago logrotate.timer logrotate.service +Tue [PRIVATE_IP] 00:13:28 MSK 10h Mon [PRIVATE_IP] 00:05:50 MSK 13h ago homelab-docker-health.timer homelab-docker-health.service +Tue [PRIVATE_IP] 00:14:17 MSK 10h Mon [PRIVATE_IP] 10:50:38 MSK 2h 26min ago man-db.timer man-db.service +Tue [PRIVATE_IP] 01:23:37 MSK 12h Mon [PRIVATE_IP] 01:28:07 MSK 11h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 02:32:43 MSK 13h Mon [PRIVATE_IP] 12:38:50 MSK 38min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 03:50:00 MSK 14h Mon [PRIVATE_IP] 03:50:07 MSK 9h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Tue [PRIVATE_IP] 04:41:55 MSK 15h Mon [PRIVATE_IP] 04:50:29 MSK 8h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Tue [PRIVATE_IP] 05:14:52 MSK 15h Mon [PRIVATE_IP] 05:06:55 MSK 8h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Tue [PRIVATE_IP] 06:52:59 MSK 17h Mon [PRIVATE_IP] 06:53:14 MSK 6h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:03:42 MSK 17h Mon [PRIVATE_IP] 07:05:50 MSK 6h ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:39:24 MSK 18h Mon [PRIVATE_IP] 07:21:25 MSK 5h 55min ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:45:52 MSK 18h Mon [PRIVATE_IP] 07:50:14 MSK 5h 26min ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:54:16 MSK 18h Mon [PRIVATE_IP] 07:52:50 MSK 5h 24min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 07:55:52 MSK 18h Mon [PRIVATE_IP] 07:50:25 MSK 5h 26min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 07:56:48 MSK 18h Mon [PRIVATE_IP] 07:46:38 MSK 5h 30min ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:59:39 MSK 18h Mon [PRIVATE_IP] 08:11:07 MSK 5h 5min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:03:48 MSK 18h Mon [PRIVATE_IP] 08:19:07 MSK 4h 57min ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:12:24 MSK 18h Mon [PRIVATE_IP] 08:23:50 MSK 4h 53min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:16:32 MSK 18h Mon [PRIVATE_IP] 08:21:25 MSK 4h 55min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:36:17 MSK 19h Mon [PRIVATE_IP] 08:42:03 MSK 4h 34min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:36:39 MSK 19h Mon [PRIVATE_IP] 08:32:47 MSK 4h 44min ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:50:00 MSK 19h Mon [PRIVATE_IP] 08:47:23 MSK 4h 29min ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 08:52:29 MSK 19h Mon [PRIVATE_IP] 08:53:07 MSK 4h 23min ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 08:54:34 MSK 19h Mon [PRIVATE_IP] 08:51:27 MSK 4h 25min ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Tue [PRIVATE_IP] 09:06:42 MSK 19h Mon [PRIVATE_IP] 09:20:50 MSK 3h 56min ago memos-offhost-sync.timer memos-offhost-sync.service +Tue [PRIVATE_IP] 10:15:00 MSK 20h Mon [PRIVATE_IP] 10:15:05 MSK 3h 1min ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 03:10:38 MSK 5 days Sun [PRIVATE_IP] 03:10:25 MSK 1 day 10h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:48 MSK 5 days Sun [PRIVATE_IP] 03:10:50 MSK 1 day 10h ago e2scrub_all.timer e2scrub_all.service +Mon [PRIVATE_IP] 00:03:56 MSK 6 days Mon [PRIVATE_IP] 00:11:50 MSK 13h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:11:21 MSK 6 days Mon [PRIVATE_IP] 01:17:56 MSK 11h ago fstrim.timer fstrim.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 0c854c2..bef3abe 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1 @@ -{ - "schema_version": 1, - "channel": "homelab-runtime", - "command_id": "HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z", - "status": "OK", - "rc": 0, - "host": "pve01", - "mode": "verify", - "component": "hbarhub-standard-local-deployment-plan-fix2-v6", - "started_at_utc": "2026-08-03T09:53:56Z", - "finished_at_utc": "2026-08-03T09:53:56Z", - "reference_register_checked": true, - "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", - "error_register_checked": true, - "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "cda1dbd047b226d23bcd8c6e8c02f46be9957c2f777aab7b559e582a794b8d0b", - "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": "8a879b5f406593f076d9eaff004256d4df2e02ac75e5088cee94d964a841fcfc", - "sanitized_output_sha256": "8a879b5f406593f076d9eaff004256d4df2e02ac75e5088cee94d964a841fcfc", - "output_truncated_in_json": false, - "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"7c5e7eed51a9c2de733631c21063714423ac3f4a692549958d4b4807140b6684\",\"candidate_plan_sha256\":\"7c5e7eed51a9c2de733631c21063714423ac3f4a692549958d4b4807140b6684\",\"capacity\":{\"disk\":{\"available_bytes\":76465217536,\"gate\":true,\"required_available_bytes\":10737418240,\"total_bytes\":126605975552},\"memory\":{\"available_bytes\":2744274944,\"required_available_bytes\":2147483648,\"standard_gate\":true,\"swap_free_bytes\":6714781696,\"swap_total_bytes\":8589930496,\"total_bytes\":10435301376}},\"changes_made\":false,\"checks\":{\"archive_bytes_exact\":true,\"archive_sha256_exact\":true,\"compose_config_valid\":true,\"compose_env_file_handling_valid\":true,\"compose_services_exact\":true,\"compose_source_exact\":true,\"compose_v4_unsupported_flag_removed\":true,\"core_hostname\":true,\"disk_gate\":true,\"docker_available\":true,\"no_hbarhub_containers\":true,\"no_hbarhub_images\":true,\"no_hbarhub_networks\":true,\"no_hbarhub_volumes\":true,\"only_main_branch\":true,\"port_8040_free\":true,\"python_syntax_valid\":true,\"read_only\":true,\"requirements_exact\":true,\"safe_manifest_exact\":true,\"source_available\":true,\"source_commit_exact\":true,\"source_tree_exact\":true,\"standard_memory_gate\":true,\"target_env_absent\":true,\"target_path_absent\":true,\"tracked_file_count_exact\":true,\"tracked_total_bytes_exact\":true,\"tree_listing_exact\":true,\"tree_path_set_exact\":true},\"command_audit\":[{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-candidate-1-is-bare\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-head\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":41,\"stdout_sha256\":\"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-branches\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":5,\"stdout_sha256\":\"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":0,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-ls-tree\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":2095,\"stdout_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":1,\"output_within_limit\":true,\"rc\":0,\"stage\":\"git-main-archive\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9760,\"stdout_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"timed_out\":false,\"tool\":\"git\"},{\"duration_ms\":11,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-server-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":13,\"stdout_sha256\":\"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":24,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-compose-version\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":9,\"stdout_sha256\":\"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":7,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-containers\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":6,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-networks\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":5,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-volumes\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":10,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-hbarhub-images\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":0,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"timed_out\":false,\"tool\":\"docker\"},{\"duration_ms\":30,\"output_within_limit\":true,\"rc\":0,\"stage\":\"docker-compose-config\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_bytes\":4267,\"stdout_sha256\":\"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1\",\"timed_out\":false,\"tool\":\"docker\"}],\"command_id\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z\",\"container_environment_requested\":false,\"control_plane_error\":null,\"diagnosis\":\"HBARHUB_STANDARD_LOCAL_DEPLOYMENT_PLAN_READY\",\"diagnostic_complete\":true,\"docker\":{\"available\":true,\"compose_config\":{\"attempted\":true,\"config_bytes\":4267,\"config_input_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"config_sha256\":\"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1\",\"env_file_transform\":{\"config_input_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"env_file_present\":false,\"method\":\"SOURCE_UNCHANGED_NO_ENV_FILE\",\"removed_block_count\":0,\"removed_block_set_sha256\":\"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945\",\"removed_path_count\":0,\"removed_paths_all_dot_env\":true,\"secret_file_read\":false,\"source_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"source_unchanged\":true,\"valid\":true,\"writes_performed\":false},\"rc\":0,\"secret_file_read\":false,\"services\":[\"postgres\",\"redis\",\"scheduler\",\"web\",\"worker\"],\"services_match\":true,\"source_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"v4_failure_stderr_sha256\":\"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326\",\"v4_unsupported_flag_removed\":true,\"valid\":true},\"compose_version\":\"2.26.1-4\",\"container_environment_requested\":false,\"containers\":[],\"images\":[],\"networks\":[],\"server_version\":\"26.1.5+dfsg1\",\"volumes\":[]},\"duration_ms\":105,\"failed_checks\":[],\"failures\":[],\"gate\":\"READY_FOR_STANDARD_LOCAL_DEPLOYMENT_APPLY\",\"identity\":{\"expected_hostname\":\"core-apps\",\"hostname_short\":\"core-apps\",\"matches\":true},\"mutation_outcome\":\"NO_MUTATION\",\"plan\":{\"acceptance\":[\"all five services are present\",\"postgres and redis are healthy\",\"web is healthy and /health/live returns success\",\"/health/ready returns success after migrations\",\"worker and scheduler are running\",\"Gitea main remains unchanged\",\"public proxy remains unchanged\"],\"apply_operations\":[\"create /opt/stacks/hbarhub from the verified in-memory git archive\",\"generate deployment secrets locally and write .env mode 0600\",\"validate docker compose config again\",\"build only the hbarhub application image\",\"start postgres and redis, then run Django migrations\",\"start web, worker, and scheduler\",\"verify local live and ready health on port 8040\"],\"apply_preconditions\":[\"all source locks match exactly\",\"only main branch is present\",\"target path and target .env are absent\",\"no hbarhub containers, networks, volumes, or images exist\",\"port 8040 has no listener\",\"standard memory and disk gates pass\",\"docker compose config validates the exact source\"],\"compose_validation\":{\"command\":\"docker compose config --format json --no-interpolate\",\"config_input_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"env_file_transform\":{\"config_input_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"env_file_present\":false,\"method\":\"SOURCE_UNCHANGED_NO_ENV_FILE\",\"removed_block_count\":0,\"removed_block_set_sha256\":\"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945\",\"removed_path_count\":0,\"removed_paths_all_dot_env\":true,\"secret_file_read\":false,\"source_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"source_unchanged\":true,\"valid\":true,\"writes_performed\":false},\"method\":\"SOURCE_UNCHANGED_OR_IN_MEMORY_ENV_FILE_OMISSION\",\"normalized_config_sha256\":\"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1\",\"secret_file_read\":false,\"services\":[\"postgres\",\"redis\",\"scheduler\",\"web\",\"worker\"],\"source_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"unsupported_v4_flag_removed\":true,\"writes_performed\":false},\"forbidden\":[\"modify Gitea refs or repository content\",\"modify NPMplus, DNS, TLS, or any public proxy\",\"modify monitoring, backups, or other compose projects\",\"read, print, publish, or return generated secret values\",\"write outside the new stack and Docker resources labeled project hbarhub\"],\"next_stage\":\"STANDARD_LOCAL_DEPLOYMENT_APPLY\",\"operation\":\"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT\",\"parent_inventory\":{\"capsule_sha256\":\"15578fd16d67bd7180858370ff06017184bc79ce14da4eee8005fc9cf8e4219d\",\"changes_made\":false,\"command_id\":\"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX1-V5-20260803T093519Z\",\"diagnosis\":\"HBARHUB_DEPLOYMENT_PLAN_UNEXPECTED_EXCEPTION\",\"exception_evidence_sha256\":\"7d844bbd82129943f3b700ec95bbc2a73652300ec16c6c8353289e2ec0590fd0\",\"exception_identity\":\"COMPOSE_ENV_FILE_BLOCK_MISSING\",\"exception_type\":\"ValueError\",\"mutation_outcome\":\"NO_MUTATION\",\"output_sha256\":\"8eb695a48187cae0e47dc156a53e7a978b12d5e9e5dcc4108186db746f006206\",\"runner_document_rc\":1,\"runner_json_sha256\":\"84358dea8b34a147269c560fb233581a68e31b49eb0d30618ebc6e90e1a0f756\",\"runner_rc\":1,\"runtime_archive_bytes\":9760,\"runtime_archive_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"status\":\"FAIL\"},\"profile\":{\"health_endpoints\":[\"/health/live\",\"/health/ready\"],\"minimum_available_disk_bytes\":10737418240,\"minimum_available_memory_bytes\":2147483648,\"name\":\"STANDARD\",\"services\":[\"postgres\",\"redis\",\"scheduler\",\"web\",\"worker\"]},\"rollback\":{\"operations\":[\"capture sanitized failure evidence\",\"docker compose down --volumes --remove-orphans\",\"remove only application images created by this apply\",\"remove only /opt/stacks/hbarhub created by this apply\",\"verify no hbarhub resources remain and port 8040 is free\"],\"preexisting_data_preserved\":\"preconditions require no preexisting stack or project resources\",\"trigger\":\"any failed post-mutation check\"},\"schema\":1,\"source_lock\":{\"archive_bytes\":9760,\"archive_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"branch\":\"main\",\"commit\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"delivery\":\"local bare repository git archive; no Git credentials\",\"repository\":\"homelab-admin/hbarhub\",\"tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\"},\"target\":{\"compose_project\":\"hbarhub\",\"hostname\":\"core-apps\",\"local_port\":8040,\"public_proxy\":false,\"role\":\"core-apps\",\"stack_path\":\"/opt/stacks/hbarhub\",\"vmid\":170}},\"port_listener\":{\"addresses_read_from_output\":false,\"errors\":[],\"kernel_tables_read\":2,\"listener_entry_count\":0,\"listener_present\":false,\"port\":8040},\"private_addresses_included\":false,\"rc\":0,\"read_only\":true,\"ready_for_apply\":true,\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secret_files_read\":false,\"secrets_included\":false,\"source\":{\"archive_bytes\":9760,\"archive_member_count\":33,\"archive_member_set_sha256\":\"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142\",\"archive_sha256\":\"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e\",\"available\":true,\"branch_names\":[\"main\"],\"env_example_key_count\":12,\"env_example_key_set_sha256\":\"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e\",\"invalid_utf8_path_count\":0,\"main_head\":\"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957\",\"main_tree\":\"7e13a2e1b5ab35046dbe172383a814151c16cce0\",\"published_path_candidates\":[{\"bare_repository\":true,\"bytes\":4096,\"exists\":true,\"gid\":1000,\"git_rc\":0,\"kind\":\"directory\",\"mode\":\"0755\",\"path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"uid\":1000},{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git\"}],\"python_compile_failures\":[],\"python_file_count\":13,\"requirements\":[\"Django==6.0.7\",\"celery==5.6.3\",\"gunicorn==26.0.0\",\"psycopg[binary]==3.3.4\",\"redis==8.0.1\"],\"requirements_match\":true,\"safe_manifest\":{\".dockerignore\":{\"bytes\":82,\"exists\":true,\"expected_sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\",\"matches\":true,\"sha256\":\"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa\"},\".env.example\":{\"bytes\":419,\"exists\":true,\"expected_sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\",\"matches\":true,\"sha256\":\"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3\"},\"Dockerfile\":{\"bytes\":477,\"exists\":true,\"expected_sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\",\"matches\":true,\"sha256\":\"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab\"},\"README.md\":{\"bytes\":1429,\"exists\":true,\"expected_sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\",\"matches\":true,\"sha256\":\"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff\"},\"compose.yaml\":{\"bytes\":2980,\"exists\":true,\"expected_sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\",\"matches\":true,\"sha256\":\"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc\"},\"config/assets.json\":{\"bytes\":2787,\"exists\":true,\"expected_sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\",\"matches\":true,\"sha256\":\"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff\"},\"docs/ARCHITECTURE.md\":{\"bytes\":1214,\"exists\":true,\"expected_sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\",\"matches\":true,\"sha256\":\"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e\"},\"docs/OPERATIONS.md\":{\"bytes\":957,\"exists\":true,\"expected_sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\",\"matches\":true,\"sha256\":\"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7\"},\"hbarhub/__init__.py\":{\"bytes\":65,\"exists\":true,\"expected_sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\",\"matches\":true,\"sha256\":\"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce\"},\"hbarhub/celery.py\":{\"bytes\":223,\"exists\":true,\"expected_sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\",\"matches\":true,\"sha256\":\"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47\"},\"hbarhub/settings.py\":{\"bytes\":3614,\"exists\":true,\"expected_sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\",\"matches\":true,\"sha256\":\"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88\"},\"hbarhub/urls.py\":{\"bytes\":165,\"exists\":true,\"expected_sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\",\"matches\":true,\"sha256\":\"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac\"},\"hbarhub/wsgi.py\":{\"bytes\":168,\"exists\":true,\"expected_sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\",\"matches\":true,\"sha256\":\"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630\"},\"manage.py\":{\"bytes\":284,\"exists\":true,\"expected_sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\",\"matches\":true,\"sha256\":\"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a\"},\"portal/__init__.py\":{\"bytes\":0,\"exists\":true,\"expected_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"matches\":true,\"sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"portal/apps.py\":{\"bytes\":174,\"exists\":true,\"expected_sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\",\"matches\":true,\"sha256\":\"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2\"},\"portal/assets.py\":{\"bytes\":911,\"exists\":true,\"expected_sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\",\"matches\":true,\"sha256\":\"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019\"},\"portal/tasks.py\":{\"bytes\":192,\"exists\":true,\"expected_sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\",\"matches\":true,\"sha256\":\"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2\"},\"portal/templates/portal/home.html\":{\"bytes\":3478,\"exists\":true,\"expected_sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\",\"matches\":true,\"sha256\":\"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae\"},\"portal/tests.py\":{\"bytes\":1371,\"exists\":true,\"expected_sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\",\"matches\":true,\"sha256\":\"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff\"},\"portal/urls.py\":{\"bytes\":260,\"exists\":true,\"expected_sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\",\"matches\":true,\"sha256\":\"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088\"},\"portal/views.py\":{\"bytes\":1449,\"exists\":true,\"expected_sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\",\"matches\":true,\"sha256\":\"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14\"},\"requirements.txt\":{\"bytes\":81,\"exists\":true,\"expected_sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\",\"matches\":true,\"sha256\":\"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa\"}},\"safe_manifest_all_match\":true,\"safe_manifest_scope\":\"PUBLISHED_23_SOURCE_FILES\",\"secret_file_read\":false,\"selected_path\":\"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git\",\"tracked_file_count\":27,\"tracked_total_bytes\":26067,\"tree_listing_sha256\":\"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954\",\"tree_path_set_sha256\":\"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f\"},\"stack\":{\"root\":{\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub\"},\"secret_env_metadata_only\":{\"content_read\":false,\"exists\":false,\"kind\":null,\"path\":\"/opt/stacks/hbarhub/.env\"}},\"status\":\"OK\",\"unexpected_exception\":{}}\n" -} +{"schema_version":1,"channel":"homelab-runtime","command_id":"CONTEXT-AUTO-20260803T101701Z","status":"OK","rc":0,"host":"pve01","mode":"read-only","component":"cluster-context","started_at_utc":"2026-08-03T10:17:01Z","finished_at_utc":"2026-08-03T10: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 d42df5d..18c606e 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,34 +1,164 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z +COMMAND_ID=CONTEXT-AUTO-[PRIVATE_IP]701Z STATUS=OK RC=0 HOST=pve01 -MODE=verify -COMPONENT=hbarhub-standard-local-deployment-plan-fix2-v6 -REFERENCE_REGISTER_CHECK=OK -REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e -ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=cda1dbd047b226d23bcd8c6e8c02f46be9957c2f777aab7b559e582a794b8d0b -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=8a879b5f406593f076d9eaff004256d4df2e02ac75e5088cee94d964a841fcfc -SANITIZED_OUTPUT_SHA256=8a879b5f406593f076d9eaff004256d4df2e02ac75e5088cee94d964a841fcfc +COMPONENT=cluster-context +REFERENCE_SHA[PRIVATE_IP]f8edc75fcf[PRIVATE_IP]c[PRIVATE_IP]cc112ceccb6cf[PRIVATE_IP]a4deb8e +ERROR_REGISTER_SHA[PRIVATE_IP]c7fa[PRIVATE_IP]583c4aefac[PRIVATE_IP]1736ed[PRIVATE_IP]ab83 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"PLAN_SHA256":"7c5e7eed51a9c2de733631c21063714423ac3f4a692549958d4b4807140b6684","candidate_plan_sha256":"7c5e7eed51a9c2de733631c21063714423ac3f4a692549958d4b4807140b6684","capacity":{"disk":{"available_bytes":76465217536,"gate":true,"required_available_bytes":10737418240,"total_bytes":126605975552},"memory":{"available_bytes":2744274944,"required_available_bytes":2147483648,"standard_gate":true,"swap_free_bytes":6714781696,"swap_total_bytes":8589930496,"total_bytes":10435301376}},"changes_made":false,"checks":{"archive_bytes_exact":true,"archive_sha256_exact":true,"compose_config_valid":true,"compose_env_file_handling_valid":true,"compose_services_exact":true,"compose_source_exact":true,"compose_v4_unsupported_flag_removed":true,"core_hostname":true,"disk_gate":true,"docker_available":true,"no_hbarhub_containers":true,"no_hbarhub_images":true,"no_hbarhub_networks":true,"no_hbarhub_volumes":true,"only_main_branch":true,"port_8040_free":true,"python_syntax_valid":true,"read_only":true,"requirements_exact":true,"safe_manifest_exact":true,"source_available":true,"source_commit_exact":true,"source_tree_exact":true,"standard_memory_gate":true,"target_env_absent":true,"target_path_absent":true,"tracked_file_count_exact":true,"tracked_total_bytes_exact":true,"tree_listing_exact":true,"tree_path_set_exact":true},"command_audit":[{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-candidate-1-is-bare","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"a17fcf0a2f50e2d495e4f90ce263410edc183add6c62699a2facbccf60410f74","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-head","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"dc0f064e529250268d3ff6232078a19aca8a12b3abc0291e79756ffde77303ed","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41,"stdout_sha256":"59f30ea418f3e638f5c0294f375feeda787f7da9acc07ac67f8276032be811a2","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-branches","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":5,"stdout_sha256":"6403203dd5a0867eb14d104ee8a73730bd72dd9ad92e78d996a6dba0a5dcfc01","timed_out":false,"tool":"git"},{"duration_ms":0,"output_within_limit":true,"rc":0,"stage":"git-main-ls-tree","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":2095,"stdout_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","timed_out":false,"tool":"git"},{"duration_ms":1,"output_within_limit":true,"rc":0,"stage":"git-main-archive","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9760,"stdout_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","timed_out":false,"tool":"git"},{"duration_ms":11,"output_within_limit":true,"rc":0,"stage":"docker-server-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":13,"stdout_sha256":"8484e7b831ba500ccf015246dc0a7b3f98de3c11519b347437ff8e91db018257","timed_out":false,"tool":"docker"},{"duration_ms":24,"output_within_limit":true,"rc":0,"stage":"docker-compose-version","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":9,"stdout_sha256":"9a98539f27de5f629edafed2968b89d8ca06b9b39c9469ed2c22f3ca265bb6f9","timed_out":false,"tool":"docker"},{"duration_ms":7,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-containers","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":6,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-networks","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":5,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-volumes","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":10,"output_within_limit":true,"rc":0,"stage":"docker-hbarhub-images","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":0,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","timed_out":false,"tool":"docker"},{"duration_ms":30,"output_within_limit":true,"rc":0,"stage":"docker-compose-config","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":4267,"stdout_sha256":"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1","timed_out":false,"tool":"docker"}],"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX2-V6-20260803T094841Z","container_environment_requested":false,"control_plane_error":null,"diagnosis":"HBARHUB_STANDARD_LOCAL_DEPLOYMENT_PLAN_READY","diagnostic_complete":true,"docker":{"available":true,"compose_config":{"attempted":true,"config_bytes":4267,"config_input_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","config_sha256":"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1","env_file_transform":{"config_input_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","env_file_present":false,"method":"SOURCE_UNCHANGED_NO_ENV_FILE","removed_block_count":0,"removed_block_set_sha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","removed_path_count":0,"removed_paths_all_dot_env":true,"secret_file_read":false,"source_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","source_unchanged":true,"valid":true,"writes_performed":false},"rc":0,"secret_file_read":false,"services":["postgres","redis","scheduler","web","worker"],"services_match":true,"source_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","v4_failure_stderr_sha256":"ba21762623983ad018d6304d027d71b6daf31b7c183482acf2579424be4cc326","v4_unsupported_flag_removed":true,"valid":true},"compose_version":"2.26.1-4","container_environment_requested":false,"containers":[],"images":[],"networks":[],"server_version":"26.1.5+dfsg1","volumes":[]},"duration_ms":105,"failed_checks":[],"failures":[],"gate":"READY_FOR_STANDARD_LOCAL_DEPLOYMENT_APPLY","identity":{"expected_hostname":"core-apps","hostname_short":"core-apps","matches":true},"mutation_outcome":"NO_MUTATION","plan":{"acceptance":["all five services are present","postgres and redis are healthy","web is healthy and /health/live returns success","/health/ready returns success after migrations","worker and scheduler are running","Gitea main remains unchanged","public proxy remains unchanged"],"apply_operations":["create /opt/stacks/hbarhub from the verified in-memory git archive","generate deployment secrets locally and write .env mode 0600","validate docker compose config again","build only the hbarhub application image","start postgres and redis, then run Django migrations","start web, worker, and scheduler","verify local live and ready health on port 8040"],"apply_preconditions":["all source locks match exactly","only main branch is present","target path and target .env are absent","no hbarhub containers, networks, volumes, or images exist","port 8040 has no listener","standard memory and disk gates pass","docker compose config validates the exact source"],"compose_validation":{"command":"docker compose config --format json --no-interpolate","config_input_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","env_file_transform":{"config_input_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","env_file_present":false,"method":"SOURCE_UNCHANGED_NO_ENV_FILE","removed_block_count":0,"removed_block_set_sha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","removed_path_count":0,"removed_paths_all_dot_env":true,"secret_file_read":false,"source_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","source_unchanged":true,"valid":true,"writes_performed":false},"method":"SOURCE_UNCHANGED_OR_IN_MEMORY_ENV_FILE_OMISSION","normalized_config_sha256":"05e127c4b23822d5229a6497983c9d412175ec5ac6fc7058013d0bd45bf5cda1","secret_file_read":false,"services":["postgres","redis","scheduler","web","worker"],"source_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","unsupported_v4_flag_removed":true,"writes_performed":false},"forbidden":["modify Gitea refs or repository content","modify NPMplus, DNS, TLS, or any public proxy","modify monitoring, backups, or other compose projects","read, print, publish, or return generated secret values","write outside the new stack and Docker resources labeled project hbarhub"],"next_stage":"STANDARD_LOCAL_DEPLOYMENT_APPLY","operation":"HBARHUB_FRESH_STANDARD_LOCAL_DEPLOYMENT","parent_inventory":{"capsule_sha256":"15578fd16d67bd7180858370ff06017184bc79ce14da4eee8005fc9cf8e4219d","changes_made":false,"command_id":"HBARHUB-STANDARD-LOCAL-DEPLOYMENT-PLAN-FIX1-V5-20260803T093519Z","diagnosis":"HBARHUB_DEPLOYMENT_PLAN_UNEXPECTED_EXCEPTION","exception_evidence_sha256":"7d844bbd82129943f3b700ec95bbc2a73652300ec16c6c8353289e2ec0590fd0","exception_identity":"COMPOSE_ENV_FILE_BLOCK_MISSING","exception_type":"ValueError","mutation_outcome":"NO_MUTATION","output_sha256":"8eb695a48187cae0e47dc156a53e7a978b12d5e9e5dcc4108186db746f006206","runner_document_rc":1,"runner_json_sha256":"84358dea8b34a147269c560fb233581a68e31b49eb0d30618ebc6e90e1a0f756","runner_rc":1,"runtime_archive_bytes":9760,"runtime_archive_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","status":"FAIL"},"profile":{"health_endpoints":["/health/live","/health/ready"],"minimum_available_disk_bytes":10737418240,"minimum_available_memory_bytes":2147483648,"name":"STANDARD","services":["postgres","redis","scheduler","web","worker"]},"rollback":{"operations":["capture sanitized failure evidence","docker compose down --volumes --remove-orphans","remove only application images created by this apply","remove only /opt/stacks/hbarhub created by this apply","verify no hbarhub resources remain and port 8040 is free"],"preexisting_data_preserved":"preconditions require no preexisting stack or project resources","trigger":"any failed post-mutation check"},"schema":1,"source_lock":{"archive_bytes":9760,"archive_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","branch":"main","commit":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","delivery":"local bare repository git archive; no Git credentials","repository":"homelab-admin/hbarhub","tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0"},"target":{"compose_project":"hbarhub","hostname":"core-apps","local_port":8040,"public_proxy":false,"role":"core-apps","stack_path":"/opt/stacks/hbarhub","vmid":170}},"port_listener":{"addresses_read_from_output":false,"errors":[],"kernel_tables_read":2,"listener_entry_count":0,"listener_present":false,"port":8040},"private_addresses_included":false,"rc":0,"read_only":true,"ready_for_apply":true,"rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":1,"secret_files_read":false,"secrets_included":false,"source":{"archive_bytes":9760,"archive_member_count":33,"archive_member_set_sha256":"2bb39282d17b0cbcb368739c4cbd947b72c43585b527b3e685937b6e6dd2b142","archive_sha256":"a7fcc963703dfcf71e1c72410e4af8836ced830b35eff10dbcc59f333bbd0a9e","available":true,"branch_names":["main"],"env_example_key_count":12,"env_example_key_set_sha256":"730754b06ebb1f8d8855881238d6d5ed290120bb911b1f22cc68c12b4759085e","invalid_utf8_path_count":0,"main_head":"57d2704dc4dc4f1e00c3e1bda67fc0bc2bef6957","main_tree":"7e13a2e1b5ab35046dbe172383a814151c16cce0","published_path_candidates":[{"bare_repository":true,"bytes":4096,"exists":true,"gid":1000,"git_rc":0,"kind":"directory","mode":"0755","path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","uid":1000},{"exists":false,"kind":null,"path":"/opt/stacks/gitea/data/gitea-repositories/homelab-admin/hbarhub.git"}],"python_compile_failures":[],"python_file_count":13,"requirements":["Django==6.0.7","celery==5.6.3","gunicorn==26.0.0","psycopg[binary]==3.3.4","redis==8.0.1"],"requirements_match":true,"safe_manifest":{".dockerignore":{"bytes":82,"exists":true,"expected_sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa","matches":true,"sha256":"3870cba2def4ee4e45c8ef33cb7239c6d391a9b57ff17e9b26d7bbdaf03501fa"},".env.example":{"bytes":419,"exists":true,"expected_sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3","matches":true,"sha256":"0c93f24bb448c384a430b65bebcd54b86b570c62df88aa073e1342f7a3eba5b3"},"Dockerfile":{"bytes":477,"exists":true,"expected_sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab","matches":true,"sha256":"9c0be49681f983c329937f486427dbf002b826973a48d5c1851de7f55a6ce1ab"},"README.md":{"bytes":1429,"exists":true,"expected_sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff","matches":true,"sha256":"3b6de9c4d5c9f76d51280bb395f86e3cf51b69c982ea6a5a8d3740d09739cfff"},"compose.yaml":{"bytes":2980,"exists":true,"expected_sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc","matches":true,"sha256":"65ea3fe0cd0d13651f920a776379876e9202a9614dd0368404d7a24561497efc"},"config/assets.json":{"bytes":2787,"exists":true,"expected_sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff","matches":true,"sha256":"dfa2fc55e610dc5bb341169c24d45aaaf4143a1b8c9d021db37a8a8725cd15ff"},"docs/ARCHITECTURE.md":{"bytes":1214,"exists":true,"expected_sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e","matches":true,"sha256":"cf219e2f0ee4be0e4881afc7035afff4c79b167579486ecf2eb601fd925d0e8e"},"docs/OPERATIONS.md":{"bytes":957,"exists":true,"expected_sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7","matches":true,"sha256":"5b41e7fcb4527eea3e5ab2496ec2239d8021ae8843c302a9f5371d77fdd043a7"},"hbarhub/__init__.py":{"bytes":65,"exists":true,"expected_sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce","matches":true,"sha256":"8974a9c493587f508e73f358876ade4f3ab0369012b29ffb14280dbe30f721ce"},"hbarhub/celery.py":{"bytes":223,"exists":true,"expected_sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47","matches":true,"sha256":"b33bfae9785e01372e6b3c88a5747275013831fa5b323cfc60ada4f361551a47"},"hbarhub/settings.py":{"bytes":3614,"exists":true,"expected_sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88","matches":true,"sha256":"662118548cce23f916be7ed66a468255a3405a3430b301bfe5adba4b764a1f88"},"hbarhub/urls.py":{"bytes":165,"exists":true,"expected_sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac","matches":true,"sha256":"ddcebb4348c298dd8047df40cd1698603523f8a4ced6b518ad58f4b724db8cac"},"hbarhub/wsgi.py":{"bytes":168,"exists":true,"expected_sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630","matches":true,"sha256":"03ee75d6dd996de897b4a1c221584459e3b41c507d21f010d5b0372c4da8a630"},"manage.py":{"bytes":284,"exists":true,"expected_sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a","matches":true,"sha256":"f9cca66c33a7b629895d0637299fa3aa2396ab6759bcade14ed28a6e2d306b5a"},"portal/__init__.py":{"bytes":0,"exists":true,"expected_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","matches":true,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"portal/apps.py":{"bytes":174,"exists":true,"expected_sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2","matches":true,"sha256":"9308f2f4d7e9d110253fe8574aa42edeabd35a7316ab740d9e5e6ac0ee5498a2"},"portal/assets.py":{"bytes":911,"exists":true,"expected_sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019","matches":true,"sha256":"ce231cb3af3460166ef2a23c1456e3f704e44d9f19db42ce030af8a4bea71019"},"portal/tasks.py":{"bytes":192,"exists":true,"expected_sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2","matches":true,"sha256":"8b4402ff2ac1c8603bc9c0821ca16b3b6d610facad7eccf76b83076ee912f0b2"},"portal/templates/portal/home.html":{"bytes":3478,"exists":true,"expected_sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae","matches":true,"sha256":"bad177066fedee2f8e427cb81ba9c32db4ae36ce533ce0f2090e60b6970378ae"},"portal/tests.py":{"bytes":1371,"exists":true,"expected_sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff","matches":true,"sha256":"42420399fd48c97ce5ab4872d95b5490e0d3a266df8677d31d0ee1987852c9ff"},"portal/urls.py":{"bytes":260,"exists":true,"expected_sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088","matches":true,"sha256":"164665d9a442ab79bc4c0f250d1e3d76a096b4f93825e9900fab5bde0d53a088"},"portal/views.py":{"bytes":1449,"exists":true,"expected_sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14","matches":true,"sha256":"b1166fa6008792a83701740f560f93a3b74b3203003bc738c35a5f56454c1f14"},"requirements.txt":{"bytes":81,"exists":true,"expected_sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa","matches":true,"sha256":"9838729f64d26b126c20f47836bcedfc97262a46059c6f810e088b1b7bf02ffa"}},"safe_manifest_all_match":true,"safe_manifest_scope":"PUBLISHED_23_SOURCE_FILES","secret_file_read":false,"selected_path":"/opt/stacks/gitea/data/git/repositories/homelab-admin/hbarhub.git","tracked_file_count":27,"tracked_total_bytes":26067,"tree_listing_sha256":"8119f9a0c680eca043b5d648b8bf90567c90e5a6ae4f503779f4e8b66fcaa954","tree_path_set_sha256":"245c3f22584759bed02f493855facb68662333953100f036716afffc1f65e83f"},"stack":{"root":{"exists":false,"kind":null,"path":"/opt/stacks/hbarhub"},"secret_env_metadata_only":{"content_read":false,"exists":false,"kind":null,"path":"/opt/stacks/hbarhub/.env"}},"status":"OK","unexpected_exception":{}} +GENERATED_AT_UTC=[PRIVATE_IP]T10:17:01Z +Cluster information +------------------- +Name: homelab +Config Version: 3 +Transport: knet +Secure auth: on +Quorum information +------------------ +Date: Mon Aug [PRIVATE_IP] 2026 +Quorum provider: corosync_votequorum +Nodes: 3 +Node ID: [PRIVATE_IP] +Ring ID: 1.db +Quorate: Yes + +Votequorum information +---------------------- +Expected votes: 3 +Highest expected: 3 +Total votes: 3 +Quorum: 2 +Flags: Quorate + +Membership information +---------------------- + Nodeid Votes Name +[PRIVATE_IP] [PRIVATE_IP].11 (local) +[PRIVATE_IP] [PRIVATE_IP].13 +[PRIVATE_IP] [PRIVATE_IP].12 + +Membership information +---------------------- + Nodeid Votes Name + 1 1 pve01 (local) + 2 1 pve03 + 3 1 pve02 +[{"cpu":[PRIVATE_IP]509e-05,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/110","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"dns1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":515400,"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":515484,"vmid":111},{"cpu":0,"disk":[PRIVATE_IP],"diskread":[PRIVATE_IP],"diskwrite":[PRIVATE_IP],"id":"lxc/112","maxcpu":1,"maxdisk":[PRIVATE_IP],"maxmem":[PRIVATE_IP],"mem":[PRIVATE_IP],"memhost":0,"name":"unbound1","netin":[PRIVATE_IP],"netout":[PRIVATE_IP],"node":"pve01","status":"running","template":0,"type":"lxc","uptime":515445,"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":515488,"vmid":113},{"cpu":[PRIVATE_IP]92308,"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":515429,"vmid":130},{"cpu":[PRIVATE_IP]06909,"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":515397,"vmid":150},{"cpu":[PRIVATE_IP]941043,"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":515480,"vmid":160},{"cpu":[PRIVATE_IP]48309,"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":515393,"vmid":170},{"cpu":[PRIVATE_IP]55184,"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":515390,"vmid":171},{"cpu":[PRIVATE_IP]49342,"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":515478,"vmid":180},{"cpu":[PRIVATE_IP]616625,"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":515425,"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]52186,"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":515447},{"cgroup-mode":2,"cpu":[PRIVATE_IP]98217,"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":515502},{"cgroup-mode":2,"cpu":[PRIVATE_IP]99556,"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":515521},{"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"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve03/local","maxdisk":[PRIVATE_IP],"node":"pve03","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve01/local","maxdisk":[PRIVATE_IP],"node":"pve01","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"content":"import,backup,vztmpl,iso","disk":[PRIVATE_IP],"id":"storage/pve02/local","maxdisk":[PRIVATE_IP],"node":"pve02","plugintype":"dir","shared":0,"status":"available","storage":"local","type":"storage"},{"id":"network/pve03/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve03","status":"ok","type":"network"},{"id":"network/pve01/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve01","status":"ok","type":"network"},{"id":"network/pve02/zone/localnetwork","network":"localnetwork","network-type":"zone","node":"pve02","status":"ok","type":"network"}] +Name Type Status Total (KiB) Used (KiB) Available (KiB) % +local dir active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 13.98% +local-lvm lvmthin active [PRIVATE_IP] [PRIVATE_IP] [PRIVATE_IP] 27.31% + UNIT LOAD ACTIVE SUB DESCRIPTION +● homelab-backup-matrix-refresh.service loaded failed failed Generate unified homelab backup matrix state +● homelab-crypto-portfolio-chart-health.service loaded failed failed Crypto portfolio chart health check +● skladchik-reports-monitor-supervisor.service loaded failed failed Skladchik reports monitor full supervisor + +Legend: LOAD → Reflects whether the unit definition was properly loaded. + ACTIVE → The high-level unit activation state, i.e. generalization of SUB. + SUB → The low-level unit activation state, values depend on unit type. + +3 loaded units listed. +NEXT LEFT LAST PASSED UNIT ACTIVATES +Mon [PRIVATE_IP] 13:17:17 MSK 14s Mon [PRIVATE_IP] 13:12:07 MSK 4min 55s ago homelab-crypto-portfolio-chart-health.timer homelab-crypto-portfolio-chart-health.service +Mon [PRIVATE_IP] 13:17:21 MSK 18s Mon [PRIVATE_IP] 13:16:17 MSK 45s ago homelab-router-watchdog.timer homelab-router-watchdog.service +Mon [PRIVATE_IP] 13:17:26 MSK 23s Mon [PRIVATE_IP] 13:16:26 MSK 36s ago homelab-cluster-admin-webpanel-sync.timer homelab-cluster-admin-webpanel-sync.service +Mon [PRIVATE_IP] 13:17:26 MSK 23s Mon [PRIVATE_IP] 13:16:26 MSK 36s ago homelab-private-vpn-hosts-health.timer homelab-private-vpn-hosts-health.service +Mon [PRIVATE_IP] 13:17:27 MSK 24s Mon [PRIVATE_IP] 13:15:18 MSK 1min 44s ago homelab-cluster-admin-inventory-sync.timer homelab-cluster-admin-inventory-sync.service +Mon [PRIVATE_IP] 13:19:14 MSK 2min 11s Mon [PRIVATE_IP] 13:14:14 MSK 2min 48s ago homelab-smartctl-textfile.timer homelab-smartctl-textfile.service +Mon [PRIVATE_IP] 13:19:26 MSK 2min 23s Mon [PRIVATE_IP] 13:04:26 MSK 12min ago homelab-disk-space-health.timer homelab-disk-space-health.service +Mon [PRIVATE_IP] 13:20:26 MSK 3min 23s Mon [PRIVATE_IP] 13:05:26 MSK 11min ago homelab-pve03-staging-capacity-health.timer homelab-pve03-staging-capacity-health.service +Mon [PRIVATE_IP] 13:20:26 MSK 3min 23s Mon [PRIVATE_IP] 13:05:26 MSK 11min ago prometheus-node-exporter-nvme.timer prometheus-node-exporter-nvme.service +Mon [PRIVATE_IP] 13:21:17 MSK 4min 14s Mon [PRIVATE_IP] 13:16:17 MSK 45s ago netbird-peers-health.timer netbird-peers-health.service +Mon [PRIVATE_IP] 13:21:34 MSK 4min 31s Mon [PRIVATE_IP] 13:16:28 MSK 34s ago homelab-health-metrics.timer homelab-health-metrics.service +Mon [PRIVATE_IP] 13:26:17 MSK 9min Mon [PRIVATE_IP] 13:16:17 MSK 45s ago skladchik-reports-monitor-supervisor.timer skladchik-reports-monitor-supervisor.service +Mon [PRIVATE_IP] 13:30:00 MSK 12min Mon [PRIVATE_IP] 13:15:14 MSK 1min 48s ago homelab-incident-journal.timer homelab-incident-journal.service +Mon [PRIVATE_IP] 13:30:00 MSK 12min Mon [PRIVATE_IP] 13:15:50 MSK 1min 12s ago homelab-duty-admin-v2.timer homelab-duty-admin-v2.service +Mon [PRIVATE_IP] 13:31:04 MSK 14min Mon [PRIVATE_IP] 13:15:28 MSK 1min 34s ago homelab-external-probe-vps-health.timer homelab-external-probe-vps-health.service +Mon [PRIVATE_IP] 13:31:15 MSK 14min Mon [PRIVATE_IP] 13:15:53 MSK 1min 9s ago homelab-forum-snuffleupagus-health.timer homelab-forum-snuffleupagus-health.service +Mon [PRIVATE_IP] 13:31:17 MSK 14min Mon [PRIVATE_IP] 13:16:17 MSK 45s ago prometheus-node-exporter-apt.timer prometheus-node-exporter-apt.service +Mon [PRIVATE_IP] 13:32:21 MSK 15min Mon [PRIVATE_IP] 13:02:07 MSK 14min ago homelab-mkdocs-auto-refresh.timer homelab-mkdocs-auto-refresh.service +Mon [PRIVATE_IP] 13:35:24 MSK 18min Mon [PRIVATE_IP] 13:00:50 MSK 16min ago homelab-reference-refresh.timer homelab-reference-refresh.service +Mon [PRIVATE_IP] 14:08:25 MSK 51min Mon [PRIVATE_IP] 08:08:25 MSK 5h 8min ago homelab-vps-identity-audit.timer homelab-vps-identity-audit.service +Mon [PRIVATE_IP] 14:20:25 MSK 1h 3min Sun [PRIVATE_IP] 14:20:25 MSK 22h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service +Tue [PRIVATE_IP] 00:00:00 MSK 10h Mon [PRIVATE_IP] 00:00:06 MSK 13h ago dpkg-db-backup.timer dpkg-db-backup.service +Tue [PRIVATE_IP] 00:05:03 MSK 10h Mon [PRIVATE_IP] 00:15:28 MSK 13h ago homelab-storage-capacity.timer homelab-storage-capacity.service +Tue [PRIVATE_IP] 00:07:51 MSK 10h Mon [PRIVATE_IP] 00:02:07 MSK 13h ago homelab-evidence-catalog.timer homelab-evidence-catalog.service +Tue [PRIVATE_IP] 00:08:11 MSK 10h Mon [PRIVATE_IP] 00:11:14 MSK 13h ago homelab-quality-gate.timer homelab-quality-gate.service +Tue [PRIVATE_IP] 00:08:26 MSK 10h Mon [PRIVATE_IP] 00:49:14 MSK 12h ago logrotate.timer logrotate.service +Tue [PRIVATE_IP] 00:13:28 MSK 10h Mon [PRIVATE_IP] 00:05:50 MSK 13h ago homelab-docker-health.timer homelab-docker-health.service +Tue [PRIVATE_IP] 00:14:17 MSK 10h Mon [PRIVATE_IP] 10:50:38 MSK 2h 26min ago man-db.timer man-db.service +Tue [PRIVATE_IP] 01:23:37 MSK 12h Mon [PRIVATE_IP] 01:28:07 MSK 11h ago pve-daily-update.timer pve-daily-update.service +Tue [PRIVATE_IP] 02:32:43 MSK 13h Mon [PRIVATE_IP] 12:38:50 MSK 38min ago apt-daily.timer apt-daily.service +Tue [PRIVATE_IP] 03:50:00 MSK 14h Mon [PRIVATE_IP] 03:50:07 MSK 9h ago filebrowser-offhost-sync.timer filebrowser-offhost-sync.service +Tue [PRIVATE_IP] 04:41:55 MSK 15h Mon [PRIVATE_IP] 04:50:29 MSK 8h ago homelab-edge-vm-offhost-freshness.timer homelab-edge-vm-offhost-freshness.service +Tue [PRIVATE_IP] 05:14:52 MSK 15h Mon [PRIVATE_IP] 05:06:55 MSK 8h ago homelab-sops-edge-secret-coverage.timer homelab-sops-edge-secret-coverage.service +Tue [PRIVATE_IP] 06:52:59 MSK 17h Mon [PRIVATE_IP] 06:53:14 MSK 6h ago apt-daily-upgrade.timer apt-daily-upgrade.service +Tue [PRIVATE_IP] 07:03:42 MSK 17h Mon [PRIVATE_IP] 07:05:50 MSK 6h ago homelab-drift-check.timer homelab-drift-check.service +Tue [PRIVATE_IP] 07:39:24 MSK 18h Mon [PRIVATE_IP] 07:21:25 MSK 5h 55min ago homelab-service-registry-check.timer homelab-service-registry-check.service +Tue [PRIVATE_IP] 07:45:52 MSK 18h Mon [PRIVATE_IP] 07:50:14 MSK 5h 26min ago homelab-alerting-health.timer homelab-alerting-health.service +Tue [PRIVATE_IP] 07:54:16 MSK 18h Mon [PRIVATE_IP] 07:52:50 MSK 5h 24min ago homelab-desired-state-sync.timer homelab-desired-state-sync.service +Tue [PRIVATE_IP] 07:55:52 MSK 18h Mon [PRIVATE_IP] 07:50:25 MSK 5h 26min ago homelab-dependency-map-check.timer homelab-dependency-map-check.service +Tue [PRIVATE_IP] 07:56:48 MSK 18h Mon [PRIVATE_IP] 07:46:38 MSK 5h 30min ago homelab-runbook-generate.timer homelab-runbook-generate.service +Tue [PRIVATE_IP] 07:59:39 MSK 18h Mon [PRIVATE_IP] 08:11:07 MSK 5h 5min ago homelab-duty-admin-report.timer homelab-duty-admin-report.service +Tue [PRIVATE_IP] 08:03:48 MSK 18h Mon [PRIVATE_IP] 08:19:07 MSK 4h 57min ago homelab-overall-health.timer homelab-overall-health.service +Tue [PRIVATE_IP] 08:12:24 MSK 18h Mon [PRIVATE_IP] 08:23:50 MSK 4h 53min ago homelab-final-readiness-gate.timer homelab-final-readiness-gate.service +Tue [PRIVATE_IP] 08:16:32 MSK 18h Mon [PRIVATE_IP] 08:21:25 MSK 4h 55min ago homelab-kuma-monitor-policy.timer homelab-kuma-monitor-policy.service +Tue [PRIVATE_IP] 08:36:17 MSK 19h Mon [PRIVATE_IP] 08:42:03 MSK 4h 34min ago homelab-secret-exposure-guard.timer homelab-secret-exposure-guard.service +Tue [PRIVATE_IP] 08:36:39 MSK 19h Mon [PRIVATE_IP] 08:32:47 MSK 4h 44min ago homelab-capacity-risk.timer homelab-capacity-risk.service +Tue [PRIVATE_IP] 08:50:00 MSK 19h Mon [PRIVATE_IP] 08:47:23 MSK 4h 29min ago homelab-golden-state-index.timer homelab-golden-state-index.service +Tue [PRIVATE_IP] 08:52:29 MSK 19h Mon [PRIVATE_IP] 08:53:07 MSK 4h 23min ago homelab-cluster-passport.timer homelab-cluster-passport.service +Tue [PRIVATE_IP] 08:54:34 MSK 19h Mon [PRIVATE_IP] 08:51:27 MSK 4h 25min ago immich-media-offhost-sync.timer immich-media-offhost-sync.service +Tue [PRIVATE_IP] 09:06:42 MSK 19h Mon [PRIVATE_IP] 09:20:50 MSK 3h 56min ago memos-offhost-sync.timer memos-offhost-sync.service +Tue [PRIVATE_IP] 10:15:00 MSK 20h Mon [PRIVATE_IP] 10:15:05 MSK 3h 1min ago skladchik-reports-monitor-monthly-selftest-watch.timer skladchik-reports-monitor-monthly-selftest-watch.service +Sun [PRIVATE_IP] 03:10:38 MSK 5 days Sun [PRIVATE_IP] 03:10:25 MSK 1 day 10h ago xfs_scrub_all.timer xfs_scrub_all.service +Sun [PRIVATE_IP] 03:10:48 MSK 5 days Sun [PRIVATE_IP] 03:10:50 MSK 1 day 10h ago e2scrub_all.timer e2scrub_all.service +Mon [PRIVATE_IP] 00:03:56 MSK 6 days Mon [PRIVATE_IP] 00:11:50 MSK 13h ago homelab-secret-sanity.timer homelab-secret-sanity.service +Mon [PRIVATE_IP] 01:11:21 MSK 6 days Mon [PRIVATE_IP] 01:17:56 MSK 11h ago fstrim.timer fstrim.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