CHAT_OUTPUT_BEGIN COMMAND_ID=NEWFI-260907-RUNNERCONTRACT47 STATUS=OK RC=0 HOST=pve01 MODE=read-only COMPONENT=newfi-runner-contract-status-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 COMMAND_SHA256=63ee0255b910daf2f06f62bca781d351b6e54a1ad4cbe8f16a0d325edc204626 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=f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200 SANITIZED_OUTPUT_SHA256=f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200 OUTPUT_BEGIN NEWFI47_BEGIN COMMAND_ID=NEWFI-260907-RUNNERCONTRACT47 MUTATION_SCOPE=NONE_READ_ONLY RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d RUNNER_BYTES=21321 STATUS_LITERALS_NEAR_CONTRACT=["FAIL","MUTATED","NOT_APPLICABLE","NO_MUTATION","OK","ROLLED_BACK","UNKNOWN"] STATUS_COMPARISONS_NEAR_CONTRACT=["{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","{\"OK\", \"BLOCKED\", \"FAIL\"}","BLOCKED","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL","BLOCKED","OK","FAIL"] SELECTED_SOURCE_LINES_BEGIN {"line":15,"text":" \"valid\": True,"} {"line":16,"text":" \"status\": \"NOT_APPLICABLE\","} {"line":17,"text":" \"changes_made\": \"false\","} {"line":18,"text":" \"rollback_started\": \"false\","} {"line":19,"text":" \"rollback_restored\": \"null\","} {"line":20,"text":" \"mutation_outcome\": \"NO_MUTATION\","} {"line":21,"text":" \"error\": \"NONE\","} {"line":26,"text":" \"valid\": False,"} {"line":27,"text":" \"status\": \"UNKNOWN\","} {"line":28,"text":" \"changes_made\": \"unknown\","} {"line":29,"text":" \"rollback_started\": \"unknown\","} {"line":30,"text":" \"rollback_restored\": \"null\","} {"line":31,"text":" \"mutation_outcome\": \"UNKNOWN\","} {"line":32,"text":" \"error\": \"MISSING_CONTRACT\","} {"line":33,"text":" }"} {"line":34,"text":" marker = \"HOMELAB_RESULT_CONTRACT=\""} {"line":35,"text":" lines = Path(raw_path).read_bytes().decode("} {"line":36,"text":" \"utf-8\","} {"line":46,"text":" document = json.loads(payloads[0])"} {"line":47,"text":" if not isinstance(document, dict):"} {"line":48,"text":" raise ValueError(\"contract root is not object\")"} {"line":49,"text":" if document.get(\"version\") != 1:"} {"line":50,"text":" raise ValueError(\"unsupported version\")"} {"line":51,"text":" if document.get(\"command_id\") != command_id:"} {"line":52,"text":" raise ValueError(\"command_id mismatch\")"} {"line":53,"text":" status = document.get(\"status\")"} {"line":54,"text":" if status not in {\"OK\", \"BLOCKED\", \"FAIL\"}:"} {"line":55,"text":" raise ValueError(\"invalid status\")"} {"line":56,"text":" changes = document.get(\"changes_made\")"} {"line":57,"text":" rollback_started = document.get(\"rollback_started\")"} {"line":58,"text":" rollback_restored = document.get(\"rollback_restored\")"} {"line":59,"text":" if not isinstance(changes, bool):"} {"line":60,"text":" raise ValueError(\"changes_made must be boolean\")"} {"line":61,"text":" if not isinstance(rollback_started, bool):"} {"line":62,"text":" raise ValueError(\"rollback_started must be boolean\")"} {"line":63,"text":" if rollback_restored is not None and not isinstance("} {"line":64,"text":" rollback_restored,"} {"line":65,"text":" bool,"} {"line":66,"text":" ):"} {"line":67,"text":" raise ValueError("} {"line":68,"text":" \"rollback_restored must be boolean or null\""} {"line":69,"text":" )"} {"line":70,"text":" if rollback_restored is True and rollback_started is not True:"} {"line":71,"text":" raise ValueError("} {"line":72,"text":" \"rollback_restored without rollback_started\""} {"line":73,"text":" )"} {"line":74,"text":" if rollback_started is True and changes is not True:"} {"line":75,"text":" raise ValueError("} {"line":76,"text":" \"rollback_started without changes\""} {"line":77,"text":" )"} {"line":78,"text":" if status == \"BLOCKED\" and ("} {"line":79,"text":" changes"} {"line":80,"text":" or rollback_started"} {"line":81,"text":" or command_rc != 2"} {"line":82,"text":" ):"} {"line":83,"text":" raise ValueError("} {"line":84,"text":" \"BLOCKED contract inconsistent with rc/mutation\""} {"line":85,"text":" )"} {"line":86,"text":" if status == \"OK\" and command_rc != 0:"} {"line":87,"text":" raise ValueError(\"OK contract inconsistent with rc\")"} {"line":88,"text":" if status == \"FAIL\" and command_rc == 0:"} {"line":89,"text":" raise ValueError(\"FAIL contract inconsistent with rc\")"} {"line":90,"text":""} {"line":91,"text":" if not changes:"} {"line":92,"text":" outcome = \"NO_MUTATION\""} {"line":93,"text":" elif not rollback_started:"} {"line":94,"text":" outcome = \"MUTATED\""} {"line":95,"text":" elif rollback_restored is True:"} {"line":96,"text":" outcome = \"ROLLED_BACK\""} {"line":97,"text":" elif rollback_restored is False:"} {"line":98,"text":" outcome = \"ROLLBACK_FAILED\""} {"line":99,"text":" else:"} {"line":103,"text":" \"valid\": True,"} {"line":104,"text":" \"status\": status,"} {"line":105,"text":" \"changes_made\": str(changes).lower(),"} {"line":106,"text":" \"rollback_started\": str("} {"line":107,"text":" rollback_started"} {"line":108,"text":" ).lower(),"} {"line":109,"text":" \"rollback_restored\": ("} {"line":110,"text":" \"null\""} {"line":111,"text":" if rollback_restored is None"} {"line":112,"text":" else str(rollback_restored).lower()"} {"line":113,"text":" ),"} {"line":114,"text":" \"mutation_outcome\": outcome,"} {"line":125,"text":" str(result[\"valid\"]).lower(),"} {"line":126,"text":" result[\"status\"],"} {"line":127,"text":" result[\"changes_made\"],"} {"line":128,"text":" result[\"rollback_started\"],"} {"line":129,"text":" result[\"rollback_restored\"],"} {"line":130,"text":" result[\"mutation_outcome\"],"} {"line":131,"text":" result[\"error\"],"} {"line":140,"text":""} {"line":141,"text":" printf '%s\\n' \\"} {"line":142,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T1\",\"status\":\"BLOCKED\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}' \\"} {"line":143,"text":" >\"$tmp\""} {"line":144,"text":" [ \"$(read_mutation_contract \"$tmp\" T1 change 2)\" = \\"} {"line":146,"text":""} {"line":147,"text":" printf '%s\\n' \\"} {"line":148,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T2\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"} {"line":149,"text":" >\"$tmp\""} {"line":150,"text":" [ \"$(read_mutation_contract \"$tmp\" T2 change 0)\" = \\"} {"line":152,"text":""} {"line":153,"text":" printf '%s\\n' \\"} {"line":154,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T3\",\"status\":\"FAIL\",\"changes_made\":true,\"rollback_started\":true,\"rollback_restored\":true}' \\"} {"line":155,"text":" >\"$tmp\""} {"line":156,"text":" [ \"$(read_mutation_contract \"$tmp\" T3 change 1)\" = \\"} {"line":166,"text":""} {"line":167,"text":" printf '%s\\n' \\"} {"line":168,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"OTHER\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"} {"line":169,"text":" >\"$tmp\""} {"line":170,"text":" [ \"$(read_mutation_contract \"$tmp\" T6 change 0)\" = \\"} {"line":171,"text":" $'false\\tUNKNOWN\\tunknown\\tunknown\\tnull\\tUNKNOWN\\tINVALID_CONTRACT:ValueError' ]"} {"line":172,"text":""} {"line":173,"text":" printf '%s\\n' \\"} {"line":174,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T7\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"} {"line":175,"text":" 'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T7\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"} {"line":176,"text":" >\"$tmp\""} {"line":177,"text":" [ \"$(read_mutation_contract \"$tmp\" T7 change 0)\" = \\"} {"line":329,"text":"BLOCK_REASON=''"} {"line":330,"text":"CHANGE_DECLARED=false"} {"line":331,"text":"RESULT_CONTRACT_VALID=true"} {"line":332,"text":"CONTRACT_STATUS='NOT_APPLICABLE'"} {"line":333,"text":"CHANGES_MADE=false"} {"line":335,"text":"ROLLBACK_RESTORED=null"} {"line":336,"text":"MUTATION_OUTCOME='NO_MUTATION'"} {"line":337,"text":"RESULT_CONTRACT_ERROR='NONE'"} {"line":338,"text":"COMMAND_RC=''"} {"line":339,"text":""} {"line":340,"text":"if [ \"$MODE\" = change ]; then"} {"line":341,"text":" CHANGE_DECLARED=true"} {"line":342,"text":" RESULT_CONTRACT_VALID=false"} {"line":343,"text":" CONTRACT_STATUS='UNKNOWN'"} {"line":344,"text":" CHANGES_MADE=unknown"} {"line":346,"text":" ROLLBACK_RESTORED=null"} {"line":347,"text":" MUTATION_OUTCOME='UNKNOWN'"} {"line":348,"text":" RESULT_CONTRACT_ERROR='MISSING_CONTRACT'"} {"line":349,"text":"fi"} {"line":350,"text":""} {"line":357,"text":" RC=73"} {"line":358,"text":" STATUS='BLOCKED'"} {"line":359,"text":" RESULT_CONTRACT_VALID=true"} {"line":360,"text":" CONTRACT_STATUS='BLOCKED'"} {"line":361,"text":" CHANGES_MADE=false"} {"line":363,"text":" ROLLBACK_RESTORED=null"} {"line":364,"text":" MUTATION_OUTCOME='NO_MUTATION'"} {"line":365,"text":" RESULT_CONTRACT_ERROR='RUNNER_PREEXECUTION_BLOCK'"} {"line":366,"text":""} {"line":367,"text":" {"} {"line":407,"text":""} {"line":408,"text":" IFS=$'\\t' read -r \\"} {"line":409,"text":" RESULT_CONTRACT_VALID \\"} {"line":410,"text":" CONTRACT_STATUS \\"} {"line":411,"text":" CHANGES_MADE \\"} {"line":413,"text":" ROLLBACK_RESTORED \\"} {"line":414,"text":" MUTATION_OUTCOME \\"} {"line":415,"text":" RESULT_CONTRACT_ERROR < <("} {"line":416,"text":" read_mutation_contract \\"} {"line":417,"text":" \"$RAW_FILE\" \\"} {"line":422,"text":""} {"line":423,"text":" if [ \"$MODE\" = change ]; then"} {"line":424,"text":" if [ \"$RESULT_CONTRACT_VALID\" != true ]; then"} {"line":425,"text":" RC=76"} {"line":426,"text":" STATUS='FAIL'"} {"line":561,"text":" \"$BLOCK_REASON\" \\"} {"line":562,"text":" \"$CHANGE_DECLARED\" \\"} {"line":563,"text":" \"$RESULT_CONTRACT_VALID\" \\"} {"line":564,"text":" \"$CONTRACT_STATUS\" \\"} {"line":565,"text":" \"$CHANGES_MADE\" \\"} {"line":567,"text":" \"$ROLLBACK_RESTORED\" \\"} {"line":568,"text":" \"$MUTATION_OUTCOME\" \\"} {"line":569,"text":" \"$RESULT_CONTRACT_ERROR\" \\"} {"line":570,"text":" \"$COMMAND_RC\" <<'PY'"} {"line":571,"text":"import json"} {"line":595,"text":" result_contract_valid,"} {"line":596,"text":" contract_status,"} {"line":597,"text":" changes_made,"} {"line":598,"text":" rollback_started,"} {"line":599,"text":" rollback_restored,"} {"line":600,"text":" mutation_outcome,"} {"line":601,"text":" result_contract_error,"} {"line":660,"text":" ),"} {"line":661,"text":" \"command_rc\": int(command_rc) if command_rc else None,"} {"line":662,"text":" \"changes_made\": optional_bool(changes_made),"} {"line":663,"text":" \"rollback_started\": optional_bool(rollback_started),"} {"line":664,"text":" \"rollback_restored\": optional_bool(rollback_restored),"} {"line":665,"text":" \"mutation_outcome\": mutation_outcome,"} {"line":666,"text":" \"sanitized\": True,"} {"line":705,"text":" echo \"EXECUTION_STARTED=$RUN_STARTED\""} {"line":706,"text":" echo \"CHANGE_DECLARED=$CHANGE_DECLARED\""} {"line":707,"text":" echo \"RESULT_CONTRACT_VALID=$RESULT_CONTRACT_VALID\""} {"line":708,"text":" echo \"RESULT_CONTRACT_STATUS=$CONTRACT_STATUS\""} {"line":709,"text":" echo \"RESULT_CONTRACT_ERROR=$RESULT_CONTRACT_ERROR\""} {"line":710,"text":" echo \"COMMAND_RC=${COMMAND_RC:-}\""} {"line":711,"text":" echo \"CHANGES_MADE=$CHANGES_MADE\""} SELECTED_SOURCE_LINES_END HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"NEWFI-260907-RUNNERCONTRACT47","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} NEWFI47_END OUTPUT_END CHAT_OUTPUT_END