diff --git a/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.json b/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.json new file mode 100644 index 00000000..e7a42b1e --- /dev/null +++ b/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "homelab-backup-ct110-controlled-helper-replay", + "started_at_utc": "2026-09-27T19:14:37Z", + "finished_at_utc": "2026-09-27T19:14:51Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239", + "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": "78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5", + "sanitized_output_sha256": "78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true\nCOMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1\nMODE=read-only\nCOMPONENT=homelab-backup-ct110-controlled-helper-replay\nMUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE\nHOST=pve01\nCLUSTER_QUORATE=Yes\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSOURCE_1225_STATUS=OK\nSOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN\nSOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY\n=== SOURCE_IDENTITY ===\nLXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d\nHELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011\nLXC_SHA_MATCH=true\nHELPER_SHA_MATCH=true\n=== CONTROLLED_REPLAY ===\nDIAG_SCRATCH=/run/workers2-1226-gg5z91zs\nLXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'}\nLXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439\nLXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea\nLXC_HELPER_CONST=None\nENV_RESOLUTION=PASS\nENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE\nENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90\nLIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439\nLIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea\nPVESH_IDENTITY_MATCH=true\nVZDUMP_IDENTITY_MATCH=true\nTOOL_IDENTITY_GATE=PASS\nCT110_UNPRIVILEGED=true\nCT110_CONFIG_GATE=PASS\nBACKUP_SERVICE_STATE_RAW=failed/failed\nACTIVE_VZDUMP_PROCESS_COUNT=0\nCONCURRENCY_GATE=PASS\nRUN1_INPUT_BYTES=186216\nRUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf\nRUN1_ROW_COUNT=15\nRUN1_CONFIG_COUNT=8\nRUN1_TASK_COUNT=749\nRUN1_STAGING_FREE=285682868224\nRUN1_RC=1\nRUN1_STDOUT_BYTES=0\nRUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRUN1_STDOUT_BEGIN\n\nRUN1_STDOUT_END\nRUN1_STDERR_BYTES=898\nRUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9\nRUN1_STDERR_BEGIN\nTraceback (most recent call last):\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 45, in \n raise SystemExit(main())\n ~~~~^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 34, in main\n pve265.validate_job(job,now)\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 126, in validate_job\n need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 32, in need\n if not ok:raise PVEError(reason)\n ^^^^^^^^^^^^^^^^^^^^^^\npve265.PVEError: JOB_BLOCKED\n\nRUN1_STDERR_END\nRUN1_FAILURE_MODE=NONZERO_RC\nRUN2_INPUT_BYTES=186199\nRUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f\nRUN2_ROW_COUNT=15\nRUN2_CONFIG_COUNT=8\nRUN2_TASK_COUNT=749\nRUN2_STAGING_FREE=285682868224\nRUN2_RC=1\nRUN2_STDOUT_BYTES=0\nRUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRUN2_STDOUT_BEGIN\n\nRUN2_STDOUT_END\nRUN2_STDERR_BYTES=898\nRUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9\nRUN2_STDERR_BEGIN\nTraceback (most recent call last):\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 45, in \n raise SystemExit(main())\n ~~~~^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 34, in main\n pve265.validate_job(job,now)\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 126, in validate_job\n need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 32, in need\n if not ok:raise PVEError(reason)\n ^^^^^^^^^^^^^^^^^^^^^^\npve265.PVEError: JOB_BLOCKED\n\nRUN2_STDERR_END\nRUN2_FAILURE_MODE=NONZERO_RC\nRUN_MODE_STABLE=true\nRUN_RC_STABLE=true\nRUN_STDERR_SHA_STABLE=true\nRUN_JOB_SHA_STABLE=true\nRUN_ARGV_SHA_STABLE=true\nREPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC\nDIAG_SCRATCH_REMOVED=true\nCONTROLLED_REPLAY_DIAG_RC=0\nTASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED\nDECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED\nNEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.txt b/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.txt new file mode 100644 index 00000000..b405a922 --- /dev/null +++ b/runtime/history/SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1.txt @@ -0,0 +1,143 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=homelab-backup-ct110-controlled-helper-replay +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239 +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=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5 +SANITIZED_OUTPUT_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5 +OUTPUT_BEGIN +BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true +COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1 +MODE=read-only +COMPONENT=homelab-backup-ct110-controlled-helper-replay +MUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE +HOST=pve01 +CLUSTER_QUORATE=Yes +RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d +SOURCE_1225_STATUS=OK +SOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN +SOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY +=== SOURCE_IDENTITY === +LXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d +HELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011 +LXC_SHA_MATCH=true +HELPER_SHA_MATCH=true +=== CONTROLLED_REPLAY === +DIAG_SCRATCH=/run/workers2-1226-gg5z91zs +LXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'} +LXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439 +LXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea +LXC_HELPER_CONST=None +ENV_RESOLUTION=PASS +ENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE +ENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90 +LIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439 +LIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea +PVESH_IDENTITY_MATCH=true +VZDUMP_IDENTITY_MATCH=true +TOOL_IDENTITY_GATE=PASS +CT110_UNPRIVILEGED=true +CT110_CONFIG_GATE=PASS +BACKUP_SERVICE_STATE_RAW=failed/failed +ACTIVE_VZDUMP_PROCESS_COUNT=0 +CONCURRENCY_GATE=PASS +RUN1_INPUT_BYTES=186216 +RUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf +RUN1_ROW_COUNT=15 +RUN1_CONFIG_COUNT=8 +RUN1_TASK_COUNT=749 +RUN1_STAGING_FREE=285682868224 +RUN1_RC=1 +RUN1_STDOUT_BYTES=0 +RUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +RUN1_STDOUT_BEGIN + +RUN1_STDOUT_END +RUN1_STDERR_BYTES=898 +RUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9 +RUN1_STDERR_BEGIN +Traceback (most recent call last): + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in + raise SystemExit(main()) + ~~~~^^ + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main + pve265.validate_job(job,now) + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job + need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED') + ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need + if not ok:raise PVEError(reason) + ^^^^^^^^^^^^^^^^^^^^^^ +pve265.PVEError: JOB_BLOCKED + +RUN1_STDERR_END +RUN1_FAILURE_MODE=NONZERO_RC +RUN2_INPUT_BYTES=186199 +RUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f +RUN2_ROW_COUNT=15 +RUN2_CONFIG_COUNT=8 +RUN2_TASK_COUNT=749 +RUN2_STAGING_FREE=285682868224 +RUN2_RC=1 +RUN2_STDOUT_BYTES=0 +RUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +RUN2_STDOUT_BEGIN + +RUN2_STDOUT_END +RUN2_STDERR_BYTES=898 +RUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9 +RUN2_STDERR_BEGIN +Traceback (most recent call last): + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in + raise SystemExit(main()) + ~~~~^^ + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main + pve265.validate_job(job,now) + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job + need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED') + ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need + if not ok:raise PVEError(reason) + ^^^^^^^^^^^^^^^^^^^^^^ +pve265.PVEError: JOB_BLOCKED + +RUN2_STDERR_END +RUN2_FAILURE_MODE=NONZERO_RC +RUN_MODE_STABLE=true +RUN_RC_STABLE=true +RUN_STDERR_SHA_STABLE=true +RUN_JOB_SHA_STABLE=true +RUN_ARGV_SHA_STABLE=true +REPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC +DIAG_SCRATCH_REMOVED=true +CONTROLLED_REPLAY_DIAG_RC=0 +TASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED +DECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED +NEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 87d539a2..e7a42b1e 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1", + "command_id": "SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", - "component": "homelab-backup-ct110-helper-transitive-static-rca", - "started_at_utc": "2026-09-27T19:10:50Z", - "finished_at_utc": "2026-09-27T19:10:50Z", + "component": "homelab-backup-ct110-controlled-helper-replay", + "started_at_utc": "2026-09-27T19:14:37Z", + "finished_at_utc": "2026-09-27T19:14:51Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "6d64e36c947c6baf0c7e53d2c17497d65666c040e09535e4223e53e5c8dbfa19", + "command_sha256": "32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239", "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": "6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b", - "sanitized_output_sha256": "6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b", + "raw_evidence_sha256": "78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5", + "sanitized_output_sha256": "78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "BACKUP_CT110_HELPER_TRANSITIVE_STATIC_RCA_BEGIN=true\nCOMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1\nMODE=read-only\nCOMPONENT=homelab-backup-ct110-helper-transitive-static-rca\nMUTATION_BOUNDARY=PURE_STATIC_AST_ONLY_NO_PROJECT_IMPORT_NO_HELPER_EXECUTION_NO_VZDUMP_NO_SYSTEMD_ACTION_NO_BACKUP_NO_AUDIT_NO_FILE_MUTATION_NO_LOCK_BREAK_NO_GIT_WRITE_NO_NETBIRD_SKLADCHIK_CHANGE\nHOST=pve01\nCLUSTER_QUORATE=Yes\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSOURCE_1224_STATUS=OK\nSOURCE_1224_DECISION=PASS_CT110_HELPER_STATIC_RCA_COLLECTED\nSOURCE_1224_NEXT_GATE=READ_EXACT_1224_AND_DECIDE_SAFE_HELPER_REPLAY_OR_SOURCE_FIX\n=== TRANSITIVE_STATIC_AST ===\nC411_PY_COUNT=17\nC411_FILE=adapter|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/adapter.py|SHA256=18eb29cef165371b48bcb78e1a456e1939e6eff253787218133162cc89ab9fa3|BYTES=2989\nC411_FILE=guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/guest266.py|SHA256=86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868|BYTES=7385\nC411_FILE=large264|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/large264.py|SHA256=5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a|BYTES=16514\nC411_FILE=nodeplan263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/nodeplan263.py|SHA256=db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060|BYTES=4603\nC411_FILE=pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py|SHA256=cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be|BYTES=12888\nC411_FILE=pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve270.py|SHA256=97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef|BYTES=19595\nC411_FILE=pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve282.py|SHA256=73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012|BYTES=6195\nC411_FILE=restore262|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/restore262.py|SHA256=56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1|BYTES=14701\nC411_FILE=stream263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/stream263.py|SHA256=a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16|BYTES=8831\nC411_FILE=test_guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_guest266.py|SHA256=460b950924a475ce0a28dc759512e7dbe2323ae2cc42f7ef4c6181710a2a13da|BYTES=10752\nC411_FILE=test_perl270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_perl270.py|SHA256=50fc10865078a7b9b255dc627059824184441a47c4ede52e23f24c1186e3512f|BYTES=5441\nC411_FILE=test_producer282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_producer282.py|SHA256=a67d927cc428935791f9eecc3acf571d089f80761162f4589b7d684fba6b8af7|BYTES=12215\nC411_FILE=test_pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve265.py|SHA256=16a9407d01bf73db687ef38684c59205fc2e6a9223cd9cee6ec6e8dde9d38707|BYTES=11781\nC411_FILE=test_pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve270.py|SHA256=9fccd20b490613fdd5b14b4105cf0d9fd744f204e1ed1d6893e54c9f69bf6fb4|BYTES=12077\nC411_FILE=test_pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve282.py|SHA256=1056407aab76e17181b05e043cb42c086058545a8e0027689ab4e03eee6531c4|BYTES=5785\nC411_FILE=transport261|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/transport261.py|SHA256=b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688|BYTES=15364\nC411_FILE=v2core|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/v2core.py|SHA256=e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2|BYTES=11755\n=== ADAPTER_FULL_SOURCE_BEGIN ===\n0001:#!/usr/bin/python3\n0002:import hashlib,inspect,json,pathlib,sys\n0003:BASE=pathlib.Path(__file__).resolve().parent\n0004:EXPECTED={\n0005:'v2core.py':'e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2',\n0006:'transport261.py':'b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688',\n0007:'restore262.py':'56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1',\n0008:'stream263.py':'a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16',\n0009:'nodeplan263.py':'db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060',\n0010:'large264.py':'5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a',\n0011:'pve265.py':'cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be',\n0012:'guest266.py':'86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868',\n0013:'pve270.py':'97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef',\n0014:'pve282.py':'73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012'}\n0015:def sha(p):\n0016: h=hashlib.sha256()\n0017: with open(p,'rb') as f:\n0018: for b in iter(lambda:f.read(1048576),b''):h.update(b)\n0019: return h.hexdigest()\n0020:def verify_sources():\n0021: for name,want in EXPECTED.items():\n0022: p=BASE/name\n0023: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name)\n0024:def load_graph():\n0025: import guest266,pve265,pve270,pve282\n0026: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')\n0027: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')\n0028: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')\n0029: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')\n0030: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')\n0031: for n in ('MappedScratch','capture_archive','validate_mapping'):\n0032: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')\n0033: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')\n0034: return guest266,pve265,pve270,pve282\n0035:def describe():\n0036: _,p265,p270,p282=load_graph()\n0037: funcs={'pve265.dump_argv':p265.dump_argv,'pve265.validate_job':p265.validate_job,'pve265.make_plan':p265.make_plan,'pve270.validate_mapping':p270.validate_mapping,'pve270.capture_archive':p270.capture_archive,'pve270.produce':p270.produce,'pve282.select112':p282.select112,'pve282.produce':p282.produce}\n0038: return {'schema':1,'bundle':'pve-lxc-adapter-411r1','source_sha256':EXPECTED,'signatures':{k:str(inspect.signature(v)) for k,v in funcs.items()},'owner':{'dump_argv':'pve265','MappedScratch':'pve270','capture_archive':'pve270','validate_mapping':'pve270','pve282.old':'pve265','pve282.proven':'pve270'}}\n0039:def main():\n0040: verify_sources(); mode=sys.argv[1] if len(sys.argv)>1 else 'selftest'; d=describe()\n0041: if mode not in ('selftest','describe'):raise SystemExit(2)\n0042: print(json.dumps(d,sort_keys=True,separators=(',',':')))\n0043: if mode=='selftest':print('ADAPTER_SELFTEST=PASS')\n0044:if __name__=='__main__':main()\n=== ADAPTER_FULL_SOURCE_END ===\n=== ADAPTER_FUNC_verify_sources_BEGIN ===\n0001:def verify_sources():\n0002: for name,want in EXPECTED.items():\n0003: p=BASE/name\n0004: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name)\n=== ADAPTER_FUNC_verify_sources_END ===\n=== ADAPTER_FUNC_load_graph_BEGIN ===\n0001:def load_graph():\n0002: import guest266,pve265,pve270,pve282\n0003: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')\n0004: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')\n0005: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')\n0006: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')\n0007: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')\n0008: for n in ('MappedScratch','capture_archive','validate_mapping'):\n0009: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')\n0010: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')\n0011: return guest266,pve265,pve270,pve282\n=== ADAPTER_FUNC_load_graph_END ===\nADAPTER_REACHABLE_FUNCTIONS=load_graph,sha,verify_sources\nADAPTER_REACHABLE_EDGES=[[\"verify_sources\",\"sha\"]]\nADAPTER_REACHABLE_CALLS=[{\"args\":[\"guest266\",\"'dump_argv'\"],\"func\":\"hasattr\",\"kw\":[],\"lineno\":26,\"owner\":\"load_graph\"},{\"args\":[\"'GUEST266_UNEXPECTED_DUMP_ARGV'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":26,\"owner\":\"load_graph\"},{\"args\":[\"pve265\",\"'dump_argv'\"],\"func\":\"hasattr\",\"kw\":[],\"lineno\":27,\"owner\":\"load_graph\"},{\"args\":[\"'PVE265_DUMP_ARGV_MISSING'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":27,\"owner\":\"load_graph\"},{\"args\":[\"pve270\",\"'old'\",\"None\"],\"func\":\"getattr\",\"kw\":[],\"lineno\":28,\"owner\":\"load_graph\"},{\"args\":[\"'PVE270_OLD_NOT_PVE265'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":28,\"owner\":\"load_graph\"},{\"args\":[\"pve282\",\"'old'\",\"None\"],\"func\":\"getattr\",\"kw\":[],\"lineno\":29,\"owner\":\"load_graph\"},{\"args\":[\"'PVE282_OLD_NOT_PVE265'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":29,\"owner\":\"load_graph\"},{\"args\":[\"pve282\",\"'proven'\",\"None\"],\"func\":\"getattr\",\"kw\":[],\"lineno\":30,\"owner\":\"load_graph\"},{\"args\":[\"'PVE282_PROVEN_NOT_PVE270'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":30,\"owner\":\"load_graph\"},{\"args\":[\"pve270\",\"n\"],\"func\":\"hasattr\",\"kw\":[],\"lineno\":32,\"owner\":\"load_graph\"},{\"args\":[\"'PVE270_' + n.upper() + '_MISSING'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":32,\"owner\":\"load_graph\"},{\"args\":[\"pve282\",\"n\",\"None\"],\"func\":\"getattr\",\"kw\":[],\"lineno\":33,\"owner\":\"load_graph\"},{\"args\":[\"pve270\",\"n\"],\"func\":\"getattr\",\"kw\":[],\"lineno\":33,\"owner\":\"load_graph\"},{\"args\":[\"'PVE282_ALIAS_' + n.upper() + '_MISMATCH'\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":33,\"owner\":\"load_graph\"},{\"args\":[],\"func\":\"n.upper\",\"kw\":[],\"lineno\":32,\"owner\":\"load_graph\"},{\"args\":[],\"func\":\"n.upper\",\"kw\":[],\"lineno\":33,\"owner\":\"load_graph\"},{\"args\":[],\"func\":\"hashlib.sha256\",\"kw\":[],\"lineno\":16,\"owner\":\"sha\"},{\"args\":[],\"func\":\"h.hexdigest\",\"kw\":[],\"lineno\":19,\"owner\":\"sha\"},{\"args\":[\"p\",\"'rb'\"],\"func\":\"open\",\"kw\":[],\"lineno\":17,\"owner\":\"sha\"},{\"args\":[\"lambda: f.read(1048576)\",\"b''\"],\"func\":\"iter\",\"kw\":[],\"lineno\":18,\"owner\":\"sha\"},{\"args\":[\"b\"],\"func\":\"h.update\",\"kw\":[],\"lineno\":18,\"owner\":\"sha\"},{\"args\":[\"1048576\"],\"func\":\"f.read\",\"kw\":[],\"lineno\":18,\"owner\":\"sha\"},{\"args\":[],\"func\":\"EXPECTED.items\",\"kw\":[],\"lineno\":21,\"owner\":\"verify_sources\"},{\"args\":[],\"func\":\"p.is_symlink\",\"kw\":[],\"lineno\":23,\"owner\":\"verify_sources\"},{\"args\":[\"'SOURCE_IDENTITY_' + name\"],\"func\":\"RuntimeError\",\"kw\":[],\"lineno\":23,\"owner\":\"verify_sources\"},{\"args\":[],\"func\":\"p.is_file\",\"kw\":[],\"lineno\":23,\"owner\":\"verify_sources\"},{\"args\":[\"p\"],\"func\":\"sha\",\"kw\":[],\"lineno\":23,\"owner\":\"verify_sources\"}]\nADAPTER_REACHABLE_SIDE_EFFECT_CALLS=[]\nADAPTER_REACHABLE_SIDE_EFFECT_CALL_COUNT=0\nLOCAL_IMPORT_GRAPH={\"adapter\":[]}\nLOCAL_IMPORT_GRAPH_MODULES=adapter\nMODULE_adapter_TOPLEVEL_CALLS=[{\"args\":[],\"func\":\"resolve\",\"kw\":[],\"lineno\":3},{\"args\":[\"__file__\"],\"func\":\"pathlib.Path\",\"kw\":[],\"lineno\":3},{\"args\":[],\"func\":\"main\",\"kw\":[],\"lineno\":44}]\nMODULE_adapter_TOPLEVEL_SIDE_EFFECT_CALLS=[]\nLOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_CALLS=[]\nLOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_COUNT=0\nGUEST266_FOUND=true\n=== GUEST266_NO_ACTIVE_TASKS_BEGIN ===\n0001:def no_active_tasks(rows,vmid):\n0002: t.need(type(rows) is list and len(rows)<1000,'ACTIVE_TASKS_TRUNCATED_OR_INVALID')\n0003: for task in rows:\n0004: t.need(type(task) is dict and type(task.get('type')) is str,'ACTIVE_TASK_SCHEMA')\n0005: # The active index includes completed, not-yet-archived tasks.\n0006: if type(task.get('endtime')) is int and task.get('status') not in (None,'RUNNING'):continue\n0007: kind=task['type'];target=str(task.get('id',''))\n0008: if kind in ('vncshell','vncterm','vncproxy','spiceproxy'):continue\n0009: t.need(target!=str(vmid) and not any(x in kind.lower() for x in ('dump','restore','migrat','snapshot','clone','move_disk','resize')),'COMPETING_PVE_TASK')\n=== GUEST266_NO_ACTIVE_TASKS_END ===\nGUEST266_REACHABLE_FUNCTIONS=no_active_tasks\nGUEST266_REACHABLE_EDGES=[]\nGUEST266_REACHABLE_CALLS=[{\"args\":[\"type(rows) is list and len(rows) < 1000\",\"'ACTIVE_TASKS_TRUNCATED_OR_INVALID'\"],\"func\":\"t.need\",\"kw\":[],\"lineno\":60,\"owner\":\"no_active_tasks\"},{\"args\":[\"type(task) is dict and type(task.get('type')) is str\",\"'ACTIVE_TASK_SCHEMA'\"],\"func\":\"t.need\",\"kw\":[],\"lineno\":62,\"owner\":\"no_active_tasks\"},{\"args\":[\"task.get('id', '')\"],\"func\":\"str\",\"kw\":[],\"lineno\":65,\"owner\":\"no_active_tasks\"},{\"args\":[\"target != str(vmid) and (not any((x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))))\",\"'COMPETING_PVE_TASK'\"],\"func\":\"t.need\",\"kw\":[],\"lineno\":67,\"owner\":\"no_active_tasks\"},{\"args\":[\"'id'\",\"''\"],\"func\":\"task.get\",\"kw\":[],\"lineno\":65,\"owner\":\"no_active_tasks\"},{\"args\":[\"rows\"],\"func\":\"type\",\"kw\":[],\"lineno\":60,\"owner\":\"no_active_tasks\"},{\"args\":[\"rows\"],\"func\":\"len\",\"kw\":[],\"lineno\":60,\"owner\":\"no_active_tasks\"},{\"args\":[\"task.get('endtime')\"],\"func\":\"type\",\"kw\":[],\"lineno\":64,\"owner\":\"no_active_tasks\"},{\"args\":[\"'status'\"],\"func\":\"task.get\",\"kw\":[],\"lineno\":64,\"owner\":\"no_active_tasks\"},{\"args\":[\"task\"],\"func\":\"type\",\"kw\":[],\"lineno\":62,\"owner\":\"no_active_tasks\"},{\"args\":[\"task.get('type')\"],\"func\":\"type\",\"kw\":[],\"lineno\":62,\"owner\":\"no_active_tasks\"},{\"args\":[\"'endtime'\"],\"func\":\"task.get\",\"kw\":[],\"lineno\":64,\"owner\":\"no_active_tasks\"},{\"args\":[\"vmid\"],\"func\":\"str\",\"kw\":[],\"lineno\":67,\"owner\":\"no_active_tasks\"},{\"args\":[\"(x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))\"],\"func\":\"any\",\"kw\":[],\"lineno\":67,\"owner\":\"no_active_tasks\"},{\"args\":[\"'type'\"],\"func\":\"task.get\",\"kw\":[],\"lineno\":62,\"owner\":\"no_active_tasks\"},{\"args\":[],\"func\":\"kind.lower\",\"kw\":[],\"lineno\":67,\"owner\":\"no_active_tasks\"}]\nGUEST266_REACHABLE_SIDE_EFFECT_CALLS=[]\nGUEST266_REACHABLE_SIDE_EFFECT_CALL_COUNT=0\nTRANSITIVE_STATIC_REPLAY_SAFE=true\nSTATIC_TRANSITIVE_ANALYSIS_COMPLETE=true\nSTATIC_TRANSITIVE_RC=0\nTRANSITIVE_STATIC_REPLAY_SAFE_SUMMARY=true\nTASK_RESULT=PASS_CT110_HELPER_TRANSITIVE_STATIC_SAFE\nDECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN\nNEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" + "output": "BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true\nCOMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1\nMODE=read-only\nCOMPONENT=homelab-backup-ct110-controlled-helper-replay\nMUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE\nHOST=pve01\nCLUSTER_QUORATE=Yes\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nSOURCE_1225_STATUS=OK\nSOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN\nSOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY\n=== SOURCE_IDENTITY ===\nLXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d\nHELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011\nLXC_SHA_MATCH=true\nHELPER_SHA_MATCH=true\n=== CONTROLLED_REPLAY ===\nDIAG_SCRATCH=/run/workers2-1226-gg5z91zs\nLXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'}\nLXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439\nLXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea\nLXC_HELPER_CONST=None\nENV_RESOLUTION=PASS\nENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE\nENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90\nLIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439\nLIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea\nPVESH_IDENTITY_MATCH=true\nVZDUMP_IDENTITY_MATCH=true\nTOOL_IDENTITY_GATE=PASS\nCT110_UNPRIVILEGED=true\nCT110_CONFIG_GATE=PASS\nBACKUP_SERVICE_STATE_RAW=failed/failed\nACTIVE_VZDUMP_PROCESS_COUNT=0\nCONCURRENCY_GATE=PASS\nRUN1_INPUT_BYTES=186216\nRUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf\nRUN1_ROW_COUNT=15\nRUN1_CONFIG_COUNT=8\nRUN1_TASK_COUNT=749\nRUN1_STAGING_FREE=285682868224\nRUN1_RC=1\nRUN1_STDOUT_BYTES=0\nRUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRUN1_STDOUT_BEGIN\n\nRUN1_STDOUT_END\nRUN1_STDERR_BYTES=898\nRUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9\nRUN1_STDERR_BEGIN\nTraceback (most recent call last):\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 45, in \n raise SystemExit(main())\n ~~~~^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 34, in main\n pve265.validate_job(job,now)\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 126, in validate_job\n need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 32, in need\n if not ok:raise PVEError(reason)\n ^^^^^^^^^^^^^^^^^^^^^^\npve265.PVEError: JOB_BLOCKED\n\nRUN1_STDERR_END\nRUN1_FAILURE_MODE=NONZERO_RC\nRUN2_INPUT_BYTES=186199\nRUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f\nRUN2_ROW_COUNT=15\nRUN2_CONFIG_COUNT=8\nRUN2_TASK_COUNT=749\nRUN2_STAGING_FREE=285682868224\nRUN2_RC=1\nRUN2_STDOUT_BYTES=0\nRUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\nRUN2_STDOUT_BEGIN\n\nRUN2_STDOUT_END\nRUN2_STDERR_BYTES=898\nRUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9\nRUN2_STDERR_BEGIN\nTraceback (most recent call last):\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 45, in \n raise SystemExit(main())\n ~~~~^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py\", line 34, in main\n pve265.validate_job(job,now)\n ~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 126, in validate_job\n need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py\", line 32, in need\n if not ok:raise PVEError(reason)\n ^^^^^^^^^^^^^^^^^^^^^^\npve265.PVEError: JOB_BLOCKED\n\nRUN2_STDERR_END\nRUN2_FAILURE_MODE=NONZERO_RC\nRUN_MODE_STABLE=true\nRUN_RC_STABLE=true\nRUN_STDERR_SHA_STABLE=true\nRUN_JOB_SHA_STABLE=true\nRUN_ARGV_SHA_STABLE=true\nREPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC\nDIAG_SCRATCH_REMOVED=true\nCONTROLLED_REPLAY_DIAG_RC=0\nTASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED\nDECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED\nNEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 959a67ee..b405a922 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1 +COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=homelab-backup-ct110-helper-transitive-static-rca +COMPONENT=homelab-backup-ct110-controlled-helper-replay REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=6d64e36c947c6baf0c7e53d2c17497d65666c040e09535e4223e53e5c8dbfa19 +COMMAND_SHA256=32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,140 +24,120 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b -SANITIZED_OUTPUT_SHA256=6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b +RAW_EVIDENCE_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5 +SANITIZED_OUTPUT_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5 OUTPUT_BEGIN -BACKUP_CT110_HELPER_TRANSITIVE_STATIC_RCA_BEGIN=true -COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1 +BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true +COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1 MODE=read-only -COMPONENT=homelab-backup-ct110-helper-transitive-static-rca -MUTATION_BOUNDARY=PURE_STATIC_AST_ONLY_NO_PROJECT_IMPORT_NO_HELPER_EXECUTION_NO_VZDUMP_NO_SYSTEMD_ACTION_NO_BACKUP_NO_AUDIT_NO_FILE_MUTATION_NO_LOCK_BREAK_NO_GIT_WRITE_NO_NETBIRD_SKLADCHIK_CHANGE +COMPONENT=homelab-backup-ct110-controlled-helper-replay +MUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE HOST=pve01 CLUSTER_QUORATE=Yes RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d -SOURCE_1224_STATUS=OK -SOURCE_1224_DECISION=PASS_CT110_HELPER_STATIC_RCA_COLLECTED -SOURCE_1224_NEXT_GATE=READ_EXACT_1224_AND_DECIDE_SAFE_HELPER_REPLAY_OR_SOURCE_FIX -=== TRANSITIVE_STATIC_AST === -C411_PY_COUNT=17 -C411_FILE=adapter|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/adapter.py|SHA256=18eb29cef165371b48bcb78e1a456e1939e6eff253787218133162cc89ab9fa3|BYTES=2989 -C411_FILE=guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/guest266.py|SHA256=86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868|BYTES=7385 -C411_FILE=large264|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/large264.py|SHA256=5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a|BYTES=16514 -C411_FILE=nodeplan263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/nodeplan263.py|SHA256=db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060|BYTES=4603 -C411_FILE=pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py|SHA256=cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be|BYTES=12888 -C411_FILE=pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve270.py|SHA256=97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef|BYTES=19595 -C411_FILE=pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve282.py|SHA256=73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012|BYTES=6195 -C411_FILE=restore262|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/restore262.py|SHA256=56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1|BYTES=14701 -C411_FILE=stream263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/stream263.py|SHA256=a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16|BYTES=8831 -C411_FILE=test_guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_guest266.py|SHA256=460b950924a475ce0a28dc759512e7dbe2323ae2cc42f7ef4c6181710a2a13da|BYTES=10752 -C411_FILE=test_perl270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_perl270.py|SHA256=50fc10865078a7b9b255dc627059824184441a47c4ede52e23f24c1186e3512f|BYTES=5441 -C411_FILE=test_producer282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_producer282.py|SHA256=a67d927cc428935791f9eecc3acf571d089f80761162f4589b7d684fba6b8af7|BYTES=12215 -C411_FILE=test_pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve265.py|SHA256=16a9407d01bf73db687ef38684c59205fc2e6a9223cd9cee6ec6e8dde9d38707|BYTES=11781 -C411_FILE=test_pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve270.py|SHA256=9fccd20b490613fdd5b14b4105cf0d9fd744f204e1ed1d6893e54c9f69bf6fb4|BYTES=12077 -C411_FILE=test_pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve282.py|SHA256=1056407aab76e17181b05e043cb42c086058545a8e0027689ab4e03eee6531c4|BYTES=5785 -C411_FILE=transport261|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/transport261.py|SHA256=b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688|BYTES=15364 -C411_FILE=v2core|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/v2core.py|SHA256=e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2|BYTES=11755 -=== ADAPTER_FULL_SOURCE_BEGIN === -0001:#!/usr/bin/python3 -0002:import hashlib,inspect,json,pathlib,sys -0003:BASE=pathlib.Path(__file__).resolve().parent -0004:EXPECTED={ -0005:'v2core.py':'e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2', -0006:'transport261.py':'b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688', -0007:'restore262.py':'56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1', -0008:'stream263.py':'a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16', -0009:'nodeplan263.py':'db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060', -0010:'large264.py':'5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a', -0011:'pve265.py':'cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be', -0012:'guest266.py':'86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868', -0013:'pve270.py':'97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef', -0014:'pve282.py':'73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012'} -0015:def sha(p): -0016: h=hashlib.sha256() -0017: with open(p,'rb') as f: -0018: for b in iter(lambda:f.read(1048576),b''):h.update(b) -0019: return h.hexdigest() -0020:def verify_sources(): -0021: for name,want in EXPECTED.items(): -0022: p=BASE/name -0023: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name) -0024:def load_graph(): -0025: import guest266,pve265,pve270,pve282 -0026: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV') -0027: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING') -0028: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265') -0029: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265') -0030: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270') -0031: for n in ('MappedScratch','capture_archive','validate_mapping'): -0032: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING') -0033: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH') -0034: return guest266,pve265,pve270,pve282 -0035:def describe(): -0036: _,p265,p270,p282=load_graph() -0037: funcs={'pve265.dump_argv':p265.dump_argv,'pve265.validate_job':p265.validate_job,'pve265.make_plan':p265.make_plan,'pve270.validate_mapping':p270.validate_mapping,'pve270.capture_archive':p270.capture_archive,'pve270.produce':p270.produce,'pve282.select112':p282.select112,'pve282.produce':p282.produce} -0038: return {'schema':1,'bundle':'pve-lxc-adapter-411r1','source_sha256':EXPECTED,'signatures':{k:str(inspect.signature(v)) for k,v in funcs.items()},'owner':{'dump_argv':'pve265','MappedScratch':'pve270','capture_archive':'pve270','validate_mapping':'pve270','pve282.old':'pve265','pve282.proven':'pve270'}} -0039:def main(): -0040: verify_sources(); mode=sys.argv[1] if len(sys.argv)>1 else 'selftest'; d=describe() -0041: if mode not in ('selftest','describe'):raise SystemExit(2) -0042: print(json.dumps(d,sort_keys=True,separators=(',',':'))) -0043: if mode=='selftest':print('ADAPTER_SELFTEST=PASS') -0044:if __name__=='__main__':main() -=== ADAPTER_FULL_SOURCE_END === -=== ADAPTER_FUNC_verify_sources_BEGIN === -0001:def verify_sources(): -0002: for name,want in EXPECTED.items(): -0003: p=BASE/name -0004: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name) -=== ADAPTER_FUNC_verify_sources_END === -=== ADAPTER_FUNC_load_graph_BEGIN === -0001:def load_graph(): -0002: import guest266,pve265,pve270,pve282 -0003: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV') -0004: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING') -0005: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265') -0006: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265') -0007: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270') -0008: for n in ('MappedScratch','capture_archive','validate_mapping'): -0009: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING') -0010: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH') -0011: return guest266,pve265,pve270,pve282 -=== ADAPTER_FUNC_load_graph_END === -ADAPTER_REACHABLE_FUNCTIONS=load_graph,sha,verify_sources -ADAPTER_REACHABLE_EDGES=[["verify_sources","sha"]] -ADAPTER_REACHABLE_CALLS=[{"args":["guest266","'dump_argv'"],"func":"hasattr","kw":[],"lineno":26,"owner":"load_graph"},{"args":["'GUEST266_UNEXPECTED_DUMP_ARGV'"],"func":"RuntimeError","kw":[],"lineno":26,"owner":"load_graph"},{"args":["pve265","'dump_argv'"],"func":"hasattr","kw":[],"lineno":27,"owner":"load_graph"},{"args":["'PVE265_DUMP_ARGV_MISSING'"],"func":"RuntimeError","kw":[],"lineno":27,"owner":"load_graph"},{"args":["pve270","'old'","None"],"func":"getattr","kw":[],"lineno":28,"owner":"load_graph"},{"args":["'PVE270_OLD_NOT_PVE265'"],"func":"RuntimeError","kw":[],"lineno":28,"owner":"load_graph"},{"args":["pve282","'old'","None"],"func":"getattr","kw":[],"lineno":29,"owner":"load_graph"},{"args":["'PVE282_OLD_NOT_PVE265'"],"func":"RuntimeError","kw":[],"lineno":29,"owner":"load_graph"},{"args":["pve282","'proven'","None"],"func":"getattr","kw":[],"lineno":30,"owner":"load_graph"},{"args":["'PVE282_PROVEN_NOT_PVE270'"],"func":"RuntimeError","kw":[],"lineno":30,"owner":"load_graph"},{"args":["pve270","n"],"func":"hasattr","kw":[],"lineno":32,"owner":"load_graph"},{"args":["'PVE270_' + n.upper() + '_MISSING'"],"func":"RuntimeError","kw":[],"lineno":32,"owner":"load_graph"},{"args":["pve282","n","None"],"func":"getattr","kw":[],"lineno":33,"owner":"load_graph"},{"args":["pve270","n"],"func":"getattr","kw":[],"lineno":33,"owner":"load_graph"},{"args":["'PVE282_ALIAS_' + n.upper() + '_MISMATCH'"],"func":"RuntimeError","kw":[],"lineno":33,"owner":"load_graph"},{"args":[],"func":"n.upper","kw":[],"lineno":32,"owner":"load_graph"},{"args":[],"func":"n.upper","kw":[],"lineno":33,"owner":"load_graph"},{"args":[],"func":"hashlib.sha256","kw":[],"lineno":16,"owner":"sha"},{"args":[],"func":"h.hexdigest","kw":[],"lineno":19,"owner":"sha"},{"args":["p","'rb'"],"func":"open","kw":[],"lineno":17,"owner":"sha"},{"args":["lambda: f.read(1048576)","b''"],"func":"iter","kw":[],"lineno":18,"owner":"sha"},{"args":["b"],"func":"h.update","kw":[],"lineno":18,"owner":"sha"},{"args":["1048576"],"func":"f.read","kw":[],"lineno":18,"owner":"sha"},{"args":[],"func":"EXPECTED.items","kw":[],"lineno":21,"owner":"verify_sources"},{"args":[],"func":"p.is_symlink","kw":[],"lineno":23,"owner":"verify_sources"},{"args":["'SOURCE_IDENTITY_' + name"],"func":"RuntimeError","kw":[],"lineno":23,"owner":"verify_sources"},{"args":[],"func":"p.is_file","kw":[],"lineno":23,"owner":"verify_sources"},{"args":["p"],"func":"sha","kw":[],"lineno":23,"owner":"verify_sources"}] -ADAPTER_REACHABLE_SIDE_EFFECT_CALLS=[] -ADAPTER_REACHABLE_SIDE_EFFECT_CALL_COUNT=0 -LOCAL_IMPORT_GRAPH={"adapter":[]} -LOCAL_IMPORT_GRAPH_MODULES=adapter -MODULE_adapter_TOPLEVEL_CALLS=[{"args":[],"func":"resolve","kw":[],"lineno":3},{"args":["__file__"],"func":"pathlib.Path","kw":[],"lineno":3},{"args":[],"func":"main","kw":[],"lineno":44}] -MODULE_adapter_TOPLEVEL_SIDE_EFFECT_CALLS=[] -LOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_CALLS=[] -LOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_COUNT=0 -GUEST266_FOUND=true -=== GUEST266_NO_ACTIVE_TASKS_BEGIN === -0001:def no_active_tasks(rows,vmid): -0002: t.need(type(rows) is list and len(rows)<1000,'ACTIVE_TASKS_TRUNCATED_OR_INVALID') -0003: for task in rows: -0004: t.need(type(task) is dict and type(task.get('type')) is str,'ACTIVE_TASK_SCHEMA') -0005: # The active index includes completed, not-yet-archived tasks. -0006: if type(task.get('endtime')) is int and task.get('status') not in (None,'RUNNING'):continue -0007: kind=task['type'];target=str(task.get('id','')) -0008: if kind in ('vncshell','vncterm','vncproxy','spiceproxy'):continue -0009: t.need(target!=str(vmid) and not any(x in kind.lower() for x in ('dump','restore','migrat','snapshot','clone','move_disk','resize')),'COMPETING_PVE_TASK') -=== GUEST266_NO_ACTIVE_TASKS_END === -GUEST266_REACHABLE_FUNCTIONS=no_active_tasks -GUEST266_REACHABLE_EDGES=[] -GUEST266_REACHABLE_CALLS=[{"args":["type(rows) is list and len(rows) < 1000","'ACTIVE_TASKS_TRUNCATED_OR_INVALID'"],"func":"t.need","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["type(task) is dict and type(task.get('type')) is str","'ACTIVE_TASK_SCHEMA'"],"func":"t.need","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["task.get('id', '')"],"func":"str","kw":[],"lineno":65,"owner":"no_active_tasks"},{"args":["target != str(vmid) and (not any((x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))))","'COMPETING_PVE_TASK'"],"func":"t.need","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["'id'","''"],"func":"task.get","kw":[],"lineno":65,"owner":"no_active_tasks"},{"args":["rows"],"func":"type","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["rows"],"func":"len","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["task.get('endtime')"],"func":"type","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["'status'"],"func":"task.get","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["task"],"func":"type","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["task.get('type')"],"func":"type","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["'endtime'"],"func":"task.get","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["vmid"],"func":"str","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["(x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))"],"func":"any","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["'type'"],"func":"task.get","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":[],"func":"kind.lower","kw":[],"lineno":67,"owner":"no_active_tasks"}] -GUEST266_REACHABLE_SIDE_EFFECT_CALLS=[] -GUEST266_REACHABLE_SIDE_EFFECT_CALL_COUNT=0 -TRANSITIVE_STATIC_REPLAY_SAFE=true -STATIC_TRANSITIVE_ANALYSIS_COMPLETE=true -STATIC_TRANSITIVE_RC=0 -TRANSITIVE_STATIC_REPLAY_SAFE_SUMMARY=true -TASK_RESULT=PASS_CT110_HELPER_TRANSITIVE_STATIC_SAFE -DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN -NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY -HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} +SOURCE_1225_STATUS=OK +SOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN +SOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY +=== SOURCE_IDENTITY === +LXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d +HELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011 +LXC_SHA_MATCH=true +HELPER_SHA_MATCH=true +=== CONTROLLED_REPLAY === +DIAG_SCRATCH=/run/workers2-1226-gg5z91zs +LXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'} +LXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439 +LXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea +LXC_HELPER_CONST=None +ENV_RESOLUTION=PASS +ENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE +ENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90 +LIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439 +LIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea +PVESH_IDENTITY_MATCH=true +VZDUMP_IDENTITY_MATCH=true +TOOL_IDENTITY_GATE=PASS +CT110_UNPRIVILEGED=true +CT110_CONFIG_GATE=PASS +BACKUP_SERVICE_STATE_RAW=failed/failed +ACTIVE_VZDUMP_PROCESS_COUNT=0 +CONCURRENCY_GATE=PASS +RUN1_INPUT_BYTES=186216 +RUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf +RUN1_ROW_COUNT=15 +RUN1_CONFIG_COUNT=8 +RUN1_TASK_COUNT=749 +RUN1_STAGING_FREE=285682868224 +RUN1_RC=1 +RUN1_STDOUT_BYTES=0 +RUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +RUN1_STDOUT_BEGIN + +RUN1_STDOUT_END +RUN1_STDERR_BYTES=898 +RUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9 +RUN1_STDERR_BEGIN +Traceback (most recent call last): + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in + raise SystemExit(main()) + ~~~~^^ + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main + pve265.validate_job(job,now) + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job + need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED') + ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need + if not ok:raise PVEError(reason) + ^^^^^^^^^^^^^^^^^^^^^^ +pve265.PVEError: JOB_BLOCKED + +RUN1_STDERR_END +RUN1_FAILURE_MODE=NONZERO_RC +RUN2_INPUT_BYTES=186199 +RUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f +RUN2_ROW_COUNT=15 +RUN2_CONFIG_COUNT=8 +RUN2_TASK_COUNT=749 +RUN2_STAGING_FREE=285682868224 +RUN2_RC=1 +RUN2_STDOUT_BYTES=0 +RUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +RUN2_STDOUT_BEGIN + +RUN2_STDOUT_END +RUN2_STDERR_BYTES=898 +RUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9 +RUN2_STDERR_BEGIN +Traceback (most recent call last): + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in + raise SystemExit(main()) + ~~~~^^ + File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main + pve265.validate_job(job,now) + ~~~~~~~~~~~~~~~~~~~^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job + need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED') + ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need + if not ok:raise PVEError(reason) + ^^^^^^^^^^^^^^^^^^^^^^ +pve265.PVEError: JOB_BLOCKED + +RUN2_STDERR_END +RUN2_FAILURE_MODE=NONZERO_RC +RUN_MODE_STABLE=true +RUN_RC_STABLE=true +RUN_STDERR_SHA_STABLE=true +RUN_JOB_SHA_STABLE=true +RUN_ARGV_SHA_STABLE=true +REPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC +DIAG_SCRATCH_REMOVED=true +CONTROLLED_REPLAY_DIAG_RC=0 +TASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED +DECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED +NEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END