1
0
Files
homelab-public-context/runtime/latest.json
T
2026-09-18 22:22:14 +00:00

39 lines
50 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SUPPORT-260919-HOME-GRAM1-DISCOVERY-READONLY-567R1",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "home-gram1-discovery-readonly",
"started_at_utc": "2026-09-18T22:22:12Z",
"finished_at_utc": "2026-09-18T22:22:13Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "50e02bced33c549e5473026463c35e1de9e413b719a87fbbce99e44832b530ac",
"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": "50f1d3e3dcea8e65319a11fe2d0fece11ac11c4b4d31c4f246f93494e14ef553",
"sanitized_output_sha256": "a6dac104ea7d4cdbb25fcaf364a52d293dfded215899597298e94e11cbab79a8",
"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\nREFERENCE_HOME_MATCH_COUNT=123\nREFERENCE_HOME_MATCH=50:- Homepage/Prometheus retired references absent; Uptime Kuma orphan extra_hosts removed.\nREFERENCE_HOME_MATCH=82:HEALTH_NOT_OK item=backup-restore-dashboard.txt line=STATUS=WARN TS=2026-06-29T18:10:09Z ITEMS=80 NOT_OK=13\nREFERENCE_HOME_MATCH=89:HEALTH_NOT_OK item=homepage-service-catalog-slo.txt line=STATUS=WARN\nREFERENCE_HOME_MATCH=153:- Проверить backup-restore-dashboard: STATUS=WARN, NOT_OK=13.\nREFERENCE_HOME_MATCH=192:## FINAL_DASHBOARD_RUNTIME_OK_20260630\nREFERENCE_HOME_MATCH=194:- Runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\nREFERENCE_HOME_MATCH=196:- SLO/coverage WARN files: moved out of runtime dashboard into slo-coverage-backlog-index.txt.\nREFERENCE_HOME_MATCH=198:- Final proof: 103_FINAL_ALL_GREEN_DASHBOARD_PROOF.txt.\nREFERENCE_HOME_MATCH=395:- edge-vm owns most application health, dashboard, ingress, backup, NetBox, NPMplus, certificate, Trivy and vulnerability jobs.\nREFERENCE_HOME_MATCH=455:- edge-vm timers cover runtime dashboard, Paperless guard, external canary, health metrics, restore drill index, AdGuard rewrite sync, NPMplus cert expiry, NetBox backup/sync, retention, cluster daily status, vulnerability and Trivy scans, ingress hardening and NPMplus admin bind.\nREFERENCE_HOME_MATCH=704:- home.gram1.ru -> http://127.0.0.1:3000, cert=27, ssl_forced=1, enabled=1.\nREFERENCE_HOME_MATCH=715:- homepage.vpn.gram1.ru -> http://127.0.0.1:3000, cert=32.\nREFERENCE_HOME_MATCH=753:- cert=27: home.gram1.ru, expires 2026-09-13 16:43:44.\nREFERENCE_HOME_MATCH=799:- homepage.\nREFERENCE_HOME_MATCH=831:- Admin/dashboard: homepage, dockge, netbox, dozzle, NPMplus VPN admin.\nREFERENCE_HOME_MATCH=834:- Homepage: 127.0.0.1:3000.\nREFERENCE_HOME_MATCH=885:- Backup health dashboard: STATUS=OK, ITEMS=69, NOT_OK=0 at 2026-06-30T10:10:06Z.\nREFERENCE_HOME_MATCH=887:- SLO coverage is tracked separately from runtime dashboard. It had WARN backlog in backup-restore-coverage-slo with APP_TOTAL=43, GREEN=3, YELLOW=21, RED=19, MISSING_BACKUP_SIGNAL=31, MISSING_RESTORE_SIGNAL=28, MISSING_TIMER=31.\nREFERENCE_HOME_MATCH=1107:### Runtime dashboard semantics\nREFERENCE_HOME_MATCH=1108:- backup-restore-dashboard.txt is an authoritative runtime dashboard file.\nREFERENCE_HOME_MATCH=1109:- Current observed runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\nREFERENCE_HOME_MATCH=1110:- backup-restore-dashboard.json confirmed not_ok=[].\nREFERENCE_HOME_MATCH=1118:- Uptime Kuma local endpoint returns HTTP 302 to /dashboard, which is expected for UI auth/redirect.\nREFERENCE_HOME_MATCH=1130:- Runtime dashboard OK does not mean SLO backlog is closed.\nREFERENCE_HOME_MATCH=1133:- Other observed WARN backlog files include container-image-lifecycle-slo, cron-job-monitoring-slo, direct-heartbeat-pilot-readiness, healthchecks-heartbeat-coverage, healthchecks-job-coverage, healthchecks-job-monitoring-slo, homepage-service-catalog-slo, ingress-dns-route-slo, observability-health-surface-slo and security-vulnerability-slo.\nREFERENCE_HOME_MATCH=1370:| home.gram1.ru | http://127.0.0.1:3000 | edge-vm / homepage | homepage container, dashboard route |\nREFERENCE_HOME_MATCH=1377:| backup.gram1.ru | http://[PRIVATE_IP]:9101 | pve01 / homelab-health-http | backup dashboard and health proofs |\nREFERENCE_HOME_MATCH=1383:| homepage.vpn.gram1.ru | http://127.0.0.1:3000 | homepage |\nREFERENCE_HOME_MATCH=1517:### Backup dashboard / SLO interpretation\nREFERENCE_HOME_MATCH=1518:- Runtime dashboard OK means current operational checks are green.\nREFERENCE_HOME_MATCH=1571:- Monitoring, alerting, health dashboard and Prometheus correction.\nREFERENCE_HOME_MATCH=1643:- Backup/cloud/restore improvement pass is closed with runtime dashboard STATUS=OK and NOT_OK=0.\nREFERENCE_HOME_MATCH=1668:- Runtime backup dashboard remains STATUS=OK with NOT_OK=0.\nREFERENCE_HOME_MATCH=1706:- edge-vm units checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\nREFERENCE_HOME_MATCH=1736:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\nREFERENCE_HOME_MATCH=1754:- edge-vm timers checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\nREFERENCE_HOME_MATCH=1830:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\nREFERENCE_HOME_MATCH=1900:- Also verify service results, health status/age, Mail-cloud directories, dashboard, restore index, Prometheus firing alerts and Alertmanager readiness.\nREFERENCE_HOME_MATCH=1920:- Home portal discovery started for https://home.gram1.ru/.\nREFERENCE_HOME_MATCH=1922:- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\nREFERENCE_HOME_MATCH=1926:- Home portal config and service inventory was collected for https://home.gram1.ru/.\nREFERENCE_HOME_MATCH=1931:- Home portal gap analysis was collected for gethomepage/homepage behind npmplus.\nREFERENCE_HOME_MATCH=1932:- Proof records Homepage config hashes, redacted current cards/bookmarks, current URLs, npmplus route lines, local web-port probes and known service container candidates.\nREFERENCE_HOME_MATCH=1940:- Home portal card/API-error analysis was collected before editing Homepage.\nREFERENCE_HOME_MATCH=1941:- Proof records current card URLs/titles, redacted widget config, redacted Homepage log errors, NPMPlus internal route files/routes and candidate public/VPN cards.\nREFERENCE_HOME_MATCH=1950:- Homepage services.yaml was backed up, duplicate VPN cards were removed where a non-VPN card existed, and missing web cards for NetBird, Mail and Webmail were added without VPN suffix in the card names.\nREFERENCE_HOME_MATCH=1952:- Homepage container was restarted and portal/card URLs were checked.\nREFERENCE_HOME_MATCH=1961:- Corrected Homepage apply removed duplicate VPN cards where a non-VPN card existed and added NetBird, Mail and Webmail cards with non-VPN names.\nREFERENCE_HOME_MATCH=1984:- Proof checks portal HTTP status, Homepage container state, required cards, duplicate VPN card pairs, current card URLs, redacted API-error logs and widget configuration.\nREFERENCE_HOME_MATCH=1993:- Homepage API error root-cause analysis was collected after the UI showed API errors.\nREFERENCE_HOME_MATCH=1994:- Current evidence points to the Open-Meteo/weather widget timing out from Homepage, separate from service cards.\nREFERENCE_HOME_MATCH=1995:- HTTP 200 for the portal is not sufficient for UI closure when Homepage logs still contain API errors.\nREFERENCE_HOME_MATCH=2004:- Open-Meteo/weather widget was disabled after root-cause analysis showed Homepage API errors from api.open-meteo.com timeouts.\nREFERENCE_HOME_MATCH=2006:- Portal closure now requires current Homepage API-error logs to be zero after restart/reload.\nREFERENCE_HOME_MATCH=2016:- Audit extracts current Homepage href URLs and checks whether each opens with an acceptable HTTP status.\nREFERENCE_HOME_MATCH=2026:- Explicit VPN duplicate cards were removed from Homepage with a short transparent perl edit: Homepage VPN, Authentik VPN, Gitea VPN and Uptime Kuma VPN.\nREFERENCE_HOME_MATCH=2031:- Remaining Homepage duplicate/VPN/router occurrences were inspected after corrected cleanup still reported REVIEW.\nREFERENCE_HOME_MATCH=2036:- Homepage duplicate cleanup was rechecked against active config files only, excluding logs and backup files.\nREFERENCE_HOME_MATCH=2041:- Active Homepage services/bookmarks files were cleaned from semantic VPN duplicate cards and old router URL references.\nREFERENCE_HOME_MATCH=2042:- Removed targets: Homepage VPN, Authentik VPN, Gitea VPN and Uptime Kuma VPN, plus matching vpn.gram1.ru duplicate URLs.\nREFERENCE_HOME_MATCH=2047:- Analysis checks URL body fingerprints, NPMPlus route config matches, service container candidates and Homepage card lines.\nREFERENCE_HOME_MATCH=2051:- Active Homepage URL: https://home.gram1.ru.\nREFERENCE_HOME_MATCH=2052:- Homepage container is running and portal HTTP check returned 200 after latest changes.\nREFERENCE_HOME_MATCH=2057:- Homepage services.yaml was updated via YAML-aware edit for siteMonitor fields.\nREFERENCE_HOME_MATCH=2059:- Latest validation before this reference update: YAML_ERRORS_LAST_5M=0, HOME_HTTP_CODE=200, HOMEPAGE_RUNNING=true.\nREFERENCE_HOME_MATCH=2064:- Direct Homepage link correction requested by operator.\nREFERENCE_HOME_MATCH=2073:- Excluded cards: Homepage, NPMplus, Router and Public Domain.\nREFERENCE_HOME_MATCH=2075:- Homepage restarted successfully and reported YAML_ERRORS=0.\nREFERENCE_HOME_MATCH=2080:- First next action: finish Homepage final validation.\nREFERENCE_HOME_MATCH=2082:## HOMEPAGE_BACKUP_GAP_CLASSIFICATION_20260630\nREFERENCE_HOME_MATCH=2083:- Homepage backup coverage gap classification file created at /etc/pve/HOMEPAGE_BACKUP_GAP_CLASSIFICATION.md.\nREFERENCE_HOME_MATCH=2084:- It defines closure requirements for the 13 remaining Homepage backup coverage gap/special-review rows.\nREFERENCE_HOME_MATCH=2087:## HOMEPAGE_EXISTING_BACKUP_EVIDENCE_CLOSURE_20260630\nREFERENCE_HOME_MATCH=2088:- Homepage backup coverage matrix started closing existing-evidence rows.\nREFERENCE_HOME_MATCH=2091:- Proof: 364_HOMEPAGE_EXISTING_BACKUP_EVIDENCE_CLOSURE_PROOF.txt.\nREFERENCE_HOME_MATCH=2094:- Homepage External group includes Cloudflare card: https://dash.cloudflare.com.\nREFERENCE_HOME_MATCH=2095:- Homepage External group includes AlexHost Billing card: https://bill.alexhost.com/.\nREFERENCE_HOME_MATCH=2097:- YAML validation passed, Homepage returned HTTP 200, container running, and no Homepage YAML errors were seen after restart.\nREFERENCE_HOME_MATCH=2101:- Homepage External card/link for relay.pvepro.ru was removed because relay.pvepro.ru had DNS but no reachable HTTP/HTTPS endpoint from edge-vm.\nREFERENCE_HOME_MATCH=2106:- Homepage Moscow Router red-dot fix requires router ACL/Web UI/admin-level change, not routerbackup.\nREFERENCE_HOME_MATCH=2114:- Homepage External NetBird and AlexHost Billing href/siteMonitor URLs normalized with trailing slash.\nREFERENCE_HOME_MATCH=2115:- Homepage container node checks returned HTTP 200 for both URLs.\nREFERENCE_HOME_MATCH=2120:- Remaining blocker for Homepage green dot is HTTP/HTTPS 403 from router web service to edge-vm/Bridge1, not network reachability.\nREFERENCE_HOME_MATCH=2124:- Moscow Router Homepage card href: http://[PRIVATE_IP]:5080.\nREFERENCE_HOME_MATCH=2125:- Moscow Router Homepage siteMonitor: http://[PRIVATE_IP]:18083/router-moscow.\nREFERENCE_HOME_MATCH=2131:- Moscow Router Homepage card target after fixed apply: href http://[PRIVATE_IP]:5080, siteMonitor http://[PRIVATE_IP]:18083/router-moscow.\nREFERENCE_HOME_MATCH=2132:- Fixed updater handles Homepage service-name-key YAML shape and property-style YAML shape.\nREFERENCE_HOME_MATCH=2136:- Moscow Router Homepage card exact active YAML shape was service-key style.\nREFERENCE_HOME_MATCH=2567:## HOMEPAGE_EXTERNAL_SMARTAPE_AND_SITES_OK_20260702\nREFERENCE_HOME_MATCH=2568:- Homepage services.yaml repaired with YAML-aware edit after bad indentation issue.\nREFERENCE_HOME_MATCH=2572:- Proof: /root/evidence/671_HOMEPAGE_EXTERNAL_SMARTAPE_AND_SITES_OK_20260702_PROOF.txt\nREFERENCE_HOME_MATCH=2589:- Removed obsolete NPMplus route aliases without Homepage cards: auth.vpn.gram1.ru, gitea.vpn.gram1.ru, homepage.vpn.gram1.ru, kuma.vpn.gram1.ru.\nREFERENCE_HOME_MATCH=2593:## HOMELAB_HOMEPAGE_AND_TAFTAUTO_FINAL_OK_20260702\nREFERENCE_HOME_MATCH=2594:- Homepage final layout/category state confirmed: YAML validates, categories use row/columns layout, logs show no YAMLException.\nREFERENCE_HOME_MATCH=2599:- Proof: /root/evidence/677_HOMELAB_HOMEPAGE_AND_TAFTAUTO_FINAL_OK_20260702_PROOF.txt\nREFERENCE_HOME_MATCH=2614:- 677 is current final Homepage/TaftAuto authority; 678 is current Cloudflare token audit authority.\nREFERENCE_HOME_MATCH=2617:## HOMEPAGE_LOCAL_HEALTH_MONITORS_OK_20260702\nREFERENCE_HOME_MATCH=2618:- Local edge health endpoint is used for Homepage monitoring of Роутер Москва and NPMplus.\nREFERENCE_HOME_MATCH=2621:- Homepage YAML validates and logs show no YAMLException.\nREFERENCE_HOME_MATCH=2622:- Proof: /root/evidence/681_HOMEPAGE_LOCAL_HEALTH_MONITORS_OK_20260702_PROOF.txt\nREFERENCE_HOME_MATCH=2624:## HOMEPAGE_SELF_CARD_REMOVED_FROM_CORE_20260702\nREFERENCE_HOME_MATCH=2625:- Removed Homepage self-referential card from Core.\nREFERENCE_HOME_MATCH=2626:- Homepage YAML validates and logs show no YAMLException.\nREFERENCE_HOME_MATCH=2627:- Proof: /root/evidence/682_HOMEPAGE_SELF_CARD_REMOVED_FROM_CORE_20260702_PROOF.txt\nREFERENCE_HOME_MATCH=2664:- TaftAuto, Homepage, Cloudflare tokens, evidence map, cert hooks, deploy guards, public HTTPS, route/cert mapping, and secret scan are documented.\nREFERENCE_HOME_MATCH=2679:## HOMEPAGE_RU_LAYOUT_MONITORING_PROPOSALS_20260702\nREFERENCE_HOME_MATCH=2680:- Homepage live config is on core-apps VM [PRIVATE_IP] under /opt/stacks/homepage/config.\nREFERENCE_HOME_MATCH=2685:- 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.\nREFERENCE_HOME_MATCH=2688:- Missing-card proposal report: /var/lib/homelab-health/homepage-missing-card-proposals-final.txt.\nREFERENCE_HOME_MATCH=2697:- Recommended next monitors are P0 only after operator approval: Router Moscow Health, Backup/Restore Dashboard, Restore Drill Index, NetBird Peers, CrowdSec CAPI, Paperless Restore.\nREFERENCE_HOME_MATCH=2707:- Approved Uptime Kuma monitor batch installed after Homepage/Kuma analysis.\nREFERENCE_HOME_MATCH=2715: - Backup Restore Dashboard -> http://[PRIVATE_IP]:9101/backup-restore-dashboard.txt\nREFERENCE_HOME_MATCH=2725: - backup-restore-dashboard.txt\nREFERENCE_HOME_MATCH=2766:- Per-service done criteria: URL, TLS, admin, SSO decision, volumes, backup, restore test, Kuma, Homepage, docs.\nREFERENCE_HOME_MATCH=2984:Homepage canonical=https://kingofwolk.ru/\nREFERENCE_HOME_MATCH=2986:Legacy homepage forum links with index.php? absent.\nREFERENCE_HOME_MATCH=2989:robots.txt intentionally absent; XenForo returns HTTP 404 and page indexing is not blocked. Homepage has no noindex meta/X-Robots-Tag.\nREFERENCE_HOME_MATCH=3045:Style2 extra.less hides only the homepage forum_list H1 via body[data-template=\"forum_list\"] .p-title-value { display:none; }.\nREFERENCE_HOME_MATCH=3058:Header wordmark centered through style2 extra.less. Duplicate homepage H1 hidden only for body[data-template=\"forum_list\"]; forum_view H1 remains visible.\nREFERENCE_HOME_MATCH=3059:Public no-cookie homepage and forum HTTP 200 with style s=2; sitemap HTTP 200 with 11 loc entries; private 192.168.50.x leak absent.\nREFERENCE_HOME_MATCH=3082:Public homepage HTTP 200 verifies both xenforo.info attribution and the KingOfWolk line, with KingOfWolk appearing after the localization entry.\nREFERENCE_HOME_MATCH=3093:Public PNG returns HTTP 200 with image/png and exact expected SHA256. Public homepage remains HTTP 200 with no 192.168.50.x leak.\nREFERENCE_HOME_MATCH=3168:## KINGOFWOLK_ADMIN_DASHBOARD_WARNINGS_CLEARED_20260903\nERRORREG_HOME_MATCH_COUNT=40\nERRORREG_HOME_MATCH=109:Команда 138 пересобрала dashboard, но диагностический Python-блок упал с NameError из-за кавычек.\nERRORREG_HOME_MATCH=110:Не использовать heredoc Python внутри вложенного ssh; для dashboard verification использовать cat/grep JSON или простые команды.\nERRORREG_HOME_MATCH=194:- Rule: home portal closure requires current Homepage API-error logs to be zero after restart/reload, not only HTTP 200.\nERRORREG_HOME_MATCH=195:- If Homepage UI shows API error or logs contain current httpProxy/API timeout errors, the portal is REVIEW until the widget/API cause is disabled or fixed.\nERRORREG_HOME_MATCH=204:- Rule: Homepage cleanup validation must check active config files only, not logs or backup files.\nERRORREG_HOME_MATCH=205:- Active files are services.yaml, bookmarks.yaml, widgets.yaml, settings.yaml and docker.yaml under /opt/stacks/homepage/config.\nERRORREG_HOME_MATCH=209:- Rule: Homepage link validation must not treat HTTP 200 as success if the body is the NPMPlus default “Congratulations” / host-not-set-up page.\nERRORREG_HOME_MATCH=214:- Context: attempted Netcraze router ACL apply through SSH stdin/multiline for Homepage Moscow Router monitor fix.\nERRORREG_HOME_MATCH=242:- Context: proof 400 tested Moscow router HTTPS monitor from Homepage container with custom Node lookup callback.\nERRORREG_HOME_MATCH=248:- Context: Moscow Router Homepage monitor after ACL fix.\nERRORREG_HOME_MATCH=251:- Impact: Homepage siteMonitor cannot be made green via direct router HTTP URL until router web service allows the Bridge1/Proxmox/protected segment or an explicit safe monitor endpoint is used.\nERRORREG_HOME_MATCH=262:- Context: Moscow Router Homepage siteMonitor attempt using http://[PRIVATE_IP]:5080.\nERRORREG_HOME_MATCH=263:- Evidence: proof 405 showed route to [PRIVATE_IP] via Docker bridge and Homepage container ECONNRESET.\nERRORREG_HOME_MATCH=264:- Impact: do not use [PRIVATE_IP] directly as Homepage siteMonitor from edge-vm.\nERRORREG_HOME_MATCH=265:- Mitigation: use dedicated edge-vm health endpoint that checks router TCP [PRIVATE_IP]:5080 and returns HTTP 200/503 for Homepage.\nERRORREG_HOME_MATCH=267:## HOMEPAGE_ROUTER_MOSCOW_YAML_TITLE_SHAPE_MISMATCH_20260701\nERRORREG_HOME_MATCH=268:- Context: applying Moscow Router Homepage siteMonitor health endpoint.\nERRORREG_HOME_MATCH=269:- Mistake: assistant apply script matched only property-style cards with `title`, but active Homepage YAML can use service-name-key style like `- Service Name:`.\nERRORREG_HOME_MATCH=273:## HOMEPAGE_ROUTER_MOSCOW_APPLY_SCRIPT_SYNTAX_ERROR_20260701\nERRORREG_HOME_MATCH=274:- Context: applying Moscow Router Homepage health endpoint.\nERRORREG_HOME_MATCH=276:- Evidence: proof 408 showed SyntaxError in /tmp/homepage-router-moscow-apply-fixed.py.\nERRORREG_HOME_MATCH=277:- Actual impact: YAML was not changed, so Homepage green dot could not appear.\nERRORREG_HOME_MATCH=624:## HOMEPAGE_SERVICES_YAML_BAD_INDENT_20260702\nERRORREG_HOME_MATCH=625:- Assistant inserted Homepage services.yaml entries with wrong indentation; YAMLException bad indentation at line 227.\nERRORREG_HOME_MATCH=628:## HOMEPAGE_SERVICES_YAML_BAD_INDENT_REPAIR_20260702\nERRORREG_HOME_MATCH=643:## HOMEPAGE_XENFORO_INFO_INLINE_PYTHON_SYNTAX_ERROR_20260702\nERRORREG_HOME_MATCH=644:- Assistant used invalid inline Python syntax with def after semicolon while adding XenForo.info to Homepage External.\nERRORREG_HOME_MATCH=647:## HOMEPAGE_USEFUL_ROUTER_NAME_MISMATCH_20260702\nERRORREG_HOME_MATCH=648:- Previous apply looked for Russian Router card name, but active Homepage Useful group contains Router and Public Domain.\nERRORREG_HOME_MATCH=651:## HOMEPAGE_USEFUL_ROUTER_CARD_NOT_FOUND_20260702\nERRORREG_HOME_MATCH=653:- Need verify active Homepage config path, docker mount, and any alternate services.yaml before next apply.\nERRORREG_HOME_MATCH=668:## LESSON_20260702_HOMEPAGE_MONITORS_REPAIR_NOT_DELETE\nERRORREG_HOME_MATCH=669:- Do not delete or disable Homepage siteMonitor fields to hide red badges.\nERRORREG_HOME_MATCH=671:- Do not touch Cloudflare Homepage card when operator says it is green and opens correctly.\nERRORREG_HOME_MATCH=672:- Before changing Homepage, identify the live config host; in this state live Homepage is on core-apps [PRIVATE_IP], not edge-vm.\nERRORREG_HOME_MATCH=2544:## KOW_ADMIN_DASHBOARD_WARNINGS_POST_FINAL_20260903\nERRORREG_HOME_MATCH=2546:Scope: KingOfWolk XenForo admin dashboard after technical-final checkpoint.\nERRORREG_HOME_MATCH=2547:Observed: admin dashboard reports potentially outdated templates and existing server error-log entries.\nERRORREG_HOME_MATCH=2575:## KOW_ADMIN_DASHBOARD_WARNINGS_POST_FINAL_20260903_CLOSURE\nERRORREG_HOME_MATCH=2577:Current xf_error_log is empty, so the server-error dashboard warning has no live entries.\nDNS_GETENT_RC=0\nDNS_GETENT_BEGIN\n[PRIVATE_IP] STREAM home.gram1.ru\n[PRIVATE_IP] DGRAM \n[PRIVATE_IP] RAW \nDNS_GETENT_END\nDNS_DIG_A_RC=0\nDNS_DIG_A_BEGIN\n[PRIVATE_IP]\nDNS_DIG_A_END\nDNS_DIG_CNAME_RC=0\nHTTPS_HEADERS_RC=0\nHTTPS_HEADERS_BEGIN\nHTTP/2 200 \ndate: Fri, 18 Sep 2026 22:22:12 GMT\ncontent-type: text/html; charset=utf-8\ncontent-length: 70393\nvary: Accept-Encoding\ncache-control: s-maxage=31536000\netag: \"6etjfbh43j1bgc\"\nvary: Accept-Encoding\norigin-agent-cluster: ?1\nx-dns-prefetch-control: off\nx-content-type-options: nosniff\nx-permitted-cross-domain-policies: none\nreferrer-policy: strict-origin-when-cross-origin\nx-frame-options: SAMEORIGIN\n\nHTTPS_HEADERS_END\nHTTPS_STATUS_RC=0\nHTTPS_STATUS_BEGIN\nHTTP=200 IP=[PRIVATE_IP] TLS=20 REDIR=\nHTTPS_STATUS_END\nHTTPS_BODY_RC=0\nHTTPS_BODY_SAMPLE_BEGIN\n<!DOCTYPE html><html lang=\"en\"><head><meta charSet=\"utf-8\" data-next-head=\"\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\" data-next-head=\"\"/><title data-next-head=\"\">Homelab</title><meta name=\"description\" content=\"A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.\" data-next-head=\"\"/><link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon.png?v=4\" data-next-head=\"\"/><link rel=\"shortcut icon\" href=\"/homepage.ico\" data-next-head=\"\"/><link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/favicon-32x32.png?v=4\" data-next-head=\"\"/><link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/favicon-16x16.png?v=4\" data-next-head=\"\"/><link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=4\" color=\"#1e9cd7\" data-next-head=\"\"/><meta name=\"msapplication-TileColor\" content=\"#1e293b\" data-next-head=\"\"/><meta name=\"theme-color\" content=\"#1e293b\" data-next-head=\"\"/><meta name=\"color-scheme\" content=\"dark light\" data-next-head=\"\"/><meta name=\"mobile-web-app-capable\" content=\"yes\"/><link rel=\"manifest\" href=\"/site.webmanifest?v=4\" crossorigin=\"use-credentials\"/><link rel=\"preload\" href=\"/api/config/custom.css\" as=\"style\"/><link data-next-font=\"\" rel=\"preconnect\" href=\"/\" crossorigin=\"anonymous\"/><link rel=\"preload\" href=\"/_next/static/css/e4faaa8089dcb222.css\" as=\"style\"/><link rel=\"stylesheet\" href=\"/api/config/custom.css\"/> <!-- --><link rel=\"stylesheet\" href=\"/_next/static/css/e4faaa8089dcb222.css\" data-n-g=\"\"/><noscript data-n-css=\"\"></noscript><script defer=\"\" noModule=\"\" src=\"/_next/static/chunks/polyfills-42372ed130431b0a.js\"></script><script defer=\"\" src=\"/_next/static/chunks/1442.35f044d5ef517779.js\"></script><script src=\"/_next/static/chunks/webpack-e2b640019ecb8b02.js\" defer=\"\"></script><script src=\"/_next/static/chunks/framework-822448c3a836f0f5.js\" defer=\"\"></script><script src=\"/_next/static/chunks/main-b5e936807838a5d0.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages/_app-24c2b3b505e9562c.js\" defer=\"\"></script><script src=\"/_next/static/chunks/d5a1cbc3-95845e5c5cc8b673.js\" defer=\"\"></script><script src=\"/_next/static/chunks/2945be7e-9327ce2403991fa0.js\" defer=\"\"></script><script src=\"/_next/static/chunks/2724c893-285efe8c5ac0788d.js\" defer=\"\"></script><script src=\"/_next/static/chunks/b5933508-4fe1e6c387f52be1.js\" defer=\"\"></script><script src=\"/_next/static/chunks/989af13b-ee76f12c33b662f0.js\" defer=\"\"></script><script src=\"/_next/static/chunks/3fcf0381-f70668124b7127a3.js\" defer=\"\"></script><script src=\"/_next/static/chunks/7405-84db82367d92a634.js\" defer=\"\"></script><script src=\"/_next/static/chunks/pages/index-a5941d91a7f6e37f.js\" defer=\"\"></script><script src=\"/_next/static/IkxHGQaChqSk-YL8dZrUE/_buildManifest.js\" defer=\"\"></script><script src=\"/_next/static/IkxHGQaChqSk-YL8dZrUE/_ssgManifest.js\" defer=\"\"></script></head><body><div id=\"__next\"><div id=\"page_wrapper\" class=\"relative h-full\"><div id=\"inner_wrapper\" tabindex=\"-1\" class=\"w-full h-full overflow-auto\"><div class=\"container relative m-auto flex flex-col justify-start z-10 h-full min-h-screen\"><div class=\"relative z-40 ease-in-out duration-300 transition-opacity hidden opacity-0\" role=\"dialog\" aria-modal=\"true\"><div class=\"fixed inset-0 bg-gray-500 opacity-50\"></div><div class=\"fixed inset-0 z-20 overflow-y-auto\"><div class=\"flex min-h-full min-w-full items-start justify-center text-center\"><dialog class=\"mt-[10%] mx-auto min-w-[90%] max-w-[90%] md:min-w-[40%] md:max-w-[40%] rounded-md p-0 block font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-50 dark:bg-theme-800\"><input placeholder=\"Search\" class=\"rounded-md w-full p-4 m-0 border-0 border-b border-slate-700 focus:border-slate-700 focus:outline-0 focus:ring-0 text-sm md:text-xl text-theme-700 dark:text-theme-200 bg-theme-60 dark:bg-theme-800\" type=\"text\" autoCorrect=\"false\" value=\"\"/></dialog></div></div></div><div id=\"information-widgets\" class=\"flex flex-row flex-wrap justify-between z-20 m-5 mb-0 sm:m-9 sm:mb-1 border-b-2 pb-4 border-theme-800 dark:border-theme-200/50\"><div id=\"widgets-wrap\" class=\"flex flex-row w-full flex-wrap justify-between gap-x-2\"><div id=\"information-widgets-right\" class=\"m-auto flex flex-wrap grow sm:basis-auto justify-between md:justify-end m-auto flex flex-wrap grow sm:basis-auto justify-between md:justify-end gap-x-2\"><div class=\"flex flex-col justify-center information-widget-datetime widget-container\"><div class=\"flex flex-row items-center grow justify-end\"><span class=\"text-theme-800 dark:text-theme-200 tabular-nums text-xl\"></span></div></div></div></div></div><div></div><div id=\"footer\" class=\"flex flex-col mt-auto p-8 w-full\"><div id=\"style\" class=\"flex w-full justify-end\"><div id=\"revalidate\" class=\"rounded-full flex align-middle self-center mr-3\"><svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 24 24\" class=\"text-theme-800 dark:text-theme-200 w-6 h-6 cursor-pointer\" height=\"1em\" width=\"1em\" xmlns=\"http://www.w3.org/2000/svg\"><path fill=\"none\" d=\"M0 0h24v24H0z\"></path><path d=\"M17.65 6.35A7.958 7.958 0 0 0 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08A5.99 5.99 0 0 1 12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"></path></svg></div></div><div id=\"version\" class=\"flex mt-4 w-full justify-end\"></div></div></div></div></div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"initialSettings\":{\"title\":\"Homelab\",\"language\":\"ru\",\"theme\":\"dark\",\"color\":\"slate\",\"headerStyle\":\"boxed\",\"statusStyle\":\"dot\",\"hideVersion\":true,\"useEqualHeights\":true,\"layout\":{\"Сайты\":{\"style\":\"row\",\"columns\":6},\"Ядро\":{\"style\":\"row\",\"columns\":6},\"Мониторинг\":{\"style\":\"row\",\"columns\":6},\"Администрирование\":{\"style\":\"row\",\"columns\":6},\"Приложения\":{\"style\":\"row\",\"columns\":6},\"Файлы, медиа и синхронизация\nHTTPS_BODY_SAMPLE_END\nPVE_HOME_GREP_RC=0\nPVE_HOME_GREP_BEGIN\n/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md.bak-corrected-20260630T185336Z:9:| Homepage | https://home.gram1.ru | 190 | 4 | 92 | EVIDENCE_FOUND_REVIEW |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:444:## 47. homepage\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:447:STATUS=OK TS=2026-07-09T20:55:37Z TYPE=service-readiness-final BAD=0 SERVICE=homepage HOMEPAGE=OK NPMPLUS=OK KUMA=OK HEALTH=OK PUBLIC=OK BACKUP=OK OFFHOST=OK RESTORE=OK BACKUP_SLA=OK ALERTING=OK URL=https://home.gram1.ru STATE=container:running/healthy,config:backed-by-dockge-stacks\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:451:- Public `https://home.gram1.ru/ = 200`.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:456:- `/var/lib/homelab-health/homepage-final-status.txt` OK.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:540:STATUS=OK TS=2026-07-09T20:58:13Z TYPE=external-homepage-link-classification BAD=0 TARGET=https://aleisaevn.netcraze.pro:5083/ HOST=aleisaevn.netcraze.pro PORT=5083 HOMEPAGE_LINK=YES NPMPLUS_ROUTE=absent LOCAL_SERVICE=absent BACKUP_SCOPE=not_applicable SERVICE_READINESS_SCOPE=external_link_not_homelab_managed PUBLIC_CODE=000 TCP_RC=124 NOTE=tracked_as_external_reference_not_counted_as_internal_service\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:738:homepage\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4450: - роль: live Homepage container `homepage`, большинство app services.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4521:- Container: `homepage`.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4523: - `/opt/stacks/homepage/config/services.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4524: - `/opt/stacks/homepage/config/settings.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4525: - `/opt/stacks/homepage/config/bookmarks.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4527: - `/opt/stacks/homepage/compose.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4576:- `home.gram1.ru`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4577:- `homepage.vpn.gram1.ru`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:4661:- `/var/lib/homelab-health/backup-restore-dashboard.txt` -> `STATUS=OK`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:5699:- Grafana для dashboards;\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:5963:5. backup dashboards.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6524: - `https://home.gram1.ru`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6526: - `homepage`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6528: - `/opt/stacks/homepage/config/services.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6529: - `/opt/stacks/homepage/config/settings.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6530: - `/opt/stacks/homepage/config/bookmarks.yaml`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6720:| External | Cloudflare | https://dash.cloudflare.com | external | Cloudflare dashboard |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6908:- line 1459: `### Backup dashboard / SLO interpretation`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6956:### edge/npmplus/homepage\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6967:- line 1049: `### Runtime dashboard semantics`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:6971:- line 1459: `### Backup dashboard / SLO interpretation`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7230:| 1049 | `### Runtime dashboard semantics` |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7278:| 1459 | `### Backup dashboard / SLO interpretation` |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7541:- `https://home.gram1.ru`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7542:- `https://home.gram1.ru/`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7595:- `/opt/stacks/homepage/config.`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:7659:- `/tmp/homepage-router-moscow-apply-fixed.py.`\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8030:HEALTH_NOT_OK item=backup-restore-dashboard.txt line=STATUS=WARN TS=2026-06-29T18:10:09Z ITEMS=80 NOT_OK=13\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8037:HEALTH_NOT_OK item=homepage-service-catalog-slo.txt line=STATUS=WARN\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8101:- Проверить backup-restore-dashboard: STATUS=WARN, NOT_OK=13.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8142:- Runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8144:- SLO/coverage WARN files: moved out of runtime dashboard into slo-coverage-backlog-index.txt.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8343:- edge-vm owns most application health, dashboard, ingress, backup, NetBox, NPMplus, certificate, Trivy and vulnerability jobs.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8403:- edge-vm timers cover runtime dashboard, Paperless guard, external canary, health metrics, restore drill index, AdGuard rewrite sync, NPMplus cert expiry, NetBox backup/sync, retention, cluster daily status, vulnerability and Trivy scans, ingress hardening and NPMplus admin bind.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8652:- home.gram1.ru -> http://127.0.0.1:3000, cert=27, ssl_forced=1, enabled=1.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8663:- homepage.vpn.gram1.ru -> http://127.0.0.1:3000, cert=32.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8701:- cert=27: home.gram1.ru, expires 2026-09-13 16:43:44.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8747:- homepage.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8779:- Admin/dashboard: homepage, dockge, netbox, dozzle, NPMplus VPN admin.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8833:- Backup health dashboard: STATUS=OK, ITEMS=69, NOT_OK=0 at 2026-06-30T10:10:06Z.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:8835:- SLO coverage is tracked separately from runtime dashboard. It had WARN backlog in backup-restore-coverage-slo with APP_TOTAL=43, GREEN=3, YELLOW=21, RED=19, MISSING_BACKUP_SIGNAL=31, MISSING_RESTORE_SIGNAL=28, MISSING_TIMER=31.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9055:### Runtime dashboard semantics\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9056:- backup-restore-dashboard.txt is an authoritative runtime dashboard file.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9057:- Current observed runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9058:- backup-restore-dashboard.json confirmed not_ok=[].\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9066:- Uptime Kuma local endpoint returns HTTP 302 to /dashboard, which is expected for UI auth/redirect.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9078:- Runtime dashboard OK does not mean SLO backlog is closed.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9081:- Other observed WARN backlog files include container-image-lifecycle-slo, cron-job-monitoring-slo, direct-heartbeat-pilot-readiness, healthchecks-heartbeat-coverage, healthchecks-job-coverage, healthchecks-job-monitoring-slo, homepage-service-catalog-slo, ingress-dns-route-slo, observability-health-surface-slo and security-vulnerability-slo.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9318:| home.gram1.ru | http://127.0.0.1:3000 | edge-vm / homepage | homepage container, dashboard route |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9325:| backup.gram1.ru | http://[PRIVATE_IP]:9101 | pve01 / homelab-health-http | backup dashboard and health proofs |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9331:| homepage.vpn.gram1.ru | http://127.0.0.1:3000 | homepage |\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9465:### Backup dashboard / SLO interpretation\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9466:- Runtime dashboard OK means current operational checks are green.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9519:- Monitoring, alerting, health dashboard and Prometheus correction.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9591:- Backup/cloud/restore improvement pass is closed with runtime dashboard STATUS=OK and NOT_OK=0.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9616:- Runtime backup dashboard remains STATUS=OK with NOT_OK=0.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9654:- edge-vm units checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9684:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9702:- edge-vm timers checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9778:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9848:- Also verify service results, health status/age, Mail-cloud directories, dashboard, restore index, Prometheus firing alerts and Alertmanager readiness.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9868:- Home portal discovery started for https://home.gram1.ru/.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9870:- Discovery proof records DNS, HTTPS/TLS headers, reverse-proxy candidates, compose files, domain references and homepage config candidates without printing secrets.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9874:- Home portal config and service inventory was collected for https://home.gram1.ru/.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9879:- Home portal gap analysis was collected for gethomepage/homepage behind npmplus.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:9999:- Active Homepage URL: https://home.gram1.ru.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:10527:Команда 138 пересобрала dashboard, но диагностический Python-блок упал с NameError из-за кавычек.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:10528:Не использовать heredoc Python внутри вложенного ssh; для dashboard verification использовать cat/grep JSON или простые команды.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:10623:- Active files are services.yaml, bookmarks.yaml, widgets.yaml, settings.yaml and docker.yaml under /opt/stacks/homepage/config.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:10694:- Evidence: proof 408 showed SyntaxError in /tmp/homepage-router-moscow-apply-fixed.py.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:10955:* pve03 cloud: edge-vm, ingress, NPMplus, monitoring, homepage, часть critical configs.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:11072:* сделать отдельный dashboard “Can I restore?”;\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:11075:Сейчас reference прямо говорит: runtime dashboard OK, но SLO backlog не закрыт, и в старой модели было `MISSING_EXTERNAL_VALIDATION=43`. Вот это надо закрывать.\n/etc/pve/HOMELAB_FULL_HANDOFF_HISTORICAL_2026-07-09.md:11121:7. Сделать dashboard “Backup/Restore SLO”, где нет `MISSING_*`.\n/etc/pve/HOMEPAGE_BACKUP_COVERAGE_MATRIX.md:28:| Homepage | https://home.gram1.ru | 190 | 4 | 96 | EVIDENCE_FOUND_REVIEW |\n/etc/pve/31_HOMELAB_REFERENCE.md:82:HEALTH_NOT_OK item=backup-restore-dashboard.txt line=STATUS=WARN TS=2026-06-29T18:10:09Z ITEMS=80 NOT_OK=13\n/etc/pve/31_HOMELAB_REFERENCE.md:89:HEALTH_NOT_OK item=homepage-service-catalog-slo.txt line=STATUS=WARN\n/etc/pve/31_HOMELAB_REFERENCE.md:153:- Проверить backup-restore-dashboard: STATUS=WARN, NOT_OK=13.\n/etc/pve/31_HOMELAB_REFERENCE.md:194:- Runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\n/etc/pve/31_HOMELAB_REFERENCE.md:196:- SLO/coverage WARN files: moved out of runtime dashboard into slo-coverage-backlog-index.txt.\n/etc/pve/31_HOMELAB_REFERENCE.md:395:- edge-vm owns most application health, dashboard, ingress, backup, NetBox, NPMplus, certificate, Trivy and vulnerability jobs.\n/etc/pve/31_HOMELAB_REFERENCE.md:455:- edge-vm timers cover runtime dashboard, Paperless guard, external canary, health metrics, restore drill index, AdGuard rewrite sync, NPMplus cert expiry, NetBox backup/sync, retention, cluster daily status, vulnerability and Trivy scans, ingress hardening and NPMplus admin bind.\n/etc/pve/31_HOMELAB_REFERENCE.md:704:- home.gram1.ru -> http://127.0.0.1:3000, cert=27, ssl_forced=1, enabled=1.\n/etc/pve/31_HOMELAB_REFERENCE.md:715:- homepage.vpn.gram1.ru -> http://127.0.0.1:3000, cert=32.\n/etc/pve/31_HOMELAB_REFERENCE.md:753:- cert=27: home.gram1.ru, expires 2026-09-13 16:43:44.\n/etc/pve/31_HOMELAB_REFERENCE.md:799:- homepage.\n/etc/pve/31_HOMELAB_REFERENCE.md:831:- Admin/dashboard: homepage, dockge, netbox, dozzle, NPMplus VPN admin.\n/etc/pve/31_HOMELAB_REFERENCE.md:885:- Backup health dashboard: STATUS=OK, ITEMS=69, NOT_OK=0 at 2026-06-30T10:10:06Z.\n/etc/pve/31_HOMELAB_REFERENCE.md:887:- SLO coverage is tracked separately from runtime dashboard. It had WARN backlog in backup-restore-coverage-slo with APP_TOTAL=43, GREEN=3, YELLOW=21, RED=19, MISSING_BACKUP_SIGNAL=31, MISSING_RESTORE_SIGNAL=28, MISSING_TIMER=31.\n/etc/pve/31_HOMELAB_REFERENCE.md:1107:### Runtime dashboard semantics\n/etc/pve/31_HOMELAB_REFERENCE.md:1108:- backup-restore-dashboard.txt is an authoritative runtime dashboard file.\n/etc/pve/31_HOMELAB_REFERENCE.md:1109:- Current observed runtime dashboard: STATUS=OK, ITEMS=69, NOT_OK=0.\n/etc/pve/31_HOMELAB_REFERENCE.md:1110:- backup-restore-dashboard.json confirmed not_ok=[].\n/etc/pve/31_HOMELAB_REFERENCE.md:1118:- Uptime Kuma local endpoint returns HTTP 302 to /dashboard, which is expected for UI auth/redirect.\n/etc/pve/31_HOMELAB_REFERENCE.md:1130:- Runtime dashboard OK does not mean SLO backlog is closed.\n/etc/pve/31_HOMELAB_REFERENCE.md:1133:- Other observed WARN backlog files include container-image-lifecycle-slo, cron-job-monitoring-slo, direct-heartbeat-pilot-readiness, healthchecks-heartbeat-coverage, healthchecks-job-coverage, healthchecks-job-monitoring-slo, homepage-service-catalog-slo, ingress-dns-route-slo, observability-health-surface-slo and security-vulnerability-slo.\n/etc/pve/31_HOMELAB_REFERENCE.md:1370:| home.gram1.ru | http://127.0.0.1:3000 | edge-vm / homepage | homepage container, dashboard route |\n/etc/pve/31_HOMELAB_REFERENCE.md:1377:| backup.gram1.ru | http://[PRIVATE_IP]:9101 | pve01 / homelab-health-http | backup dashboard and health proofs |\n/etc/pve/31_HOMELAB_REFERENCE.md:1383:| homepage.vpn.gram1.ru | http://127.0.0.1:3000 | homepage |\n/etc/pve/31_HOMELAB_REFERENCE.md:1517:### Backup dashboard / SLO interpretation\n/etc/pve/31_HOMELAB_REFERENCE.md:1518:- Runtime dashboard OK means current operational checks are green.\n/etc/pve/31_HOMELAB_REFERENCE.md:1571:- Monitoring, alerting, health dashboard and Prometheus correction.\n/etc/pve/31_HOMELAB_REFERENCE.md:1643:- Backup/cloud/restore improvement pass is closed with runtime dashboard STATUS=OK and NOT_OK=0.\n/etc/pve/31_HOMELAB_REFERENCE.md:1668:- Runtime backup dashboard remains STATUS=OK with NOT_OK=0.\n/etc/pve/31_HOMELAB_REFERENCE.md:1706:- edge-vm units checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/31_HOMELAB_REFERENCE.md:1736:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/31_HOMELAB_REFERENCE.md:1754:- edge-vm timers checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/31_HOMELAB_REFERENCE.md:1830:- edge-vm services checked: P2 small-stacks backup/restore, backup dashboard and restore drill index.\n/etc/pve/31_HOMELAB_REFERENCE.md:1900:- Also verify service resultPVE_HOME_GREP_END\nPVE_GUEST_LIST_RC=0\nPVE_GUEST_LIST_BEGIN\n[{\"cpu\":0.000896789687129178,\"disk\":4071989248,\"diskread\":1173880832,\"diskwrite\":4806901760,\"id\":\"lxc/110\",\"maxcpu\":1,\"maxdisk\":8350298112,\"maxmem\":536870912,\"mem\":99930112,\"memhost\":0,\"name\":\"dns1\",\"netin\":924161380,\"netout\":393327082,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"uptime\":1846206,\"vmid\":110},{\"cpu\":0.000196843223038017,\"disk\":2606272512,\"diskread\":1099710464,\"diskwrite\":3420061696,\"id\":\"lxc/111\",\"maxcpu\":1,\"maxdisk\":8350298112,\"maxmem\":536870912,\"mem\":96784384,\"memhost\":0,\"name\":\"dns2\",\"netin\":784462582,\"netout\":195434817,\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"uptime\":1846198,\"vmid\":111},{\"cpu\":9.96432985699087e-05,\"disk\":768323584,\"diskread\":882212864,\"diskwrite\":1488109568,\"id\":\"lxc/112\",\"maxcpu\":1,\"maxdisk\":8350298112,\"maxmem\":536870912,\"mem\":52785152,\"memhost\":0,\"name\":\"unbound1\",\"netin\":961057355,\"netout\":178056147,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"uptime\":1846209,\"vmid\":112},{\"cpu\":0,\"disk\":764411904,\"diskread\":972832768,\"diskwrite\":1366802432,\"id\":\"lxc/113\",\"maxcpu\":1,\"maxdisk\":8350298112,\"maxmem\":536870912,\"mem\":45662208,\"memhost\":0,\"name\":\"unbound2\",\"netin\":714075865,\"netout\":86870874,\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"lxc\",\"uptime\":1846201,\"vmid\":113},{\"cpu\":0.0283772478209682,\"disk\":0,\"diskread\":18795840098,\"diskwrite\":361808464384,\"id\":\"qemu/130\",\"maxcpu\":4,\"maxdisk\":103079215104,\"maxmem\":12884901888,\"mem\":12105641984,\"memhost\":12982788096,\"name\":\"edge-vm\",\"netin\":53879827627,\"netout\":38386685724,\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846072,\"vmid\":130},{\"cpu\":0.00320264754623039,\"disk\":0,\"diskread\":750180450,\"diskwrite\":16402183680,\"id\":\"qemu/150\",\"maxcpu\":4,\"maxdisk\":68719476736,\"maxmem\":8589934592,\"mem\":1644724224,\"memhost\":2274430976,\"name\":\"snikket\",\"netin\":1087219613,\"netout\":438924485,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846197,\"vmid\":150},{\"cpu\":0.00615088885135206,\"disk\":0,\"diskread\":4134157410,\"diskwrite\":29773604864,\"id\":\"qemu/160\",\"maxcpu\":4,\"maxdisk\":214748364800,\"maxmem\":8589934592,\"mem\":7706472448,\"memhost\":8283156480,\"name\":\"forum-prod\",\"netin\":2321005198,\"netout\":8896203720,\"node\":\"pve02\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846196,\"vmid\":160},{\"cpu\":0.0418807756045512,\"disk\":0,\"diskread\":11373481570,\"diskwrite\":455660377600,\"id\":\"qemu/170\",\"maxcpu\":4,\"maxdisk\":128849018880,\"maxmem\":10737418240,\"mem\":9968672768,\"memhost\":10931679232,\"name\":\"core-apps\",\"netin\":9272380038,\"netout\":40801398247,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846204,\"vmid\":170},{\"cpu\":0.0204476727951632,\"disk\":0,\"diskread\":1750438498,\"diskwrite\":154619225600,\"id\":\"qemu/171\",\"maxcpu\":4,\"maxdisk\":128849018880,\"maxmem\":8589934592,\"mem\":4239286272,\"memhost\":4852531200,\"name\":\"monitoring\",\"netin\":55145789438,\"netout\":4260231212,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846201,\"vmid\":171},{\"cpu\":0.00197406941363257,\"disk\":0,\"diskread\":538767458,\"diskwrite\":4667667968,\"id\":\"qemu/190\",\"maxcpu\":4,\"maxdisk\":85899345920,\"maxmem\":8589934592,\"mem\":1106169856,\"memhost\":1711665152,\"name\":\"homelab-ops-worker\",\"netin\":959940773,\"netout\":112979833,\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1846068,\"vmid\":190},{\"cpu\":0.00394172005689894,\"disk\":0,\"diskread\":727174754,\"diskwrite\":4728750080,\"id\":\"qemu/210\",\"maxcpu\":2,\"maxdisk\":53687091200,\"maxmem\":4294967296,\"mem\":1475493888,\"memhost\":1797382144,\"name\":\"newfi-prod\",\"netin\":411687825,\"netout\":186700048,\"node\":\"pve01\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1034670,\"vmid\":210},{\"cpu\":0.00394813882726514,\"disk\":0,\"diskread\":370041442,\"diskwrite\":11131665920,\"id\":\"qemu/211\",\"maxcpu\":2,\"maxdisk\":53687091200,\"maxmem\":4294967296,\"mem\":1937764352,\"memhost\":2393133056,\"name\":\"newfi-staging\",\"netin\":495042241,\"netout\":43655373,\"node\":\"pve03\",\"status\":\"running\",\"template\":0,\"type\":\"qemu\",\"uptime\":1230596,\"vmid\":211},{\"cpu\":0,\"disk\":0,\"diskread\":0,\"diskwrite\":0,\"id\":\"qemu/9130\",\"maxcpu\":4,\"maxdisk\":103079215104,\"maxmem\":12884901888,\"mem\":0,\"memhost\":0,\"name\":\"edge-cold-standby\",\"netin\":0,\"netout\":0,\"node\":\"pve02\",\"status\":\"stopped\",\"template\":0,\"type\":\"qemu\",\"uptime\":0,\"vmid\":9130}]\nPVE_GUEST_LIST_END\nLOCAL_HOME_GREP_RC=0\nLOCAL_HOME_GREP_BEGIN\n/usr/local/sbin/homelab-backup-npmplus-kuma-configs:113: [ \"$HOMEPAGE_AUTH_CHECK\" = \"none\" ] || fail \"homepage_auth_bad\"\n/usr/local/sbin/homelab-check-private-vpn-hosts:7:homepage.vpn.gram1.ru\n/usr/local/sbin/homelab-check-private-vpn-hosts.real-20260624T131702Z:40:check_host \"homepage\" \"homepage.vpn.gram1.ru\" \"^200$\"\n/usr/local/sbin/homelab-check-private-vpn-hosts.real-20260624T131702Z:78:echo \"$edge_out\" | grep -q \"17|\\[\\\"homepage.vpn.gram1.ru\\\"\\].*auth_request=none\" || fail \"homepage_auth_not_none\"\n/usr/local/sbin/homelab-check-private-vpn-hosts.real-20260624T131702Z:79:echo \"$edge_out\" | grep -q \"CONF17_AUTH=.*auth_request off\" || fail \"homepage_conf_not_auth_off\"\nLOCAL_HOME_GREP_END\nPITER_EDGE_HOME_RC=1\nPITER_EDGE_HOME_ERR=sudo: interactive authentication is required \nHOME567R1_DECISION=DISCOVERY_COMPLETE\nHOME567R1_NEXT_GATE=IDENTIFY_BACKEND_AND_CARD_SOURCE_THEN_MUTATE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260919-HOME-GRAM1-DISCOVERY-READONLY-567R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n"
}