CHAT_OUTPUT_BEGIN
COMMAND_ID=HOMELAB-CLUSTER-ADMIN-UPDATES-V35-ACTUAL-UI-ROUTE-READ-ONLY-20260805T163000Z
STATUS=OK
RC=0
HOST=pve01
MODE=verify
COMPONENT=homelab-cluster-admin-update-visibility
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=82f5d85404b8419244364987a5ca91796759e162a7a118f96f6f4396befe5198
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=27b6cb0b8eb8288db3fbf28a4fe5d03d7c8d88f79b464cef2a261ccd0811e876
SANITIZED_OUTPUT_SHA256=db4f6d44451f8920c1e8ffc0966413765f623391053e3dac989965f3de9b4eaf
OUTPUT_BEGIN
HOMELAB_RESULT_CONTRACT={"actual_ui_contains_updates_card":false,"actual_ui_route_count":0,"actual_ui_route_found":false,"actual_ui_source_found":true,"changes_made":false,"command_id":"HOMELAB-CLUSTER-ADMIN-UPDATES-V35-ACTUAL-UI-ROUTE-READ-ONLY-20260805T163000Z","command_rc":0,"control_plane_error":null,"mutation_outcome":"NO_MUTATION","next_action":"resolve only the remaining route/source ambiguity","rc":0,"ready_for_actual_ui_patch_design":false,"report_bytes":46770,"report_sha256":"afeebf586fd9522757518ef90118630b9a0cf105a6c1c84085e1915888a73ea8","rollback_restored":false,"rollback_started":false,"same_route_as_updates_card":false,"screenshot_contradiction_confirmed":true,"status":"OK","updates_card_route_count":2,"v34_exact_result_identity_confirmed":true,"version":1}
{"changes_made":false,"command_id":"HOMELAB-CLUSTER-ADMIN-UPDATES-V35-ACTUAL-UI-ROUTE-READ-ONLY-20260805T163000Z","diagnosis":{"actual_ui_contains_updates_card":false,"actual_ui_route":null,"actual_ui_route_count":0,"actual_ui_route_found":false,"actual_ui_source":{"bytes":28599,"contexts":[{"line":73,"matched":["observe/notify"],"text":"    return f\"\"\"<!doctype html><html lang=<REDACTED>"},{"line":208,"matched":["VM и CT","Инциденты"],"text":"    cards = \"\".join([summary_card(\"Ноды\", counts[\"nodes\"], \"OK\" if counts[\"nodes\"] > 0 else \"ERROR\"), summary_card(\"VM и CT\", counts[\"guests\"], \"OK\" if counts[\"guests\"] > 0 else \"ERROR\"), summary_card(\"Сервисы\", counts[\"services\"], \"OK\" if counts[\"services\"] > 0 else \"ERROR\"), summary_card(\"Инциденты\", counts[\"incidents\"], \"ERROR\" if counts[\"incidents\"] > 0 else \"OK\")])"},{"line":217,"matched":["Активные инциденты"],"text":"    incidents_html = health_section(\"Активные инциденты\", len(incidents), incidents_state, incidents_table)"},{"line":220,"matched":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён"],"text":"    page = f\"\"\"<!doctype html><html lang=\"ru\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><meta http-equiv=\"refresh\" content=\"30\"><title>Cluster Admin Incident Engine</title><style>body{{margin:0;background:#07101d;color:#e8eef7;font:14px Arial}}header{{padding:14px 22px;background:#101b2b;border-bottom:1px solid #2a3b54;display:flex;justify-content:space-between}}main{{max-width:1500px;margin:auto;padding:20px}}.cards{{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}}.card,.panel{{background:#111d2e;border:1px solid #283b56;border-radius:14px;padding:16px}}.card b{{font-size:30px;display:block}}.card span,.muted{{color:#879ab3}}.grid{{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}}.wide{{grid-column:1/-1}}table{{width:100%;border-collapse:collapse}}th,td{{padding:9px;border-bottom:1px solid #253750;text-align:left}}th{{color:#8fa3bc}}.state{{display:inline-flex;align-items:center;gap:7px;font-weight:700}}.state-dot{{width:10px;height:10px;border-radius:50%;display:inline-block;background:#8392a5}}.state-ok .state-dot{{background:#39d98a;box-shadow:0 0 12px rgba(57,217,138,.75)}}.state-bad .state-dot{{background:#ff5d73;box-shadow:0 0 12px rgba(255,93,115,.75)}}.state-warn .state-dot{{background:#f6c85f;box-shadow:0 0 12px rgba(246,200,95,.7)}}.state-unknown .state-dot{{background:#8392a5}}.row-bad{{background:rgba(255,93,115,.07)}}.row-warn{{background:rgba(246,200,95,.06)}}.card-health{{float:right}}.health-section{{padding:0;overflow:hidden}}.health-section summary{{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;user-select:none}}.health-section summary::-webkit-details-marker{{display:none}}.section-heading{{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:700}}.section-heading .state{{font-size:0}}.section-title{{color:#e8eef7}}.section-count{{font-size:12px;color:#879ab3;border:1px solid #334a68;border-radius:999px;padding:3px 8px}}.section-chevron{{font-size:20px;color:#8fa3bc;transition:transform .18s ease}}.health-section[open] .section-chevron{{transform:rotate(180deg)}}.health-section[open] summary{{border-bottom:1px solid #253750;margin-bottom:8px}}.section-body{{padding:0 16px 16px}}button{{background:#18283d;color:white;border:1px solid #3b506d;border-radius:8px;padding:8px 12px}}@media(max-width:800px){{.cards,.grid{{grid-template-columns:1fr 1fr}}.wide{{grid-column:1/-1}}}}</style></head><body><header><div><b>Cluster Admin Incident Engine</b> {engine_badge}<div class=muted>observe/notify · auto-heal отключён</div></div><form method=\"post\" action=\"/logout\"><input type=\"hidden\" name=\"csrf\" value=\"{csrf}\"><button>Выйти</button></form></header><main><section class=cards>{cards}</section><section class=grid>{nodes_html}{incidents_html}{services_html}</section></main></body></html>\"\"\""},{"line":243,"matched":["Cluster Admin Incident Engine"],"text":"        \"# HELP cluster_admin_up Cluster Admin Incident Engine availability\","}],"matched_signatures":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён","Активные инциденты","VM и CT","Инциденты"],"mode":"0o750","path":"/opt/cluster-admin-incident-engine/app.py","sha256":"17d95ebfc28cef34846a8999664019d5d032ee8176b7fedd9ceeebfc5c97e3b6","signature_count":6},"actual_ui_source_found":true,"next_action":"resolve only the remaining route/source ambiguity","ready_for_actual_ui_patch_design":false,"same_route_as_updates_card":false,"updates_card_route_count":2},"mutation_outcome":"NO_MUTATION","read_only":true,"remote_actual_ui_analysis":{"diagnosis":{"actual_ui_contains_updates_card":false,"actual_ui_route":null,"actual_ui_route_count":0,"actual_ui_route_found":false,"actual_ui_source":{"bytes":28599,"contexts":[{"line":73,"matched":["observe/notify"],"text":"    return f\"\"\"<!doctype html><html lang=<REDACTED>"},{"line":208,"matched":["VM и CT","Инциденты"],"text":"    cards = \"\".join([summary_card(\"Ноды\", counts[\"nodes\"], \"OK\" if counts[\"nodes\"] > 0 else \"ERROR\"), summary_card(\"VM и CT\", counts[\"guests\"], \"OK\" if counts[\"guests\"] > 0 else \"ERROR\"), summary_card(\"Сервисы\", counts[\"services\"], \"OK\" if counts[\"services\"] > 0 else \"ERROR\"), summary_card(\"Инциденты\", counts[\"incidents\"], \"ERROR\" if counts[\"incidents\"] > 0 else \"OK\")])"},{"line":217,"matched":["Активные инциденты"],"text":"    incidents_html = health_section(\"Активные инциденты\", len(incidents), incidents_state, incidents_table)"},{"line":220,"matched":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён"],"text":"    page = f\"\"\"<!doctype html><html lang=\"ru\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><meta http-equiv=\"refresh\" content=\"30\"><title>Cluster Admin Incident Engine</title><style>body{{margin:0;background:#07101d;color:#e8eef7;font:14px Arial}}header{{padding:14px 22px;background:#101b2b;border-bottom:1px solid #2a3b54;display:flex;justify-content:space-between}}main{{max-width:1500px;margin:auto;padding:20px}}.cards{{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}}.card,.panel{{background:#111d2e;border:1px solid #283b56;border-radius:14px;padding:16px}}.card b{{font-size:30px;display:block}}.card span,.muted{{color:#879ab3}}.grid{{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}}.wide{{grid-column:1/-1}}table{{width:100%;border-collapse:collapse}}th,td{{padding:9px;border-bottom:1px solid #253750;text-align:left}}th{{color:#8fa3bc}}.state{{display:inline-flex;align-items:center;gap:7px;font-weight:700}}.state-dot{{width:10px;height:10px;border-radius:50%;display:inline-block;background:#8392a5}}.state-ok .state-dot{{background:#39d98a;box-shadow:0 0 12px rgba(57,217,138,.75)}}.state-bad .state-dot{{background:#ff5d73;box-shadow:0 0 12px rgba(255,93,115,.75)}}.state-warn .state-dot{{background:#f6c85f;box-shadow:0 0 12px rgba(246,200,95,.7)}}.state-unknown .state-dot{{background:#8392a5}}.row-bad{{background:rgba(255,93,115,.07)}}.row-warn{{background:rgba(246,200,95,.06)}}.card-health{{float:right}}.health-section{{padding:0;overflow:hidden}}.health-section summary{{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;user-select:none}}.health-section summary::-webkit-details-marker{{display:none}}.section-heading{{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:700}}.section-heading .state{{font-size:0}}.section-title{{color:#e8eef7}}.section-count{{font-size:12px;color:#879ab3;border:1px solid #334a68;border-radius:999px;padding:3px 8px}}.section-chevron{{font-size:20px;color:#8fa3bc;transition:transform .18s ease}}.health-section[open] .section-chevron{{transform:rotate(180deg)}}.health-section[open] summary{{border-bottom:1px solid #253750;margin-bottom:8px}}.section-body{{padding:0 16px 16px}}button{{background:#18283d;color:white;border:1px solid #3b506d;border-radius:8px;padding:8px 12px}}@media(max-width:800px){{.cards,.grid{{grid-template-columns:1fr 1fr}}.wide{{grid-column:1/-1}}}}</style></head><body><header><div><b>Cluster Admin Incident Engine</b> {engine_badge}<div class=muted>observe/notify · auto-heal отключён</div></div><form method=\"post\" action=\"/logout\"><input type=\"hidden\" name=\"csrf\" value=\"{csrf}\"><button>Выйти</button></form></header><main><section class=cards>{cards}</section><section class=grid>{nodes_html}{incidents_html}{services_html}</section></main></body></html>\"\"\""},{"line":243,"matched":["Cluster Admin Incident Engine"],"text":"        \"# HELP cluster_admin_up Cluster Admin Incident Engine availability\","}],"matched_signatures":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён","Активные инциденты","VM и CT","Инциденты"],"mode":"0o750","path":"/opt/cluster-admin-incident-engine/app.py","sha256":"17d95ebfc28cef34846a8999664019d5d032ee8176b7fedd9ceeebfc5c97e3b6","signature_count":6},"actual_ui_source_found":true,"next_action":"resolve only the remaining route/source ambiguity","ready_for_actual_ui_patch_design":false,"same_route_as_updates_card":false,"updates_card_route_count":2},"euid":0,"hostname":"cluster-admin","http_probes":[{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/index.html","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/dashboard","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/admin","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin/","port":22,"rc":1,"scheme":"http","signature_count":0,"stderr":"curl: (1) Received HTTP/0.9 when not allowed\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/index.html","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/dashboard","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/admin","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin/","port":53,"rc":7,"scheme":"http","signature_count":0,"stderr":"curl: (7) Failed to connect to <PRIVATE_IPV4> port 53 after 0 ms: Couldn't connect to server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/index.html","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/dashboard","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/admin","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin/","port":5355,"rc":28,"scheme":"http","signature_count":0,"stderr":"curl: (28) Operation timed out after 8001 milliseconds with 0 bytes received\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/index.html","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/dashboard","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/admin","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":null,"matched_signatures":[],"path":"/cluster-admin/","port":5432,"rc":52,"scheme":"http","signature_count":0,"stderr":"curl: (52) Empty reply from server\n","title":null},{"body_bytes":11619,"body_sha256":"b5decba483998cb4a7132f6a2498231619f11457d2974461f0c3a1e07320d03c","contains_updates_card":true,"http_status":200,"matched_signatures":[],"path":"/","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Homelab Cluster Admin"},{"body_bytes":11619,"body_sha256":"b5decba483998cb4a7132f6a2498231619f11457d2974461f0c3a1e07320d03c","contains_updates_card":true,"http_status":200,"matched_signatures":[],"path":"/index.html","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Homelab Cluster Admin"},{"body_bytes":335,"body_sha256":"860b53ed6ea6a0cf602fae632cfcd28dbcf637f85a8bee28d2ee9c6cc9081669","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/dashboard","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Error response"},{"body_bytes":335,"body_sha256":"860b53ed6ea6a0cf602fae632cfcd28dbcf637f85a8bee28d2ee9c6cc9081669","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/admin","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Error response"},{"body_bytes":335,"body_sha256":"860b53ed6ea6a0cf602fae632cfcd28dbcf637f85a8bee28d2ee9c6cc9081669","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/cluster-admin","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Error response"},{"body_bytes":335,"body_sha256":"860b53ed6ea6a0cf602fae632cfcd28dbcf637f85a8bee28d2ee9c6cc9081669","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/cluster-admin/","port":8080,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":"Error response"},{"body_bytes":0,"body_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","contains_updates_card":false,"http_status":303,"matched_signatures":[],"path":"/","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null},{"body_bytes":22,"body_sha256":"37ec4665a8102d115ffd1ac20dae94c98b4dac64b0c1a68228aa2a531caeb35d","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/index.html","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null},{"body_bytes":22,"body_sha256":"37ec4665a8102d115ffd1ac20dae94c98b4dac64b0c1a68228aa2a531caeb35d","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/dashboard","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null},{"body_bytes":22,"body_sha256":"37ec4665a8102d115ffd1ac20dae94c98b4dac64b0c1a68228aa2a531caeb35d","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/admin","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null},{"body_bytes":22,"body_sha256":"37ec4665a8102d115ffd1ac20dae94c98b4dac64b0c1a68228aa2a531caeb35d","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/cluster-admin","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null},{"body_bytes":22,"body_sha256":"37ec4665a8102d115ffd1ac20dae94c98b4dac64b0c1a68228aa2a531caeb35d","contains_updates_card":false,"http_status":404,"matched_signatures":[],"path":"/cluster-admin/","port":8081,"rc":0,"scheme":"http","signature_count":0,"stderr":"","title":null}],"listeners":[{"line":"LISTEN 0      5            0.0.0.0:8080 0.0.0.0:* users:((\"python3\",pid=439,fd=3))         ","pids":[439],"port":8080},{"line":"LISTEN 0      2048         0.0.0.0:8081 0.0.0.0:* users:((\"python3\",pid=487,fd=6))         ","pids":[487],"port":8081},{"line":"LISTEN 0      244        <PRIVATE_IPV4>:5432 0.0.0.0:* users:((\"postgres\",pid=469,fd=6))        ","pids":[469],"port":5432},{"line":"LISTEN 0      4096   <PRIVATE_IPV4>%lo:53   0.0.0.0:* users:((\"systemd-resolve\",pid=380,fd=18))","pids":[380],"port":53},{"line":"LISTEN 0      4096         0.0.0.0:5355 0.0.0.0:* users:((\"systemd-resolve\",pid=380,fd=12))","pids":[380],"port":5355},{"line":"LISTEN 0      4096      <PRIVATE_IPV4>:53   0.0.0.0:* users:((\"systemd-resolve\",pid=380,fd=20))","pids":[380],"port":53},{"line":"LISTEN 0      128          0.0.0.0:22   0.0.0.0:* users:((\"sshd\",pid=457,fd=3))            ","pids":[457],"port":22},{"line":"LISTEN 0      244            [::1]:5432    [::]:* users:((\"postgres\",pid=469,fd=5))        ","pids":[469],"port":5432},{"line":"LISTEN 0      4096            [::]:5355    [::]:* users:((\"systemd-resolve\",pid=380,fd=14))","pids":[380],"port":5355},{"line":"LISTEN 0      128             [::]:22      [::]:* users:((\"sshd\",pid=457,fd=4))            ","pids":[457],"port":22}],"processes":[{"cmdline":"/lib/systemd/systemd-resolved","cwd":"/","exe":"/usr/lib/systemd/systemd-resolved","pid":380,"status_rc":0,"systemd_unit":"systemd-resolved.service"},{"cmdline":"/usr/bin/python3 -m http.server 8080 --bind 0.0.0.0 --directory /var/www/homelab-cluster-admin","cwd":"/","exe":"/usr/bin/python3.11","pid":439,"status_rc":0,"systemd_unit":"homelab-cluster-admin-webpanel.service"},{"cmdline":"sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups","cwd":"/","exe":"/usr/sbin/sshd","pid":457,"status_rc":0,"systemd_unit":"ssh.service"},{"cmdline":"/usr/lib/postgresql/15/bin/postgres -D /var/lib/postgresql/15/main -c config_file=/etc/postgresql/15/main/postgresql.conf","cwd":"/var/lib/postgresql/15/main","exe":"/usr/lib/postgresql/15/bin/postgres","pid":469,"status_rc":0,"systemd_unit":"postgresql@15-main.service"},{"cmdline":"/usr/bin/python3 -m uvicorn app:app --host 0.0.0.0 --port 8081 --proxy-headers --forwarded-allow-ips=<PRIVATE_IPV4>,<PRIVATE_IPV4>","cwd":"/opt/cluster-admin-incident-engine","exe":"/usr/bin/python3.11","pid":487,"status_rc":0,"systemd_unit":"cluster-admin-incident-engine.service"}],"scan":{"directories_scanned":66,"files_scanned":395,"matching_source_count":3},"signatures":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён","Активные инциденты","VM и CT","Инциденты"],"source_matches":[{"bytes":28599,"contexts":[{"line":73,"matched":["observe/notify"],"text":"    return f\"\"\"<!doctype html><html lang=<REDACTED>"},{"line":208,"matched":["VM и CT","Инциденты"],"text":"    cards = \"\".join([summary_card(\"Ноды\", counts[\"nodes\"], \"OK\" if counts[\"nodes\"] > 0 else \"ERROR\"), summary_card(\"VM и CT\", counts[\"guests\"], \"OK\" if counts[\"guests\"] > 0 else \"ERROR\"), summary_card(\"Сервисы\", counts[\"services\"], \"OK\" if counts[\"services\"] > 0 else \"ERROR\"), summary_card(\"Инциденты\", counts[\"incidents\"], \"ERROR\" if counts[\"incidents\"] > 0 else \"OK\")])"},{"line":217,"matched":["Активные инциденты"],"text":"    incidents_html = health_section(\"Активные инциденты\", len(incidents), incidents_state, incidents_table)"},{"line":220,"matched":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён"],"text":"    page = f\"\"\"<!doctype html><html lang=\"ru\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><meta http-equiv=\"refresh\" content=\"30\"><title>Cluster Admin Incident Engine</title><style>body{{margin:0;background:#07101d;color:#e8eef7;font:14px Arial}}header{{padding:14px 22px;background:#101b2b;border-bottom:1px solid #2a3b54;display:flex;justify-content:space-between}}main{{max-width:1500px;margin:auto;padding:20px}}.cards{{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}}.card,.panel{{background:#111d2e;border:1px solid #283b56;border-radius:14px;padding:16px}}.card b{{font-size:30px;display:block}}.card span,.muted{{color:#879ab3}}.grid{{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}}.wide{{grid-column:1/-1}}table{{width:100%;border-collapse:collapse}}th,td{{padding:9px;border-bottom:1px solid #253750;text-align:left}}th{{color:#8fa3bc}}.state{{display:inline-flex;align-items:center;gap:7px;font-weight:700}}.state-dot{{width:10px;height:10px;border-radius:50%;display:inline-block;background:#8392a5}}.state-ok .state-dot{{background:#39d98a;box-shadow:0 0 12px rgba(57,217,138,.75)}}.state-bad .state-dot{{background:#ff5d73;box-shadow:0 0 12px rgba(255,93,115,.75)}}.state-warn .state-dot{{background:#f6c85f;box-shadow:0 0 12px rgba(246,200,95,.7)}}.state-unknown .state-dot{{background:#8392a5}}.row-bad{{background:rgba(255,93,115,.07)}}.row-warn{{background:rgba(246,200,95,.06)}}.card-health{{float:right}}.health-section{{padding:0;overflow:hidden}}.health-section summary{{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;user-select:none}}.health-section summary::-webkit-details-marker{{display:none}}.section-heading{{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:700}}.section-heading .state{{font-size:0}}.section-title{{color:#e8eef7}}.section-count{{font-size:12px;color:#879ab3;border:1px solid #334a68;border-radius:999px;padding:3px 8px}}.section-chevron{{font-size:20px;color:#8fa3bc;transition:transform .18s ease}}.health-section[open] .section-chevron{{transform:rotate(180deg)}}.health-section[open] summary{{border-bottom:1px solid #253750;margin-bottom:8px}}.section-body{{padding:0 16px 16px}}button{{background:#18283d;color:white;border:1px solid #3b506d;border-radius:8px;padding:8px 12px}}@media(max-width:800px){{.cards,.grid{{grid-template-columns:1fr 1fr}}.wide{{grid-column:1/-1}}}}</style></head><body><header><div><b>Cluster Admin Incident Engine</b> {engine_badge}<div class=muted>observe/notify · auto-heal отключён</div></div><form method=\"post\" action=\"/logout\"><input type=\"hidden\" name=\"csrf\" value=\"{csrf}\"><button>Выйти</button></form></header><main><section class=cards>{cards}</section><section class=grid>{nodes_html}{incidents_html}{services_html}</section></main></body></html>\"\"\""},{"line":243,"matched":["Cluster Admin Incident Engine"],"text":"        \"# HELP cluster_admin_up Cluster Admin Incident Engine availability\","}],"matched_signatures":["Cluster Admin Incident Engine","observe/notify","auto-heal отключён","Активные инциденты","VM и CT","Инциденты"],"mode":"0o750","path":"/opt/cluster-admin-incident-engine/app.py","sha256":"17d95ebfc28cef34846a8999664019d5d032ee8176b7fedd9ceeebfc5c97e3b6","signature_count":6},{"bytes":803,"contexts":[{"line":2,"matched":["Cluster Admin Incident Engine"],"text":"Description=Cluster Admin Incident Engine web application"}],"matched_signatures":["Cluster Admin Incident Engine"],"mode":"0o644","path":"/etc/systemd/system/cluster-admin-incident-engine.service","sha256":"1892e494de5caab11100d5ea9257b82857fd6138d73cfae91e888759321745ea","signature_count":1},{"bytes":803,"contexts":[{"line":2,"matched":["Cluster Admin Incident Engine"],"text":"Description=Cluster Admin Incident Engine web application"}],"matched_signatures":["Cluster Admin Incident Engine"],"mode":"0o644","path":"/etc/systemd/system/cluster-admin-incident-engine.service","sha256":"1892e494de5caab11100d5ea9257b82857fd6138d73cfae91e888759321745ea","signature_count":1}],"units":[{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /opt/cluster-admin-incident-engine/collector.py ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:28:53 UTC] ; stop_time=[Wed 2026-08-05 16:28:53 UTC] ; pid=2039685 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/cluster-admin-incident-engine-collector.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"cluster-admin-incident-engine-collector.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":"/opt/cluster-admin-incident-engine"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"cluster-admin-incident-engine-collector.service","unit_text":"# /etc/systemd/system/cluster-admin-incident-engine-collector.service\n[Unit]\nDescription=Cluster Admin inventory metrics and incident collector\nAfter=network-online.target postgresql.service cluster-admin-incident-engine.service\nWants=network-online.target\nRequires=postgresql.service\n\n[Service]\nType=oneshot\nUser=clusteradmin\nGroup=clusteradmin\nWorkingDirectory=/opt/cluster-admin-incident-engine\nExecStart=/usr/bin/python3 /opt/cluster-admin-incident-engine/collector.py\nUMask=0027\nNoNewPrivileges=true\nPrivateTmp=true\nProtectSystem=strict\nProtectHome=true\nReadOnlyPaths=/etc/cluster-admin-incident-engine\nReadWritePaths=/var/lib/cluster-admin-incident-engine /var/lib/homelab-health"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/cluster-admin-incident-engine-collector.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"cluster-admin-incident-engine-collector.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"cluster-admin-incident-engine-collector.timer","unit_text":"# /etc/systemd/system/cluster-admin-incident-engine-collector.timer\n[Unit]\nDescription=Run Cluster Admin incident collector every minute\n\n[Timer]\nOnBootSec=30s\nOnUnitActiveSec=60s\nAccuracySec=10s\nPersistent=true\nUnit=cluster-admin-incident-engine-collector.service\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"active","EnvironmentFiles":"/etc/cluster-admin-incident-engine/runtime.conf (ignore_errors=no)","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -m uvicorn app:app --host 0.0.0.0 --port 8081 --proxy-headers --forwarded-allow-ips=[PRIVATE_IP],127.0.0.1 ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }","FragmentPath":"/etc/systemd/system/cluster-admin-incident-engine.service","LoadState":"loaded","SubState":"running","TriggeredBy":"","Triggers":"","UnitFileState":"enabled","WorkingDirectory":"/opt/cluster-admin-incident-engine"},"show_rc":0,"signature_hits":["Cluster Admin Incident Engine"],"source_path_hits":["/etc/systemd/system/cluster-admin-incident-engine.service"],"unit":"cluster-admin-incident-engine.service","unit_text":"# /etc/systemd/system/cluster-admin-incident-engine.service\n[Unit]\nDescription=Cluster Admin Incident Engine web application\nAfter=network-online.target postgresql.service\nWants=network-online.target\nRequires=postgresql.service\n\n[Service]\nType=simple\nUser=clusteradmin\nGroup=clusteradmin\nWorkingDirectory=/opt/cluster-admin-incident-engine\nEnvironmentFile=/etc/cluster-admin-incident-engine/runtime.conf\nExecStart=/usr/bin/python3 -m uvicorn app:app --host 0.0.0.0 --port 8081 --proxy-headers --forwarded-allow-ips=<PRIVATE_IPV4>,<PRIVATE_IPV4>\nRestart=on-failure\nRestartSec=5\nUMask=0027\nNoNewPrivileges=true\nPrivateTmp=true\nProtectSystem=strict\nProtectHome=true\nReadOnlyPaths=/etc/cluster-admin-incident-engine\nReadWritePaths=/var/lib/cluster-admin-incident-engine\nRestrictSUIDSGID=true\nLockPersonality=true\nRestrictRealtime=true\n\n[Install]\nWantedBy=multi-user.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 /opt/cluster-admin-probe-agent/controller.py --run ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:29:22 UTC] ; stop_time=[Wed 2026-08-05 16:29:23 UTC] ; pid=2040010 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/cluster-admin-probe-agent.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"cluster-admin-probe-agent.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"cluster-admin-probe-agent.service","unit_text":"# /etc/systemd/system/cluster-admin-probe-agent.service\n[Unit]\nDescription=Cluster Admin restricted read-only probe controller\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=oneshot\nUser=clusteradmin\nGroup=clusteradmin\nEnvironment=CLUSTER_ADMIN_PROBE_HEALTH=/var/lib/cluster-admin-probe-agent/cluster-admin-probe-agent.txt\nExecStart=/usr/bin/python3 /opt/cluster-admin-probe-agent/controller.py --run\nUMask=0077\nNoNewPrivileges=yes\nPrivateTmp=yes\nPrivateDevices=yes\nProtectSystem=strict\nProtectHome=yes\nProtectKernelTunables=yes\nProtectKernelModules=yes\nProtectKernelLogs=yes\nProtectControlGroups=yes\nProtectClock=yes\nProtectHostname=yes\nLockPersonality=yes\nMemoryDenyWriteExecute=yes\nRestrictSUIDSGID=yes\nRestrictRealtime=yes\nRemoveIPC=yes\nCapabilityBoundingSet=\nAmbientCapabilities=\nRestrictAddressFamilies=AF_UNIX AF_INET AF_INET6\nIPAddressDeny=any\nIPAddressAllow=<PRIVATE_IPV4>\nIPAddressAllow=<PRIVATE_IPV4>\nIPAddressAllow=<PRIVATE_IPV4>\nIPAddressAllow=<PRIVATE_IPV4>\nReadOnlyPaths=/etc/cluster-admin-probe-agent /opt/cluster-admin-probe-agent\nReadWritePaths=/var/lib/cluster-admin-probe-agent\nStateDirectory=cluster-admin-probe-agent\nStateDirectoryMode=0750\nRuntimeDirectory=cluster-admin-probe-agent\nTimeoutStartSec=70"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/cluster-admin-probe-agent.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"cluster-admin-probe-agent.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"cluster-admin-probe-agent.timer","unit_text":"# /etc/systemd/system/cluster-admin-probe-agent.timer\n[Unit]\nDescription=Run Cluster Admin restricted probes every minute\n\n[Timer]\nOnBootSec=2min\nOnUnitActiveSec=60s\nRandomizedDelaySec=5s\nPersistent=true\nUnit=cluster-admin-probe-agent.service\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/opt/homelab-cluster-admin/full-observer.sh ; argv[]=/opt/homelab-cluster-admin/full-observer.sh ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:29:08 UTC] ; stop_time=[Wed 2026-08-05 16:29:14 UTC] ; pid=2039783 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-full-observer.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"homelab-cluster-admin-full-observer.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-full-observer.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-full-observer.service\n[Unit]\nDescription=Homelab cluster-admin full observer\n\n[Service]\nType=oneshot\nExecStart=/opt/homelab-cluster-admin/full-observer.sh"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-full-observer.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-full-observer.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-full-observer.timer","unit_text":"# /etc/systemd/system/homelab-cluster-admin-full-observer.timer\n[Unit]\nDescription=Run homelab cluster-admin full observer\n\n[Timer]\nOnBootSec=5min\nOnUnitActiveSec=5min\nPersistent=true\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/opt/homelab-cluster-admin/cluster-observer.sh ; argv[]=/opt/homelab-cluster-admin/cluster-observer.sh ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:29:08 UTC] ; stop_time=[Wed 2026-08-05 16:29:08 UTC] ; pid=2039784 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-observer.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"homelab-cluster-admin-observer.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-observer.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-observer.service\n[Unit]\nDescription=Homelab cluster-admin observer\n\n[Service]\nType=oneshot\nExecStart=/opt/homelab-cluster-admin/cluster-observer.sh"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-observer.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-observer.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-observer.timer","unit_text":"# /etc/systemd/system/homelab-cluster-admin-observer.timer\n[Unit]\nDescription=Run homelab cluster-admin observer\n\n[Timer]\nOnBootSec=3min\nOnUnitActiveSec=5min\nPersistent=true\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/opt/homelab-cluster-admin/self-check.sh ; argv[]=/opt/homelab-cluster-admin/self-check.sh ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:29:08 UTC] ; stop_time=[Wed 2026-08-05 16:29:08 UTC] ; pid=2039785 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-self-check.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"homelab-cluster-admin-self-check.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-self-check.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-self-check.service\n[Unit]\nDescription=Homelab cluster-admin self check\n\n[Service]\nType=oneshot\nExecStart=/opt/homelab-cluster-admin/self-check.sh"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-self-check.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-self-check.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-self-check.timer","unit_text":"# /etc/systemd/system/homelab-cluster-admin-self-check.timer\n[Unit]\nDescription=Run homelab cluster-admin self check\n\n[Timer]\nOnBootSec=2min\nOnUnitActiveSec=5min\nPersistent=true\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-update-visibility-index.path","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-update-visibility-index.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-update-visibility-index.path","unit_text":"# /etc/systemd/system/homelab-cluster-admin-update-visibility-index.path\n[Unit]\nDescription=Reapply Cluster Admin update visibility after index regeneration\nStartLimitIntervalSec=0\n\n[Path]\nPathChanged=/var/www/homelab-cluster-admin/index.html\nPathModified=/var/www/homelab-cluster-admin/index.html\nPathChanged=/var/www/homelab-cluster-admin\nUnit=homelab-cluster-admin-update-visibility-index.service\nTriggerLimitIntervalSec=0\n\n[Install]\nWantedBy=multi-user.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/usr/local/sbin/homelab-cluster-admin-update-visibility-index-patcher ; argv[]=/usr/local/sbin/homelab-cluster-admin-update-visibility-index-patcher --config /etc/homelab-cluster-admin-update-visibility-index.json ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:29:23 UTC] ; stop_time=[Wed 2026-08-05 16:29:23 UTC] ; pid=2040044 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-update-visibility-index.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"homelab-cluster-admin-update-visibility-index.path homelab-cluster-admin-update-visibility-index.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-update-visibility-index.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-update-visibility-index.service\n[Unit]\nDescription=Maintain Cluster Admin update visibility card\nAfter=local-fs.target\nStartLimitIntervalSec=0\n\n[Service]\nType=oneshot\nUser=root\nGroup=root\nExecStart=/usr/local/sbin/homelab-cluster-admin-update-visibility-index-patcher --config /etc/homelab-cluster-admin-update-visibility-index.json\nUMask=0022\nNoNewPrivileges=true\nPrivateTmp=true\nProtectHome=read-only\nProtectSystem=full\nReadWritePaths=/var/www/homelab-cluster-admin"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-update-visibility-index.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-update-visibility-index.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-update-visibility-index.timer","unit_text":"# /etc/systemd/system/homelab-cluster-admin-update-visibility-index.timer\n[Unit]\nDescription=Periodic Cluster Admin update visibility repair\n\n[Timer]\nOnBootSec=20s\nOnUnitActiveSec=30s\nAccuracySec=5s\nRandomizedDelaySec=0\nPersistent=true\nUnit=homelab-cluster-admin-update-visibility-index.service\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"inactive","ExecStart":"{ path=/opt/homelab-cluster-admin/render-webpanel-cycle-break.sh ; argv[]=/opt/homelab-cluster-admin/render-webpanel-cycle-break.sh ; ignore_errors=no ; start_time=[Wed 2026-08-05 16:28:53 UTC] ; stop_time=[Wed 2026-08-05 16:28:53 UTC] ; pid=2039687 ; code=exited ; status=0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-webpanel-render.service","LoadState":"loaded","SubState":"dead","TriggeredBy":"homelab-cluster-admin-webpanel-render.timer","Triggers":"","UnitFileState":"static","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-webpanel-render.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-webpanel-render.service\n[Unit]\nDescription=Render Homelab cluster-admin web panel\n\n[Service]\nType=oneshot\nExecStart=/opt/homelab-cluster-admin/render-webpanel.sh\n\n# /etc/systemd/system/homelab-cluster-admin-webpanel-render.service.d/10-cycle-break.conf\n[Service]\nExecStart=\nExecStart=/opt/homelab-cluster-admin/render-webpanel-cycle-break.sh"},{"cat_rc":0,"show":{"ActiveState":"active","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-webpanel-render.timer","LoadState":"loaded","SubState":"waiting","TriggeredBy":"","Triggers":"homelab-cluster-admin-webpanel-render.service","UnitFileState":"enabled"},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-webpanel-render.timer","unit_text":"# /etc/systemd/system/homelab-cluster-admin-webpanel-render.timer\n[Unit]\nDescription=Refresh Homelab cluster-admin web panel\n\n[Timer]\nOnBootSec=1min\nOnUnitActiveSec=1min\nPersistent=true\n\n[Install]\nWantedBy=timers.target"},{"cat_rc":0,"show":{"ActiveState":"active","ExecStart":"{ path=/usr/bin/python3 ; argv[]=/usr/bin/python3 -m http.server 8080 --bind 0.0.0.0 --directory /var/www/homelab-cluster-admin ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }","FragmentPath":"/etc/systemd/system/homelab-cluster-admin-webpanel.service","LoadState":"loaded","SubState":"running","TriggeredBy":"","Triggers":"","UnitFileState":"enabled","WorkingDirectory":""},"show_rc":0,"signature_hits":[],"source_path_hits":[],"unit":"homelab-cluster-admin-webpanel.service","unit_text":"# /etc/systemd/system/homelab-cluster-admin-webpanel.service\n[Unit]\nDescription=Homelab cluster-admin web panel\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nExecStart=/usr/bin/python3 -m http.server 8080 --bind 0.0.0.0 --directory /var/www/homelab-cluster-admin\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target"}]},"rollback_restored":false,"rollback_started":false,"schema":35,"screenshot_observation":{"basis":"user-provided screenshot","updates_card_visible":false,"visible_title":"Cluster Admin Incident Engine"},"status":"OK","transport":{"rc":0,"stderr":"","stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_bytes":41666,"stdout_sha256":"0a63da0d742aa53085f8fe9e7ad2e1d7ff810fa267eddb048fc11ec3dae71786"},"v34_exact_result":{"changes_made":true,"control_plane_error":null,"identity_confirmed":true,"internal_http_good_routes":[{"html_status":200,"json_status":200,"port":8080,"root_card":true,"root_marker":true,"root_status":200,"scheme":"http"}],"mutation_outcome":"MUTATED","output_bytes":3062,"output_sha256":"78f0ba6d511b1bd7f444504882982d2736faad0094eab12895e2c75736bee63f","rollback_restored":false,"rollback_started":false,"runner_document_rc":0,"runner_json_sha256":"be9ef7f5b17b5f96195a321c99cde6768c9a0649e1cc9738cb4e2657261399ad","runner_rc":0,"runner_status":"OK","runner_text_sha256":"702eb0207998708662ee9f79c931ac4c1e229b1f352300d79b05354075454568","runner_wrapper_matches_document":true,"state_document_sha256":"0373687b69a965476ea11cb0a48b23a9cedffd9e1f07010e2fbc861d12ab771e","state_status":"OK","timer_self_heal_seconds":36}}

OUTPUT_END
CHAT_OUTPUT_END
