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

39 lines
22 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SUPPORT-260921-HOMELAB-BACKUP-GFS-DIRTY-TASK-RCA-READONLY-1030R1",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "homelab-backup-gfs-dirty-task-rca",
"started_at_utc": "2026-09-21T02:30:51Z",
"finished_at_utc": "2026-09-21T02:30:52Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "7045251473b9b986be7411da3ca1e361d7158b97f80017ab93cc40fb00474618",
"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": "16f700abb07690dcd6fbcf11b671c2111c64f1b98751e4284ff0d906d9e80d61",
"sanitized_output_sha256": "16f700abb07690dcd6fbcf11b671c2111c64f1b98751e4284ff0d906d9e80d61",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "WORKERS2_BACKUP_GFS_DIRTY_TASK_RCA_BEGIN=1\nCOMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-GFS-DIRTY-TASK-RCA-READONLY-1030R1\nMODE=read-only\nCOMPONENT=homelab-backup-gfs-dirty-task-rca\nHOST=pve01\nUID=0\nMUTATION_BOUNDARY=READ_ONLY_NO_REPO_WRITE_NO_GIT_FETCH_NO_GIT_COMMIT_NO_PUSH_NO_PRODUCTION_NO_SERVICE_ACTION_NO_BACKUP_NO_RESTORE_NO_RETENTION_NO_DELETE_NO_MAIL\nWORKTREE_BRANCH=cr-2026-1005-backup-v2-health-alerting-remediation\nWORKTREE_HEAD=46c6f9aaf8fa93ce9f0cee686f948704c1a61336\nWORKTREE_HEAD_EXPECTED=true\nWORKTREE_STATUS_LINES=[\" M tasks/backup-gfs-lifecycle-remediation-v1/task.json\"]\nDIRTY_PATHS=[\"tasks/backup-gfs-lifecycle-remediation-v1/task.json\"]\nONLY_TASK_JSON_DIRTY=true\nTASK_JSON_DIFF_RC=0\nTASK_JSON_DIFF_LINES=[\"diff --git a/tasks/backup-gfs-lifecycle-remediation-v1/task.json b/tasks/backup-gfs-lifecycle-remediation-v1/task.json\",\"index 89e5607..9d2f446 100644\",\"--- a/tasks/backup-gfs-lifecycle-remediation-v1/task.json\",\"+++ b/tasks/backup-gfs-lifecycle-remediation-v1/task.json\",\"@@ -42,32 +42,34 @@\",\" \\\"desired_state_clean\\\": false,\",\" \\\"failed_units_max\\\": 5\",\" },\",\" \\\"mutates\\\": [\",\" \\\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\\\",\",\" \\\"/etc/homelab-backup/gfs-retention.json\\\",\",\" \\\"/usr/local/libexec/homelab-backup-gfs-policy\\\",\",\" \\\"systemd:homelab-backup-retention-gc.service\\\",\",\"- \\\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\\\"\",\"+ \\\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\\\",\",\"+ \\\"systemd:homelab-backup-retention-gc.timer\\\"\",\" ],\",\" \\\"mutation_scope\\\": \\\"controlled_apply\\\",\",\" \\\"no_change_assertions\\\": [\",\" \\\"/etc/homelab-backup/targets.json exact bytes\\\",\",\" \\\"homelab-backup-v2 runtime and timer\\\",\",\"- \\\"homelab-backup-retention-gc timer schedule and enabled/active state\\\",\",\" \\\"all cloud backup generations and replica objects\\\",\",\" \\\"all restore evidence\\\",\",\" \\\"rclone configuration\\\",\",\" \\\"network\\\",\",\" \\\"dns\\\",\",\" \\\"known_hosts\\\",\",\" \\\"backup and restore execution count remains zero\\\",\",\" \\\"retention GC execution count remains zero\\\",\",\"- \\\"cloud delete count remains zero\\\"\",\"+ \\\"cloud delete count remains zero\\\",\",\"+ \\\"homelab-backup-retention-gc timer unit bytes and schedule unchanged; enablement intentionally held disabled/inactive after apply\\\",\",\"+ \\\"homelab-backup-retention-gc service never started by this task\\\"\",\" ],\",\" \\\"phases\\\": {\",\" \\\"apply\\\": \\\"phases/apply.sh\\\",\",\" \\\"dry-run\\\": \\\"phases/dry-run.sh\\\",\",\" \\\"preflight\\\": \\\"phases/preflight.sh\\\",\",\" \\\"prepare\\\": \\\"phases/prepare.sh\\\",\",\" \\\"rollback\\\": \\\"phases/rollback.sh\\\",\",\" \\\"seal\\\": \\\"phases/seal.sh\\\",\",\"@@ -92,27 +94,31 @@\",\" \\\"source_of_truth\\\": {\",\" \\\"baseline_helper_sha256\\\": \\\"6b7ec1ab3ee1c540a9113b5620c3b4b5a50de6536f3a069d31b2e1243f23bafa\\\",\",\" \\\"baseline_policy_sha256\\\": \\\"ea6526bec7d7591bef876799cecddff4849631a936edc9f593b47211fbad715c\\\",\",\" \\\"candidate_helper_sha256\\\": \\\"a1aed0c6039f8095bd5da7f62b47f4ee6932df98c4e0e7420d3006df86bd5c94\\\",\",\" \\\"candidate_policy_sha256\\\": \\\"2c7674045dd5c68cc48d348d616494dbbe145df460a8e85d97a2c5c153ec792d\\\",\",\" \\\"change_id\\\": \\\"CR-2026-1005\\\",\",\" \\\"cloud_deletes\\\": false,\",\" \\\"cloud_writes\\\": false,\",\"+ \\\"package_parent_commit\\\": \\\"46c6f9aaf8fa93ce9f0cee686f948704c1a61336\\\",\",\" \\\"parent_commit\\\": \\\"0d62d4a2077047b9b040a9378085ece09dd15883\\\",\",\"+ \\\"retention_timer_hold_after_apply\\\": true,\",\"+ \\\"retention_timer_reenable_requires_future_safe_plan\\\": true,\",\" \\\"target_registry_sha256\\\": \\\"6ecf034ca03b52a1e6beceeae81d86a623885462c095d50b133aea4048a4626e\\\"\",\" },\",\" \\\"target_host\\\": \\\"pve01.gram1.ru\\\",\",\" \\\"task_id\\\": \\\"backup-gfs-lifecycle-remediation-v1\\\",\",\" \\\"writes\\\": [\",\" \\\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\\\",\",\" \\\"/etc/homelab-backup/gfs-retention.json\\\",\",\" \\\"/usr/local/libexec/homelab-backup-gfs-policy\\\",\",\" \\\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/preflight.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/prepare.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/dry-run.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/apply.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/verify.json\\\",\",\" \\\"$HOMELAB_RUN_DIR/rollback.json\\\",\",\"- \\\"$HOMELAB_RUN_DIR/seal.json\\\"\",\"+ \\\"$HOMELAB_RUN_DIR/seal.json\\\",\",\"+ \\\"systemd:homelab-backup-retention-gc.timer\\\"\",\" ]\",\" }\"]\nTASK_JSON_DIFF_SHA256=4b0f0bf4cb0d00d48e702d78823ab8bf2842c854d665bfd33bcc997d163c09b1\nHEAD_TASK_JSON_SHA256=665319f09578db5e0f5b3260517c470cf21fe4f6da6366886f8f283c8a895cd0\nWORK_TASK_JSON_SHA256=861bac805089ed92400df50824d3afeb5dbf312d96f268a8351a1f5e64f719a7\nTASK_JSON_SEMANTIC_CHANGES=[{\"after\":[\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\",\"/etc/homelab-backup/gfs-retention.json\",\"/usr/local/libexec/homelab-backup-gfs-policy\",\"systemd:homelab-backup-retention-gc.service\",\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\",\"systemd:homelab-backup-retention-gc.timer\"],\"before\":[\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\",\"/etc/homelab-backup/gfs-retention.json\",\"/usr/local/libexec/homelab-backup-gfs-policy\",\"systemd:homelab-backup-retention-gc.service\",\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\"],\"change\":\"list_changed\",\"path\":\"$.mutates\"},{\"after\":[\"/etc/homelab-backup/targets.json exact bytes\",\"homelab-backup-v2 runtime and timer\",\"all cloud backup generations and replica objects\",\"all restore evidence\",\"rclone configuration\",\"network\",\"dns\",\"known_hosts\",\"backup and restore execution count remains zero\",\"retention GC execution count remains zero\",\"cloud delete count remains zero\",\"homelab-backup-retention-gc timer unit bytes and schedule unchanged; enablement intentionally held disabled/inactive after apply\",\"homelab-backup-retention-gc service never started by this task\"],\"before\":[\"/etc/homelab-backup/targets.json exact bytes\",\"homelab-backup-v2 runtime and timer\",\"homelab-backup-retention-gc timer schedule and enabled/active state\",\"all cloud backup generations and replica objects\",\"all restore evidence\",\"rclone configuration\",\"network\",\"dns\",\"known_hosts\",\"backup and restore execution count remains zero\",\"retention GC execution count remains zero\",\"cloud delete count remains zero\"],\"change\":\"list_changed\",\"path\":\"$.no_change_assertions\"},{\"after\":\"46c6f9aaf8fa93ce9f0cee686f948704c1a61336\",\"change\":\"added\",\"path\":\"$.source_of_truth.package_parent_commit\"},{\"after\":true,\"change\":\"added\",\"path\":\"$.source_of_truth.retention_timer_hold_after_apply\"},{\"after\":true,\"change\":\"added\",\"path\":\"$.source_of_truth.retention_timer_reenable_requires_future_safe_plan\"},{\"after\":[\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\",\"/etc/homelab-backup/gfs-retention.json\",\"/usr/local/libexec/homelab-backup-gfs-policy\",\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\",\"$HOMELAB_RUN_DIR/preflight.json\",\"$HOMELAB_RUN_DIR/prepare.json\",\"$HOMELAB_RUN_DIR/dry-run.json\",\"$HOMELAB_RUN_DIR/apply.json\",\"$HOMELAB_RUN_DIR/verify.json\",\"$HOMELAB_RUN_DIR/rollback.json\",\"$HOMELAB_RUN_DIR/seal.json\",\"systemd:homelab-backup-retention-gc.timer\"],\"before\":[\"/var/lib/homelab-admin/staging/backup-gfs-lifecycle-remediation-v1\",\"/etc/homelab-backup/gfs-retention.json\",\"/usr/local/libexec/homelab-backup-gfs-policy\",\"/var/lib/homelab-admin/seals/backup-gfs-lifecycle-remediation-v1.json\",\"$HOMELAB_RUN_DIR/preflight.json\",\"$HOMELAB_RUN_DIR/prepare.json\",\"$HOMELAB_RUN_DIR/dry-run.json\",\"$HOMELAB_RUN_DIR/apply.json\",\"$HOMELAB_RUN_DIR/verify.json\",\"$HOMELAB_RUN_DIR/rollback.json\",\"$HOMELAB_RUN_DIR/seal.json\"],\"change\":\"list_changed\",\"path\":\"$.writes\"}]\nTASK_JSON_SEMANTIC_CHANGE_COUNT=6\nHEAD_TASK_FILE_TREE=[\"tasks/backup-gfs-lifecycle-remediation-v1/README.md\",\"tasks/backup-gfs-lifecycle-remediation-v1/assets/baseline-gfs-retention.json\",\"tasks/backup-gfs-lifecycle-remediation-v1/assets/baseline-homelab-backup-gfs-policy\",\"tasks/backup-gfs-lifecycle-remediation-v1/assets/gfs-retention.json\",\"tasks/backup-gfs-lifecycle-remediation-v1/assets/homelab-backup-gfs-policy\",\"tasks/backup-gfs-lifecycle-remediation-v1/assets/targets.json\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/apply.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/dry-run.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/preflight.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/prepare.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/rollback.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/seal.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/phases/verify.sh\",\"tasks/backup-gfs-lifecycle-remediation-v1/task.json\"]\nHEAD_TASK_FILE_COUNT=14\nHEAD_TOOLS_COMMON_EXISTS=false\nHEAD_PHASE_STRUCTURE=[{\"anchor_counts\":{\"check_no_active_backup_call\":1,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":1,\"service_mentions\":1,\"timer_mentions\":0,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"},{\"line\":46,\"text\":\"rollback_now(){\"},{\"line\":47,\"text\":\" install -m 0644 -o root -g root \\\"$STAGE/gfs-retention.json\\\" \\\"$LIVE_POLICY\\\"\"},{\"line\":48,\"text\":\" install -m 0755 -o root -g root \\\"$STAGE/homelab-backup-gfs-policy\\\" \\\"$LIVE_HELPER\\\"\"},{\"line\":50,\"text\":\"trap 'rc=$?; rollback_now || true; echo \\\"ROOT_CAUSE=APPLY_FAILED|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"' ERR\"},{\"line\":51,\"text\":\"install -m 0644 -o root -g root \\\"$ASSET_POLICY\\\" \\\"$LIVE_POLICY\\\"\"},{\"line\":52,\"text\":\"install -m 0755 -o root -g root \\\"$ASSET_HELPER\\\" \\\"$LIVE_HELPER\\\"\"},{\"line\":56,\"text\":\"systemctl reset-failed homelab-backup-retention-gc.service\"},{\"line\":57,\"text\":\"trap on_err ERR\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/apply.sh\",\"line_count\":59,\"path\":\"phases/apply.sh\",\"phase\":\"apply\",\"rc\":0,\"sha256\":\"22d00f65cb8a2011d34e8d61ca07082c9722d59fe735152059884ac75666d81c\"},{\"anchor_counts\":{\"check_no_active_backup_call\":1,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":0,\"timer_mentions\":0,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/dry-run.sh\",\"line_count\":52,\"path\":\"phases/dry-run.sh\",\"phase\":\"dry-run\",\"rc\":0,\"sha256\":\"9ce7dce7604a8f116c1b874f8348692d0c19eb7058e51ae4d2f2165a41f6cdba\"},{\"anchor_counts\":{\"check_no_active_backup_call\":0,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":0,\"timer_mentions\":2,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"},{\"line\":42,\"text\":\"systemctl is-enabled --quiet homelab-backup-retention-gc.timer || die RETENTION_TIMER_NOT_ENABLED\"},{\"line\":43,\"text\":\"systemctl is-active --quiet homelab-backup-retention-gc.timer || die RETENTION_TIMER_NOT_ACTIVE\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/preflight.sh\",\"line_count\":54,\"path\":\"phases/preflight.sh\",\"phase\":\"preflight\",\"rc\":0,\"sha256\":\"336de004b64c90eac8769dbd0e7e4d2637ae700d48149d000ec04b39355a5a6a\"},{\"anchor_counts\":{\"check_no_active_backup_call\":1,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":0,\"timer_mentions\":0,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/prepare.sh\",\"line_count\":53,\"path\":\"phases/prepare.sh\",\"phase\":\"prepare\",\"rc\":0,\"sha256\":\"fe72a477297169f6bad1449032ab56b4b23a700aeb9828b3cb5b78304e020dba\"},{\"anchor_counts\":{\"check_no_active_backup_call\":0,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":0,\"timer_mentions\":0,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"},{\"line\":43,\"text\":\"install -m 0644 -o root -g root \\\"$STAGE/gfs-retention.json\\\" \\\"$LIVE_POLICY\\\"\"},{\"line\":44,\"text\":\"install -m 0755 -o root -g root \\\"$STAGE/homelab-backup-gfs-policy\\\" \\\"$LIVE_HELPER\\\"\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/rollback.sh\",\"line_count\":48,\"path\":\"phases/rollback.sh\",\"phase\":\"rollback\",\"rc\":0,\"sha256\":\"731594042479cdcb26a9bebb5852ab7e639541071195a235a671fc7e5562cd4a\"},{\"anchor_counts\":{\"check_no_active_backup_call\":0,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":0,\"timer_mentions\":0,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/seal.sh\",\"line_count\":49,\"path\":\"phases/seal.sh\",\"phase\":\"seal\",\"rc\":0,\"sha256\":\"719d37dcff71ca0c944df2410e81d70574bdbeab4bc60cd79ac15b783405e56f\"},{\"anchor_counts\":{\"check_no_active_backup_call\":0,\"check_no_active_backup_def\":1,\"require_assets_def\":1,\"require_live_baseline_def\":1,\"rollback_now_def\":0,\"service_mentions\":1,\"timer_mentions\":2,\"validate_candidate_def\":1},\"focus_lines\":[{\"line\":2,\"text\":\"set -Eeuo pipefail\"},{\"line\":18,\"text\":\"die(){ echo \\\"ROOT_CAUSE=$1|ROOT_CAUSE_COUNT=1\\\" >&2; exit \\\"${2:-66}\\\"; }\"},{\"line\":19,\"text\":\"on_err(){ rc=$?; echo \\\"ROOT_CAUSE=UNEXPECTED_RUNTIME_FAILURE|ROOT_CAUSE_COUNT=1|RC=$rc\\\" >&2; exit \\\"$rc\\\"; }\"},{\"line\":20,\"text\":\"trap on_err ERR\"},{\"line\":21,\"text\":\"require_live_baseline(){\"},{\"line\":26,\"text\":\"require_assets(){\"},{\"line\":31,\"text\":\"validate_candidate(){\"},{\"line\":34,\"text\":\"check_no_active_backup(){\"},{\"line\":43,\"text\":\"mapfile -t CRIT < <(HOMELAB_BACKUP_GFS_POLICY=\\\"$LIVE_POLICY\\\" HOMELAB_BACKUP_TARGET_REGISTRY=\\\"$LIVE_REGISTRY\\\" \\\"$LIVE_HELPER\\\" critical-logicals)\"},{\"line\":46,\"text\":\"systemctl is-enabled --quiet homelab-backup-retention-gc.timer || die VERIFY_TIMER_NOT_ENABLED\"},{\"line\":47,\"text\":\"systemctl is-active --quiet homelab-backup-retention-gc.timer || die VERIFY_TIMER_NOT_ACTIVE\"},{\"line\":48,\"text\":\"if systemctl is-failed --quiet homelab-backup-retention-gc.service; then die VERIFY_RETENTION_SERVICE_FAILED; fi\"}],\"git_path\":\"tasks/backup-gfs-lifecycle-remediation-v1/phases/verify.sh\",\"line_count\":50,\"path\":\"phases/verify.sh\",\"phase\":\"verify\",\"rc\":0,\"sha256\":\"b3589070dc915211e091984800ec76976fef74669288440103bcb7c1eb69e0c4\"}]\nWORKING_TASK_LINT={\"rc\":0,\"stderr_lines\":[],\"stdout_lines\":[\"LINT_STATUS=OK\",\"TASK_ID=backup-gfs-lifecycle-remediation-v1\",\"POLICY_ID=homelab-admin-guardrails-v1.2\",\"RULES_CHECKED=14\",\"SOURCE_FILES_CHECKED=7\"]}\nWORKING_TASK_VALIDATE={\"rc\":0,\"stderr_lines\":[],\"stdout_lines\":[\"LINT_STATUS=OK\",\"TASK_ID=backup-gfs-lifecycle-remediation-v1\",\"POLICY_ID=homelab-admin-guardrails-v1.2\",\"RULES_CHECKED=14\",\"SOURCE_FILES_CHECKED=7\",\"TASK_VALID=YES\",\"TASK_ID=backup-gfs-lifecycle-remediation-v1\",\"TASK_SCOPE=controlled_apply\",\"PRODUCTION_CHANGE=YES\"]}\nLIVE_POLICY_META={\"exists\":true,\"expected\":\"ea6526bec7d7591bef876799cecddff4849631a936edc9f593b47211fbad715c\",\"match\":true,\"sha256\":\"ea6526bec7d7591bef876799cecddff4849631a936edc9f593b47211fbad715c\"}\nLIVE_HELPER_META={\"exists\":true,\"expected\":\"6b7ec1ab3ee1c540a9113b5620c3b4b5a50de6536f3a069d31b2e1243f23bafa\",\"match\":true,\"sha256\":\"6b7ec1ab3ee1c540a9113b5620c3b4b5a50de6536f3a069d31b2e1243f23bafa\"}\nLIVE_REGISTRY_META={\"exists\":true,\"expected\":\"6ecf034ca03b52a1e6beceeae81d86a623885462c095d50b133aea4048a4626e\",\"match\":true,\"sha256\":\"6ecf034ca03b52a1e6beceeae81d86a623885462c095d50b133aea4048a4626e\"}\nRETENTION_UNIT_STATE={\"homelab-backup-retention-gc.service\":{\"ActiveState\":{\"rc\":0,\"value\":\"failed\"},\"LastTriggerUSec\":{\"rc\":0,\"value\":\"\"},\"LoadState\":{\"rc\":0,\"value\":\"loaded\"},\"NextElapseUSecRealtime\":{\"rc\":0,\"value\":\"\"},\"Result\":{\"rc\":0,\"value\":\"exit-code\"},\"SubState\":{\"rc\":0,\"value\":\"failed\"},\"UnitFileState\":{\"rc\":0,\"value\":\"static\"}},\"homelab-backup-retention-gc.timer\":{\"ActiveState\":{\"rc\":0,\"value\":\"active\"},\"LastTriggerUSec\":{\"rc\":0,\"value\":\"Mon 2026-09-21 03:22:42 MSK\"},\"LoadState\":{\"rc\":0,\"value\":\"loaded\"},\"NextElapseUSecRealtime\":{\"rc\":0,\"value\":\"Tue 2026-09-22 03:32:10 MSK\"},\"Result\":{\"rc\":0,\"value\":\"success\"},\"SubState\":{\"rc\":0,\"value\":\"waiting\"},\"UnitFileState\":{\"rc\":0,\"value\":\"enabled\"}}}\nDIRTY_PROVENANCE_CLASSIFICATION={\"added_timer_mutate\":true,\"added_timer_write\":true,\"consistent_with_1028_pre_tools_common_patch\":true,\"source_hold\":true,\"source_reenable\":true}\nNO_MUTATION=true\nNO_REPO_WRITE=true\nNO_GIT_FETCH=true\nNO_GIT_COMMIT=true\nNO_GIT_PUSH_UPDATE=true\nNO_PRODUCTION_MUTATION=true\nNO_SERVICE_ACTION=true\nNO_BACKUP_STARTED=true\nNO_RESTORE_STARTED=true\nNO_RETENTION_STARTED=true\nNO_DELETE=true\nNO_MAIL_SENT=true\nRCA_DURATION_SEC=0.219\nTASK_RESULT=PASS_HOMELAB_BACKUP_GFS_DIRTY_TASK_RCA_READONLY\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260921-HOMELAB-BACKUP-GFS-DIRTY-TASK-RCA-READONLY-1030R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\nWORKERS2_BACKUP_GFS_DIRTY_TASK_RCA_END=1\n"
}