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
