1
0
Files
homelab-public-context/runtime/latest.json
T

39 lines
51 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"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",
"started_at_utc": "2026-08-05T16:29:21Z",
"finished_at_utc": "2026-08-05T16:30:14Z",
"reference_register_checked": true,
"reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e",
"error_register_checked": true,
"error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83",
"command_sha256": "82f5d85404b8419244364987a5ca91796759e162a7a118f96f6f4396befe5198",
"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": "27b6cb0b8eb8288db3fbf28a4fe5d03d7c8d88f79b464cef2a261ccd0811e876",
"sanitized_output_sha256": "db4f6d44451f8920c1e8ffc0966413765f623391053e3dac989965f3de9b4eaf",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "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}\n{\"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}}\n"
}