From 3651a6fcee4bd0391bc006de0b13478862baf3d8 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Sat, 1 Aug 2026 13:48:57 +0000 Subject: [PATCH] runtime: publish HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z --- ...DEEP-READ-ONLY-AUDIT-20260801T133800Z.json | 38 +++++++++++++++++++ ...-DEEP-READ-ONLY-AUDIT-20260801T133800Z.txt | 34 +++++++++++++++++ runtime/latest.json | 26 ++++++------- runtime/latest.txt | 24 ++++++------ 4 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.json create mode 100644 runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.txt diff --git a/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.json b/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.json new file mode 100644 index 0000000..628a5ba --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "verify", + "component": "cluster-v41-deep-audit", + "started_at_utc": "2026-08-01T13:48:51Z", + "finished_at_utc": "2026-08-01T13:48:56Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c", + "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": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", + "sanitized_output_sha256": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"audit_duration_seconds\":5.276,\"audit_scope\":\"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities\",\"changes_made\":false,\"command_evidence\":{\"apt_simulated_upgrade\":{\"duration_seconds\":0.63,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\",\"stdout_truncated\":false},\"backup_jobs\":{\"duration_seconds\":0.47,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"backup_tasks\":{\"duration_seconds\":0.484,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"ceph_health\":{\"duration_seconds\":0.061,\"rc\":1,\"stderr_excerpt\":\"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\\n\",\"stderr_sha256\":\"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cert_pve-ssl.pem\":{\"duration_seconds\":0.009,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"stdout_truncated\":false},\"cert_pveproxy-ssl.pem\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"stdout_truncated\":false},\"cluster_status_json\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cluster_vm_resources\":{\"duration_seconds\":0.465,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"df_bytes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d\",\"stdout_truncated\":false},\"df_inodes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774\",\"stdout_truncated\":false},\"ha_resources\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"hostname\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430\",\"stdout_truncated\":false},\"kernel\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471\",\"stdout_truncated\":false},\"kernel_errors_7d\":{\"duration_seconds\":0.047,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d\",\"stdout_truncated\":false},\"lvs_json\":{\"duration_seconds\":0.023,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196\",\"stdout_truncated\":false},\"nodes_json\":{\"duration_seconds\":0.459,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pve_firewall_status\":{\"duration_seconds\":0.352,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvecm_status\":{\"duration_seconds\":0.155,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvesm_status_json\":{\"duration_seconds\":0.232,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pveversion\":{\"duration_seconds\":0.36,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a\",\"stdout_truncated\":false},\"replication_jobs\":{\"duration_seconds\":0.472,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"service_corosync\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pve-cluster\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvedaemon\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pveproxy\":{\"duration_seconds\":0.004,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvescheduler\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvestatd\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"smart_health_0\":{\"duration_seconds\":0.011,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a\",\"stdout_truncated\":false},\"smart_scan\":{\"duration_seconds\":0.008,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb\",\"stdout_truncated\":false},\"sshd_effective\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c\",\"stdout_truncated\":false},\"systemd_failed\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0\",\"stdout_truncated\":false},\"timedatectl\":{\"duration_seconds\":0.044,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179\",\"stdout_truncated\":false},\"uptime\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64\",\"stdout_truncated\":false},\"zpool_status\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac\",\"stderr_truncated\":false,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false}},\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"control_plane_error\":null,\"fatal_errors\":[],\"findings\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"},{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"},{\"action\":\"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.\",\"category\":\"network\",\"evidence\":{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2},\"severity\":\"MEDIUM\",\"task_id\":\"NET-DROPS-wt0\",\"title\":\"Есть сетевые ошибки/дропы на wt0\"},{\"action\":\"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.\",\"category\":\"security\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"MEDIUM\",\"task_id\":\"FIREWALL-STATE\",\"title\":\"Proxmox firewall не подтверждён как enabled/running\"},{\"action\":\"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"MEDIUM\",\"task_id\":\"SSH-ROOT-LOGIN\",\"title\":\"Разрешён прямой SSH-доступ root\"},{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}],\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"production_site_changed\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"sections\":{\"backups\":{\"backup_storages\":[],\"failed_recent\":[],\"guest_backup_state\":[],\"inventory_count\":0,\"jobs\":[],\"recent_tasks\":[]},\"capacity\":{\"guests\":[],\"memory_overcommit\":[],\"nodes\":[]},\"cluster_nodes\":[],\"cluster_quorum\":{\"parsed\":{},\"raw_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"hardware\":{\"cpu_count\":24,\"kernel_critical_pattern_count_7d\":0,\"kernel_priority_0_3_count_7d\":9,\"load_15_per_cpu\":0.02,\"load_1_5_15\":[0.41,0.4,0.42],\"memory_available\":8871043072,\"memory_available_percent\":26.58,\"memory_total\":33379028992,\"smart_health\":[{\"device\":\"/dev/nvme0\",\"output_sha256\":\"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105\",\"passed\":true,\"rc\":0,\"unknown\":false}],\"swap_total\":10737414144,\"swap_used_percent\":0.0,\"temperatures\":[{\"celsius\":27.8,\"sensor\":\"acpitz\"},{\"celsius\":41.0,\"sensor\":\"x86_pkg_temp\"}]},\"identity\":{\"audit_utc\":\"2026-08-01T13:48:52.070106+00:00\",\"hostname\":\"pve01.gram1.ru\",\"kernel\":\"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux\",\"pveversion\":\"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\\nproxmox-kernel-helper: 9.2.0\\nproxmox-kernel-7.0: 7.0.12-1\\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\\nceph-fuse: 19.2.3-pve4\\ncorosync: 3.1.10-pve2\\ncriu: 4.1.1-1\\nfrr-pythontools: 10.6.1-1+pve2\\nifupdown2: 3.3.0-1+pmx12\\nintel-microcode: 3.20251111.1~deb13u1\\nksm-control-daemon: 1.5-1\\nlibjs-extjs: 7.0.0-5\\nlibproxmox-acme-perl: 1.7.1\\nlibproxmox-backup-qemu0: 2.0.2\\nlibproxmox-rs-perl: 0.4.1\\nlibpve-access-control: 9.1.1\\nlibpve-apiclient-perl: 3.4.2\\nlibpve-cluster-api-perl: 9.1.6\\nlibpve-cluster-perl: 9.1.6\\nlibpve-common-perl: 9.1.16\\nlibpve-guest-common-perl: 6.0.4\\nlibpve-http-server-perl: 6.0.5\\nlibpve-network-perl: 1.6.6\\nlibpve-notify-perl: 9.1.6\\nlibpve-rs-perl: 0.15.3\\nlibpve-storage-perl: 9.1.6\\nlibspice-server1: 0.15.2-1+b1\\nlvm2: 2.03.31-2+pmx1\\nlxc-pve: 7.0.0-2\\nlxcfs: 7.0.0-pve1\\nnovnc-pve: 1.7.0-1\\nproxmox-backup-client: 4.2.2-1\\nproxmox-backup-file-restore: 4.2.2-1\\nproxmox-backup-restore-image: 1.0.0\\nproxmox-firewall: 1.2.3\\nproxmox-kernel-helper: 9.2.0\\nproxmox-mail-forward: 1.0.3\\nproxmox-mini-journalreader: 1.6\\nproxmox-offline-mirror-helper: 0.7.4\\nproxmox-widget-toolkit: 5.2.5\\npve-cluster: 9.1.6\\npve-container: 6.1.10\\npve-docs: 9.2.2\\npve-edk2-firmware: 4.2025.05-2\\npve-esxi-import-tools: 1.0.1\\npve-firewall: 6.0.4\\npve-firmware: 3.18-4\\npve-ha-manager: 5.2.4\\npve-i18n: 3.8.0\\npve-qemu-kvm: 11.0.0-4\\npve-xtermjs: 6.0.0-1\\nqemu-server: 9.1.17\\nsmartmontools: 7.5-pve2\\nspiceterm: 3.4.2\\nswtpm: 0.8.0+pve3\\nvncterm: 1.9.2\\nzfsutils-linux: 2.4.2-pve1\",\"uptime\":\"up 4 days, 2 hours, 43 minutes\"},\"network\":{\"bonds\":[],\"interfaces\":[{\"interface\":\"bonding_masters\",\"mtu\":null,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"enx6c1ff7c17576\",\"mtu\":1500,\"operstate\":\"down\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"nic0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":11827,\"rx_errors\":0,\"tx_dropped\":6,\"tx_errors\":0},{\"interface\":\"podman0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap150i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap170i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap171i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth110i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth112i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"vmbr0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":9,\"tx_errors\":0},{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2}]},\"resilience\":{\"ha_resources\":[],\"replication_jobs\":[],\"snapshots\":[]},\"security_updates\":{\"certificates\":[{\"days_remaining\":680.7,\"not_after\":\"2028-06-12T07:27:09+00:00\",\"output_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"path\":\"/etc/pve/local/pve-ssl.pem\"},{\"days_remaining\":45.1,\"not_after\":\"2026-09-15T16:01:38+00:00\",\"output_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"path\":\"/etc/pve/local/pveproxy-ssl.pem\"}],\"firewall_status\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"reboot_required\":false,\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"time\":{\"NTP\":\"yes\",\"NTPSynchronized\":\"yes\",\"Timezone\":\"Europe/Moscow\"},\"upgradable_count\":92,\"upgradable_packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"]},\"services\":{\"failed_units\":[{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"}],\"key_services\":{\"corosync\":\"active\",\"pve-cluster\":\"active\",\"pvedaemon\":\"active\",\"pveproxy\":\"active\",\"pvescheduler\":\"active\",\"pvestatd\":\"active\"}},\"storage\":{\"ceph_health\":null,\"filesystems\":[{\"available\":85349027840,\"filesystem\":\"/dev/mapper/pve-root\",\"inode_used_percent\":3.0,\"mount\":\"/\",\"total\":105089261568,\"type\":\"ext4\",\"used\":14354747392,\"used_percent\":15.0},{\"available\":53818,\"filesystem\":\"efivarfs\",\"inode_used_percent\":null,\"mount\":\"/sys/firmware/efi/efivars\",\"total\":196608,\"type\":\"efivarfs\",\"used\":137670,\"used_percent\":72.0},{\"available\":1062166528,\"filesystem\":\"/dev/nvme0n1p2\",\"inode_used_percent\":null,\"mount\":\"/boot/efi\",\"total\":1071628288,\"type\":\"vfat\",\"used\":9461760,\"used_percent\":1.0},{\"available\":141639290880,\"filesystem\":\"/dev/mapper/pve-homelab--staging\",\"inode_used_percent\":1.0,\"mount\":\"/mnt/staging\",\"total\":315926315008,\"type\":\"ext4\",\"used\":158164119552,\"used_percent\":53.0},{\"available\":132767744,\"filesystem\":\"/dev/fuse\",\"inode_used_percent\":1.0,\"mount\":\"/etc/pve\",\"total\":134217728,\"type\":\"fuse\",\"used\":1449984,\"used_percent\":2.0},{\"available\":85349027840,\"filesystem\":\"overlay\",\"inode_used_percent\":3.0,\"mount\":\"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged\",\"total\":105089261568,\"type\":\"overlay\",\"used\":14354747392,\"used_percent\":15.0}],\"lvm_report_present\":true,\"mdstat_sha256\":\"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8\",\"pvesm\":[],\"zpool_summary\":\"\"}},\"status\":\"OK\",\"summary\":{\"critical_count\":2,\"critical_tasks\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"}],\"high_count\":5,\"high_priority_tasks\":[{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"}],\"info_count\":0,\"low_count\":0,\"medium_count\":3,\"opportunity_count\":4,\"recommended_next_projects\":[{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}]}}\n" +} diff --git a/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.txt b/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.txt new file mode 100644 index 0000000..a7e0e15 --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=verify +COMPONENT=cluster-v41-deep-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c +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=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 +SANITIZED_OUTPUT_SHA256=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"audit_duration_seconds":5.276,"audit_scope":"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities","changes_made":false,"command_evidence":{"apt_simulated_upgrade":{"duration_seconds":0.63,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8","stdout_truncated":false},"backup_jobs":{"duration_seconds":0.47,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"backup_tasks":{"duration_seconds":0.484,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"ceph_health":{"duration_seconds":0.061,"rc":1,"stderr_excerpt":"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\n","stderr_sha256":"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cert_pve-ssl.pem":{"duration_seconds":0.009,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","stdout_truncated":false},"cert_pveproxy-ssl.pem":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","stdout_truncated":false},"cluster_status_json":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cluster_vm_resources":{"duration_seconds":0.465,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"df_bytes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d","stdout_truncated":false},"df_inodes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774","stdout_truncated":false},"ha_resources":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"hostname":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430","stdout_truncated":false},"kernel":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471","stdout_truncated":false},"kernel_errors_7d":{"duration_seconds":0.047,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d","stdout_truncated":false},"lvs_json":{"duration_seconds":0.023,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196","stdout_truncated":false},"nodes_json":{"duration_seconds":0.459,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pve_firewall_status":{"duration_seconds":0.352,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvecm_status":{"duration_seconds":0.155,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvesm_status_json":{"duration_seconds":0.232,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pveversion":{"duration_seconds":0.36,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a","stdout_truncated":false},"replication_jobs":{"duration_seconds":0.472,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"service_corosync":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pve-cluster":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvedaemon":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pveproxy":{"duration_seconds":0.004,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvescheduler":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvestatd":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"smart_health_0":{"duration_seconds":0.011,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a","stdout_truncated":false},"smart_scan":{"duration_seconds":0.008,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb","stdout_truncated":false},"sshd_effective":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c","stdout_truncated":false},"systemd_failed":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0","stdout_truncated":false},"timedatectl":{"duration_seconds":0.044,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179","stdout_truncated":false},"uptime":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64","stdout_truncated":false},"zpool_status":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac","stderr_truncated":false,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false}},"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","control_plane_error":null,"fatal_errors":[],"findings":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"},{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"},{"action":"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.","category":"network","evidence":{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2},"severity":"MEDIUM","task_id":"NET-DROPS-wt0","title":"Есть сетевые ошибки/дропы на wt0"},{"action":"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.","category":"security","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"MEDIUM","task_id":"FIREWALL-STATE","title":"Proxmox firewall не подтверждён как enabled/running"},{"action":"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"MEDIUM","task_id":"SSH-ROOT-LOGIN","title":"Разрешён прямой SSH-доступ root"},{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}],"gitea_changed":false,"mutation_outcome":"NO_MUTATION","production_site_changed":false,"rc":0,"rollback_restored":null,"rollback_started":false,"schema":1,"sections":{"backups":{"backup_storages":[],"failed_recent":[],"guest_backup_state":[],"inventory_count":0,"jobs":[],"recent_tasks":[]},"capacity":{"guests":[],"memory_overcommit":[],"nodes":[]},"cluster_nodes":[],"cluster_quorum":{"parsed":{},"raw_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"hardware":{"cpu_count":24,"kernel_critical_pattern_count_7d":0,"kernel_priority_0_3_count_7d":9,"load_15_per_cpu":0.02,"load_1_5_15":[0.41,0.4,0.42],"memory_available":8871043072,"memory_available_percent":26.58,"memory_total":33379028992,"smart_health":[{"device":"/dev/nvme0","output_sha256":"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105","passed":true,"rc":0,"unknown":false}],"swap_total":10737414144,"swap_used_percent":0.0,"temperatures":[{"celsius":27.8,"sensor":"acpitz"},{"celsius":41.0,"sensor":"x86_pkg_temp"}]},"identity":{"audit_utc":"2026-08-01T13:48:52.070106+00:00","hostname":"pve01.gram1.ru","kernel":"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux","pveversion":"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\nproxmox-kernel-helper: 9.2.0\nproxmox-kernel-7.0: 7.0.12-1\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\nceph-fuse: 19.2.3-pve4\ncorosync: 3.1.10-pve2\ncriu: 4.1.1-1\nfrr-pythontools: 10.6.1-1+pve2\nifupdown2: 3.3.0-1+pmx12\nintel-microcode: 3.20251111.1~deb13u1\nksm-control-daemon: 1.5-1\nlibjs-extjs: 7.0.0-5\nlibproxmox-acme-perl: 1.7.1\nlibproxmox-backup-qemu0: 2.0.2\nlibproxmox-rs-perl: 0.4.1\nlibpve-access-control: 9.1.1\nlibpve-apiclient-perl: 3.4.2\nlibpve-cluster-api-perl: 9.1.6\nlibpve-cluster-perl: 9.1.6\nlibpve-common-perl: 9.1.16\nlibpve-guest-common-perl: 6.0.4\nlibpve-http-server-perl: 6.0.5\nlibpve-network-perl: 1.6.6\nlibpve-notify-perl: 9.1.6\nlibpve-rs-perl: 0.15.3\nlibpve-storage-perl: 9.1.6\nlibspice-server1: 0.15.2-1+b1\nlvm2: 2.03.31-2+pmx1\nlxc-pve: 7.0.0-2\nlxcfs: 7.0.0-pve1\nnovnc-pve: 1.7.0-1\nproxmox-backup-client: 4.2.2-1\nproxmox-backup-file-restore: 4.2.2-1\nproxmox-backup-restore-image: 1.0.0\nproxmox-firewall: 1.2.3\nproxmox-kernel-helper: 9.2.0\nproxmox-mail-forward: 1.0.3\nproxmox-mini-journalreader: 1.6\nproxmox-offline-mirror-helper: 0.7.4\nproxmox-widget-toolkit: 5.2.5\npve-cluster: 9.1.6\npve-container: 6.1.10\npve-docs: 9.2.2\npve-edk2-firmware: 4.2025.05-2\npve-esxi-import-tools: 1.0.1\npve-firewall: 6.0.4\npve-firmware: 3.18-4\npve-ha-manager: 5.2.4\npve-i18n: 3.8.0\npve-qemu-kvm: 11.0.0-4\npve-xtermjs: 6.0.0-1\nqemu-server: 9.1.17\nsmartmontools: 7.5-pve2\nspiceterm: 3.4.2\nswtpm: 0.8.0+pve3\nvncterm: 1.9.2\nzfsutils-linux: 2.4.2-pve1","uptime":"up 4 days, 2 hours, 43 minutes"},"network":{"bonds":[],"interfaces":[{"interface":"bonding_masters","mtu":null,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"enx6c1ff7c17576","mtu":1500,"operstate":"down","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"nic0","mtu":1500,"operstate":"up","rx_dropped":11827,"rx_errors":0,"tx_dropped":6,"tx_errors":0},{"interface":"podman0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap150i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap170i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap171i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth110i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth112i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"vmbr0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":9,"tx_errors":0},{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2}]},"resilience":{"ha_resources":[],"replication_jobs":[],"snapshots":[]},"security_updates":{"certificates":[{"days_remaining":680.7,"not_after":"2028-06-12T07:27:09+00:00","output_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","path":"/etc/pve/local/pve-ssl.pem"},{"days_remaining":45.1,"not_after":"2026-09-15T16:01:38+00:00","output_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","path":"/etc/pve/local/pveproxy-ssl.pem"}],"firewall_status":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","reboot_required":false,"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"time":{"NTP":"yes","NTPSynchronized":"yes","Timezone":"Europe/Moscow"},"upgradable_count":92,"upgradable_packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"]},"services":{"failed_units":[{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"}],"key_services":{"corosync":"active","pve-cluster":"active","pvedaemon":"active","pveproxy":"active","pvescheduler":"active","pvestatd":"active"}},"storage":{"ceph_health":null,"filesystems":[{"available":85349027840,"filesystem":"/dev/mapper/pve-root","inode_used_percent":3.0,"mount":"/","total":105089261568,"type":"ext4","used":14354747392,"used_percent":15.0},{"available":53818,"filesystem":"efivarfs","inode_used_percent":null,"mount":"/sys/firmware/efi/efivars","total":196608,"type":"efivarfs","used":137670,"used_percent":72.0},{"available":1062166528,"filesystem":"/dev/nvme0n1p2","inode_used_percent":null,"mount":"/boot/efi","total":1071628288,"type":"vfat","used":9461760,"used_percent":1.0},{"available":141639290880,"filesystem":"/dev/mapper/pve-homelab--staging","inode_used_percent":1.0,"mount":"/mnt/staging","total":315926315008,"type":"ext4","used":158164119552,"used_percent":53.0},{"available":132767744,"filesystem":"/dev/fuse","inode_used_percent":1.0,"mount":"/etc/pve","total":134217728,"type":"fuse","used":1449984,"used_percent":2.0},{"available":85349027840,"filesystem":"overlay","inode_used_percent":3.0,"mount":"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged","total":105089261568,"type":"overlay","used":14354747392,"used_percent":15.0}],"lvm_report_present":true,"mdstat_sha256":"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8","pvesm":[],"zpool_summary":""}},"status":"OK","summary":{"critical_count":2,"critical_tasks":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"}],"high_count":5,"high_priority_tasks":[{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"}],"info_count":0,"low_count":0,"medium_count":3,"opportunity_count":4,"recommended_next_projects":[{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}]}} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 9e0e14f..628a5ba 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,38 +1,38 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z", + "command_id": "HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z", "status": "OK", "rc": 0, "host": "pve01", - "mode": "change", - "component": "gram1-charts-v40-interactive", - "started_at_utc": "2026-08-01T13:21:27Z", - "finished_at_utc": "2026-08-01T13:21:36Z", + "mode": "verify", + "component": "cluster-v41-deep-audit", + "started_at_utc": "2026-08-01T13:48:51Z", + "finished_at_utc": "2026-08-01T13:48:56Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "623820f5e01c2e41e1b4491c485b282f66edb8ea4a6272edcab75e4036d38764", + "command_sha256": "9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "OK", + "result_contract_status": null, "result_contract_error": null, "command_rc": 0, - "changes_made": true, + "changes_made": false, "rollback_started": false, "rollback_restored": null, - "mutation_outcome": "MUTATED", + "mutation_outcome": "NO_MUTATION", "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "f42bf632b56cf7728b4cdd66760e8dff23613da0d0ad2044d535892e4e604334", - "sanitized_output_sha256": "37d914443f4f7c5fecd4c9f8eb54ba0b23c1d7e9f799e1bddb669114c7bac499", + "raw_evidence_sha256": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", + "sanitized_output_sha256": "d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":true,\"command_id\":\"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z\",\"mutation_outcome\":\"MUTATED\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"changes_made\":true,\"command_id\":\"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z\",\"control_plane_error\":null,\"gitea_changed\":false,\"mutation_outcome\":\"MUTATED\",\"pinned_host_key_aliases\":[\"[PRIVATE_IP]\"],\"production_site_changed\":true,\"rc\":0,\"remote_result\":{\"backup_dir\":\"/var/lib/homelab-change-rollback/GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z\",\"baseline_capsule_sha256\":\"0bf18dfcd9b6e065093402e505dbc0c98abba6634a9991fe969d0ffbb3bcc74b\",\"baseline_command_id\":\"GRAM1-SITE-CHARTS-V39-SEPARATE-PIPELINES-20260801T125100Z\",\"baseline_target_index_sha256\":\"d60f575395d203b3d638c2416daa1f981a4a827b9d61caf2d1b90bf0e8063d65\",\"candidate_checks\":{\"details\":true,\"hide_status\":true,\"interactive_api\":true,\"legacy_observer\":true,\"library_compat\":true,\"messages\":true,\"new_root\":true,\"new_script\":true,\"new_style\":true,\"no_false_status\":true,\"no_static_images\":true,\"one_open\":true,\"single_open\":true,\"slots\":true},\"changed_paths\":[\"templates/index.html\"],\"changes_made\":true,\"command_id\":\"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z\",\"control_plane_error\":null,\"deployment\":{\"container_hashes\":[{\"path\":\"app.py\",\"service\":\"web\",\"sha256\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\"},{\"path\":\"templates/index.html\",\"service\":\"web\",\"sha256\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\"},{\"path\":\"worker.py\",\"service\":\"worker\",\"sha256\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}],\"running\":[\"web\",\"worker\"],\"runtime\":{\"klines\":{\"AVAX\":{\"bytes\":5300,\"candles\":72,\"sha256\":\"394a866f7adf695deb7bf2bcff38661185554543797d48b69b0573d195e9f4b0\"},\"HBAR\":{\"bytes\":6619,\"candles\":84,\"sha256\":\"668f4ef05e73a702ccb74a4180660cc315c3f80720662f968fd458132d6ec395\"},\"LINK\":{\"bytes\":6821,\"candles\":92,\"sha256\":\"5ef4ee04826583c5a040e001d6619ac3cc402f3cce1a8a36d4a7870ff7851aac\"},\"POL\":{\"bytes\":1950,\"candles\":24,\"sha256\":\"40a4341b3e11ad7941e9d42facf81d04135972e7b2cbc936582b2284222396cc\"}},\"local_headers\":{\"server\":\"uvicorn\"},\"local_root_sha256\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"public\":{\"headers\":{},\"root_sha256\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"status\":200}}},\"diagnostic_capsule_sha256\":\"7e704e0217aabc9d825ee36d299b74f51d05f482ee543d706a024b53a3177147\",\"diagnostic_command_id\":\"GRAM1-SITE-CHARTS-V38R1-SUDO-PROBE-LINECOUNT-FIX-20260801T124200Z\",\"duration_seconds\":8.392,\"gitea_changed\":false,\"mutation_outcome\":\"MUTATED\",\"old_sha256\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"templates/index.html\":\"d60f575395d203b3d638c2416daa1f981a4a827b9d61caf2d1b90bf0e8063d65\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"},\"production_site_changed\":true,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"status\":\"OK\",\"target_sha256\":{\"app.py\":\"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d\",\"templates/index.html\":\"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2\",\"worker.py\":\"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c\"}},\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"selected_method\":\"ALIAS_PINNED_AS_DEBIAN\",\"ssh_method_probes\":[{\"duration_seconds\":0.114,\"identity_count\":null,\"identity_sudo_read_ok\":true,\"name\":\"ALIAS_PINNED_AS_DEBIAN\",\"rc\":0,\"stderr\":\"\"},{\"duration_seconds\":0.126,\"identity_count\":2,\"identity_sudo_read_ok\":true,\"name\":\"DIRECT_PINNED_AS_DEBIAN_NO_PROXY\",\"rc\":0,\"stderr\":\"\"}],\"status\":\"OK\"}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"mutation_outcome\":\"NO_MUTATION\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"audit_duration_seconds\":5.276,\"audit_scope\":\"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities\",\"changes_made\":false,\"command_evidence\":{\"apt_simulated_upgrade\":{\"duration_seconds\":0.63,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\",\"stdout_truncated\":false},\"backup_jobs\":{\"duration_seconds\":0.47,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"backup_tasks\":{\"duration_seconds\":0.484,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"ceph_health\":{\"duration_seconds\":0.061,\"rc\":1,\"stderr_excerpt\":\"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\\n\",\"stderr_sha256\":\"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cert_pve-ssl.pem\":{\"duration_seconds\":0.009,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"stdout_truncated\":false},\"cert_pveproxy-ssl.pem\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"stdout_truncated\":false},\"cluster_status_json\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"cluster_vm_resources\":{\"duration_seconds\":0.465,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"df_bytes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d\",\"stdout_truncated\":false},\"df_inodes\":{\"duration_seconds\":0.002,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774\",\"stdout_truncated\":false},\"ha_resources\":{\"duration_seconds\":0.461,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"hostname\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430\",\"stdout_truncated\":false},\"kernel\":{\"duration_seconds\":0.001,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471\",\"stdout_truncated\":false},\"kernel_errors_7d\":{\"duration_seconds\":0.047,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d\",\"stdout_truncated\":false},\"lvs_json\":{\"duration_seconds\":0.023,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196\",\"stdout_truncated\":false},\"nodes_json\":{\"duration_seconds\":0.459,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pve_firewall_status\":{\"duration_seconds\":0.352,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvecm_status\":{\"duration_seconds\":0.155,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pvesm_status_json\":{\"duration_seconds\":0.232,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"pveversion\":{\"duration_seconds\":0.36,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a\",\"stdout_truncated\":false},\"replication_jobs\":{\"duration_seconds\":0.472,\"rc\":255,\"stderr_excerpt\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"stderr_sha256\":\"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228\",\"stderr_truncated\":false,\"stdout_excerpt\":\"\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false},\"service_corosync\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pve-cluster\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvedaemon\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pveproxy\":{\"duration_seconds\":0.004,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvescheduler\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"service_pvestatd\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659\",\"stdout_truncated\":false},\"smart_health_0\":{\"duration_seconds\":0.011,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a\",\"stdout_truncated\":false},\"smart_scan\":{\"duration_seconds\":0.008,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb\",\"stdout_truncated\":false},\"sshd_effective\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c\",\"stdout_truncated\":false},\"systemd_failed\":{\"duration_seconds\":0.005,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0\",\"stdout_truncated\":false},\"timedatectl\":{\"duration_seconds\":0.044,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179\",\"stdout_truncated\":false},\"uptime\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_sha256\":\"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64\",\"stdout_truncated\":false},\"zpool_status\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr_sha256\":\"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac\",\"stderr_truncated\":false,\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_truncated\":false}},\"command_id\":\"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z\",\"control_plane_error\":null,\"fatal_errors\":[],\"findings\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"},{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"},{\"action\":\"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.\",\"category\":\"network\",\"evidence\":{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2},\"severity\":\"MEDIUM\",\"task_id\":\"NET-DROPS-wt0\",\"title\":\"Есть сетевые ошибки/дропы на wt0\"},{\"action\":\"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.\",\"category\":\"security\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"MEDIUM\",\"task_id\":\"FIREWALL-STATE\",\"title\":\"Proxmox firewall не подтверждён как enabled/running\"},{\"action\":\"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"MEDIUM\",\"task_id\":\"SSH-ROOT-LOGIN\",\"title\":\"Разрешён прямой SSH-доступ root\"},{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}],\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"production_site_changed\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"schema\":1,\"sections\":{\"backups\":{\"backup_storages\":[],\"failed_recent\":[],\"guest_backup_state\":[],\"inventory_count\":0,\"jobs\":[],\"recent_tasks\":[]},\"capacity\":{\"guests\":[],\"memory_overcommit\":[],\"nodes\":[]},\"cluster_nodes\":[],\"cluster_quorum\":{\"parsed\":{},\"raw_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"hardware\":{\"cpu_count\":24,\"kernel_critical_pattern_count_7d\":0,\"kernel_priority_0_3_count_7d\":9,\"load_15_per_cpu\":0.02,\"load_1_5_15\":[0.41,0.4,0.42],\"memory_available\":8871043072,\"memory_available_percent\":26.58,\"memory_total\":33379028992,\"smart_health\":[{\"device\":\"/dev/nvme0\",\"output_sha256\":\"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105\",\"passed\":true,\"rc\":0,\"unknown\":false}],\"swap_total\":10737414144,\"swap_used_percent\":0.0,\"temperatures\":[{\"celsius\":27.8,\"sensor\":\"acpitz\"},{\"celsius\":41.0,\"sensor\":\"x86_pkg_temp\"}]},\"identity\":{\"audit_utc\":\"2026-08-01T13:48:52.070106+00:00\",\"hostname\":\"pve01.gram1.ru\",\"kernel\":\"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux\",\"pveversion\":\"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\\nproxmox-kernel-helper: 9.2.0\\nproxmox-kernel-7.0: 7.0.12-1\\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\\nceph-fuse: 19.2.3-pve4\\ncorosync: 3.1.10-pve2\\ncriu: 4.1.1-1\\nfrr-pythontools: 10.6.1-1+pve2\\nifupdown2: 3.3.0-1+pmx12\\nintel-microcode: 3.20251111.1~deb13u1\\nksm-control-daemon: 1.5-1\\nlibjs-extjs: 7.0.0-5\\nlibproxmox-acme-perl: 1.7.1\\nlibproxmox-backup-qemu0: 2.0.2\\nlibproxmox-rs-perl: 0.4.1\\nlibpve-access-control: 9.1.1\\nlibpve-apiclient-perl: 3.4.2\\nlibpve-cluster-api-perl: 9.1.6\\nlibpve-cluster-perl: 9.1.6\\nlibpve-common-perl: 9.1.16\\nlibpve-guest-common-perl: 6.0.4\\nlibpve-http-server-perl: 6.0.5\\nlibpve-network-perl: 1.6.6\\nlibpve-notify-perl: 9.1.6\\nlibpve-rs-perl: 0.15.3\\nlibpve-storage-perl: 9.1.6\\nlibspice-server1: 0.15.2-1+b1\\nlvm2: 2.03.31-2+pmx1\\nlxc-pve: 7.0.0-2\\nlxcfs: 7.0.0-pve1\\nnovnc-pve: 1.7.0-1\\nproxmox-backup-client: 4.2.2-1\\nproxmox-backup-file-restore: 4.2.2-1\\nproxmox-backup-restore-image: 1.0.0\\nproxmox-firewall: 1.2.3\\nproxmox-kernel-helper: 9.2.0\\nproxmox-mail-forward: 1.0.3\\nproxmox-mini-journalreader: 1.6\\nproxmox-offline-mirror-helper: 0.7.4\\nproxmox-widget-toolkit: 5.2.5\\npve-cluster: 9.1.6\\npve-container: 6.1.10\\npve-docs: 9.2.2\\npve-edk2-firmware: 4.2025.05-2\\npve-esxi-import-tools: 1.0.1\\npve-firewall: 6.0.4\\npve-firmware: 3.18-4\\npve-ha-manager: 5.2.4\\npve-i18n: 3.8.0\\npve-qemu-kvm: 11.0.0-4\\npve-xtermjs: 6.0.0-1\\nqemu-server: 9.1.17\\nsmartmontools: 7.5-pve2\\nspiceterm: 3.4.2\\nswtpm: 0.8.0+pve3\\nvncterm: 1.9.2\\nzfsutils-linux: 2.4.2-pve1\",\"uptime\":\"up 4 days, 2 hours, 43 minutes\"},\"network\":{\"bonds\":[],\"interfaces\":[{\"interface\":\"bonding_masters\",\"mtu\":null,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"enx6c1ff7c17576\",\"mtu\":1500,\"operstate\":\"down\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"nic0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":11827,\"rx_errors\":0,\"tx_dropped\":6,\"tx_errors\":0},{\"interface\":\"podman0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap150i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap170i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"tap171i0\",\"mtu\":1500,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth110i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"veth112i0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":0,\"tx_errors\":0},{\"interface\":\"vmbr0\",\"mtu\":1500,\"operstate\":\"up\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":9,\"tx_errors\":0},{\"interface\":\"wt0\",\"mtu\":1280,\"operstate\":\"unknown\",\"rx_dropped\":0,\"rx_errors\":0,\"tx_dropped\":1,\"tx_errors\":2}]},\"resilience\":{\"ha_resources\":[],\"replication_jobs\":[],\"snapshots\":[]},\"security_updates\":{\"certificates\":[{\"days_remaining\":680.7,\"not_after\":\"2028-06-12T07:27:09+00:00\",\"output_sha256\":\"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412\",\"path\":\"/etc/pve/local/pve-ssl.pem\"},{\"days_remaining\":45.1,\"not_after\":\"2026-09-15T16:01:38+00:00\",\"output_sha256\":\"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e\",\"path\":\"/etc/pve/local/pveproxy-ssl.pem\"}],\"firewall_status\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"reboot_required\":false,\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"time\":{\"NTP\":\"yes\",\"NTPSynchronized\":\"yes\",\"Timezone\":\"Europe/Moscow\"},\"upgradable_count\":92,\"upgradable_packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"]},\"services\":{\"failed_units\":[{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"}],\"key_services\":{\"corosync\":\"active\",\"pve-cluster\":\"active\",\"pvedaemon\":\"active\",\"pveproxy\":\"active\",\"pvescheduler\":\"active\",\"pvestatd\":\"active\"}},\"storage\":{\"ceph_health\":null,\"filesystems\":[{\"available\":85349027840,\"filesystem\":\"/dev/mapper/pve-root\",\"inode_used_percent\":3.0,\"mount\":\"/\",\"total\":105089261568,\"type\":\"ext4\",\"used\":14354747392,\"used_percent\":15.0},{\"available\":53818,\"filesystem\":\"efivarfs\",\"inode_used_percent\":null,\"mount\":\"/sys/firmware/efi/efivars\",\"total\":196608,\"type\":\"efivarfs\",\"used\":137670,\"used_percent\":72.0},{\"available\":1062166528,\"filesystem\":\"/dev/nvme0n1p2\",\"inode_used_percent\":null,\"mount\":\"/boot/efi\",\"total\":1071628288,\"type\":\"vfat\",\"used\":9461760,\"used_percent\":1.0},{\"available\":141639290880,\"filesystem\":\"/dev/mapper/pve-homelab--staging\",\"inode_used_percent\":1.0,\"mount\":\"/mnt/staging\",\"total\":315926315008,\"type\":\"ext4\",\"used\":158164119552,\"used_percent\":53.0},{\"available\":132767744,\"filesystem\":\"/dev/fuse\",\"inode_used_percent\":1.0,\"mount\":\"/etc/pve\",\"total\":134217728,\"type\":\"fuse\",\"used\":1449984,\"used_percent\":2.0},{\"available\":85349027840,\"filesystem\":\"overlay\",\"inode_used_percent\":3.0,\"mount\":\"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged\",\"total\":105089261568,\"type\":\"overlay\",\"used\":14354747392,\"used_percent\":15.0}],\"lvm_report_present\":true,\"mdstat_sha256\":\"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8\",\"pvesm\":[],\"zpool_summary\":\"\"}},\"status\":\"OK\",\"summary\":{\"critical_count\":2,\"critical_tasks\":[{\"action\":\"Восстановить доступность pmxcfs/corosync и повторить проверку.\",\"category\":\"cluster\",\"evidence\":\"ipcc_send_rec[1] failed: Unknown error -1\\nipcc_send_rec[2] failed: Unknown error -1\\nipcc_send_rec[3] failed: Unknown error -1\\nUnable to load access control list: Unknown error -1\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"CLUSTER-QUORUM-CHECK\",\"title\":\"Не удалось проверить quorum Proxmox-кластера\"},{\"action\":\"Разобрать degraded/faulted devices и восстановить redundancy.\",\"category\":\"storage\",\"evidence\":\"no pools available\\n\",\"severity\":\"CRITICAL\",\"task_id\":\"ZFS-UNHEALTHY\",\"title\":\"ZFS pool не подтверждён как healthy\"}],\"high_count\":5,\"high_priority_tasks\":[{\"action\":\"Отключить password auth после проверки ключевого доступа и аварийного канала.\",\"category\":\"security\",\"evidence\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"},\"severity\":\"HIGH\",\"task_id\":\"SSH-PASSWORD-AUTH\",\"title\":\"SSH password authentication включена\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Generate unified homelab backup matrix state\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-backup-matrix-refresh.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-backup-matrix-refresh.service\",\"title\":\"Systemd unit failed: homelab-backup-matrix-refresh.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Crypto portfolio chart health check\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"homelab-crypto-portfolio-chart-health.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service\",\"title\":\"Systemd unit failed: homelab-crypto-portfolio-chart-health.service\"},{\"action\":\"Разобрать первичную ошибку unit и устранить её.\",\"category\":\"services\",\"evidence\":{\"active\":\"failed\",\"description\":\"Skladchik reports monitor full supervisor\",\"load\":\"loaded\",\"sub\":\"failed\",\"unit\":\"skladchik-reports-monitor-supervisor.service\"},\"severity\":\"HIGH\",\"task_id\":\"FAILED-UNIT-skladchik-reports-monitor-supervisor.service\",\"title\":\"Systemd unit failed: skladchik-reports-monitor-supervisor.service\"},{\"action\":\"Сформировать окно обновления с backup, проверкой release notes и reboot plan.\",\"category\":\"updates\",\"evidence\":{\"packages\":[\"base-files\",\"libexpat1\",\"postfix\",\"python3.13\",\"libpython3.13-stdlib\",\"python3.13-minimal\",\"libpython3.13-minimal\",\"liblzma5\",\"rsync\",\"shim-signed-common\",\"shim-unsigned\",\"shim-helpers-amd64-signed\",\"shim-signed\",\"dhcpcd-base\",\"libxml2\",\"bind9-host\",\"bind9-dnsutils\",\"bind9-libs\",\"xz-utils\",\"chrony\",\"libcorosync-common4\",\"libcfg7\",\"libcmap4\",\"libcpg4\",\"libnss3\",\"libknet1t64\",\"libnozzle1t64\",\"libquorum5\",\"libvotequorum8\",\"corosync\",\"libssh2-1t64\",\"curl\",\"libcurl4t64\",\"gpgsm\",\"dirmngr\",\"gpg\",\"gpgconf\",\"gpg-agent\",\"libbytes-random-secure-perl\",\"libcurl3t64-gnutls\",\"libgbm1\",\"mesa-libgallium\",\"libgraphite2-3\",\"libhtml-parser-perl\",\"libtalloc2\",\"libtevent0t64\",\"libsmbclient0\",\"samba-common\",\"smbclient\",\"libtdb1\",\"libldb2\",\"samba-libs\",\"libwbclient0\",\"libnvpair3linux\",\"libproxmox-acme-plugins\",\"libxml-libxml-perl\",\"proxmox-backup-client\",\"proxmox-backup-file-restore\",\"libpve-storage-perl\",\"libproxmox-acme-perl\",\"libpve-common-perl\",\"libpve-guest-common-perl\",\"libslirp0\",\"pve-qemu-kvm\",\"pve-container\",\"qemu-server\",\"pve-ha-manager\",\"novnc-pve\",\"proxmox-enterprise-support-keyring\",\"proxmox-mini-journalreader\",\"proxmox-widget-toolkit\",\"pve-docs\",\"pve-i18n\",\"pve-xtermjs\",\"pve-manager\",\"libpve-network-api-perl\",\"libpve-network-perl\",\"pve-firewall\",\"libtasn1-6\",\"libuutil3linux\",\"libzfs7linux\",\"libzpool7linux\",\"netbird\",\"pve-firmware\",\"pve-yew-mobile-i18n\",\"python3-idna\",\"python3-markdown\",\"python3-urllib3\",\"python3.13-tk\",\"zfs-initramfs\",\"zfsutils-linux\",\"zfs-zed\"],\"simulation_sha256\":\"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8\"},\"severity\":\"HIGH\",\"task_id\":\"UPDATES-PENDING\",\"title\":\"Доступны обновления пакетов: 92\"}],\"info_count\":0,\"low_count\":0,\"medium_count\":3,\"opportunity_count\":4,\"recommended_next_projects\":[{\"action\":\"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.\",\"category\":\"observability\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"CLUSTER-OBSERVABILITY\",\"title\":\"Создать единый SLO-мониторинг кластера\"},{\"action\":\"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.\",\"category\":\"operations\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"DISASTER-RUNBOOK\",\"title\":\"Зафиксировать runbook аварийного восстановления\"},{\"action\":\"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.\",\"category\":\"power\",\"evidence\":{},\"severity\":\"OPPORTUNITY\",\"task_id\":\"UPS-DRILL\",\"title\":\"Проверить UPS и автоматическое завершение работы\"},{\"action\":\"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.\",\"category\":\"security\",\"evidence\":{\"sshd\":{\"maxauthtries\":\"6\",\"passwordauthentication\":\"yes\",\"permitrootlogin\":\"yes\",\"pubkeyauthentication\":\"yes\"}},\"severity\":\"OPPORTUNITY\",\"task_id\":\"ACCESS-REVIEW\",\"title\":\"Провести аудит доступа и секретов\"}]}}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index d910d00..a7e0e15 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,34 +1,34 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z +COMMAND_ID=HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z STATUS=OK RC=0 HOST=pve01 -MODE=change -COMPONENT=gram1-charts-v40-interactive +MODE=verify +COMPONENT=cluster-v41-deep-audit REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=623820f5e01c2e41e1b4491c485b282f66edb8ea4a6272edcab75e4036d38764 +COMMAND_SHA256=9c5a8f66e57cb536e745a0a2a6d4c119ae2d2999c6cc3501e4d54301af593a1c DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=OK +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE COMMAND_RC=0 -CHANGES_MADE=true +CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null -MUTATION_OUTCOME=MUTATED +MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=f42bf632b56cf7728b4cdd66760e8dff23613da0d0ad2044d535892e4e604334 -SANITIZED_OUTPUT_SHA256=37d914443f4f7c5fecd4c9f8eb54ba0b23c1d7e9f799e1bddb669114c7bac499 +RAW_EVIDENCE_SHA256=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 +SANITIZED_OUTPUT_SHA256=d49fd3bb9647ce96d93d464c343233389c01851d20838a4d26002905e5375d71 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z","mutation_outcome":"MUTATED","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"changes_made":true,"command_id":"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z","control_plane_error":null,"gitea_changed":false,"mutation_outcome":"MUTATED","pinned_host_key_aliases":["[PRIVATE_IP]"],"production_site_changed":true,"rc":0,"remote_result":{"backup_dir":"/var/lib/homelab-change-rollback/GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z","baseline_capsule_sha256":"0bf18dfcd9b6e065093402e505dbc0c98abba6634a9991fe969d0ffbb3bcc74b","baseline_command_id":"GRAM1-SITE-CHARTS-V39-SEPARATE-PIPELINES-20260801T125100Z","baseline_target_index_sha256":"d60f575395d203b3d638c2416daa1f981a4a827b9d61caf2d1b90bf0e8063d65","candidate_checks":{"details":true,"hide_status":true,"interactive_api":true,"legacy_observer":true,"library_compat":true,"messages":true,"new_root":true,"new_script":true,"new_style":true,"no_false_status":true,"no_static_images":true,"one_open":true,"single_open":true,"slots":true},"changed_paths":["templates/index.html"],"changes_made":true,"command_id":"GRAM1-SITE-CHARTS-V40-INTERACTIVE-ACCORDION-20260801T131500Z","control_plane_error":null,"deployment":{"container_hashes":[{"path":"app.py","service":"web","sha256":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d"},{"path":"templates/index.html","service":"web","sha256":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2"},{"path":"worker.py","service":"worker","sha256":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}],"running":["web","worker"],"runtime":{"klines":{"AVAX":{"bytes":5300,"candles":72,"sha256":"394a866f7adf695deb7bf2bcff38661185554543797d48b69b0573d195e9f4b0"},"HBAR":{"bytes":6619,"candles":84,"sha256":"668f4ef05e73a702ccb74a4180660cc315c3f80720662f968fd458132d6ec395"},"LINK":{"bytes":6821,"candles":92,"sha256":"5ef4ee04826583c5a040e001d6619ac3cc402f3cce1a8a36d4a7870ff7851aac"},"POL":{"bytes":1950,"candles":24,"sha256":"40a4341b3e11ad7941e9d42facf81d04135972e7b2cbc936582b2284222396cc"}},"local_headers":{"server":"uvicorn"},"local_root_sha256":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","public":{"headers":{},"root_sha256":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","status":200}}},"diagnostic_capsule_sha256":"7e704e0217aabc9d825ee36d299b74f51d05f482ee543d706a024b53a3177147","diagnostic_command_id":"GRAM1-SITE-CHARTS-V38R1-SUDO-PROBE-LINECOUNT-FIX-20260801T124200Z","duration_seconds":8.392,"gitea_changed":false,"mutation_outcome":"MUTATED","old_sha256":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","templates/index.html":"d60f575395d203b3d638c2416daa1f981a4a827b9d61caf2d1b90bf0e8063d65","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"},"production_site_changed":true,"rc":0,"rollback_restored":null,"rollback_started":false,"schema":1,"status":"OK","target_sha256":{"app.py":"3b55b78c015173eea66b67afb8fb9371f0d7d2e38a7679d4c433749f4c07301d","templates/index.html":"3752846b9a2d47a2c82377d222e5f8603f78101eda11422bc8634567e26209d2","worker.py":"4a7b16ece826fe2d938f392db6b0b5ca028dcb6ff02fdff4ab431f114edf0e5c"}},"rollback_restored":null,"rollback_started":false,"schema":1,"selected_method":"ALIAS_PINNED_AS_DEBIAN","ssh_method_probes":[{"duration_seconds":0.114,"identity_count":null,"identity_sudo_read_ok":true,"name":"ALIAS_PINNED_AS_DEBIAN","rc":0,"stderr":""},{"duration_seconds":0.126,"identity_count":2,"identity_sudo_read_ok":true,"name":"DIRECT_PINNED_AS_DEBIAN_NO_PROXY","rc":0,"stderr":""}],"status":"OK"} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","mutation_outcome":"NO_MUTATION","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"audit_duration_seconds":5.276,"audit_scope":"Proxmox cluster, quorum, nodes, services, storage, hardware, network, backups, updates, security, HA, replication, snapshots and operational opportunities","changes_made":false,"command_evidence":{"apt_simulated_upgrade":{"duration_seconds":0.63,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8","stdout_truncated":false},"backup_jobs":{"duration_seconds":0.47,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"backup_tasks":{"duration_seconds":0.484,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"ceph_health":{"duration_seconds":0.061,"rc":1,"stderr_excerpt":"Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)')\n","stderr_sha256":"a1d1a278613accb53853259bb71b72122c0081638d7ddfc6ea9f285c35a7215a","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cert_pve-ssl.pem":{"duration_seconds":0.009,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","stdout_truncated":false},"cert_pveproxy-ssl.pem":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","stdout_truncated":false},"cluster_status_json":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"cluster_vm_resources":{"duration_seconds":0.465,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"df_bytes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ba1da7808b520fd2df6c39cbaed602478d720f24f99593d9734fa3dbaf9de41d","stdout_truncated":false},"df_inodes":{"duration_seconds":0.002,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"117ca038e58b074a4b95985e565690167f4c3624c5e516bffff3a2e47cbde774","stdout_truncated":false},"ha_resources":{"duration_seconds":0.461,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"hostname":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"b8c2ce290546573a7b09b9530a83f59c3a9a00358f5094732037a9f65bcaf430","stdout_truncated":false},"kernel":{"duration_seconds":0.001,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"01d9618db76138f152b53aa07f44596797fb50fb620be502b3b876ef2b0be471","stdout_truncated":false},"kernel_errors_7d":{"duration_seconds":0.047,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"9709c8d8ac498ddfbb16b1c343286ba6b569330752aec01c8d9cedd05366497d","stdout_truncated":false},"lvs_json":{"duration_seconds":0.023,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"8359fa3d3a5e91d59ae93ad34eb3028503d0a2ffa7354d8859687091eb11d196","stdout_truncated":false},"nodes_json":{"duration_seconds":0.459,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pve_firewall_status":{"duration_seconds":0.352,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvecm_status":{"duration_seconds":0.155,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pvesm_status_json":{"duration_seconds":0.232,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"pveversion":{"duration_seconds":0.36,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"19ba1ac5d9e5ee6299326b5ad7d5b334a03b23b84a97f3cbdf0f1cf7748d1c0a","stdout_truncated":false},"replication_jobs":{"duration_seconds":0.472,"rc":255,"stderr_excerpt":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","stderr_sha256":"7f7c6a4e34d689a6246e2dda50729abf93fb15fdc56cc971b1690257d4e0d228","stderr_truncated":false,"stdout_excerpt":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false},"service_corosync":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pve-cluster":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvedaemon":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pveproxy":{"duration_seconds":0.004,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvescheduler":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"service_pvestatd":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"45df5ad5e0ecfa54d3226343e0e6857337494ba6e32f189d1174070665d8c659","stdout_truncated":false},"smart_health_0":{"duration_seconds":0.011,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"79f3a260dd24b7352210206ed0dc7638c3dd9f1fa0088837e310d165a015443a","stdout_truncated":false},"smart_scan":{"duration_seconds":0.008,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"bdd9c6262f7084200be70fe4f114937b73ddc9363d2b17a898cc6de810c61aeb","stdout_truncated":false},"sshd_effective":{"duration_seconds":0.007,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"ca13aa430aaba12409bf273bc3dbe7cc2d9931c09ba7b7bd6b1ae70f6550045c","stdout_truncated":false},"systemd_failed":{"duration_seconds":0.005,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2be7fca65a60c1f3a022fc247aaf5c671cfdeb503d685daaac1eff64762bc8b0","stdout_truncated":false},"timedatectl":{"duration_seconds":0.044,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"6c8cfc6ad7c28c39c61897e34c7a41b21557a5b889a89fbf0f43fd4e68bba179","stdout_truncated":false},"uptime":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_sha256":"2650c732006dcd407933672c01c5f9a558c2a3ca4002b4deae3daf8be3548b64","stdout_truncated":false},"zpool_status":{"duration_seconds":0.006,"rc":0,"stderr_sha256":"7963e46dc311bf4242deae5ec473af64749b3e1e2b004c6c001defc4ae2621ac","stderr_truncated":false,"stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_truncated":false}},"command_id":"HOMELAB-CLUSTER-V41-DEEP-READ-ONLY-AUDIT-20260801T133800Z","control_plane_error":null,"fatal_errors":[],"findings":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"},{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"},{"action":"Сравнить рост счётчиков за интервал и проверить физический/очередной уровень.","category":"network","evidence":{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2},"severity":"MEDIUM","task_id":"NET-DROPS-wt0","title":"Есть сетевые ошибки/дропы на wt0"},{"action":"Проверить, где обеспечивается фильтрация management и guest traffic; включить host firewall при отсутствии внешней защиты.","category":"security","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"MEDIUM","task_id":"FIREWALL-STATE","title":"Proxmox firewall не подтверждён как enabled/running"},{"action":"Ограничить root login по management-сети/ключам или перейти на отдельного администратора + sudo.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"MEDIUM","task_id":"SSH-ROOT-LOGIN","title":"Разрешён прямой SSH-доступ root"},{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}],"gitea_changed":false,"mutation_outcome":"NO_MUTATION","production_site_changed":false,"rc":0,"rollback_restored":null,"rollback_started":false,"schema":1,"sections":{"backups":{"backup_storages":[],"failed_recent":[],"guest_backup_state":[],"inventory_count":0,"jobs":[],"recent_tasks":[]},"capacity":{"guests":[],"memory_overcommit":[],"nodes":[]},"cluster_nodes":[],"cluster_quorum":{"parsed":{},"raw_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"hardware":{"cpu_count":24,"kernel_critical_pattern_count_7d":0,"kernel_priority_0_3_count_7d":9,"load_15_per_cpu":0.02,"load_1_5_15":[0.41,0.4,0.42],"memory_available":8871043072,"memory_available_percent":26.58,"memory_total":33379028992,"smart_health":[{"device":"/dev/nvme0","output_sha256":"5c389122381ffa3697b8d4044b9b478189d78f0126ba7a948e07154955dd4105","passed":true,"rc":0,"unknown":false}],"swap_total":10737414144,"swap_used_percent":0.0,"temperatures":[{"celsius":27.8,"sensor":"acpitz"},{"celsius":41.0,"sensor":"x86_pkg_temp"}]},"identity":{"audit_utc":"2026-08-01T13:48:52.070106+00:00","hostname":"pve01.gram1.ru","kernel":"Linux pve01 7.0.12-1-pve #1 SMP PREEMPT_DYNAMIC PMX 7.0.12-1 (2026-06-09T21:07Z) x86_64 GNU/Linux","pveversion":"proxmox-ve: 9.2.0 (running kernel: 7.0.12-1-pve)\npve-manager: 9.2.3 (running version: 9.2.3/d0fde103346cf89a)\nproxmox-kernel-helper: 9.2.0\nproxmox-kernel-7.0: 7.0.12-1\nproxmox-kernel-7.0.12-1-pve-signed: 7.0.12-1\nproxmox-kernel-7.0.6-2-pve-signed: 7.0.6-2\nproxmox-kernel-7.0.2-6-pve-signed: 7.0.2-6\nceph-fuse: 19.2.3-pve4\ncorosync: 3.1.10-pve2\ncriu: 4.1.1-1\nfrr-pythontools: 10.6.1-1+pve2\nifupdown2: 3.3.0-1+pmx12\nintel-microcode: 3.20251111.1~deb13u1\nksm-control-daemon: 1.5-1\nlibjs-extjs: 7.0.0-5\nlibproxmox-acme-perl: 1.7.1\nlibproxmox-backup-qemu0: 2.0.2\nlibproxmox-rs-perl: 0.4.1\nlibpve-access-control: 9.1.1\nlibpve-apiclient-perl: 3.4.2\nlibpve-cluster-api-perl: 9.1.6\nlibpve-cluster-perl: 9.1.6\nlibpve-common-perl: 9.1.16\nlibpve-guest-common-perl: 6.0.4\nlibpve-http-server-perl: 6.0.5\nlibpve-network-perl: 1.6.6\nlibpve-notify-perl: 9.1.6\nlibpve-rs-perl: 0.15.3\nlibpve-storage-perl: 9.1.6\nlibspice-server1: 0.15.2-1+b1\nlvm2: 2.03.31-2+pmx1\nlxc-pve: 7.0.0-2\nlxcfs: 7.0.0-pve1\nnovnc-pve: 1.7.0-1\nproxmox-backup-client: 4.2.2-1\nproxmox-backup-file-restore: 4.2.2-1\nproxmox-backup-restore-image: 1.0.0\nproxmox-firewall: 1.2.3\nproxmox-kernel-helper: 9.2.0\nproxmox-mail-forward: 1.0.3\nproxmox-mini-journalreader: 1.6\nproxmox-offline-mirror-helper: 0.7.4\nproxmox-widget-toolkit: 5.2.5\npve-cluster: 9.1.6\npve-container: 6.1.10\npve-docs: 9.2.2\npve-edk2-firmware: 4.2025.05-2\npve-esxi-import-tools: 1.0.1\npve-firewall: 6.0.4\npve-firmware: 3.18-4\npve-ha-manager: 5.2.4\npve-i18n: 3.8.0\npve-qemu-kvm: 11.0.0-4\npve-xtermjs: 6.0.0-1\nqemu-server: 9.1.17\nsmartmontools: 7.5-pve2\nspiceterm: 3.4.2\nswtpm: 0.8.0+pve3\nvncterm: 1.9.2\nzfsutils-linux: 2.4.2-pve1","uptime":"up 4 days, 2 hours, 43 minutes"},"network":{"bonds":[],"interfaces":[{"interface":"bonding_masters","mtu":null,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"enx6c1ff7c17576","mtu":1500,"operstate":"down","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"nic0","mtu":1500,"operstate":"up","rx_dropped":11827,"rx_errors":0,"tx_dropped":6,"tx_errors":0},{"interface":"podman0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap150i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap170i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"tap171i0","mtu":1500,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth110i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"veth112i0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":0,"tx_errors":0},{"interface":"vmbr0","mtu":1500,"operstate":"up","rx_dropped":0,"rx_errors":0,"tx_dropped":9,"tx_errors":0},{"interface":"wt0","mtu":1280,"operstate":"unknown","rx_dropped":0,"rx_errors":0,"tx_dropped":1,"tx_errors":2}]},"resilience":{"ha_resources":[],"replication_jobs":[],"snapshots":[]},"security_updates":{"certificates":[{"days_remaining":680.7,"not_after":"2028-06-12T07:27:09+00:00","output_sha256":"4c235086a4bb6a1236bb4aa8452ad4d305e7dfb60c28aaaecc26f5f95a517412","path":"/etc/pve/local/pve-ssl.pem"},{"days_remaining":45.1,"not_after":"2026-09-15T16:01:38+00:00","output_sha256":"9dc45fc6b61f546f5c245b6bcf9edb750cfab78bee8d5409d5eeec239e25774e","path":"/etc/pve/local/pveproxy-ssl.pem"}],"firewall_status":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","reboot_required":false,"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"time":{"NTP":"yes","NTPSynchronized":"yes","Timezone":"Europe/Moscow"},"upgradable_count":92,"upgradable_packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"]},"services":{"failed_units":[{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"}],"key_services":{"corosync":"active","pve-cluster":"active","pvedaemon":"active","pveproxy":"active","pvescheduler":"active","pvestatd":"active"}},"storage":{"ceph_health":null,"filesystems":[{"available":85349027840,"filesystem":"/dev/mapper/pve-root","inode_used_percent":3.0,"mount":"/","total":105089261568,"type":"ext4","used":14354747392,"used_percent":15.0},{"available":53818,"filesystem":"efivarfs","inode_used_percent":null,"mount":"/sys/firmware/efi/efivars","total":196608,"type":"efivarfs","used":137670,"used_percent":72.0},{"available":1062166528,"filesystem":"/dev/nvme0n1p2","inode_used_percent":null,"mount":"/boot/efi","total":1071628288,"type":"vfat","used":9461760,"used_percent":1.0},{"available":141639290880,"filesystem":"/dev/mapper/pve-homelab--staging","inode_used_percent":1.0,"mount":"/mnt/staging","total":315926315008,"type":"ext4","used":158164119552,"used_percent":53.0},{"available":132767744,"filesystem":"/dev/fuse","inode_used_percent":1.0,"mount":"/etc/pve","total":134217728,"type":"fuse","used":1449984,"used_percent":2.0},{"available":85349027840,"filesystem":"overlay","inode_used_percent":3.0,"mount":"/var/lib/containers/storage/overlay/c638354547700f5f06ca229429e8a557150144d8c21fb899d880f76665f74690/merged","total":105089261568,"type":"overlay","used":14354747392,"used_percent":15.0}],"lvm_report_present":true,"mdstat_sha256":"23b7359ec0388daf52cf07dfabc1ad1a9558e4ce801633a126f351b99028d8b8","pvesm":[],"zpool_summary":""}},"status":"OK","summary":{"critical_count":2,"critical_tasks":[{"action":"Восстановить доступность pmxcfs/corosync и повторить проверку.","category":"cluster","evidence":"ipcc_send_rec[1] failed: Unknown error -1\nipcc_send_rec[2] failed: Unknown error -1\nipcc_send_rec[3] failed: Unknown error -1\nUnable to load access control list: Unknown error -1\n","severity":"CRITICAL","task_id":"CLUSTER-QUORUM-CHECK","title":"Не удалось проверить quorum Proxmox-кластера"},{"action":"Разобрать degraded/faulted devices и восстановить redundancy.","category":"storage","evidence":"no pools available\n","severity":"CRITICAL","task_id":"ZFS-UNHEALTHY","title":"ZFS pool не подтверждён как healthy"}],"high_count":5,"high_priority_tasks":[{"action":"Отключить password auth после проверки ключевого доступа и аварийного канала.","category":"security","evidence":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"},"severity":"HIGH","task_id":"SSH-PASSWORD-AUTH","title":"SSH password authentication включена"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Generate unified homelab backup matrix state","load":"loaded","sub":"failed","unit":"homelab-backup-matrix-refresh.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-backup-matrix-refresh.service","title":"Systemd unit failed: homelab-backup-matrix-refresh.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Crypto portfolio chart health check","load":"loaded","sub":"failed","unit":"homelab-crypto-portfolio-chart-health.service"},"severity":"HIGH","task_id":"FAILED-UNIT-homelab-crypto-portfolio-chart-health.service","title":"Systemd unit failed: homelab-crypto-portfolio-chart-health.service"},{"action":"Разобрать первичную ошибку unit и устранить её.","category":"services","evidence":{"active":"failed","description":"Skladchik reports monitor full supervisor","load":"loaded","sub":"failed","unit":"skladchik-reports-monitor-supervisor.service"},"severity":"HIGH","task_id":"FAILED-UNIT-skladchik-reports-monitor-supervisor.service","title":"Systemd unit failed: skladchik-reports-monitor-supervisor.service"},{"action":"Сформировать окно обновления с backup, проверкой release notes и reboot plan.","category":"updates","evidence":{"packages":["base-files","libexpat1","postfix","python3.13","libpython3.13-stdlib","python3.13-minimal","libpython3.13-minimal","liblzma5","rsync","shim-signed-common","shim-unsigned","shim-helpers-amd64-signed","shim-signed","dhcpcd-base","libxml2","bind9-host","bind9-dnsutils","bind9-libs","xz-utils","chrony","libcorosync-common4","libcfg7","libcmap4","libcpg4","libnss3","libknet1t64","libnozzle1t64","libquorum5","libvotequorum8","corosync","libssh2-1t64","curl","libcurl4t64","gpgsm","dirmngr","gpg","gpgconf","gpg-agent","libbytes-random-secure-perl","libcurl3t64-gnutls","libgbm1","mesa-libgallium","libgraphite2-3","libhtml-parser-perl","libtalloc2","libtevent0t64","libsmbclient0","samba-common","smbclient","libtdb1","libldb2","samba-libs","libwbclient0","libnvpair3linux","libproxmox-acme-plugins","libxml-libxml-perl","proxmox-backup-client","proxmox-backup-file-restore","libpve-storage-perl","libproxmox-acme-perl","libpve-common-perl","libpve-guest-common-perl","libslirp0","pve-qemu-kvm","pve-container","qemu-server","pve-ha-manager","novnc-pve","proxmox-enterprise-support-keyring","proxmox-mini-journalreader","proxmox-widget-toolkit","pve-docs","pve-i18n","pve-xtermjs","pve-manager","libpve-network-api-perl","libpve-network-perl","pve-firewall","libtasn1-6","libuutil3linux","libzfs7linux","libzpool7linux","netbird","pve-firmware","pve-yew-mobile-i18n","python3-idna","python3-markdown","python3-urllib3","python3.13-tk","zfs-initramfs","zfsutils-linux","zfs-zed"],"simulation_sha256":"b02fccf2fa828498c4dfac7a4782d7aa267403562556adf4dd37817509d758f8"},"severity":"HIGH","task_id":"UPDATES-PENDING","title":"Доступны обновления пакетов: 92"}],"info_count":0,"low_count":0,"medium_count":3,"opportunity_count":4,"recommended_next_projects":[{"action":"Собрать Proxmox, SMART, ZFS/Ceph, backup age, certificate expiry, UPS и network errors в Prometheus/Grafana с алертами.","category":"observability","evidence":{},"severity":"OPPORTUNITY","task_id":"CLUSTER-OBSERVABILITY","title":"Создать единый SLO-мониторинг кластера"},{"action":"Документировать порядок: потеря узла, storage, quorum, сети, сертификата, backup restore и доступ без control plane.","category":"operations","evidence":{},"severity":"OPPORTUNITY","task_id":"DISASTER-RUNBOOK","title":"Зафиксировать runbook аварийного восстановления"},{"action":"Интегрировать NUT/UPS, выполнить тест отключения питания и проверить порядок остановки VM/storage/узлов.","category":"power","evidence":{},"severity":"OPPORTUNITY","task_id":"UPS-DRILL","title":"Проверить UPS и автоматическое завершение работы"},{"action":"Проверить MFA/ACL Proxmox, сервисные токены, SSH keys, ротацию секретов и отдельные break-glass учётные записи.","category":"security","evidence":{"sshd":{"maxauthtries":"6","passwordauthentication":"yes","permitrootlogin":"yes","pubkeyauthentication":"yes"}},"severity":"OPPORTUNITY","task_id":"ACCESS-REVIEW","title":"Провести аудит доступа и секретов"}]}} OUTPUT_END CHAT_OUTPUT_END