From ca513784dda65a1510a6503d40b726bcb53cbe05 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Fri, 18 Sep 2026 22:30:34 +0000 Subject: [PATCH] runtime: publish SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1 --- ...RAM1-CARD-GAP-CLASSIFY-READONLY-569R1.json | 38 +++ ...GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.txt | 236 +++++++++++++++++ runtime/latest.json | 26 +- runtime/latest.txt | 238 ++++++++++++++++-- 4 files changed, 501 insertions(+), 37 deletions(-) create mode 100644 runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.json create mode 100644 runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.txt diff --git a/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.json b/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.json new file mode 100644 index 00000000..d9f64e45 --- /dev/null +++ b/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "home-gram1-card-gap-classify-readonly", + "started_at_utc": "2026-09-18T22:30:30Z", + "finished_at_utc": "2026-09-18T22:30:33Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "9e6559a47c5578d2fbe02570b0f050d4a0471e35c2948fc3b114db0197838bbe", + "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": "0e12900a906b4428f2b0d4b2ecc05294e9c5e4f8201a7c3dd527ea89ea3dfa44", + "sanitized_output_sha256": "90ff5ff2bba88531e66a15ed6daf53f5fda0bc3cb53bf111f58d9f7e2273f447", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nHEALTH_FILE_LIST_RC=0\nHEALTH_FILE_LIST_BEGIN\ncluster-admin-homepage-card.txt\ncluster-admin-inventory-sync.txt\ncluster-admin-public-route.txt\ncluster-admin-service-readiness.txt\ncluster-admin-stage0-readiness-fix.txt\ndockge-user-hash-agent-install-readiness.txt\nexternal-link-aleisaevn-netcraze-5083.txt\nexternal-probe-runner-decision.txt\nexternal-probe-vps.txt\nfailed-unit-legacy-inventory.txt\nfinal-readiness-cycle-break.txt\nfinal-readiness.txt\nhomepage-card-recommendations.txt\nhomepage-final-status.txt\nhomepage-missing-card-proposals-final.txt\nhomepage-missing-card-proposals.txt\nindependent-external-runner-audit.txt\nindependent-external-runner.txt\nnode-loss-readiness.txt\npower-loss-readiness.txt\nremote-git-sops-age-readiness.txt\nrouter-hard-power.txt\nrouter-running-config-mail-cloud.txt\nrouter-startup-config-mail-cloud.txt\nrouter-watchdog.txt\nservice-inventory-leftovers-phase00.txt\nservice-inventory-matrix-phase00.tsv\nservice-inventory-summary-phase00.txt\nservice-readiness-actual-budget.txt\nservice-readiness-alertmanager.txt\nservice-readiness-audiobookshelf.txt\nservice-readiness-authentik.txt\nservice-readiness-backup-health.txt\nservice-readiness-beszel.txt\nservice-readiness-blackbox-exporter.txt\nservice-readiness-bookstack.txt\nservice-readiness-cadvisor.txt\nservice-readiness-calibre-web.txt\nservice-readiness-cluster-admin-incident-engine.txt\nservice-readiness-cluster-admin-webpanel.txt\nservice-readiness-crypto-portfolio.txt\nservice-readiness-dns1.txt\nservice-readiness-dns2.txt\nservice-readiness-dockge.txt\nservice-readiness-dozzle.txt\nservice-readiness-filebrowser.txt\nservice-readiness-gitea.txt\nservice-readiness-gotify.txt\nservice-readiness-grafana.txt\nservice-readiness-healthchecks.txt\nservice-readiness-homeassistant.txt\nservice-readiness-homebox.txt\nservice-readiness-homepage.txt\nservice-readiness-immich.txt\nservice-readiness-it-tools.txt\nservice-readiness-jellyfin.txt\nservice-readiness-karakeep.txt\nservice-readiness-linkding.txt\nservice-readiness-mealie.txt\nservice-readiness-memos.txt\nservice-readiness-minio.txt\nservice-readiness-n8n.txt\nservice-readiness-netbox.txt\nservice-readiness-node-exporter.txt\nservice-readiness-node-red.txt\nservice-readiness-npmplus.txt\nservice-readiness-ntfy.txt\nservice-readiness-paperless.txt\nservice-readiness-prometheus.txt\nservice-readiness-proxmox-pve01.txt\nservice-readiness-searxng.txt\nservice-readiness-stirling-pdf.txt\nservice-readiness-syncthing.txt\nservice-readiness-uptime-kuma.txt\nservice-readiness-vaultwarden.txt\nservice-readiness-vikunja.txt\nHEALTH_FILE_LIST_END\nFILE_CHECK=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt|exists=True\nFILE_BEGIN=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nSTATUS=OK TS=2026-07-08T06:23:11Z TYPE=registered-planning-surface-info BAD=0 WARN=0 MODE=REGISTERED_PLANNING_SURFACE_INFO REGISTERED_SURFACE=YES ORIGINAL_STATE=review ORIGINAL_CLASS=UNGATED_REVIEW_ITEM HARD_GATE=no ACTION=not_a_health_failure ARCHIVE=/var/lib/homelab-review-surface-registry/original-health-20260708T062311Z REPORT=/var/lib/homelab-review-surface-registry/apply-latest.md\n\nFILE_END=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nFILE_CHECK=/var/lib/homelab-health/homepage-service-catalog-slo.txt|exists=False\nFILE_CHECK=/var/lib/homelab-health/homepage-final-status.txt|exists=True\nFILE_BEGIN=/var/lib/homelab-health/homepage-final-status.txt\nSTATUS=OK\nTS=20260702T210118Z\nTYPE=homepage-final-status\nSUMMARY=Homepage groups/descriptions normalized to Russian; layout set to row/6-columns; monitors preserved and repaired; Cloudflare left untouched by user request.\nCURRENT_CARD_COUNT=61\nCURRENT_LAYOUT=row/6-columns\nCLOUDFLARE_POLICY=do_not_touch\nPROPOSALS=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nSECRET_PRINTED=NO\n\nFILE_END=/var/lib/homelab-health/homepage-final-status.txt\nREFERENCE_CARD_CONTEXT_RC=0\nREFERENCE_CARD_CONTEXT_BEGIN\n- Primary exit routing peer: relay.netbird.selfhosted / 100.100.19.1 / Moldova.\n- Backup egress peer present: mail.netbird.selfhosted / 100.100.147.204 / USA.\n- NetBird exit route proof on edge-vm: wg allowed-ips includes 0.0.0.0/0 via relay; ip route get 1.1.1.1 uses wt0 table 7120.\n- External trace after route: 85.121.4.192 / OTP, not home 95.84.154.183 / ARN.\n- CrowdSec proof: cscli lapi status OK, cscli capi status OK, CAPI sharing/blocklist pull enabled, no DISABLE_ONLINE_API or -no-capi flags in active compose.\n- WARP is intentionally absent and must not be reintroduced for this path.\n- Unauthenticated https://api.crowdsec.net/v3/watchers/login returning HTTP 403 is expected network reachability proof.\n- Final proof: /root/evidence/771AD_FINAL_CROWDSEC_CAPI_NETBIRD_CLOSURE_20260702T191057Z_PROOF.txt\n\n## HOMEPAGE_RU_LAYOUT_MONITORING_PROPOSALS_20260702\n- Homepage live config is on core-apps VM [PRIVATE_IP] under /opt/stacks/homepage/config.\n- Groups/descriptions were normalized to Russian.\n- Layout is row/6-columns for all active groups.\n- siteMonitor fields are preserved; monitors must be repaired, not removed.\n- Cloudflare card must be left untouched by explicit operator request.\n- Red badges after migration were primarily caused by Homepage container resolving *.vpn.gram1.ru to edge NetBird IP and timing out; fixed by mapping vpn hostnames to edge LAN [PRIVATE_IP] in Homepage compose extra_hosts.\n- Router Moscow monitor uses edge health endpoint http://[PRIVATE_IP]:18091/router-moscow.\n- NPMplus monitor uses edge health endpoint http://[PRIVATE_IP]:18091/npmplus.\n- Missing-card proposal report: /var/lib/homelab-health/homepage-missing-card-proposals-final.txt.\n\n## UPTIME_KUMA_MISSING_MONITOR_AND_PROPOSALS_20260702\n- Uptime Kuma lives on monitoring VM [PRIVATE_IP].\n- Added one missing monitor: NPMplus Edge Health -> http://[PRIVATE_IP]:18091/npmplus.\n- Uptime Kuma DB backup was created before DB mutation under /root/uptime-kuma-manual-backups/773a-* on monitoring VM.\n- DB integrity after insertion was OK.\n- Deep monitoring proposal report: /var/lib/homelab-health/uptime-kuma-monitoring-proposals.txt.\n- Cloudflare must not be touched by operator request.\n- Recommended next monitors are P0 only after operator approval: Router Moscow Health, Backup/Restore Dashboard, Restore Drill Index, NetBird Peers, CrowdSec CAPI, Paperless Restore.\n\n## UPTIME_KUMA_NPMPLUS_ADMIN_REPAIR_20260702\n- Existing Uptime Kuma monitor \"NPMplus Admin\" was red because it checked https://[PRIVATE_IP]:81/.\n- NPMplus admin is intentionally localhost-bound on edge-vm, so monitoring VM should not check the admin UI directly.\n- Fixed monitor target to edge health endpoint: http://[PRIVATE_IP]:18091/npmplus.\n- Monitor was repaired, not deleted.\n- Cloudflare was not touched.\n\n## UPTIME_KUMA_APPROVED_MONITOR_BATCH_20260702\n- Approved Uptime Kuma monitor batch installed after Homepage/Kuma analysis.\n- Existing NPMplus Admin monitor was repaired to http://[PRIVATE_IP]:18091/npmplus, not deleted.\n- Edge health wrapper /usr/local/sbin/router-moscow-health provides safe endpoints on [PRIVATE_IP]:18091 for router-moscow, npmplus, loki, alloy, cadvisor, registry-cache, socket-proxy, diun, kopia and crowdsec.\n- Cloudflare was not touched by explicit operator request.\n- Uptime Kuma DB backups are under /root/uptime-kuma-manual-backups/773d-approved-batch-* on monitoring VM before the DB mutation.\n\n## UPTIME_KUMA_PENDING_HEALTH_MONITORS_FIX_20260702\n- Four pending Uptime Kuma keyword monitors were repaired by using local pve01 health endpoint paths instead of public backup.gram1.ru paths:\n - Backup Restore Dashboard -> http://[PRIVATE_IP]:9101/backup-restore-dashboard.txt\n - Restore Drill Index -> http://[PRIVATE_IP]:9101/restore-drill-index.txt\n - Paperless Restore -> http://[PRIVATE_IP]:9101/paperless-restore.txt\n - AdGuard Rewrite Sync -> http://[PRIVATE_IP]:9101/adguard-rewrite-sync.txt\n- Cloudflare was not touched.\n- Monitors were repaired, not deleted.\n\n## UPTIME_KUMA_FOUR_HEALTH_SOURCES_REPAIRED_20260702\n- Four Uptime Kuma monitors were still unavailable because three health endpoints returned 404 and Paperless Restore had STATUS=ERROR.\n- Repaired pve01 health source files under /var/lib/homelab-health:\n - backup-restore-dashboard.txt\n - restore-drill-index.txt\n - paperless-restore.txt\n - adguard-rewrite-sync.txt\n- Kuma monitors point to local pve01 health endpoints on http://[PRIVATE_IP]:9101/.\n- Cloudflare was not touched.\n- Monitors were repaired, not deleted.\n\n## DOCKGE_DISCONNECTED_HOSTS_AND_STALE_STACKS_20260702\n- Dockge is currently present only on edge-vm.\n- core-apps and monitoring run Docker containers but have no Dockge/Dockge-agent detected.\nREFERENCE_CARD_CONTEXT_END\nVM_BEGIN=170\nVM_STATUS=status: running|rc=0\nVM_EXEC_RC=0\nVM_EXEC_RAW_BEGIN\n{\n \"exitcode\" : 0,\n \"exited\" : 1,\n \"out-data\" : \"HOST=core-apps\\nDOCKER_PS_RC=0\\nDOCKER_PS_BEGIN\\ndemonov-shadow-8020-shadow-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours (healthy)|127.0.0.1:18020->8020/tcp\\ndemonov-shadow-8020-relay-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\ndemonov-shadow-8020-collector-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\ndemonov-shadow-8020-worker-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\nimmich_machine_learning|ghcr.io/immich-app/immich-machine-learning:v2|Up 2 weeks (healthy)|\\ncrypto-portfolio|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|[PRIVATE_IP]:8030->8000/tcp\\ncrypto-portfolio-worker|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|\\nhbarhub-scheduler-1|hbarhub-scheduler|Up 2 days|8040/tcp\\nhbarhub-web-1|hbarhub-web|Up 2 days (healthy)|0.0.0.0:8040->8040/tcp, :::8040->8040/tcp\\nhbarhub-worker-1|hbarhub-worker|Up 2 days|8040/tcp\\nhbarhub-postgres-1|postgres:17-alpine|Up 3 weeks (healthy)|5432/tcp\\nhbarhub-redis-1|redis:8-alpine|Up 3 weeks (healthy)|6379/tcp\\nhomelab-gitea-context-mcp|homelab/gitea-context-mcp:1.0.0|Up 3 weeks (healthy)|127.0.0.1:8765->8765/tcp\\ngitea|docker.gitea.com/gitea:1.26.2|Up 3 weeks (healthy)|22/tcp, 0.0.0.0:3002->3000/tcp\\nauthentik-worker-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|\\nauthentik-server-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|0.0.0.0:9000->9000/tcp, 0.0.0.0:9443->9443/tcp\\nvaultwarden|vaultwarden/server:1.36.0-alpine|Up 3 weeks (healthy)|0.0.0.0:8083->80/tcp\\nhomepage|ghcr.io/gethomepage/homepage:latest|Up 3 weeks (healthy)|0.0.0.0:3000->3000/tcp\\nminio|minio/minio:latest|Up 3 weeks|0.0.0.0:9002->9000/tcp, 0.0.0.0:9003->9001/tcp\\nauthentik-postgresql-1|postgres:16-alpine|Up 3 weeks (healthy)|5432/tcp\\nimmich_server|ghcr.io/immich-app/immich-server:v2|Up 2 days (healthy)|0.0.0.0:2283->2283/tcp\\nimmich_postgres|ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0|Up 3 weeks (healthy)|5432/tcp\\nimmich_redis|valkey/valkey:9|Up 3 weeks (healthy)|6379/tcp\\nfilebrowser|filebrowser/filebrowser:latest|Up 2 days (healthy)|0.0.0.0:8085->80/tcp\\n\\nDOCKER_PS_END\\nSTACKS_RC=0\\nSTACKS_BEGIN\\n/opt/stacks/8020-demonov-shadow/compose.yaml\\n/opt/stacks/authentik/compose.yml\\n/opt/stacks/crypto-portfolio/compose.yaml\\n/opt/stacks/filebrowser/compose.yaml\\n/opt/stacks/gitea/compose.yaml\\n/opt/stacks/hbarhub/compose.yaml\\n/opt/stacks/homelab-gitea-context-mcp/compose.yaml\\n/opt/stacks/homepage/compose.yaml\\n/opt/stacks/immich/docker-compose.yml\\n/opt/stacks/minio/compose.yaml\\n/opt/stacks/vaultwarden-compose/compose.yaml\\n\\nSTACKS_END\\nLISTEN_RC=0\\nLISTEN_BEGIN\\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=11))\\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=20))\\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=18))\\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=360,fd=13))\\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=19))\\ntcp LISTEN 0 4096 127.0.0.1:18020 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=2470167,fd=4))\\ntcp LISTEN 0 4096 0.0.0.0:2283 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3554366,fd=4))\\ntcp LISTEN 0 4096 127.0.0.1:8765 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1321,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3000 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1276,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1275,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9443 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1379,fd=4)) \\ntcp LISTEN 0 4096 127.0.0.1:44453 0.0.0.0:* users:((\\\"containerd\\\",pid=716,fd=9)) \\ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\\\"sshd\\\",pid=706,fd=6)) \\ntcp LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:((\\\"python3\\\",pid=686,fd=3)) \\ntcp LISTEN 0 5 0.0.0.0:8788 0.0.0.0:* users:((\\\"python3\\\",pid=684,fd=3)) \\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=21))\\ntcp LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1397,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9003 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1347,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9002 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1360,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8040 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3558706,fd=4))\\ntcp LISTEN 0 4096 0.0.0.0:8083 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1304,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8085 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3551865,fd=4))\\ntcp LISTEN 0 4096 [PRIVATE_IP]:8030 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1398,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=12))\\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\\\"sshd\\\",pid=706,fd=7)) \\ntcp LISTEN 0 4096 [::]:8040 [::]:* users:((\\\"docker-proxy\\\",pid=3558711,fd=4))\\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=360,fd=14))\\n\\nLISTEN_END\\nGUEST569_END\\n\",\n \"out-truncated\" : 0\n}\n\nVM_EXEC_RAW_END\nVM_END=170\nVM_BEGIN=130\nVM_STATUS=|rc=2\nVM_EXEC_RC=2\nVM_EXEC_ERR=Configuration file 'nodes/pve01/qemu-server/130.conf' does not exist \nVM_END=130\nVM_BEGIN=171\nVM_STATUS=status: running|rc=0\nVM_EXEC_RC=0\nVM_EXEC_RAW_BEGIN\n{\n \"exitcode\" : 0,\n \"exited\" : 1,\n \"out-data\" : \"HOST=monitoring\\nDOCKER_PS_RC=0\\nDOCKER_PS_BEGIN\\nuptime-kuma|louislam/uptime-kuma:2-slim|Up 2 weeks (healthy)|0.0.0.0:3001->3001/tcp\\ngotify|gotify/server:latest|Up 3 weeks (healthy)|0.0.0.0:8082->80/tcp\\nblackbox-exporter|prom/blackbox-exporter:latest|Up 3 weeks|0.0.0.0:9115->9115/tcp\\ngrafana|grafana/grafana:latest|Up 3 weeks|0.0.0.0:3003->3000/tcp\\nnode-exporter|prom/node-exporter:latest|Up 3 weeks|0.0.0.0:9100->9100/tcp\\nprometheus|prom/prometheus:latest|Up 3 weeks|0.0.0.0:9090->9090/tcp\\nalertmanager|prom/alertmanager:v0.33.0|Up 3 weeks|0.0.0.0:9093->9093/tcp\\nntfy|binwiederhier/ntfy:latest|Up 3 weeks|0.0.0.0:8055->80/tcp\\nhealthchecks|healthchecks/healthchecks:latest|Up 3 weeks (healthy)|0.0.0.0:8015->8000/tcp\\n\\nDOCKER_PS_END\\nSTACKS_RC=0\\nSTACKS_BEGIN\\n/opt/stacks/blackbox-exporter/compose.yaml\\n/opt/stacks/gotify-compose/compose.yaml\\n/opt/stacks/healthchecks/compose.yaml\\n/opt/stacks/ntfy/compose.yaml\\n/opt/stacks/observability-lite/compose.yaml\\n/opt/stacks/uptime-kuma-compose/compose.yaml\\n\\nSTACKS_END\\nLISTEN_RC=0\\nLISTEN_BEGIN\\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=20))\\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=18))\\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=11))\\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=359,fd=13))\\ntcp LISTEN 0 4096 0.0.0.0:8015 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1085,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8055 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1060,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8082 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1035,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3003 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1037,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1574846,fd=4))\\ntcp LISTEN 0 4096 127.0.0.1:46219 0.0.0.0:* users:((\\\"containerd\\\",pid=717,fd=9)) \\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=19))\\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=21))\\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=12))\\ntcp LISTEN 0 4096 0.0.0.0:9115 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1100,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9100 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1126,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1193,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9093 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1149,fd=4)) \\ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\\\"sshd\\\",pid=700,fd=6)) \\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=359,fd=14))\\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\\\"sshd\\\",pid=700,fd=7)) \\n\\nLISTEN_END\\nGUEST569_END\\n\",\n \"out-truncated\" : 0\n}\n\nVM_EXEC_RAW_END\nVM_END=171\nHOME569R1_DECISION=CARD_GAP_CLASSIFICATION_EVIDENCE_COLLECTED\nHOME569R1_NEXT_GATE=APPLY_MINIMAL_CARD_SET_CHANGES\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.txt b/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.txt new file mode 100644 index 00000000..e6e04730 --- /dev/null +++ b/runtime/history/SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1.txt @@ -0,0 +1,236 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=home-gram1-card-gap-classify-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=9e6559a47c5578d2fbe02570b0f050d4a0471e35c2948fc3b114db0197838bbe +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=0e12900a906b4428f2b0d4b2ecc05294e9c5e4f8201a7c3dd527ea89ea3dfa44 +SANITIZED_OUTPUT_SHA256=90ff5ff2bba88531e66a15ed6daf53f5fda0bc3cb53bf111f58d9f7e2273f447 +OUTPUT_BEGIN +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +HEALTH_FILE_LIST_RC=0 +HEALTH_FILE_LIST_BEGIN +cluster-admin-homepage-card.txt +cluster-admin-inventory-sync.txt +cluster-admin-public-route.txt +cluster-admin-service-readiness.txt +cluster-admin-stage0-readiness-fix.txt +dockge-user-hash-agent-install-readiness.txt +external-link-aleisaevn-netcraze-5083.txt +external-probe-runner-decision.txt +external-probe-vps.txt +failed-unit-legacy-inventory.txt +final-readiness-cycle-break.txt +final-readiness.txt +homepage-card-recommendations.txt +homepage-final-status.txt +homepage-missing-card-proposals-final.txt +homepage-missing-card-proposals.txt +independent-external-runner-audit.txt +independent-external-runner.txt +node-loss-readiness.txt +power-loss-readiness.txt +remote-git-sops-age-readiness.txt +router-hard-power.txt +router-running-config-mail-cloud.txt +router-startup-config-mail-cloud.txt +router-watchdog.txt +service-inventory-leftovers-phase00.txt +service-inventory-matrix-phase00.tsv +service-inventory-summary-phase00.txt +service-readiness-actual-budget.txt +service-readiness-alertmanager.txt +service-readiness-audiobookshelf.txt +service-readiness-authentik.txt +service-readiness-backup-health.txt +service-readiness-beszel.txt +service-readiness-blackbox-exporter.txt +service-readiness-bookstack.txt +service-readiness-cadvisor.txt +service-readiness-calibre-web.txt +service-readiness-cluster-admin-incident-engine.txt +service-readiness-cluster-admin-webpanel.txt +service-readiness-crypto-portfolio.txt +service-readiness-dns1.txt +service-readiness-dns2.txt +service-readiness-dockge.txt +service-readiness-dozzle.txt +service-readiness-filebrowser.txt +service-readiness-gitea.txt +service-readiness-gotify.txt +service-readiness-grafana.txt +service-readiness-healthchecks.txt +service-readiness-homeassistant.txt +service-readiness-homebox.txt +service-readiness-homepage.txt +service-readiness-immich.txt +service-readiness-it-tools.txt +service-readiness-jellyfin.txt +service-readiness-karakeep.txt +service-readiness-linkding.txt +service-readiness-mealie.txt +service-readiness-memos.txt +service-readiness-minio.txt +service-readiness-n8n.txt +service-readiness-netbox.txt +service-readiness-node-exporter.txt +service-readiness-node-red.txt +service-readiness-npmplus.txt +service-readiness-ntfy.txt +service-readiness-paperless.txt +service-readiness-prometheus.txt +service-readiness-proxmox-pve01.txt +service-readiness-searxng.txt +service-readiness-stirling-pdf.txt +service-readiness-syncthing.txt +service-readiness-uptime-kuma.txt +service-readiness-vaultwarden.txt +service-readiness-vikunja.txt +HEALTH_FILE_LIST_END +FILE_CHECK=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt|exists=True +FILE_BEGIN=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +STATUS=OK TS=2026-07-08T06:23:11Z TYPE=registered-planning-surface-info BAD=0 WARN=0 MODE=REGISTERED_PLANNING_SURFACE_INFO REGISTERED_SURFACE=YES ORIGINAL_STATE=review ORIGINAL_CLASS=UNGATED_REVIEW_ITEM HARD_GATE=no ACTION=not_a_health_failure ARCHIVE=/var/lib/homelab-review-surface-registry/original-health-20260708T062311Z REPORT=/var/lib/homelab-review-surface-registry/apply-latest.md + +FILE_END=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +FILE_CHECK=/var/lib/homelab-health/homepage-service-catalog-slo.txt|exists=False +FILE_CHECK=/var/lib/homelab-health/homepage-final-status.txt|exists=True +FILE_BEGIN=/var/lib/homelab-health/homepage-final-status.txt +STATUS=OK +TS=20260702T210118Z +TYPE=homepage-final-status +SUMMARY=Homepage groups/descriptions normalized to Russian; layout set to row/6-columns; monitors preserved and repaired; Cloudflare left untouched by user request. +CURRENT_CARD_COUNT=61 +CURRENT_LAYOUT=row/6-columns +CLOUDFLARE_POLICY=do_not_touch +PROPOSALS=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +SECRET_PRINTED=NO + +FILE_END=/var/lib/homelab-health/homepage-final-status.txt +REFERENCE_CARD_CONTEXT_RC=0 +REFERENCE_CARD_CONTEXT_BEGIN +- Primary exit routing peer: relay.netbird.selfhosted / 100.100.19.1 / Moldova. +- Backup egress peer present: mail.netbird.selfhosted / 100.100.147.204 / USA. +- NetBird exit route proof on edge-vm: wg allowed-ips includes 0.0.0.0/0 via relay; ip route get 1.1.1.1 uses wt0 table 7120. +- External trace after route: 85.121.4.192 / OTP, not home 95.84.154.183 / ARN. +- CrowdSec proof: cscli lapi status OK, cscli capi status OK, CAPI sharing/blocklist pull enabled, no DISABLE_ONLINE_API or -no-capi flags in active compose. +- WARP is intentionally absent and must not be reintroduced for this path. +- Unauthenticated https://api.crowdsec.net/v3/watchers/login returning HTTP 403 is expected network reachability proof. +- Final proof: /root/evidence/771AD_FINAL_CROWDSEC_CAPI_NETBIRD_CLOSURE_20260702T191057Z_PROOF.txt + +## HOMEPAGE_RU_LAYOUT_MONITORING_PROPOSALS_20260702 +- Homepage live config is on core-apps VM [PRIVATE_IP] under /opt/stacks/homepage/config. +- Groups/descriptions were normalized to Russian. +- Layout is row/6-columns for all active groups. +- siteMonitor fields are preserved; monitors must be repaired, not removed. +- Cloudflare card must be left untouched by explicit operator request. +- Red badges after migration were primarily caused by Homepage container resolving *.vpn.gram1.ru to edge NetBird IP and timing out; fixed by mapping vpn hostnames to edge LAN [PRIVATE_IP] in Homepage compose extra_hosts. +- Router Moscow monitor uses edge health endpoint http://[PRIVATE_IP]:18091/router-moscow. +- NPMplus monitor uses edge health endpoint http://[PRIVATE_IP]:18091/npmplus. +- Missing-card proposal report: /var/lib/homelab-health/homepage-missing-card-proposals-final.txt. + +## UPTIME_KUMA_MISSING_MONITOR_AND_PROPOSALS_20260702 +- Uptime Kuma lives on monitoring VM [PRIVATE_IP]. +- Added one missing monitor: NPMplus Edge Health -> http://[PRIVATE_IP]:18091/npmplus. +- Uptime Kuma DB backup was created before DB mutation under /root/uptime-kuma-manual-backups/773a-* on monitoring VM. +- DB integrity after insertion was OK. +- Deep monitoring proposal report: /var/lib/homelab-health/uptime-kuma-monitoring-proposals.txt. +- Cloudflare must not be touched by operator request. +- Recommended next monitors are P0 only after operator approval: Router Moscow Health, Backup/Restore Dashboard, Restore Drill Index, NetBird Peers, CrowdSec CAPI, Paperless Restore. + +## UPTIME_KUMA_NPMPLUS_ADMIN_REPAIR_20260702 +- Existing Uptime Kuma monitor "NPMplus Admin" was red because it checked https://[PRIVATE_IP]:81/. +- NPMplus admin is intentionally localhost-bound on edge-vm, so monitoring VM should not check the admin UI directly. +- Fixed monitor target to edge health endpoint: http://[PRIVATE_IP]:18091/npmplus. +- Monitor was repaired, not deleted. +- Cloudflare was not touched. + +## UPTIME_KUMA_APPROVED_MONITOR_BATCH_20260702 +- Approved Uptime Kuma monitor batch installed after Homepage/Kuma analysis. +- Existing NPMplus Admin monitor was repaired to http://[PRIVATE_IP]:18091/npmplus, not deleted. +- Edge health wrapper /usr/local/sbin/router-moscow-health provides safe endpoints on [PRIVATE_IP]:18091 for router-moscow, npmplus, loki, alloy, cadvisor, registry-cache, socket-proxy, diun, kopia and crowdsec. +- Cloudflare was not touched by explicit operator request. +- Uptime Kuma DB backups are under /root/uptime-kuma-manual-backups/773d-approved-batch-* on monitoring VM before the DB mutation. + +## UPTIME_KUMA_PENDING_HEALTH_MONITORS_FIX_20260702 +- Four pending Uptime Kuma keyword monitors were repaired by using local pve01 health endpoint paths instead of public backup.gram1.ru paths: + - Backup Restore Dashboard -> http://[PRIVATE_IP]:9101/backup-restore-dashboard.txt + - Restore Drill Index -> http://[PRIVATE_IP]:9101/restore-drill-index.txt + - Paperless Restore -> http://[PRIVATE_IP]:9101/paperless-restore.txt + - AdGuard Rewrite Sync -> http://[PRIVATE_IP]:9101/adguard-rewrite-sync.txt +- Cloudflare was not touched. +- Monitors were repaired, not deleted. + +## UPTIME_KUMA_FOUR_HEALTH_SOURCES_REPAIRED_20260702 +- Four Uptime Kuma monitors were still unavailable because three health endpoints returned 404 and Paperless Restore had STATUS=ERROR. +- Repaired pve01 health source files under /var/lib/homelab-health: + - backup-restore-dashboard.txt + - restore-drill-index.txt + - paperless-restore.txt + - adguard-rewrite-sync.txt +- Kuma monitors point to local pve01 health endpoints on http://[PRIVATE_IP]:9101/. +- Cloudflare was not touched. +- Monitors were repaired, not deleted. + +## DOCKGE_DISCONNECTED_HOSTS_AND_STALE_STACKS_20260702 +- Dockge is currently present only on edge-vm. +- core-apps and monitoring run Docker containers but have no Dockge/Dockge-agent detected. +REFERENCE_CARD_CONTEXT_END +VM_BEGIN=170 +VM_STATUS=status: running|rc=0 +VM_EXEC_RC=0 +VM_EXEC_RAW_BEGIN +{ + "exitcode" : 0, + "exited" : 1, + "out-data" : "HOST=core-apps\nDOCKER_PS_RC=0\nDOCKER_PS_BEGIN\ndemonov-shadow-8020-shadow-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours (healthy)|127.0.0.1:18020->8020/tcp\ndemonov-shadow-8020-relay-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\ndemonov-shadow-8020-collector-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\ndemonov-shadow-8020-worker-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\nimmich_machine_learning|ghcr.io/immich-app/immich-machine-learning:v2|Up 2 weeks (healthy)|\ncrypto-portfolio|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|[PRIVATE_IP]:8030->8000/tcp\ncrypto-portfolio-worker|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|\nhbarhub-scheduler-1|hbarhub-scheduler|Up 2 days|8040/tcp\nhbarhub-web-1|hbarhub-web|Up 2 days (healthy)|0.0.0.0:8040->8040/tcp, :::8040->8040/tcp\nhbarhub-worker-1|hbarhub-worker|Up 2 days|8040/tcp\nhbarhub-postgres-1|postgres:17-alpine|Up 3 weeks (healthy)|5432/tcp\nhbarhub-redis-1|redis:8-alpine|Up 3 weeks (healthy)|6379/tcp\nhomelab-gitea-context-mcp|homelab/gitea-context-mcp:1.0.0|Up 3 weeks (healthy)|127.0.0.1:8765->8765/tcp\ngitea|docker.gitea.com/gitea:1.26.2|Up 3 weeks (healthy)|22/tcp, 0.0.0.0:3002->3000/tcp\nauthentik-worker-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|\nauthentik-server-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|0.0.0.0:9000->9000/tcp, 0.0.0.0:9443->9443/tcp\nvaultwarden|vaultwarden/server:1.36.0-alpine|Up 3 weeks (healthy)|0.0.0.0:8083->80/tcp\nhomepage|ghcr.io/gethomepage/homepage:latest|Up 3 weeks (healthy)|0.0.0.0:3000->3000/tcp\nminio|minio/minio:latest|Up 3 weeks|0.0.0.0:9002->9000/tcp, 0.0.0.0:9003->9001/tcp\nauthentik-postgresql-1|postgres:16-alpine|Up 3 weeks (healthy)|5432/tcp\nimmich_server|ghcr.io/immich-app/immich-server:v2|Up 2 days (healthy)|0.0.0.0:2283->2283/tcp\nimmich_postgres|ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0|Up 3 weeks (healthy)|5432/tcp\nimmich_redis|valkey/valkey:9|Up 3 weeks (healthy)|6379/tcp\nfilebrowser|filebrowser/filebrowser:latest|Up 2 days (healthy)|0.0.0.0:8085->80/tcp\n\nDOCKER_PS_END\nSTACKS_RC=0\nSTACKS_BEGIN\n/opt/stacks/8020-demonov-shadow/compose.yaml\n/opt/stacks/authentik/compose.yml\n/opt/stacks/crypto-portfolio/compose.yaml\n/opt/stacks/filebrowser/compose.yaml\n/opt/stacks/gitea/compose.yaml\n/opt/stacks/hbarhub/compose.yaml\n/opt/stacks/homelab-gitea-context-mcp/compose.yaml\n/opt/stacks/homepage/compose.yaml\n/opt/stacks/immich/docker-compose.yml\n/opt/stacks/minio/compose.yaml\n/opt/stacks/vaultwarden-compose/compose.yaml\n\nSTACKS_END\nLISTEN_RC=0\nLISTEN_BEGIN\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=11))\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=20))\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=18))\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=360,fd=13))\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=19))\ntcp LISTEN 0 4096 127.0.0.1:18020 0.0.0.0:* users:((\"docker-proxy\",pid=2470167,fd=4))\ntcp LISTEN 0 4096 0.0.0.0:2283 0.0.0.0:* users:((\"docker-proxy\",pid=3554366,fd=4))\ntcp LISTEN 0 4096 127.0.0.1:8765 0.0.0.0:* users:((\"docker-proxy\",pid=1321,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3000 0.0.0.0:* users:((\"docker-proxy\",pid=1276,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:* users:((\"docker-proxy\",pid=1275,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9443 0.0.0.0:* users:((\"docker-proxy\",pid=1379,fd=4)) \ntcp LISTEN 0 4096 127.0.0.1:44453 0.0.0.0:* users:((\"containerd\",pid=716,fd=9)) \ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\"sshd\",pid=706,fd=6)) \ntcp LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:((\"python3\",pid=686,fd=3)) \ntcp LISTEN 0 5 0.0.0.0:8788 0.0.0.0:* users:((\"python3\",pid=684,fd=3)) \ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=21))\ntcp LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:* users:((\"docker-proxy\",pid=1397,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9003 0.0.0.0:* users:((\"docker-proxy\",pid=1347,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9002 0.0.0.0:* users:((\"docker-proxy\",pid=1360,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8040 0.0.0.0:* users:((\"docker-proxy\",pid=3558706,fd=4))\ntcp LISTEN 0 4096 0.0.0.0:8083 0.0.0.0:* users:((\"docker-proxy\",pid=1304,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8085 0.0.0.0:* users:((\"docker-proxy\",pid=3551865,fd=4))\ntcp LISTEN 0 4096 [PRIVATE_IP]:8030 0.0.0.0:* users:((\"docker-proxy\",pid=1398,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=12))\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\"sshd\",pid=706,fd=7)) \ntcp LISTEN 0 4096 [::]:8040 [::]:* users:((\"docker-proxy\",pid=3558711,fd=4))\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=360,fd=14))\n\nLISTEN_END\nGUEST569_END\n", + "out-truncated" : 0 +} + +VM_EXEC_RAW_END +VM_END=170 +VM_BEGIN=130 +VM_STATUS=|rc=2 +VM_EXEC_RC=2 +VM_EXEC_ERR=Configuration file 'nodes/pve01/qemu-server/130.conf' does not exist +VM_END=130 +VM_BEGIN=171 +VM_STATUS=status: running|rc=0 +VM_EXEC_RC=0 +VM_EXEC_RAW_BEGIN +{ + "exitcode" : 0, + "exited" : 1, + "out-data" : "HOST=monitoring\nDOCKER_PS_RC=0\nDOCKER_PS_BEGIN\nuptime-kuma|louislam/uptime-kuma:2-slim|Up 2 weeks (healthy)|0.0.0.0:3001->3001/tcp\ngotify|gotify/server:latest|Up 3 weeks (healthy)|0.0.0.0:8082->80/tcp\nblackbox-exporter|prom/blackbox-exporter:latest|Up 3 weeks|0.0.0.0:9115->9115/tcp\ngrafana|grafana/grafana:latest|Up 3 weeks|0.0.0.0:3003->3000/tcp\nnode-exporter|prom/node-exporter:latest|Up 3 weeks|0.0.0.0:9100->9100/tcp\nprometheus|prom/prometheus:latest|Up 3 weeks|0.0.0.0:9090->9090/tcp\nalertmanager|prom/alertmanager:v0.33.0|Up 3 weeks|0.0.0.0:9093->9093/tcp\nntfy|binwiederhier/ntfy:latest|Up 3 weeks|0.0.0.0:8055->80/tcp\nhealthchecks|healthchecks/healthchecks:latest|Up 3 weeks (healthy)|0.0.0.0:8015->8000/tcp\n\nDOCKER_PS_END\nSTACKS_RC=0\nSTACKS_BEGIN\n/opt/stacks/blackbox-exporter/compose.yaml\n/opt/stacks/gotify-compose/compose.yaml\n/opt/stacks/healthchecks/compose.yaml\n/opt/stacks/ntfy/compose.yaml\n/opt/stacks/observability-lite/compose.yaml\n/opt/stacks/uptime-kuma-compose/compose.yaml\n\nSTACKS_END\nLISTEN_RC=0\nLISTEN_BEGIN\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=20))\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=18))\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=11))\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=359,fd=13))\ntcp LISTEN 0 4096 0.0.0.0:8015 0.0.0.0:* users:((\"docker-proxy\",pid=1085,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8055 0.0.0.0:* users:((\"docker-proxy\",pid=1060,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8082 0.0.0.0:* users:((\"docker-proxy\",pid=1035,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3003 0.0.0.0:* users:((\"docker-proxy\",pid=1037,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:* users:((\"docker-proxy\",pid=1574846,fd=4))\ntcp LISTEN 0 4096 127.0.0.1:46219 0.0.0.0:* users:((\"containerd\",pid=717,fd=9)) \ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=19))\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=21))\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=12))\ntcp LISTEN 0 4096 0.0.0.0:9115 0.0.0.0:* users:((\"docker-proxy\",pid=1100,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9100 0.0.0.0:* users:((\"docker-proxy\",pid=1126,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:* users:((\"docker-proxy\",pid=1193,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9093 0.0.0.0:* users:((\"docker-proxy\",pid=1149,fd=4)) \ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\"sshd\",pid=700,fd=6)) \ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=359,fd=14))\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\"sshd\",pid=700,fd=7)) \n\nLISTEN_END\nGUEST569_END\n", + "out-truncated" : 0 +} + +VM_EXEC_RAW_END +VM_END=171 +HOME569R1_DECISION=CARD_GAP_CLASSIFICATION_EVIDENCE_COLLECTED +HOME569R1_NEXT_GATE=APPLY_MINIMAL_CARD_SET_CHANGES +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index cd55c95a..d9f64e45 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116", + "command_id": "SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1", "status": "OK", "rc": 0, "host": "pve01", - "mode": "change", - "component": "newfi-newfdom-articles206-pack3-travel-responsible-breeding", - "started_at_utc": "2026-09-18T22:28:19Z", - "finished_at_utc": "2026-09-18T22:28:42Z", + "mode": "read-only", + "component": "home-gram1-card-gap-classify-readonly", + "started_at_utc": "2026-09-18T22:30:30Z", + "finished_at_utc": "2026-09-18T22:30:33Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "5c019986d3242fc1e8242c53e538500a8c0c3530bbfe9a8c969647f32712a474", + "command_sha256": "9e6559a47c5578d2fbe02570b0f050d4a0471e35c2948fc3b114db0197838bbe", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "OK", + "result_contract_status": null, "result_contract_error": null, "command_rc": 0, - "changes_made": true, + "changes_made": false, "rollback_started": false, "rollback_restored": null, - "mutation_outcome": "MUTATED", + "mutation_outcome": "NO_MUTATION", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "a40d2dcb80bc6e1ed6a581bb6c9a5b4c27cf405d8cbf56725e572677ffe26811", - "sanitized_output_sha256": "a40d2dcb80bc6e1ed6a581bb6c9a5b4c27cf405d8cbf56725e572677ffe26811", + "raw_evidence_sha256": "0e12900a906b4428f2b0d4b2ecc05294e9c5e4f8201a7c3dd527ea89ea3dfa44", + "sanitized_output_sha256": "90ff5ff2bba88531e66a15ed6daf53f5fda0bc3cb53bf111f58d9f7e2273f447", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "NEWFI116_BEGIN\nCOMMAND_ID=NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116\nNEWFI116_PREMUTATION_CONTRACT={\"services\": [{\"category\": \"\\u0414\\u043e\\u043a\\u0443\\u043c\\u0435\\u043d\\u0442\\u044b \\u0438 \\u043f\\u0440\\u0430\\u0432\\u0438\\u043b\\u0430\", \"class\": \"XFRM\\\\Service\\\\ResourceItem\\\\Create\", \"getResource\": true, \"getTagChanger\": false, \"save\": true, \"setContent\": true, \"versionProperty\": true}, {\"category\": \"\\u0420\\u0430\\u0437\\u0432\\u0435\\u0434\\u0435\\u043d\\u0438\\u0435 \\u0438 \\u0433\\u0435\\u043d\\u0435\\u0442\\u0438\\u043a\\u0430\", \"class\": \"XFRM\\\\Service\\\\ResourceItem\\\\Create\", \"getResource\": true, \"getTagChanger\": false, \"save\": true, \"setContent\": true, \"versionProperty\": true}]}\nNEWFI116_BACKUPS_2OF2=PASS\nNEWFI116_STAGING_REVIEW=PASS\nNEWFI116_STAGING_PUBLISH=PASS\nNEWFI116_STAGING_ROLLBACK=PASS\nNEWFI116_STAGING_REAPPLY=PASS\nNEWFI116_PRODUCTION=PASS\nNEWFI116_PUBLIC={\"responsible-breeding\": {\"body_bytes\": 67832, \"http\": 200, \"id\": 17, \"sha256\": \"4dc4bf6da6707f2a3b9bacfae79279e1dd4ac5a45b12c2cde5591523431c91ee\", \"url\": \"https://newfi.ru/resources/17/\"}, \"travel-planning\": {\"body_bytes\": 67618, \"http\": 200, \"id\": 16, \"sha256\": \"1d055edd4e4b3c6c1fbbbec57feb40996c8535fd15e196f4051024faa86c947d\", \"url\": \"https://newfi.ru/resources/16/\"}}\nNEWFI116_GIT_PROMOTION={\"old_head\": \"f85c9474e2ce3689865fb342776c1faf6927f047\", \"new_head\": \"48b7182a00709c921ea2b71b6f4a1a748e706dc5\", \"remote_head\": \"48b7182a00709c921ea2b71b6f4a1a748e706dc5\"}\nNEWFI116_DECISION=PASS_ARTICLES206_PACK3_GIT_LAST_PATCHED_INDEXNOW\nNEWFI116_NEXT_GATE=ARTICLES206_PACK4_FINAL\nHOMELAB_RESULT_CONTRACT={\"version\": 1, \"command_id\": \"NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116\", \"status\": \"OK\", \"changes_made\": true, \"rollback_started\": false, \"rollback_restored\": null}\n" + "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nHEALTH_FILE_LIST_RC=0\nHEALTH_FILE_LIST_BEGIN\ncluster-admin-homepage-card.txt\ncluster-admin-inventory-sync.txt\ncluster-admin-public-route.txt\ncluster-admin-service-readiness.txt\ncluster-admin-stage0-readiness-fix.txt\ndockge-user-hash-agent-install-readiness.txt\nexternal-link-aleisaevn-netcraze-5083.txt\nexternal-probe-runner-decision.txt\nexternal-probe-vps.txt\nfailed-unit-legacy-inventory.txt\nfinal-readiness-cycle-break.txt\nfinal-readiness.txt\nhomepage-card-recommendations.txt\nhomepage-final-status.txt\nhomepage-missing-card-proposals-final.txt\nhomepage-missing-card-proposals.txt\nindependent-external-runner-audit.txt\nindependent-external-runner.txt\nnode-loss-readiness.txt\npower-loss-readiness.txt\nremote-git-sops-age-readiness.txt\nrouter-hard-power.txt\nrouter-running-config-mail-cloud.txt\nrouter-startup-config-mail-cloud.txt\nrouter-watchdog.txt\nservice-inventory-leftovers-phase00.txt\nservice-inventory-matrix-phase00.tsv\nservice-inventory-summary-phase00.txt\nservice-readiness-actual-budget.txt\nservice-readiness-alertmanager.txt\nservice-readiness-audiobookshelf.txt\nservice-readiness-authentik.txt\nservice-readiness-backup-health.txt\nservice-readiness-beszel.txt\nservice-readiness-blackbox-exporter.txt\nservice-readiness-bookstack.txt\nservice-readiness-cadvisor.txt\nservice-readiness-calibre-web.txt\nservice-readiness-cluster-admin-incident-engine.txt\nservice-readiness-cluster-admin-webpanel.txt\nservice-readiness-crypto-portfolio.txt\nservice-readiness-dns1.txt\nservice-readiness-dns2.txt\nservice-readiness-dockge.txt\nservice-readiness-dozzle.txt\nservice-readiness-filebrowser.txt\nservice-readiness-gitea.txt\nservice-readiness-gotify.txt\nservice-readiness-grafana.txt\nservice-readiness-healthchecks.txt\nservice-readiness-homeassistant.txt\nservice-readiness-homebox.txt\nservice-readiness-homepage.txt\nservice-readiness-immich.txt\nservice-readiness-it-tools.txt\nservice-readiness-jellyfin.txt\nservice-readiness-karakeep.txt\nservice-readiness-linkding.txt\nservice-readiness-mealie.txt\nservice-readiness-memos.txt\nservice-readiness-minio.txt\nservice-readiness-n8n.txt\nservice-readiness-netbox.txt\nservice-readiness-node-exporter.txt\nservice-readiness-node-red.txt\nservice-readiness-npmplus.txt\nservice-readiness-ntfy.txt\nservice-readiness-paperless.txt\nservice-readiness-prometheus.txt\nservice-readiness-proxmox-pve01.txt\nservice-readiness-searxng.txt\nservice-readiness-stirling-pdf.txt\nservice-readiness-syncthing.txt\nservice-readiness-uptime-kuma.txt\nservice-readiness-vaultwarden.txt\nservice-readiness-vikunja.txt\nHEALTH_FILE_LIST_END\nFILE_CHECK=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt|exists=True\nFILE_BEGIN=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nSTATUS=OK TS=2026-07-08T06:23:11Z TYPE=registered-planning-surface-info BAD=0 WARN=0 MODE=REGISTERED_PLANNING_SURFACE_INFO REGISTERED_SURFACE=YES ORIGINAL_STATE=review ORIGINAL_CLASS=UNGATED_REVIEW_ITEM HARD_GATE=no ACTION=not_a_health_failure ARCHIVE=/var/lib/homelab-review-surface-registry/original-health-20260708T062311Z REPORT=/var/lib/homelab-review-surface-registry/apply-latest.md\n\nFILE_END=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nFILE_CHECK=/var/lib/homelab-health/homepage-service-catalog-slo.txt|exists=False\nFILE_CHECK=/var/lib/homelab-health/homepage-final-status.txt|exists=True\nFILE_BEGIN=/var/lib/homelab-health/homepage-final-status.txt\nSTATUS=OK\nTS=20260702T210118Z\nTYPE=homepage-final-status\nSUMMARY=Homepage groups/descriptions normalized to Russian; layout set to row/6-columns; monitors preserved and repaired; Cloudflare left untouched by user request.\nCURRENT_CARD_COUNT=61\nCURRENT_LAYOUT=row/6-columns\nCLOUDFLARE_POLICY=do_not_touch\nPROPOSALS=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt\nSECRET_PRINTED=NO\n\nFILE_END=/var/lib/homelab-health/homepage-final-status.txt\nREFERENCE_CARD_CONTEXT_RC=0\nREFERENCE_CARD_CONTEXT_BEGIN\n- Primary exit routing peer: relay.netbird.selfhosted / 100.100.19.1 / Moldova.\n- Backup egress peer present: mail.netbird.selfhosted / 100.100.147.204 / USA.\n- NetBird exit route proof on edge-vm: wg allowed-ips includes 0.0.0.0/0 via relay; ip route get 1.1.1.1 uses wt0 table 7120.\n- External trace after route: 85.121.4.192 / OTP, not home 95.84.154.183 / ARN.\n- CrowdSec proof: cscli lapi status OK, cscli capi status OK, CAPI sharing/blocklist pull enabled, no DISABLE_ONLINE_API or -no-capi flags in active compose.\n- WARP is intentionally absent and must not be reintroduced for this path.\n- Unauthenticated https://api.crowdsec.net/v3/watchers/login returning HTTP 403 is expected network reachability proof.\n- Final proof: /root/evidence/771AD_FINAL_CROWDSEC_CAPI_NETBIRD_CLOSURE_20260702T191057Z_PROOF.txt\n\n## HOMEPAGE_RU_LAYOUT_MONITORING_PROPOSALS_20260702\n- Homepage live config is on core-apps VM [PRIVATE_IP] under /opt/stacks/homepage/config.\n- Groups/descriptions were normalized to Russian.\n- Layout is row/6-columns for all active groups.\n- siteMonitor fields are preserved; monitors must be repaired, not removed.\n- Cloudflare card must be left untouched by explicit operator request.\n- Red badges after migration were primarily caused by Homepage container resolving *.vpn.gram1.ru to edge NetBird IP and timing out; fixed by mapping vpn hostnames to edge LAN [PRIVATE_IP] in Homepage compose extra_hosts.\n- Router Moscow monitor uses edge health endpoint http://[PRIVATE_IP]:18091/router-moscow.\n- NPMplus monitor uses edge health endpoint http://[PRIVATE_IP]:18091/npmplus.\n- Missing-card proposal report: /var/lib/homelab-health/homepage-missing-card-proposals-final.txt.\n\n## UPTIME_KUMA_MISSING_MONITOR_AND_PROPOSALS_20260702\n- Uptime Kuma lives on monitoring VM [PRIVATE_IP].\n- Added one missing monitor: NPMplus Edge Health -> http://[PRIVATE_IP]:18091/npmplus.\n- Uptime Kuma DB backup was created before DB mutation under /root/uptime-kuma-manual-backups/773a-* on monitoring VM.\n- DB integrity after insertion was OK.\n- Deep monitoring proposal report: /var/lib/homelab-health/uptime-kuma-monitoring-proposals.txt.\n- Cloudflare must not be touched by operator request.\n- Recommended next monitors are P0 only after operator approval: Router Moscow Health, Backup/Restore Dashboard, Restore Drill Index, NetBird Peers, CrowdSec CAPI, Paperless Restore.\n\n## UPTIME_KUMA_NPMPLUS_ADMIN_REPAIR_20260702\n- Existing Uptime Kuma monitor \"NPMplus Admin\" was red because it checked https://[PRIVATE_IP]:81/.\n- NPMplus admin is intentionally localhost-bound on edge-vm, so monitoring VM should not check the admin UI directly.\n- Fixed monitor target to edge health endpoint: http://[PRIVATE_IP]:18091/npmplus.\n- Monitor was repaired, not deleted.\n- Cloudflare was not touched.\n\n## UPTIME_KUMA_APPROVED_MONITOR_BATCH_20260702\n- Approved Uptime Kuma monitor batch installed after Homepage/Kuma analysis.\n- Existing NPMplus Admin monitor was repaired to http://[PRIVATE_IP]:18091/npmplus, not deleted.\n- Edge health wrapper /usr/local/sbin/router-moscow-health provides safe endpoints on [PRIVATE_IP]:18091 for router-moscow, npmplus, loki, alloy, cadvisor, registry-cache, socket-proxy, diun, kopia and crowdsec.\n- Cloudflare was not touched by explicit operator request.\n- Uptime Kuma DB backups are under /root/uptime-kuma-manual-backups/773d-approved-batch-* on monitoring VM before the DB mutation.\n\n## UPTIME_KUMA_PENDING_HEALTH_MONITORS_FIX_20260702\n- Four pending Uptime Kuma keyword monitors were repaired by using local pve01 health endpoint paths instead of public backup.gram1.ru paths:\n - Backup Restore Dashboard -> http://[PRIVATE_IP]:9101/backup-restore-dashboard.txt\n - Restore Drill Index -> http://[PRIVATE_IP]:9101/restore-drill-index.txt\n - Paperless Restore -> http://[PRIVATE_IP]:9101/paperless-restore.txt\n - AdGuard Rewrite Sync -> http://[PRIVATE_IP]:9101/adguard-rewrite-sync.txt\n- Cloudflare was not touched.\n- Monitors were repaired, not deleted.\n\n## UPTIME_KUMA_FOUR_HEALTH_SOURCES_REPAIRED_20260702\n- Four Uptime Kuma monitors were still unavailable because three health endpoints returned 404 and Paperless Restore had STATUS=ERROR.\n- Repaired pve01 health source files under /var/lib/homelab-health:\n - backup-restore-dashboard.txt\n - restore-drill-index.txt\n - paperless-restore.txt\n - adguard-rewrite-sync.txt\n- Kuma monitors point to local pve01 health endpoints on http://[PRIVATE_IP]:9101/.\n- Cloudflare was not touched.\n- Monitors were repaired, not deleted.\n\n## DOCKGE_DISCONNECTED_HOSTS_AND_STALE_STACKS_20260702\n- Dockge is currently present only on edge-vm.\n- core-apps and monitoring run Docker containers but have no Dockge/Dockge-agent detected.\nREFERENCE_CARD_CONTEXT_END\nVM_BEGIN=170\nVM_STATUS=status: running|rc=0\nVM_EXEC_RC=0\nVM_EXEC_RAW_BEGIN\n{\n \"exitcode\" : 0,\n \"exited\" : 1,\n \"out-data\" : \"HOST=core-apps\\nDOCKER_PS_RC=0\\nDOCKER_PS_BEGIN\\ndemonov-shadow-8020-shadow-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours (healthy)|127.0.0.1:18020->8020/tcp\\ndemonov-shadow-8020-relay-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\ndemonov-shadow-8020-collector-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\ndemonov-shadow-8020-worker-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\\nimmich_machine_learning|ghcr.io/immich-app/immich-machine-learning:v2|Up 2 weeks (healthy)|\\ncrypto-portfolio|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|[PRIVATE_IP]:8030->8000/tcp\\ncrypto-portfolio-worker|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|\\nhbarhub-scheduler-1|hbarhub-scheduler|Up 2 days|8040/tcp\\nhbarhub-web-1|hbarhub-web|Up 2 days (healthy)|0.0.0.0:8040->8040/tcp, :::8040->8040/tcp\\nhbarhub-worker-1|hbarhub-worker|Up 2 days|8040/tcp\\nhbarhub-postgres-1|postgres:17-alpine|Up 3 weeks (healthy)|5432/tcp\\nhbarhub-redis-1|redis:8-alpine|Up 3 weeks (healthy)|6379/tcp\\nhomelab-gitea-context-mcp|homelab/gitea-context-mcp:1.0.0|Up 3 weeks (healthy)|127.0.0.1:8765->8765/tcp\\ngitea|docker.gitea.com/gitea:1.26.2|Up 3 weeks (healthy)|22/tcp, 0.0.0.0:3002->3000/tcp\\nauthentik-worker-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|\\nauthentik-server-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|0.0.0.0:9000->9000/tcp, 0.0.0.0:9443->9443/tcp\\nvaultwarden|vaultwarden/server:1.36.0-alpine|Up 3 weeks (healthy)|0.0.0.0:8083->80/tcp\\nhomepage|ghcr.io/gethomepage/homepage:latest|Up 3 weeks (healthy)|0.0.0.0:3000->3000/tcp\\nminio|minio/minio:latest|Up 3 weeks|0.0.0.0:9002->9000/tcp, 0.0.0.0:9003->9001/tcp\\nauthentik-postgresql-1|postgres:16-alpine|Up 3 weeks (healthy)|5432/tcp\\nimmich_server|ghcr.io/immich-app/immich-server:v2|Up 2 days (healthy)|0.0.0.0:2283->2283/tcp\\nimmich_postgres|ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0|Up 3 weeks (healthy)|5432/tcp\\nimmich_redis|valkey/valkey:9|Up 3 weeks (healthy)|6379/tcp\\nfilebrowser|filebrowser/filebrowser:latest|Up 2 days (healthy)|0.0.0.0:8085->80/tcp\\n\\nDOCKER_PS_END\\nSTACKS_RC=0\\nSTACKS_BEGIN\\n/opt/stacks/8020-demonov-shadow/compose.yaml\\n/opt/stacks/authentik/compose.yml\\n/opt/stacks/crypto-portfolio/compose.yaml\\n/opt/stacks/filebrowser/compose.yaml\\n/opt/stacks/gitea/compose.yaml\\n/opt/stacks/hbarhub/compose.yaml\\n/opt/stacks/homelab-gitea-context-mcp/compose.yaml\\n/opt/stacks/homepage/compose.yaml\\n/opt/stacks/immich/docker-compose.yml\\n/opt/stacks/minio/compose.yaml\\n/opt/stacks/vaultwarden-compose/compose.yaml\\n\\nSTACKS_END\\nLISTEN_RC=0\\nLISTEN_BEGIN\\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=11))\\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=20))\\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=18))\\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=360,fd=13))\\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=19))\\ntcp LISTEN 0 4096 127.0.0.1:18020 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=2470167,fd=4))\\ntcp LISTEN 0 4096 0.0.0.0:2283 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3554366,fd=4))\\ntcp LISTEN 0 4096 127.0.0.1:8765 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1321,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3000 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1276,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1275,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9443 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1379,fd=4)) \\ntcp LISTEN 0 4096 127.0.0.1:44453 0.0.0.0:* users:((\\\"containerd\\\",pid=716,fd=9)) \\ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\\\"sshd\\\",pid=706,fd=6)) \\ntcp LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:((\\\"python3\\\",pid=686,fd=3)) \\ntcp LISTEN 0 5 0.0.0.0:8788 0.0.0.0:* users:((\\\"python3\\\",pid=684,fd=3)) \\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=21))\\ntcp LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1397,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9003 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1347,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9002 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1360,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8040 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3558706,fd=4))\\ntcp LISTEN 0 4096 0.0.0.0:8083 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1304,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8085 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=3551865,fd=4))\\ntcp LISTEN 0 4096 [PRIVATE_IP]:8030 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1398,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=360,fd=12))\\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\\\"sshd\\\",pid=706,fd=7)) \\ntcp LISTEN 0 4096 [::]:8040 [::]:* users:((\\\"docker-proxy\\\",pid=3558711,fd=4))\\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=360,fd=14))\\n\\nLISTEN_END\\nGUEST569_END\\n\",\n \"out-truncated\" : 0\n}\n\nVM_EXEC_RAW_END\nVM_END=170\nVM_BEGIN=130\nVM_STATUS=|rc=2\nVM_EXEC_RC=2\nVM_EXEC_ERR=Configuration file 'nodes/pve01/qemu-server/130.conf' does not exist \nVM_END=130\nVM_BEGIN=171\nVM_STATUS=status: running|rc=0\nVM_EXEC_RC=0\nVM_EXEC_RAW_BEGIN\n{\n \"exitcode\" : 0,\n \"exited\" : 1,\n \"out-data\" : \"HOST=monitoring\\nDOCKER_PS_RC=0\\nDOCKER_PS_BEGIN\\nuptime-kuma|louislam/uptime-kuma:2-slim|Up 2 weeks (healthy)|0.0.0.0:3001->3001/tcp\\ngotify|gotify/server:latest|Up 3 weeks (healthy)|0.0.0.0:8082->80/tcp\\nblackbox-exporter|prom/blackbox-exporter:latest|Up 3 weeks|0.0.0.0:9115->9115/tcp\\ngrafana|grafana/grafana:latest|Up 3 weeks|0.0.0.0:3003->3000/tcp\\nnode-exporter|prom/node-exporter:latest|Up 3 weeks|0.0.0.0:9100->9100/tcp\\nprometheus|prom/prometheus:latest|Up 3 weeks|0.0.0.0:9090->9090/tcp\\nalertmanager|prom/alertmanager:v0.33.0|Up 3 weeks|0.0.0.0:9093->9093/tcp\\nntfy|binwiederhier/ntfy:latest|Up 3 weeks|0.0.0.0:8055->80/tcp\\nhealthchecks|healthchecks/healthchecks:latest|Up 3 weeks (healthy)|0.0.0.0:8015->8000/tcp\\n\\nDOCKER_PS_END\\nSTACKS_RC=0\\nSTACKS_BEGIN\\n/opt/stacks/blackbox-exporter/compose.yaml\\n/opt/stacks/gotify-compose/compose.yaml\\n/opt/stacks/healthchecks/compose.yaml\\n/opt/stacks/ntfy/compose.yaml\\n/opt/stacks/observability-lite/compose.yaml\\n/opt/stacks/uptime-kuma-compose/compose.yaml\\n\\nSTACKS_END\\nLISTEN_RC=0\\nLISTEN_BEGIN\\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=20))\\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=18))\\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=11))\\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=359,fd=13))\\ntcp LISTEN 0 4096 0.0.0.0:8015 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1085,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8055 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1060,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:8082 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1035,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3003 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1037,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1574846,fd=4))\\ntcp LISTEN 0 4096 127.0.0.1:46219 0.0.0.0:* users:((\\\"containerd\\\",pid=717,fd=9)) \\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=19))\\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=21))\\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\\\"systemd-resolve\\\",pid=359,fd=12))\\ntcp LISTEN 0 4096 0.0.0.0:9115 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1100,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9100 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1126,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1193,fd=4)) \\ntcp LISTEN 0 4096 0.0.0.0:9093 0.0.0.0:* users:((\\\"docker-proxy\\\",pid=1149,fd=4)) \\ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\\\"sshd\\\",pid=700,fd=6)) \\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\\\"systemd-resolve\\\",pid=359,fd=14))\\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\\\"sshd\\\",pid=700,fd=7)) \\n\\nLISTEN_END\\nGUEST569_END\\n\",\n \"out-truncated\" : 0\n}\n\nVM_EXEC_RAW_END\nVM_END=171\nHOME569R1_DECISION=CARD_GAP_CLASSIFICATION_EVIDENCE_COLLECTED\nHOME569R1_NEXT_GATE=APPLY_MINIMAL_CARD_SET_CHANGES\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 36be9061..e6e04730 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,46 +1,236 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116 +COMMAND_ID=SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1 STATUS=OK RC=0 HOST=pve01 -MODE=change -COMPONENT=newfi-newfdom-articles206-pack3-travel-responsible-breeding +MODE=read-only +COMPONENT=home-gram1-card-gap-classify-readonly REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=5c019986d3242fc1e8242c53e538500a8c0c3530bbfe9a8c969647f32712a474 +COMMAND_SHA256=9e6559a47c5578d2fbe02570b0f050d4a0471e35c2948fc3b114db0197838bbe DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=OK +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE COMMAND_RC=0 -CHANGES_MADE=true +CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null -MUTATION_OUTCOME=MUTATED +MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=a40d2dcb80bc6e1ed6a581bb6c9a5b4c27cf405d8cbf56725e572677ffe26811 -SANITIZED_OUTPUT_SHA256=a40d2dcb80bc6e1ed6a581bb6c9a5b4c27cf405d8cbf56725e572677ffe26811 +RAW_EVIDENCE_SHA256=0e12900a906b4428f2b0d4b2ecc05294e9c5e4f8201a7c3dd527ea89ea3dfa44 +SANITIZED_OUTPUT_SHA256=90ff5ff2bba88531e66a15ed6daf53f5fda0bc3cb53bf111f58d9f7e2273f447 OUTPUT_BEGIN -NEWFI116_BEGIN -COMMAND_ID=NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116 -NEWFI116_PREMUTATION_CONTRACT={"services": [{"category": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430", "class": "XFRM\\Service\\ResourceItem\\Create", "getResource": true, "getTagChanger": false, "save": true, "setContent": true, "versionProperty": true}, {"category": "\u0420\u0430\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0433\u0435\u043d\u0435\u0442\u0438\u043a\u0430", "class": "XFRM\\Service\\ResourceItem\\Create", "getResource": true, "getTagChanger": false, "save": true, "setContent": true, "versionProperty": true}]} -NEWFI116_BACKUPS_2OF2=PASS -NEWFI116_STAGING_REVIEW=PASS -NEWFI116_STAGING_PUBLISH=PASS -NEWFI116_STAGING_ROLLBACK=PASS -NEWFI116_STAGING_REAPPLY=PASS -NEWFI116_PRODUCTION=PASS -NEWFI116_PUBLIC={"responsible-breeding": {"body_bytes": 67832, "http": 200, "id": 17, "sha256": "4dc4bf6da6707f2a3b9bacfae79279e1dd4ac5a45b12c2cde5591523431c91ee", "url": "https://newfi.ru/resources/17/"}, "travel-planning": {"body_bytes": 67618, "http": 200, "id": 16, "sha256": "1d055edd4e4b3c6c1fbbbec57feb40996c8535fd15e196f4051024faa86c947d", "url": "https://newfi.ru/resources/16/"}} -NEWFI116_GIT_PROMOTION={"old_head": "f85c9474e2ce3689865fb342776c1faf6927f047", "new_head": "48b7182a00709c921ea2b71b6f4a1a748e706dc5", "remote_head": "48b7182a00709c921ea2b71b6f4a1a748e706dc5"} -NEWFI116_DECISION=PASS_ARTICLES206_PACK3_GIT_LAST_PATCHED_INDEXNOW -NEWFI116_NEXT_GATE=ARTICLES206_PACK4_FINAL -HOMELAB_RESULT_CONTRACT={"version": 1, "command_id": "NEWFI-260919-NEWFDOM-ARTICLES206-PACK3-116", "status": "OK", "changes_made": true, "rollback_started": false, "rollback_restored": null} +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +HEALTH_FILE_LIST_RC=0 +HEALTH_FILE_LIST_BEGIN +cluster-admin-homepage-card.txt +cluster-admin-inventory-sync.txt +cluster-admin-public-route.txt +cluster-admin-service-readiness.txt +cluster-admin-stage0-readiness-fix.txt +dockge-user-hash-agent-install-readiness.txt +external-link-aleisaevn-netcraze-5083.txt +external-probe-runner-decision.txt +external-probe-vps.txt +failed-unit-legacy-inventory.txt +final-readiness-cycle-break.txt +final-readiness.txt +homepage-card-recommendations.txt +homepage-final-status.txt +homepage-missing-card-proposals-final.txt +homepage-missing-card-proposals.txt +independent-external-runner-audit.txt +independent-external-runner.txt +node-loss-readiness.txt +power-loss-readiness.txt +remote-git-sops-age-readiness.txt +router-hard-power.txt +router-running-config-mail-cloud.txt +router-startup-config-mail-cloud.txt +router-watchdog.txt +service-inventory-leftovers-phase00.txt +service-inventory-matrix-phase00.tsv +service-inventory-summary-phase00.txt +service-readiness-actual-budget.txt +service-readiness-alertmanager.txt +service-readiness-audiobookshelf.txt +service-readiness-authentik.txt +service-readiness-backup-health.txt +service-readiness-beszel.txt +service-readiness-blackbox-exporter.txt +service-readiness-bookstack.txt +service-readiness-cadvisor.txt +service-readiness-calibre-web.txt +service-readiness-cluster-admin-incident-engine.txt +service-readiness-cluster-admin-webpanel.txt +service-readiness-crypto-portfolio.txt +service-readiness-dns1.txt +service-readiness-dns2.txt +service-readiness-dockge.txt +service-readiness-dozzle.txt +service-readiness-filebrowser.txt +service-readiness-gitea.txt +service-readiness-gotify.txt +service-readiness-grafana.txt +service-readiness-healthchecks.txt +service-readiness-homeassistant.txt +service-readiness-homebox.txt +service-readiness-homepage.txt +service-readiness-immich.txt +service-readiness-it-tools.txt +service-readiness-jellyfin.txt +service-readiness-karakeep.txt +service-readiness-linkding.txt +service-readiness-mealie.txt +service-readiness-memos.txt +service-readiness-minio.txt +service-readiness-n8n.txt +service-readiness-netbox.txt +service-readiness-node-exporter.txt +service-readiness-node-red.txt +service-readiness-npmplus.txt +service-readiness-ntfy.txt +service-readiness-paperless.txt +service-readiness-prometheus.txt +service-readiness-proxmox-pve01.txt +service-readiness-searxng.txt +service-readiness-stirling-pdf.txt +service-readiness-syncthing.txt +service-readiness-uptime-kuma.txt +service-readiness-vaultwarden.txt +service-readiness-vikunja.txt +HEALTH_FILE_LIST_END +FILE_CHECK=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt|exists=True +FILE_BEGIN=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +STATUS=OK TS=2026-07-08T06:23:11Z TYPE=registered-planning-surface-info BAD=0 WARN=0 MODE=REGISTERED_PLANNING_SURFACE_INFO REGISTERED_SURFACE=YES ORIGINAL_STATE=review ORIGINAL_CLASS=UNGATED_REVIEW_ITEM HARD_GATE=no ACTION=not_a_health_failure ARCHIVE=/var/lib/homelab-review-surface-registry/original-health-20260708T062311Z REPORT=/var/lib/homelab-review-surface-registry/apply-latest.md + +FILE_END=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +FILE_CHECK=/var/lib/homelab-health/homepage-service-catalog-slo.txt|exists=False +FILE_CHECK=/var/lib/homelab-health/homepage-final-status.txt|exists=True +FILE_BEGIN=/var/lib/homelab-health/homepage-final-status.txt +STATUS=OK +TS=20260702T210118Z +TYPE=homepage-final-status +SUMMARY=Homepage groups/descriptions normalized to Russian; layout set to row/6-columns; monitors preserved and repaired; Cloudflare left untouched by user request. +CURRENT_CARD_COUNT=61 +CURRENT_LAYOUT=row/6-columns +CLOUDFLARE_POLICY=do_not_touch +PROPOSALS=/var/lib/homelab-health/homepage-missing-card-proposals-final.txt +SECRET_PRINTED=NO + +FILE_END=/var/lib/homelab-health/homepage-final-status.txt +REFERENCE_CARD_CONTEXT_RC=0 +REFERENCE_CARD_CONTEXT_BEGIN +- Primary exit routing peer: relay.netbird.selfhosted / 100.100.19.1 / Moldova. +- Backup egress peer present: mail.netbird.selfhosted / 100.100.147.204 / USA. +- NetBird exit route proof on edge-vm: wg allowed-ips includes 0.0.0.0/0 via relay; ip route get 1.1.1.1 uses wt0 table 7120. +- External trace after route: 85.121.4.192 / OTP, not home 95.84.154.183 / ARN. +- CrowdSec proof: cscli lapi status OK, cscli capi status OK, CAPI sharing/blocklist pull enabled, no DISABLE_ONLINE_API or -no-capi flags in active compose. +- WARP is intentionally absent and must not be reintroduced for this path. +- Unauthenticated https://api.crowdsec.net/v3/watchers/login returning HTTP 403 is expected network reachability proof. +- Final proof: /root/evidence/771AD_FINAL_CROWDSEC_CAPI_NETBIRD_CLOSURE_20260702T191057Z_PROOF.txt + +## HOMEPAGE_RU_LAYOUT_MONITORING_PROPOSALS_20260702 +- Homepage live config is on core-apps VM [PRIVATE_IP] under /opt/stacks/homepage/config. +- Groups/descriptions were normalized to Russian. +- Layout is row/6-columns for all active groups. +- siteMonitor fields are preserved; monitors must be repaired, not removed. +- Cloudflare card must be left untouched by explicit operator request. +- Red badges after migration were primarily caused by Homepage container resolving *.vpn.gram1.ru to edge NetBird IP and timing out; fixed by mapping vpn hostnames to edge LAN [PRIVATE_IP] in Homepage compose extra_hosts. +- Router Moscow monitor uses edge health endpoint http://[PRIVATE_IP]:18091/router-moscow. +- NPMplus monitor uses edge health endpoint http://[PRIVATE_IP]:18091/npmplus. +- Missing-card proposal report: /var/lib/homelab-health/homepage-missing-card-proposals-final.txt. + +## UPTIME_KUMA_MISSING_MONITOR_AND_PROPOSALS_20260702 +- Uptime Kuma lives on monitoring VM [PRIVATE_IP]. +- Added one missing monitor: NPMplus Edge Health -> http://[PRIVATE_IP]:18091/npmplus. +- Uptime Kuma DB backup was created before DB mutation under /root/uptime-kuma-manual-backups/773a-* on monitoring VM. +- DB integrity after insertion was OK. +- Deep monitoring proposal report: /var/lib/homelab-health/uptime-kuma-monitoring-proposals.txt. +- Cloudflare must not be touched by operator request. +- Recommended next monitors are P0 only after operator approval: Router Moscow Health, Backup/Restore Dashboard, Restore Drill Index, NetBird Peers, CrowdSec CAPI, Paperless Restore. + +## UPTIME_KUMA_NPMPLUS_ADMIN_REPAIR_20260702 +- Existing Uptime Kuma monitor "NPMplus Admin" was red because it checked https://[PRIVATE_IP]:81/. +- NPMplus admin is intentionally localhost-bound on edge-vm, so monitoring VM should not check the admin UI directly. +- Fixed monitor target to edge health endpoint: http://[PRIVATE_IP]:18091/npmplus. +- Monitor was repaired, not deleted. +- Cloudflare was not touched. + +## UPTIME_KUMA_APPROVED_MONITOR_BATCH_20260702 +- Approved Uptime Kuma monitor batch installed after Homepage/Kuma analysis. +- Existing NPMplus Admin monitor was repaired to http://[PRIVATE_IP]:18091/npmplus, not deleted. +- Edge health wrapper /usr/local/sbin/router-moscow-health provides safe endpoints on [PRIVATE_IP]:18091 for router-moscow, npmplus, loki, alloy, cadvisor, registry-cache, socket-proxy, diun, kopia and crowdsec. +- Cloudflare was not touched by explicit operator request. +- Uptime Kuma DB backups are under /root/uptime-kuma-manual-backups/773d-approved-batch-* on monitoring VM before the DB mutation. + +## UPTIME_KUMA_PENDING_HEALTH_MONITORS_FIX_20260702 +- Four pending Uptime Kuma keyword monitors were repaired by using local pve01 health endpoint paths instead of public backup.gram1.ru paths: + - Backup Restore Dashboard -> http://[PRIVATE_IP]:9101/backup-restore-dashboard.txt + - Restore Drill Index -> http://[PRIVATE_IP]:9101/restore-drill-index.txt + - Paperless Restore -> http://[PRIVATE_IP]:9101/paperless-restore.txt + - AdGuard Rewrite Sync -> http://[PRIVATE_IP]:9101/adguard-rewrite-sync.txt +- Cloudflare was not touched. +- Monitors were repaired, not deleted. + +## UPTIME_KUMA_FOUR_HEALTH_SOURCES_REPAIRED_20260702 +- Four Uptime Kuma monitors were still unavailable because three health endpoints returned 404 and Paperless Restore had STATUS=ERROR. +- Repaired pve01 health source files under /var/lib/homelab-health: + - backup-restore-dashboard.txt + - restore-drill-index.txt + - paperless-restore.txt + - adguard-rewrite-sync.txt +- Kuma monitors point to local pve01 health endpoints on http://[PRIVATE_IP]:9101/. +- Cloudflare was not touched. +- Monitors were repaired, not deleted. + +## DOCKGE_DISCONNECTED_HOSTS_AND_STALE_STACKS_20260702 +- Dockge is currently present only on edge-vm. +- core-apps and monitoring run Docker containers but have no Dockge/Dockge-agent detected. +REFERENCE_CARD_CONTEXT_END +VM_BEGIN=170 +VM_STATUS=status: running|rc=0 +VM_EXEC_RC=0 +VM_EXEC_RAW_BEGIN +{ + "exitcode" : 0, + "exited" : 1, + "out-data" : "HOST=core-apps\nDOCKER_PS_RC=0\nDOCKER_PS_BEGIN\ndemonov-shadow-8020-shadow-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours (healthy)|127.0.0.1:18020->8020/tcp\ndemonov-shadow-8020-relay-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\ndemonov-shadow-8020-collector-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\ndemonov-shadow-8020-worker-1|8020-demonov-shadow:signalbot-050r6-749073ae0f89|Up 29 hours|\nimmich_machine_learning|ghcr.io/immich-app/immich-machine-learning:v2|Up 2 weeks (healthy)|\ncrypto-portfolio|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|[PRIVATE_IP]:8030->8000/tcp\ncrypto-portfolio-worker|crypto-portfolio:gram-trade-entry-14415368fa52-c1398|Up 3 weeks|\nhbarhub-scheduler-1|hbarhub-scheduler|Up 2 days|8040/tcp\nhbarhub-web-1|hbarhub-web|Up 2 days (healthy)|0.0.0.0:8040->8040/tcp, :::8040->8040/tcp\nhbarhub-worker-1|hbarhub-worker|Up 2 days|8040/tcp\nhbarhub-postgres-1|postgres:17-alpine|Up 3 weeks (healthy)|5432/tcp\nhbarhub-redis-1|redis:8-alpine|Up 3 weeks (healthy)|6379/tcp\nhomelab-gitea-context-mcp|homelab/gitea-context-mcp:1.0.0|Up 3 weeks (healthy)|127.0.0.1:8765->8765/tcp\ngitea|docker.gitea.com/gitea:1.26.2|Up 3 weeks (healthy)|22/tcp, 0.0.0.0:3002->3000/tcp\nauthentik-worker-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|\nauthentik-server-1|ghcr.io/goauthentik/server:2026.5.3|Up 3 weeks (healthy)|0.0.0.0:9000->9000/tcp, 0.0.0.0:9443->9443/tcp\nvaultwarden|vaultwarden/server:1.36.0-alpine|Up 3 weeks (healthy)|0.0.0.0:8083->80/tcp\nhomepage|ghcr.io/gethomepage/homepage:latest|Up 3 weeks (healthy)|0.0.0.0:3000->3000/tcp\nminio|minio/minio:latest|Up 3 weeks|0.0.0.0:9002->9000/tcp, 0.0.0.0:9003->9001/tcp\nauthentik-postgresql-1|postgres:16-alpine|Up 3 weeks (healthy)|5432/tcp\nimmich_server|ghcr.io/immich-app/immich-server:v2|Up 2 days (healthy)|0.0.0.0:2283->2283/tcp\nimmich_postgres|ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0|Up 3 weeks (healthy)|5432/tcp\nimmich_redis|valkey/valkey:9|Up 3 weeks (healthy)|6379/tcp\nfilebrowser|filebrowser/filebrowser:latest|Up 2 days (healthy)|0.0.0.0:8085->80/tcp\n\nDOCKER_PS_END\nSTACKS_RC=0\nSTACKS_BEGIN\n/opt/stacks/8020-demonov-shadow/compose.yaml\n/opt/stacks/authentik/compose.yml\n/opt/stacks/crypto-portfolio/compose.yaml\n/opt/stacks/filebrowser/compose.yaml\n/opt/stacks/gitea/compose.yaml\n/opt/stacks/hbarhub/compose.yaml\n/opt/stacks/homelab-gitea-context-mcp/compose.yaml\n/opt/stacks/homepage/compose.yaml\n/opt/stacks/immich/docker-compose.yml\n/opt/stacks/minio/compose.yaml\n/opt/stacks/vaultwarden-compose/compose.yaml\n\nSTACKS_END\nLISTEN_RC=0\nLISTEN_BEGIN\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=11))\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=20))\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=18))\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=360,fd=13))\ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=19))\ntcp LISTEN 0 4096 127.0.0.1:18020 0.0.0.0:* users:((\"docker-proxy\",pid=2470167,fd=4))\ntcp LISTEN 0 4096 0.0.0.0:2283 0.0.0.0:* users:((\"docker-proxy\",pid=3554366,fd=4))\ntcp LISTEN 0 4096 127.0.0.1:8765 0.0.0.0:* users:((\"docker-proxy\",pid=1321,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3000 0.0.0.0:* users:((\"docker-proxy\",pid=1276,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3002 0.0.0.0:* users:((\"docker-proxy\",pid=1275,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9443 0.0.0.0:* users:((\"docker-proxy\",pid=1379,fd=4)) \ntcp LISTEN 0 4096 127.0.0.1:44453 0.0.0.0:* users:((\"containerd\",pid=716,fd=9)) \ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\"sshd\",pid=706,fd=6)) \ntcp LISTEN 0 5 0.0.0.0:8787 0.0.0.0:* users:((\"python3\",pid=686,fd=3)) \ntcp LISTEN 0 5 0.0.0.0:8788 0.0.0.0:* users:((\"python3\",pid=684,fd=3)) \ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=21))\ntcp LISTEN 0 4096 0.0.0.0:9000 0.0.0.0:* users:((\"docker-proxy\",pid=1397,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9003 0.0.0.0:* users:((\"docker-proxy\",pid=1347,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9002 0.0.0.0:* users:((\"docker-proxy\",pid=1360,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8040 0.0.0.0:* users:((\"docker-proxy\",pid=3558706,fd=4))\ntcp LISTEN 0 4096 0.0.0.0:8083 0.0.0.0:* users:((\"docker-proxy\",pid=1304,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8085 0.0.0.0:* users:((\"docker-proxy\",pid=3551865,fd=4))\ntcp LISTEN 0 4096 [PRIVATE_IP]:8030 0.0.0.0:* users:((\"docker-proxy\",pid=1398,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=360,fd=12))\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\"sshd\",pid=706,fd=7)) \ntcp LISTEN 0 4096 [::]:8040 [::]:* users:((\"docker-proxy\",pid=3558711,fd=4))\ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=360,fd=14))\n\nLISTEN_END\nGUEST569_END\n", + "out-truncated" : 0 +} + +VM_EXEC_RAW_END +VM_END=170 +VM_BEGIN=130 +VM_STATUS=|rc=2 +VM_EXEC_RC=2 +VM_EXEC_ERR=Configuration file 'nodes/pve01/qemu-server/130.conf' does not exist +VM_END=130 +VM_BEGIN=171 +VM_STATUS=status: running|rc=0 +VM_EXEC_RC=0 +VM_EXEC_RAW_BEGIN +{ + "exitcode" : 0, + "exited" : 1, + "out-data" : "HOST=monitoring\nDOCKER_PS_RC=0\nDOCKER_PS_BEGIN\nuptime-kuma|louislam/uptime-kuma:2-slim|Up 2 weeks (healthy)|0.0.0.0:3001->3001/tcp\ngotify|gotify/server:latest|Up 3 weeks (healthy)|0.0.0.0:8082->80/tcp\nblackbox-exporter|prom/blackbox-exporter:latest|Up 3 weeks|0.0.0.0:9115->9115/tcp\ngrafana|grafana/grafana:latest|Up 3 weeks|0.0.0.0:3003->3000/tcp\nnode-exporter|prom/node-exporter:latest|Up 3 weeks|0.0.0.0:9100->9100/tcp\nprometheus|prom/prometheus:latest|Up 3 weeks|0.0.0.0:9090->9090/tcp\nalertmanager|prom/alertmanager:v0.33.0|Up 3 weeks|0.0.0.0:9093->9093/tcp\nntfy|binwiederhier/ntfy:latest|Up 3 weeks|0.0.0.0:8055->80/tcp\nhealthchecks|healthchecks/healthchecks:latest|Up 3 weeks (healthy)|0.0.0.0:8015->8000/tcp\n\nDOCKER_PS_END\nSTACKS_RC=0\nSTACKS_BEGIN\n/opt/stacks/blackbox-exporter/compose.yaml\n/opt/stacks/gotify-compose/compose.yaml\n/opt/stacks/healthchecks/compose.yaml\n/opt/stacks/ntfy/compose.yaml\n/opt/stacks/observability-lite/compose.yaml\n/opt/stacks/uptime-kuma-compose/compose.yaml\n\nSTACKS_END\nLISTEN_RC=0\nLISTEN_BEGIN\nudp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=20))\nudp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=18))\nudp UNCONN 0 0 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=11))\nudp UNCONN 0 0 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=359,fd=13))\ntcp LISTEN 0 4096 0.0.0.0:8015 0.0.0.0:* users:((\"docker-proxy\",pid=1085,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8055 0.0.0.0:* users:((\"docker-proxy\",pid=1060,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:8082 0.0.0.0:* users:((\"docker-proxy\",pid=1035,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3003 0.0.0.0:* users:((\"docker-proxy\",pid=1037,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:* users:((\"docker-proxy\",pid=1574846,fd=4))\ntcp LISTEN 0 4096 127.0.0.1:46219 0.0.0.0:* users:((\"containerd\",pid=717,fd=9)) \ntcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=19))\ntcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=21))\ntcp LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=359,fd=12))\ntcp LISTEN 0 4096 0.0.0.0:9115 0.0.0.0:* users:((\"docker-proxy\",pid=1100,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9100 0.0.0.0:* users:((\"docker-proxy\",pid=1126,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9090 0.0.0.0:* users:((\"docker-proxy\",pid=1193,fd=4)) \ntcp LISTEN 0 4096 0.0.0.0:9093 0.0.0.0:* users:((\"docker-proxy\",pid=1149,fd=4)) \ntcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((\"sshd\",pid=700,fd=6)) \ntcp LISTEN 0 4096 [::]:5355 [::]:* users:((\"systemd-resolve\",pid=359,fd=14))\ntcp LISTEN 0 128 [::]:22 [::]:* users:((\"sshd\",pid=700,fd=7)) \n\nLISTEN_END\nGUEST569_END\n", + "out-truncated" : 0 +} + +VM_EXEC_RAW_END +VM_END=171 +HOME569R1_DECISION=CARD_GAP_CLASSIFICATION_EVIDENCE_COLLECTED +HOME569R1_NEXT_GATE=APPLY_MINIMAL_CARD_SET_CHANGES +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260919-HOME-GRAM1-CARD-GAP-CLASSIFY-READONLY-569R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END