From 1172456cedbcce65b9b65358d0bac6ced77addec Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Mon, 21 Sep 2026 20:58:11 +0000 Subject: [PATCH] runtime: publish SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1 --- ...CHEDULER-CONTRACT-RCA-READONLY-1103R1.json | 38 ++++++++++++++ ...SCHEDULER-CONTRACT-RCA-READONLY-1103R1.txt | 49 ++++++++++++++++++ runtime/latest.json | 16 +++--- runtime/latest.txt | 51 ++++++++----------- 4 files changed, 116 insertions(+), 38 deletions(-) create mode 100644 runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.json create mode 100644 runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.txt diff --git a/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.json b/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.json new file mode 100644 index 00000000..5c2abfc8 --- /dev/null +++ b/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "homelab-backup-scheduler-contract-rca", + "started_at_utc": "2026-09-21T20:58:11Z", + "finished_at_utc": "2026-09-21T20:58:11Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "03f74f4f55da06e3cb0f9a99977974ef5f7a54cf444a6d81d92957823f7e8f08", + "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": "a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83", + "sanitized_output_sha256": "a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "WORKERS2_SCHEDULER_CONTRACT_RCA_BEGIN=1\nCOMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1\nMODE=read-only\nCOMPONENT=homelab-backup-scheduler-contract-rca\nMUTATION_BOUNDARY=READ_ONLY_NO_SERVICE_START_NO_TIMER_CHANGE_NO_KILL_NO_SIGNAL_NO_LOCK_BREAK_NO_BACKUP_NO_GC_NO_MAIL_NO_GIT_WRITE\nSOURCE_FILES=[{\"path\":\"/etc/systemd/system/homelab-backup-v2.service\",\"sha256\":\"1ef3e6bc660767a1f29a6a0bfa8d1b7a2419370b2250764ca181c34c93188565\",\"size\":309},{\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\",\"size\":1656},{\"path\":\"/usr/local/libexec/homelab-backup-target-registry\",\"sha256\":\"c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4\",\"size\":4406},{\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker\",\"sha256\":\"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1\",\"size\":17702},{\"path\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"sha256\":\"df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352\",\"size\":38039}]\nSCHEDULER_LOGIC_HITS=[{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":2,\"text\":\"Description=Homelab Backup V2 manifest-driven scheduler\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":3,\"text\":\"After=network-online.target\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":4,\"text\":\"Wants=network-online.target\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":11,\"text\":\"ExecStart=/usr/local/sbin/homelab-backup-v2 scheduled\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":14,\"text\":\"IOSchedulingPriority=7\"},{\"file\":\"/usr/local/sbin/homelab-backup-v2\",\"line\":5,\"text\":\"EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793'}\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":4,\"text\":\"REGISTRY=\\\"${HOMELAB_BACKUP_TARGET_REGISTRY:-/etc/homelab-backup/targets.json}\\\"\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":5,\"text\":\"die(){ printf 'TARGET_REGISTRY_ERROR=%s\\\\n' \\\"$1\\\" >&2; exit \\\"${2:-65}\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":10,\"text\":\".schema==\\\"homelab-backup-target-registry-v1\\\" and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":13,\"text\":\".policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":14,\"text\":\"(.targets|type)==\\\"array\\\" and (.targets|length)==21 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":15,\"text\":\"([.targets[].id]|length)==([.targets[].id]|unique|length) and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":16,\"text\":\"([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":17,\"text\":\"([.targets[]|select(.kind==\\\"VM\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==11 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":18,\"text\":\"([.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==4 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":19,\"text\":\"([.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"RETIRED_PRESERVE\\\")]|length)==3 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":20,\"text\":\"([.targets[]|select(.kind==\\\"CONTROL\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==1 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":21,\"text\":\"([.targets[]|select((.kind!=\\\"VM\\\" and .kind!=\\\"APP\\\" and .kind!=\\\"CONTROL\\\") or (.lifecycle!=\\\"ACTIVE\\\" and .lifecycle!=\\\"RETIRED_PRESERVE\\\"))]|length)==0 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":22,\"text\":\"([.targets[]|select(.kind==\\\"VM\\\")|select(.owner!=\\\"pve01\\\" and .owner!=\\\"pve02\\\" and .owner!=\\\"pve03\\\")]|length)==0 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":27,\"text\":\"rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host//\\\"\\\"),((.migrate//false)|tostring)]|@tsv' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":28,\"text\":\"find_by_id(){ local kind=\\\"$1\\\" id=\\\"$2\\\"; validate; jq -er --arg k \\\"$kind\\\" --arg i \\\"$id\\\" '.targets[]|select(.kind==$k and .id==$i)' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":29,\"text\":\"find_by_logical(){ local logical=\\\"$1\\\"; validate; jq -er --arg l \\\"$logical\\\" '.targets[]|select(.logical_id==$l)' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":31,\"text\":\"validate) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; printf 'TARGET_REGISTRY=OK\\\\n' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":32,\"text\":\"active-vm-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"VM\\\" and .lifecycle==\\\"ACTIVE\\\")|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":33,\"text\":\"active-app-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\")|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":34,\"text\":\"migrate-app-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\" and .migrate==true)|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":35,\"text\":\"app-active) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -e '.lifecycle==\\\"ACTIVE\\\"' >/dev/null ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":36,\"text\":\"app-logical) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -er 'select(.lifecycle==\\\"ACTIVE\\\")|.logical_id' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":37,\"text\":\"app-source-host) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -er 'select(.lifecycle==\\\"ACTIVE\\\")|.source_host' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":39,\"text\":\"lifecycle) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_logical \\\"$2\\\" | jq -er '.lifecycle' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":40,\"text\":\"retention-logicals) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.lifecycle==\\\"ACTIVE\\\" or .lifecycle==\\\"RETIRED_PRESERVE\\\")|.logical_id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":41,\"text\":\"retention-keep) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; rec=\\\"$(find_by_logical \\\"$2\\\")\\\"; life=\\\"$(jq -r '.lifecycle' <<<\\\"$rec\\\")\\\"; [[ \\\"$life\\\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\\\"$(jq -r '.kind' <<<\\\"$rec\\\")\\\"; jq -er --arg k \\\"$kind\\\" '.policies.retention_keep[$k]' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":43,\"text\":\"freshness-seconds) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \\\"$2\\\" '.policies.freshness_seconds[$k]' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":46,\"text\":\"*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;\"},{\"file\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"line\":403,\"text\":\"if ! awk -v target=\\\"$LOGICAL_ID/\\\" '$0==target{found=1} END{exit !found}' \\\"$root_listing\\\"; then\"},{\"file\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"line\":410,\"text\":\"if awk -v target=\\\"$GENERATION/\\\" '$0==target{found=1} END{exit !found}' \\\"$logical_listing\\\"; then\"}]\nTARGET_CONTRACT_ROWS=[{\"id\":\"110\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm110\"},{\"id\":\"111\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm111\"},{\"id\":\"112\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm112\"},{\"id\":\"113\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm113\"},{\"id\":\"130\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm130\"},{\"id\":\"150\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm150\"},{\"id\":\"160\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm160\"}]\nCURRENT_VM_STATE_ROWS=[{\"age_seconds\":1783,\"exists\":true,\"last_attempt_epoch\":1790022508,\"last_success_epoch\":1790022508,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct110\",\"vmid\":\"110\"},{\"age_seconds\":1636,\"exists\":true,\"last_attempt_epoch\":1790022655,\"last_success_epoch\":1790022655,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct111\",\"vmid\":\"111\"},{\"age_seconds\":83215,\"exists\":true,\"last_attempt_epoch\":1789941076,\"last_success_epoch\":1789941076,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct112\",\"vmid\":\"112\"},{\"age_seconds\":81050,\"exists\":true,\"last_attempt_epoch\":1789943241,\"last_success_epoch\":1789943241,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct113\",\"vmid\":\"113\"},{\"age_seconds\":75658,\"exists\":true,\"last_attempt_epoch\":1789948633,\"last_success_epoch\":1789948633,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm130\",\"vmid\":\"130\"},{\"age_seconds\":78944,\"exists\":true,\"last_attempt_epoch\":1789945347,\"last_success_epoch\":1789945347,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm150\",\"vmid\":\"150\"},{\"age_seconds\":74191,\"exists\":true,\"last_attempt_epoch\":1789950100,\"last_success_epoch\":1789950100,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm160\",\"vmid\":\"160\"}]\nREGISTRY_VM_FRESHNESS={\"lines\":[\"72000\",\"\"],\"rc\":0}\nREGISTRY_HELP={\"lines\":[\"\",\"TARGET_REGISTRY_ERROR=USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows\"],\"rc\":64}\nDECISIVE_JOURNAL=[\"SCHEDULE_TARGET=xf-codevipe\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_TARGET=xf-zakrutim\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"INFO: starting new backup job: vzdump 110 --remove 0 --prune-backups 'keep-all=1' --compress zstd --tmpdir /var/tmp/homelab-vzdump-v2-v2-ct110-20260921T202514Z-1c872adccfab --mode snapshot --stdexcludes 0 --bwlimit 32768 --ionice 7 --node pve01 --zstd 1 --lockwait 0\",\"INFO: Backup job finished successfully\",\"notified via target `mail-to-root`\",\"SCHEDULE_TARGET=ct110\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_TARGET=ct111\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\"]\nDECISION=SCHEDULER_ELIGIBILITY_FILTER_DIFFERS_FROM_RPO_SET\nNO_MUTATION=true\nTASK_RESULT=PASS_HOMELAB_BACKUP_SCHEDULER_CONTRACT_RCA_READONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nWORKERS2_SCHEDULER_CONTRACT_RCA_END=1\n" +} diff --git a/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.txt b/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.txt new file mode 100644 index 00000000..fc26e3ed --- /dev/null +++ b/runtime/history/SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1.txt @@ -0,0 +1,49 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=homelab-backup-scheduler-contract-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=03f74f4f55da06e3cb0f9a99977974ef5f7a54cf444a6d81d92957823f7e8f08 +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=a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83 +SANITIZED_OUTPUT_SHA256=a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83 +OUTPUT_BEGIN +WORKERS2_SCHEDULER_CONTRACT_RCA_BEGIN=1 +COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1 +MODE=read-only +COMPONENT=homelab-backup-scheduler-contract-rca +MUTATION_BOUNDARY=READ_ONLY_NO_SERVICE_START_NO_TIMER_CHANGE_NO_KILL_NO_SIGNAL_NO_LOCK_BREAK_NO_BACKUP_NO_GC_NO_MAIL_NO_GIT_WRITE +SOURCE_FILES=[{"path":"/etc/systemd/system/homelab-backup-v2.service","sha256":"1ef3e6bc660767a1f29a6a0bfa8d1b7a2419370b2250764ca181c34c93188565","size":309},{"path":"/usr/local/sbin/homelab-backup-v2","sha256":"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2","size":1656},{"path":"/usr/local/libexec/homelab-backup-target-registry","sha256":"c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4","size":4406},{"path":"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker","sha256":"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1","size":17702},{"path":"/usr/local/libexec/homelab-cloud-quorum-payload","sha256":"df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352","size":38039}] +SCHEDULER_LOGIC_HITS=[{"file":"/etc/systemd/system/homelab-backup-v2.service","line":2,"text":"Description=Homelab Backup V2 manifest-driven scheduler"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":3,"text":"After=network-online.target"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":4,"text":"Wants=network-online.target"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":11,"text":"ExecStart=/usr/local/sbin/homelab-backup-v2 scheduled"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":14,"text":"IOSchedulingPriority=7"},{"file":"/usr/local/sbin/homelab-backup-v2","line":5,"text":"EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793'}"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":4,"text":"REGISTRY=\"${HOMELAB_BACKUP_TARGET_REGISTRY:-/etc/homelab-backup/targets.json}\""},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":5,"text":"die(){ printf 'TARGET_REGISTRY_ERROR=%s\\n' \"$1\" >&2; exit \"${2:-65}\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":10,"text":".schema==\"homelab-backup-target-registry-v1\" and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":13,"text":".policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":14,"text":"(.targets|type)==\"array\" and (.targets|length)==21 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":15,"text":"([.targets[].id]|length)==([.targets[].id]|unique|length) and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":16,"text":"([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":17,"text":"([.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")]|length)==11 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":18,"text":"([.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")]|length)==4 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":19,"text":"([.targets[]|select(.kind==\"APP\" and .lifecycle==\"RETIRED_PRESERVE\")]|length)==3 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":20,"text":"([.targets[]|select(.kind==\"CONTROL\" and .lifecycle==\"ACTIVE\")]|length)==1 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":21,"text":"([.targets[]|select((.kind!=\"VM\" and .kind!=\"APP\" and .kind!=\"CONTROL\") or (.lifecycle!=\"ACTIVE\" and .lifecycle!=\"RETIRED_PRESERVE\"))]|length)==0 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":22,"text":"([.targets[]|select(.kind==\"VM\")|select(.owner!=\"pve01\" and .owner!=\"pve02\" and .owner!=\"pve03\")]|length)==0 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":27,"text":"rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host//\"\"),((.migrate//false)|tostring)]|@tsv' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":28,"text":"find_by_id(){ local kind=\"$1\" id=\"$2\"; validate; jq -er --arg k \"$kind\" --arg i \"$id\" '.targets[]|select(.kind==$k and .id==$i)' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":29,"text":"find_by_logical(){ local logical=\"$1\"; validate; jq -er --arg l \"$logical\" '.targets[]|select(.logical_id==$l)' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":31,"text":"validate) [[ \"$#\" == 1 ]] || die USAGE 64; validate; printf 'TARGET_REGISTRY=OK\\n' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":32,"text":"active-vm-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":33,"text":"active-app-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":34,"text":"migrate-app-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\" and .migrate==true)|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":35,"text":"app-active) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -e '.lifecycle==\"ACTIVE\"' >/dev/null ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":36,"text":"app-logical) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -er 'select(.lifecycle==\"ACTIVE\")|.logical_id' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":37,"text":"app-source-host) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -er 'select(.lifecycle==\"ACTIVE\")|.source_host' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":39,"text":"lifecycle) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_logical \"$2\" | jq -er '.lifecycle' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":40,"text":"retention-logicals) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.lifecycle==\"ACTIVE\" or .lifecycle==\"RETIRED_PRESERVE\")|.logical_id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":41,"text":"retention-keep) [[ \"$#\" == 2 ]] || die USAGE 64; rec=\"$(find_by_logical \"$2\")\"; life=\"$(jq -r '.lifecycle' <<<\"$rec\")\"; [[ \"$life\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\"$(jq -r '.kind' <<<\"$rec\")\"; jq -er --arg k \"$kind\" '.policies.retention_keep[$k]' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":43,"text":"freshness-seconds) [[ \"$#\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"$2\" '.policies.freshness_seconds[$k]' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":46,"text":"*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;"},{"file":"/usr/local/libexec/homelab-cloud-quorum-payload","line":403,"text":"if ! awk -v target=\"$LOGICAL_ID/\" '$0==target{found=1} END{exit !found}' \"$root_listing\"; then"},{"file":"/usr/local/libexec/homelab-cloud-quorum-payload","line":410,"text":"if awk -v target=\"$GENERATION/\" '$0==target{found=1} END{exit !found}' \"$logical_listing\"; then"}] +TARGET_CONTRACT_ROWS=[{"id":"110","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm110"},{"id":"111","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm111"},{"id":"112","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm112"},{"id":"113","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm113"},{"id":"130","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm130"},{"id":"150","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm150"},{"id":"160","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm160"}] +CURRENT_VM_STATE_ROWS=[{"age_seconds":1783,"exists":true,"last_attempt_epoch":1790022508,"last_success_epoch":1790022508,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct110","vmid":"110"},{"age_seconds":1636,"exists":true,"last_attempt_epoch":1790022655,"last_success_epoch":1790022655,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct111","vmid":"111"},{"age_seconds":83215,"exists":true,"last_attempt_epoch":1789941076,"last_success_epoch":1789941076,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct112","vmid":"112"},{"age_seconds":81050,"exists":true,"last_attempt_epoch":1789943241,"last_success_epoch":1789943241,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct113","vmid":"113"},{"age_seconds":75658,"exists":true,"last_attempt_epoch":1789948633,"last_success_epoch":1789948633,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm130","vmid":"130"},{"age_seconds":78944,"exists":true,"last_attempt_epoch":1789945347,"last_success_epoch":1789945347,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm150","vmid":"150"},{"age_seconds":74191,"exists":true,"last_attempt_epoch":1789950100,"last_success_epoch":1789950100,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm160","vmid":"160"}] +REGISTRY_VM_FRESHNESS={"lines":["72000",""],"rc":0} +REGISTRY_HELP={"lines":["","TARGET_REGISTRY_ERROR=USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows"],"rc":64} +DECISIVE_JOURNAL=["SCHEDULE_TARGET=xf-codevipe","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_TARGET=xf-zakrutim","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","INFO: starting new backup job: vzdump 110 --remove 0 --prune-backups 'keep-all=1' --compress zstd --tmpdir /var/tmp/homelab-vzdump-v2-v2-ct110-20260921T202514Z-1c872adccfab --mode snapshot --stdexcludes 0 --bwlimit 32768 --ionice 7 --node pve01 --zstd 1 --lockwait 0","INFO: Backup job finished successfully","notified via target `mail-to-root`","SCHEDULE_TARGET=ct110","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_TARGET=ct111","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully."] +DECISION=SCHEDULER_ELIGIBILITY_FILTER_DIFFERS_FROM_RPO_SET +NO_MUTATION=true +TASK_RESULT=PASS_HOMELAB_BACKUP_SCHEDULER_CONTRACT_RCA_READONLY +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +WORKERS2_SCHEDULER_CONTRACT_RCA_END=1 + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 3e110cc1..5c2abfc8 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1", + "command_id": "SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "newpc-driverbooster13-usa-final-commit", - "started_at_utc": "2026-09-21T20:57:28Z", - "finished_at_utc": "2026-09-21T20:57:28Z", + "component": "homelab-backup-scheduler-contract-rca", + "started_at_utc": "2026-09-21T20:58:11Z", + "finished_at_utc": "2026-09-21T20:58:11Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "33b0f4845eef2d87f7d384746eb29ab79a2b5397acd94b19d173c1c1070e2c80", + "command_sha256": "03f74f4f55da06e3cb0f9a99977974ef5f7a54cf444a6d81d92957823f7e8f08", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "eb7b71eea8b20c1fd4866af8385fad2269566d44dcba0825af053496a5a6765b", - "sanitized_output_sha256": "eb7b71eea8b20c1fd4866af8385fad2269566d44dcba0825af053496a5a6765b", + "raw_evidence_sha256": "a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83", + "sanitized_output_sha256": "a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "COMMAND_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1\nMODE=read-only\nCOMPONENT=newpc-driverbooster13-usa-final-commit\nSOURCE_LOCAL_COMMAND_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER13-HTTP-SOCKS-BRIDGE-1099R1\nSOURCE_STATE_RECOVERY_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER14-STATE-RECOVERY-1098R2\nUSER_ACCEPTANCE=true\nUSER_REPORTED_FINAL_WORKING=true\nDRIVERBOOSTER_VERSION=13.6.0.438\nDRIVERBOOSTER_UPDATE_PERFORMED=false\nDRIVERBOOSTER_UPDATE_REQUIRED=false\nDRIVERBOOSTER_PROXY_CONFIGURATION=MANUAL_UI\nDRIVERBOOSTER_PROXY_TYPE=HTTP\nDRIVERBOOSTER_PROXY_HOST=127.0.0.1\nDRIVERBOOSTER_PROXY_PORT=64021\nLOCAL_BRIDGE=HTTP_127_0_0_1_64021_TO_SOCKS5_127_0_0_1_64020\nUPSTREAM=EXISTING_ACCEPTED_CHROMEUSA_PAGEANT_SSH_USA_TUNNEL\nSYSTEM_WININET_PROXY_CHANGED=false\nSYSTEM_WINHTTP_PROXY_CHANGED=false\nCHROME_TELEGRAM_CHANGED=false\nSERVER_PRODUCT_MUTATION=false\nFINAL_ACCEPTANCE=PASS_USER_CONFIRMED_DRIVERBOOSTER_DOWNLOAD_WORKING_VIA_USA\nDECISION=COMPLETE_DRIVERBOOSTER13_USA_ROUTING\nNEXT_GATE=NONE\nPROJECT_COMPLETE=true\nTASK_RESULT=PASS_NEWPC_DRIVERBOOSTER13_USA_ROUTE_COMPLETE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "WORKERS2_SCHEDULER_CONTRACT_RCA_BEGIN=1\nCOMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1\nMODE=read-only\nCOMPONENT=homelab-backup-scheduler-contract-rca\nMUTATION_BOUNDARY=READ_ONLY_NO_SERVICE_START_NO_TIMER_CHANGE_NO_KILL_NO_SIGNAL_NO_LOCK_BREAK_NO_BACKUP_NO_GC_NO_MAIL_NO_GIT_WRITE\nSOURCE_FILES=[{\"path\":\"/etc/systemd/system/homelab-backup-v2.service\",\"sha256\":\"1ef3e6bc660767a1f29a6a0bfa8d1b7a2419370b2250764ca181c34c93188565\",\"size\":309},{\"path\":\"/usr/local/sbin/homelab-backup-v2\",\"sha256\":\"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2\",\"size\":1656},{\"path\":\"/usr/local/libexec/homelab-backup-target-registry\",\"sha256\":\"c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4\",\"size\":4406},{\"path\":\"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker\",\"sha256\":\"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1\",\"size\":17702},{\"path\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"sha256\":\"df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352\",\"size\":38039}]\nSCHEDULER_LOGIC_HITS=[{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":2,\"text\":\"Description=Homelab Backup V2 manifest-driven scheduler\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":3,\"text\":\"After=network-online.target\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":4,\"text\":\"Wants=network-online.target\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":11,\"text\":\"ExecStart=/usr/local/sbin/homelab-backup-v2 scheduled\"},{\"file\":\"/etc/systemd/system/homelab-backup-v2.service\",\"line\":14,\"text\":\"IOSchedulingPriority=7\"},{\"file\":\"/usr/local/sbin/homelab-backup-v2\",\"line\":5,\"text\":\"EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793'}\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":4,\"text\":\"REGISTRY=\\\"${HOMELAB_BACKUP_TARGET_REGISTRY:-/etc/homelab-backup/targets.json}\\\"\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":5,\"text\":\"die(){ printf 'TARGET_REGISTRY_ERROR=%s\\\\n' \\\"$1\\\" >&2; exit \\\"${2:-65}\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":10,\"text\":\".schema==\\\"homelab-backup-target-registry-v1\\\" and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":13,\"text\":\".policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":14,\"text\":\"(.targets|type)==\\\"array\\\" and (.targets|length)==21 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":15,\"text\":\"([.targets[].id]|length)==([.targets[].id]|unique|length) and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":16,\"text\":\"([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":17,\"text\":\"([.targets[]|select(.kind==\\\"VM\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==11 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":18,\"text\":\"([.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==4 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":19,\"text\":\"([.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"RETIRED_PRESERVE\\\")]|length)==3 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":20,\"text\":\"([.targets[]|select(.kind==\\\"CONTROL\\\" and .lifecycle==\\\"ACTIVE\\\")]|length)==1 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":21,\"text\":\"([.targets[]|select((.kind!=\\\"VM\\\" and .kind!=\\\"APP\\\" and .kind!=\\\"CONTROL\\\") or (.lifecycle!=\\\"ACTIVE\\\" and .lifecycle!=\\\"RETIRED_PRESERVE\\\"))]|length)==0 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":22,\"text\":\"([.targets[]|select(.kind==\\\"VM\\\")|select(.owner!=\\\"pve01\\\" and .owner!=\\\"pve02\\\" and .owner!=\\\"pve03\\\")]|length)==0 and\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":27,\"text\":\"rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host//\\\"\\\"),((.migrate//false)|tostring)]|@tsv' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":28,\"text\":\"find_by_id(){ local kind=\\\"$1\\\" id=\\\"$2\\\"; validate; jq -er --arg k \\\"$kind\\\" --arg i \\\"$id\\\" '.targets[]|select(.kind==$k and .id==$i)' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":29,\"text\":\"find_by_logical(){ local logical=\\\"$1\\\"; validate; jq -er --arg l \\\"$logical\\\" '.targets[]|select(.logical_id==$l)' \\\"$REGISTRY\\\"; }\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":31,\"text\":\"validate) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; printf 'TARGET_REGISTRY=OK\\\\n' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":32,\"text\":\"active-vm-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"VM\\\" and .lifecycle==\\\"ACTIVE\\\")|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":33,\"text\":\"active-app-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\")|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":34,\"text\":\"migrate-app-ids) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\\\"APP\\\" and .lifecycle==\\\"ACTIVE\\\" and .migrate==true)|.id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":35,\"text\":\"app-active) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -e '.lifecycle==\\\"ACTIVE\\\"' >/dev/null ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":36,\"text\":\"app-logical) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -er 'select(.lifecycle==\\\"ACTIVE\\\")|.logical_id' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":37,\"text\":\"app-source-host) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_id APP \\\"$2\\\" | jq -er 'select(.lifecycle==\\\"ACTIVE\\\")|.source_host' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":39,\"text\":\"lifecycle) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; find_by_logical \\\"$2\\\" | jq -er '.lifecycle' ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":40,\"text\":\"retention-logicals) [[ \\\"$#\\\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.lifecycle==\\\"ACTIVE\\\" or .lifecycle==\\\"RETIRED_PRESERVE\\\")|.logical_id' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":41,\"text\":\"retention-keep) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; rec=\\\"$(find_by_logical \\\"$2\\\")\\\"; life=\\\"$(jq -r '.lifecycle' <<<\\\"$rec\\\")\\\"; [[ \\\"$life\\\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\\\"$(jq -r '.kind' <<<\\\"$rec\\\")\\\"; jq -er --arg k \\\"$kind\\\" '.policies.retention_keep[$k]' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":43,\"text\":\"freshness-seconds) [[ \\\"$#\\\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \\\"$2\\\" '.policies.freshness_seconds[$k]' \\\"$REGISTRY\\\" ;;\"},{\"file\":\"/usr/local/libexec/homelab-backup-target-registry\",\"line\":46,\"text\":\"*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;\"},{\"file\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"line\":403,\"text\":\"if ! awk -v target=\\\"$LOGICAL_ID/\\\" '$0==target{found=1} END{exit !found}' \\\"$root_listing\\\"; then\"},{\"file\":\"/usr/local/libexec/homelab-cloud-quorum-payload\",\"line\":410,\"text\":\"if awk -v target=\\\"$GENERATION/\\\" '$0==target{found=1} END{exit !found}' \\\"$logical_listing\\\"; then\"}]\nTARGET_CONTRACT_ROWS=[{\"id\":\"110\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm110\"},{\"id\":\"111\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm111\"},{\"id\":\"112\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm112\"},{\"id\":\"113\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm113\"},{\"id\":\"130\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm130\"},{\"id\":\"150\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm150\"},{\"id\":\"160\",\"kind\":\"VM\",\"lifecycle\":\"ACTIVE\",\"logical_id\":\"vm160\"}]\nCURRENT_VM_STATE_ROWS=[{\"age_seconds\":1783,\"exists\":true,\"last_attempt_epoch\":1790022508,\"last_success_epoch\":1790022508,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct110\",\"vmid\":\"110\"},{\"age_seconds\":1636,\"exists\":true,\"last_attempt_epoch\":1790022655,\"last_success_epoch\":1790022655,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct111\",\"vmid\":\"111\"},{\"age_seconds\":83215,\"exists\":true,\"last_attempt_epoch\":1789941076,\"last_success_epoch\":1789941076,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct112\",\"vmid\":\"112\"},{\"age_seconds\":81050,\"exists\":true,\"last_attempt_epoch\":1789943241,\"last_success_epoch\":1789943241,\"replica_count\":2,\"resource_type\":\"lxc\",\"result\":\"SUCCESS\",\"state_id\":\"ct113\",\"vmid\":\"113\"},{\"age_seconds\":75658,\"exists\":true,\"last_attempt_epoch\":1789948633,\"last_success_epoch\":1789948633,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm130\",\"vmid\":\"130\"},{\"age_seconds\":78944,\"exists\":true,\"last_attempt_epoch\":1789945347,\"last_success_epoch\":1789945347,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm150\",\"vmid\":\"150\"},{\"age_seconds\":74191,\"exists\":true,\"last_attempt_epoch\":1789950100,\"last_success_epoch\":1789950100,\"replica_count\":2,\"resource_type\":\"qemu\",\"result\":\"SUCCESS\",\"state_id\":\"vm160\",\"vmid\":\"160\"}]\nREGISTRY_VM_FRESHNESS={\"lines\":[\"72000\",\"\"],\"rc\":0}\nREGISTRY_HELP={\"lines\":[\"\",\"TARGET_REGISTRY_ERROR=USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows\"],\"rc\":64}\nDECISIVE_JOURNAL=[\"SCHEDULE_TARGET=xf-codevipe\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_TARGET=xf-zakrutim\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"INFO: starting new backup job: vzdump 110 --remove 0 --prune-backups 'keep-all=1' --compress zstd --tmpdir /var/tmp/homelab-vzdump-v2-v2-ct110-20260921T202514Z-1c872adccfab --mode snapshot --stdexcludes 0 --bwlimit 32768 --ionice 7 --node pve01 --zstd 1 --lockwait 0\",\"INFO: Backup job finished successfully\",\"notified via target `mail-to-root`\",\"SCHEDULE_TARGET=ct110\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_TARGET=ct111\",\"SCHEDULE_RESULT=SUCCESS\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\",\"SCHEDULE_DECISION=DEFER_NO_DUE_TARGET\",\"homelab-backup-v2.service: Deactivated successfully.\"]\nDECISION=SCHEDULER_ELIGIBILITY_FILTER_DIFFERS_FROM_RPO_SET\nNO_MUTATION=true\nTASK_RESULT=PASS_HOMELAB_BACKUP_SCHEDULER_CONTRACT_RCA_READONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nWORKERS2_SCHEDULER_CONTRACT_RCA_END=1\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index ade8e3d2..fc26e3ed 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1 +COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=newpc-driverbooster13-usa-final-commit +COMPONENT=homelab-backup-scheduler-contract-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=33b0f4845eef2d87f7d384746eb29ab79a2b5397acd94b19d173c1c1070e2c80 +COMMAND_SHA256=03f74f4f55da06e3cb0f9a99977974ef5f7a54cf444a6d81d92957823f7e8f08 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,35 +24,26 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=eb7b71eea8b20c1fd4866af8385fad2269566d44dcba0825af053496a5a6765b -SANITIZED_OUTPUT_SHA256=eb7b71eea8b20c1fd4866af8385fad2269566d44dcba0825af053496a5a6765b +RAW_EVIDENCE_SHA256=a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83 +SANITIZED_OUTPUT_SHA256=a0a1f31643f6b251d01109ba03b14ffd330a1bb432b6481e2854ccd40bf40b83 OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1 +WORKERS2_SCHEDULER_CONTRACT_RCA_BEGIN=1 +COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1 MODE=read-only -COMPONENT=newpc-driverbooster13-usa-final-commit -SOURCE_LOCAL_COMMAND_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER13-HTTP-SOCKS-BRIDGE-1099R1 -SOURCE_STATE_RECOVERY_ID=SUPPORT-260921-NEWPC-DRIVERBOOSTER14-STATE-RECOVERY-1098R2 -USER_ACCEPTANCE=true -USER_REPORTED_FINAL_WORKING=true -DRIVERBOOSTER_VERSION=13.6.0.438 -DRIVERBOOSTER_UPDATE_PERFORMED=false -DRIVERBOOSTER_UPDATE_REQUIRED=false -DRIVERBOOSTER_PROXY_CONFIGURATION=MANUAL_UI -DRIVERBOOSTER_PROXY_TYPE=HTTP -DRIVERBOOSTER_PROXY_HOST=127.0.0.1 -DRIVERBOOSTER_PROXY_PORT=64021 -LOCAL_BRIDGE=HTTP_127_0_0_1_64021_TO_SOCKS5_127_0_0_1_64020 -UPSTREAM=EXISTING_ACCEPTED_CHROMEUSA_PAGEANT_SSH_USA_TUNNEL -SYSTEM_WININET_PROXY_CHANGED=false -SYSTEM_WINHTTP_PROXY_CHANGED=false -CHROME_TELEGRAM_CHANGED=false -SERVER_PRODUCT_MUTATION=false -FINAL_ACCEPTANCE=PASS_USER_CONFIRMED_DRIVERBOOSTER_DOWNLOAD_WORKING_VIA_USA -DECISION=COMPLETE_DRIVERBOOSTER13_USA_ROUTING -NEXT_GATE=NONE -PROJECT_COMPLETE=true -TASK_RESULT=PASS_NEWPC_DRIVERBOOSTER13_USA_ROUTE_COMPLETE -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260921-NEWPC-DRIVERBOOSTER13-USA-FINAL-COMMIT-1100R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +COMPONENT=homelab-backup-scheduler-contract-rca +MUTATION_BOUNDARY=READ_ONLY_NO_SERVICE_START_NO_TIMER_CHANGE_NO_KILL_NO_SIGNAL_NO_LOCK_BREAK_NO_BACKUP_NO_GC_NO_MAIL_NO_GIT_WRITE +SOURCE_FILES=[{"path":"/etc/systemd/system/homelab-backup-v2.service","sha256":"1ef3e6bc660767a1f29a6a0bfa8d1b7a2419370b2250764ca181c34c93188565","size":309},{"path":"/usr/local/sbin/homelab-backup-v2","sha256":"5077444065c732451cb84898680f62361b21a24ef9eb4f191253e82ead524ea2","size":1656},{"path":"/usr/local/libexec/homelab-backup-target-registry","sha256":"c681c44be7557d192d7b453b67e31164237874596168f1d4c78e1e926e2e9cb4","size":4406},{"path":"/usr/local/libexec/homelab-vm-cloud-quorum-node-worker","sha256":"91bdd116be865560a38105dffbd1a66d687232035e2359e4a5be4d225e9c61d1","size":17702},{"path":"/usr/local/libexec/homelab-cloud-quorum-payload","sha256":"df9e19485e5d87112bf58bf77bdddf3b9b896418dd85ff945a31cd5b6817f352","size":38039}] +SCHEDULER_LOGIC_HITS=[{"file":"/etc/systemd/system/homelab-backup-v2.service","line":2,"text":"Description=Homelab Backup V2 manifest-driven scheduler"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":3,"text":"After=network-online.target"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":4,"text":"Wants=network-online.target"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":11,"text":"ExecStart=/usr/local/sbin/homelab-backup-v2 scheduled"},{"file":"/etc/systemd/system/homelab-backup-v2.service","line":14,"text":"IOSchedulingPriority=7"},{"file":"/usr/local/sbin/homelab-backup-v2","line":5,"text":"EXPECTED={'fresh_lxc_helper.py': 'dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011', 'producer_exec_helper.py': 'b3b97099bcd7126670f866e81faae6a42a96d869d9989e6a67f6ea6c871c90b3', 'lxc_adapter.py': '3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d', 'qemu_adapter.py': '1906db42bd34bbe85eb46fd9797b3572d46e0a41c29d1c29be5f9df5e448f15b', 'scheduler_adapter.py': 'a6f67159a64067773323f028126e3109e15cf17a8142cea5e6129970f1d4da96', 'entry504.py': 'ca6876fa9c3b1465b045344a8ad46962de16972c7dadc4ac6257c7d225047793'}"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":4,"text":"REGISTRY=\"${HOMELAB_BACKUP_TARGET_REGISTRY:-/etc/homelab-backup/targets.json}\""},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":5,"text":"die(){ printf 'TARGET_REGISTRY_ERROR=%s\\n' \"$1\" >&2; exit \"${2:-65}\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":10,"text":".schema==\"homelab-backup-target-registry-v1\" and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":13,"text":".policies.freshness_seconds.VM==72000 and .policies.freshness_seconds.APP==72000 and .policies.freshness_seconds.CONTROL==86400 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":14,"text":"(.targets|type)==\"array\" and (.targets|length)==21 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":15,"text":"([.targets[].id]|length)==([.targets[].id]|unique|length) and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":16,"text":"([.targets[].logical_id]|length)==([.targets[].logical_id]|unique|length) and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":17,"text":"([.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")]|length)==11 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":18,"text":"([.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")]|length)==4 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":19,"text":"([.targets[]|select(.kind==\"APP\" and .lifecycle==\"RETIRED_PRESERVE\")]|length)==3 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":20,"text":"([.targets[]|select(.kind==\"CONTROL\" and .lifecycle==\"ACTIVE\")]|length)==1 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":21,"text":"([.targets[]|select((.kind!=\"VM\" and .kind!=\"APP\" and .kind!=\"CONTROL\") or (.lifecycle!=\"ACTIVE\" and .lifecycle!=\"RETIRED_PRESERVE\"))]|length)==0 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":22,"text":"([.targets[]|select(.kind==\"VM\")|select(.owner!=\"pve01\" and .owner!=\"pve02\" and .owner!=\"pve03\")]|length)==0 and"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":27,"text":"rows(){ validate; jq -r '.targets[]|[.kind,.id,.logical_id,.owner,.lifecycle,(.source_host//\"\"),((.migrate//false)|tostring)]|@tsv' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":28,"text":"find_by_id(){ local kind=\"$1\" id=\"$2\"; validate; jq -er --arg k \"$kind\" --arg i \"$id\" '.targets[]|select(.kind==$k and .id==$i)' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":29,"text":"find_by_logical(){ local logical=\"$1\"; validate; jq -er --arg l \"$logical\" '.targets[]|select(.logical_id==$l)' \"$REGISTRY\"; }"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":31,"text":"validate) [[ \"$#\" == 1 ]] || die USAGE 64; validate; printf 'TARGET_REGISTRY=OK\\n' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":32,"text":"active-vm-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"VM\" and .lifecycle==\"ACTIVE\")|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":33,"text":"active-app-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\")|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":34,"text":"migrate-app-ids) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.kind==\"APP\" and .lifecycle==\"ACTIVE\" and .migrate==true)|.id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":35,"text":"app-active) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -e '.lifecycle==\"ACTIVE\"' >/dev/null ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":36,"text":"app-logical) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -er 'select(.lifecycle==\"ACTIVE\")|.logical_id' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":37,"text":"app-source-host) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_id APP \"$2\" | jq -er 'select(.lifecycle==\"ACTIVE\")|.source_host' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":39,"text":"lifecycle) [[ \"$#\" == 2 ]] || die USAGE 64; find_by_logical \"$2\" | jq -er '.lifecycle' ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":40,"text":"retention-logicals) [[ \"$#\" == 1 ]] || die USAGE 64; validate; jq -r '.targets[]|select(.lifecycle==\"ACTIVE\" or .lifecycle==\"RETIRED_PRESERVE\")|.logical_id' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":41,"text":"retention-keep) [[ \"$#\" == 2 ]] || die USAGE 64; rec=\"$(find_by_logical \"$2\")\"; life=\"$(jq -r '.lifecycle' <<<\"$rec\")\"; [[ \"$life\" == ACTIVE ]] || die RETENTION_KEEP_NOT_ACTIVE 64; kind=\"$(jq -r '.kind' <<<\"$rec\")\"; jq -er --arg k \"$kind\" '.policies.retention_keep[$k]' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":43,"text":"freshness-seconds) [[ \"$#\" == 2 ]] || die USAGE 64; validate; jq -er --arg k \"$2\" '.policies.freshness_seconds[$k]' \"$REGISTRY\" ;;"},{"file":"/usr/local/libexec/homelab-backup-target-registry","line":46,"text":"*) die USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows 64 ;;"},{"file":"/usr/local/libexec/homelab-cloud-quorum-payload","line":403,"text":"if ! awk -v target=\"$LOGICAL_ID/\" '$0==target{found=1} END{exit !found}' \"$root_listing\"; then"},{"file":"/usr/local/libexec/homelab-cloud-quorum-payload","line":410,"text":"if awk -v target=\"$GENERATION/\" '$0==target{found=1} END{exit !found}' \"$logical_listing\"; then"}] +TARGET_CONTRACT_ROWS=[{"id":"110","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm110"},{"id":"111","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm111"},{"id":"112","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm112"},{"id":"113","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm113"},{"id":"130","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm130"},{"id":"150","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm150"},{"id":"160","kind":"VM","lifecycle":"ACTIVE","logical_id":"vm160"}] +CURRENT_VM_STATE_ROWS=[{"age_seconds":1783,"exists":true,"last_attempt_epoch":1790022508,"last_success_epoch":1790022508,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct110","vmid":"110"},{"age_seconds":1636,"exists":true,"last_attempt_epoch":1790022655,"last_success_epoch":1790022655,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct111","vmid":"111"},{"age_seconds":83215,"exists":true,"last_attempt_epoch":1789941076,"last_success_epoch":1789941076,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct112","vmid":"112"},{"age_seconds":81050,"exists":true,"last_attempt_epoch":1789943241,"last_success_epoch":1789943241,"replica_count":2,"resource_type":"lxc","result":"SUCCESS","state_id":"ct113","vmid":"113"},{"age_seconds":75658,"exists":true,"last_attempt_epoch":1789948633,"last_success_epoch":1789948633,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm130","vmid":"130"},{"age_seconds":78944,"exists":true,"last_attempt_epoch":1789945347,"last_success_epoch":1789945347,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm150","vmid":"150"},{"age_seconds":74191,"exists":true,"last_attempt_epoch":1789950100,"last_success_epoch":1789950100,"replica_count":2,"resource_type":"qemu","result":"SUCCESS","state_id":"vm160","vmid":"160"}] +REGISTRY_VM_FRESHNESS={"lines":["72000",""],"rc":0} +REGISTRY_HELP={"lines":["","TARGET_REGISTRY_ERROR=USAGE_validate_active-vm-ids_active-app-ids_migrate-app-ids_app-active_app-logical_app-source-host_logical-owner_lifecycle_retention-logicals_retention-keep_policy-keep_freshness-seconds_systemd-expectations_rows"],"rc":64} +DECISIVE_JOURNAL=["SCHEDULE_TARGET=xf-codevipe","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_TARGET=xf-zakrutim","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","INFO: starting new backup job: vzdump 110 --remove 0 --prune-backups 'keep-all=1' --compress zstd --tmpdir /var/tmp/homelab-vzdump-v2-v2-ct110-20260921T202514Z-1c872adccfab --mode snapshot --stdexcludes 0 --bwlimit 32768 --ionice 7 --node pve01 --zstd 1 --lockwait 0","INFO: Backup job finished successfully","notified via target `mail-to-root`","SCHEDULE_TARGET=ct110","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_TARGET=ct111","SCHEDULE_RESULT=SUCCESS","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully.","SCHEDULE_DECISION=DEFER_NO_DUE_TARGET","homelab-backup-v2.service: Deactivated successfully."] +DECISION=SCHEDULER_ELIGIBILITY_FILTER_DIFFERS_FROM_RPO_SET +NO_MUTATION=true +TASK_RESULT=PASS_HOMELAB_BACKUP_SCHEDULER_CONTRACT_RCA_READONLY +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260921-HOMELAB-BACKUP-SCHEDULER-CONTRACT-RCA-READONLY-1103R1","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +WORKERS2_SCHEDULER_CONTRACT_RCA_END=1 OUTPUT_END CHAT_OUTPUT_END