CHAT_OUTPUT_BEGIN
COMMAND_ID=NEWFI-260907-B-PORTAL200-RUNNERCONTRACT5
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=newfi-portal200-runner-contract-source-evidence
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=78728559634f5f083666b7c6889dfeac8efb1f04a5c9d2777009d2ad479e57a4
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=cbef9ff8eec5a98273cdd12e712d16746764b9c2857b2f37db7efde899c698fb
SANITIZED_OUTPUT_SHA256=cbef9ff8eec5a98273cdd12e712d16746764b9c2857b2f37db7efde899c698fb
OUTPUT_BEGIN
ERROR_REGISTER_CHECK=OK
REFERENCE_CHECK=OK
AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED
RUNNERCONTRACT5_AUTHORITY={"ERROR_REGISTER":{"bytes":302058,"ok":true,"sha256":"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0"},"REFERENCE":{"bytes":201129,"ok":true,"sha256":"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66"}}
RUNNERCONTRACT5_RUNNER={"bytes":21321,"first_line":"#!/usr/bin/env bash","line_count":822,"matches_handoff_baseline":true,"path":"/usr/local/sbin/homelab-chat-run","sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d"}
RUNNERCONTRACT5_STATUS_TOKENS=["BLOCKED","ERROR","FAIL","OK"]
RUNNERCONTRACT5_CONTRACT_KEYS=["changes_made","command_id","rollback_restored","rollback_started","status","version"]
RUNNERCONTRACT5_CROSSFIELD_LINES=[{"line":19,"text":"    \"rollback_restored\": \"null\","},{"line":30,"text":"        \"rollback_restored\": \"null\","},{"line":58,"text":"            rollback_restored = document.get(\"rollback_restored\")"},{"line":60,"text":"                raise ValueError(\"changes_made must be boolean\")"},{"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":68,"text":"                    \"rollback_restored must be boolean or null\""},{"line":70,"text":"            if rollback_restored is True and rollback_started is not True:"},{"line":72,"text":"                    \"rollback_restored without rollback_started\""},{"line":74,"text":"            if rollback_started is True and changes is not True:"},{"line":80,"text":"                or rollback_started"},{"line":95,"text":"            elif rollback_restored is True:"},{"line":97,"text":"            elif rollback_restored is False:"},{"line":109,"text":"                \"rollback_restored\": ("},{"line":111,"text":"                    if rollback_restored is None"},{"line":112,"text":"                    else str(rollback_restored).lower()"},{"line":129,"text":"    result[\"rollback_restored\"],"},{"line":142,"text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T1\",\"status\":\"BLOCKED\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}' \\"},{"line":148,"text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T2\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"},{"line":154,"text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T3\",\"status\":\"FAIL\",\"changes_made\":true,\"rollback_started\":true,\"rollback_restored\":true}' \\"},{"line":168,"text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"OTHER\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\"},{"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":599,"text":"    rollback_restored,"},{"line":664,"text":"    \"rollback_restored\": optional_bool(rollback_restored),"}]
RUNNERCONTRACT5_DUPLICATE_LINES=[{"line":646,"text":"    \"duplicate_failed_command_blocked\": repeat_blocked == \"true\","},{"line":704,"text":"    echo \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\""},{"line":816,"text":"echo \"DUPLICATE_FAILED_COMMAND_BLOCKED=$REPEAT_BLOCKED\""}]
RUNNERCONTRACT5_SOURCE_WINDOWS=[{"match_line":11,"match_text":"raw_path, command_id, mode, command_rc = sys.argv[1:]","window":[{"line":9,"text":"from pathlib import Path"},{"line":10,"text":""},{"line":11,"text":"raw_path, command_id, mode, command_rc = sys.argv[1:]"},{"line":12,"text":"command_rc = int(command_rc)"},{"line":13,"text":""}]},{"match_line":16,"match_text":"    \"status\": \"NOT_APPLICABLE\",","window":[{"line":14,"text":"result = {"},{"line":15,"text":"    \"valid\": True,"},{"line":16,"text":"    \"status\": \"NOT_APPLICABLE\","},{"line":17,"text":"    \"changes_made\": \"false\","},{"line":18,"text":"    \"rollback_started\": \"false\","}]},{"match_line":17,"match_text":"    \"changes_made\": \"false\",","window":[{"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\","}]},{"match_line":18,"match_text":"    \"rollback_started\": \"false\",","window":[{"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\","}]},{"match_line":19,"match_text":"    \"rollback_restored\": \"null\",","window":[{"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\","}]},{"match_line":27,"match_text":"        \"status\": \"UNKNOWN\",","window":[{"line":25,"text":"    result = {"},{"line":26,"text":"        \"valid\": False,"},{"line":27,"text":"        \"status\": \"UNKNOWN\","},{"line":28,"text":"        \"changes_made\": \"unknown\","},{"line":29,"text":"        \"rollback_started\": \"unknown\","}]},{"match_line":28,"match_text":"        \"changes_made\": \"unknown\",","window":[{"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\","}]},{"match_line":29,"match_text":"        \"rollback_started\": \"unknown\",","window":[{"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\","}]},{"match_line":30,"match_text":"        \"rollback_restored\": \"null\",","window":[{"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\","}]},{"match_line":34,"match_text":"    marker = \"HOMELAB_RESULT_CONTRACT=\"","window":[{"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\","}]},{"match_line":51,"match_text":"            if document.get(\"command_id\") != command_id:","window":[{"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\")"}]},{"match_line":52,"match_text":"                raise ValueError(\"command_id mismatch\")","window":[{"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\"}:"}]},{"match_line":53,"match_text":"            status = document.get(\"status\")","window":[{"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\")"}]},{"match_line":54,"match_text":"            if status not in {\"OK\", \"BLOCKED\", \"FAIL\"}:","window":[{"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\")"}]},{"match_line":55,"match_text":"                raise ValueError(\"invalid status\")","window":[{"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\")"}]},{"match_line":56,"match_text":"            changes = document.get(\"changes_made\")","window":[{"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\")"}]},{"match_line":57,"match_text":"            rollback_started = document.get(\"rollback_started\")","window":[{"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):"}]},{"match_line":58,"match_text":"            rollback_restored = document.get(\"rollback_restored\")","window":[{"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\")"}]},{"match_line":60,"match_text":"                raise ValueError(\"changes_made must be boolean\")","window":[{"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\")"}]},{"match_line":61,"match_text":"            if not isinstance(rollback_started, bool):","window":[{"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("}]},{"match_line":62,"match_text":"                raise ValueError(\"rollback_started must be boolean\")","window":[{"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,"}]},{"match_line":63,"match_text":"            if rollback_restored is not None and not isinstance(","window":[{"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,"}]},{"match_line":64,"match_text":"                rollback_restored,","window":[{"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":"            ):"}]},{"match_line":68,"match_text":"                    \"rollback_restored must be boolean or null\"","window":[{"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:"}]},{"match_line":70,"match_text":"            if rollback_restored is True and rollback_started is not True:","window":[{"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\""}]},{"match_line":72,"match_text":"                    \"rollback_restored without rollback_started\"","window":[{"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:"}]},{"match_line":74,"match_text":"            if rollback_started is True and changes is not True:","window":[{"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\""}]},{"match_line":76,"match_text":"                    \"rollback_started without changes\"","window":[{"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 ("}]},{"match_line":78,"match_text":"            if status == \"BLOCKED\" and (","window":[{"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"}]},{"match_line":80,"match_text":"                or rollback_started","window":[{"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":"            ):"}]},{"match_line":86,"match_text":"            if status == \"OK\" and command_rc != 0:","window":[{"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:"}]},{"match_line":88,"match_text":"            if status == \"FAIL\" and command_rc == 0:","window":[{"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":""}]},{"match_line":93,"match_text":"            elif not rollback_started:","window":[{"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:"}]},{"match_line":95,"match_text":"            elif rollback_restored is True:","window":[{"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:"}]},{"match_line":97,"match_text":"            elif rollback_restored is False:","window":[{"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:"}]},{"match_line":104,"match_text":"                \"status\": status,","window":[{"line":102,"text":"            result = {"},{"line":103,"text":"                \"valid\": True,"},{"line":104,"text":"                \"status\": status,"},{"line":105,"text":"                \"changes_made\": str(changes).lower(),"},{"line":106,"text":"                \"rollback_started\": str("}]},{"match_line":105,"match_text":"                \"changes_made\": str(changes).lower(),","window":[{"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"}]},{"match_line":106,"match_text":"                \"rollback_started\": str(","window":[{"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(),"}]},{"match_line":107,"match_text":"                    rollback_started","window":[{"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\": ("}]},{"match_line":109,"match_text":"                \"rollback_restored\": (","window":[{"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"}]},{"match_line":111,"match_text":"                    if rollback_restored is None","window":[{"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":"                ),"}]},{"match_line":112,"match_text":"                    else str(rollback_restored).lower()","window":[{"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,"}]},{"match_line":126,"match_text":"    result[\"status\"],","window":[{"line":124,"text":"print(\"\\t\".join(["},{"line":125,"text":"    str(result[\"valid\"]).lower(),"},{"line":126,"text":"    result[\"status\"],"},{"line":127,"text":"    result[\"changes_made\"],"},{"line":128,"text":"    result[\"rollback_started\"],"}]},{"match_line":127,"match_text":"    result[\"changes_made\"],","window":[{"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\"],"}]},{"match_line":128,"match_text":"    result[\"rollback_started\"],","window":[{"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\"],"}]},{"match_line":129,"match_text":"    result[\"rollback_restored\"],","window":[{"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\"],"}]},{"match_line":142,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T1\",\"status\":\"BLOCKED\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}' \\","window":[{"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)\" = \\"}]},{"match_line":148,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T2\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\","window":[{"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)\" = \\"}]},{"match_line":154,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T3\",\"status\":\"FAIL\",\"changes_made\":true,\"rollback_started\":true,\"rollback_restored\":true}' \\","window":[{"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)\" = \\"}]},{"match_line":168,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"OTHER\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\","window":[{"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)\" = \\"}]},{"match_line":174,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T7\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\","window":[{"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\""}]},{"match_line":175,"match_text":"        'HOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"T7\",\"status\":\"OK\",\"changes_made\":true,\"rollback_started\":false,\"rollback_restored\":null}' \\","window":[{"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)\" = \\"}]},{"match_line":191,"match_text":"  homelab-chat-run COMMAND_ID MODE COMPONENT -- command [arguments...]","window":[{"line":189,"text":"    cat >&2 <<'USAGE'"},{"line":190,"text":"Usage:"},{"line":191,"text":"  homelab-chat-run COMMAND_ID MODE COMPONENT -- command [arguments...]"},{"line":192,"text":""},{"line":193,"text":"MODE:"}]},{"match_line":208,"match_text":"COMMAND_ID=\"$1\"","window":[{"line":206,"text":"[ \"$#\" -ge 5 ] || usage"},{"line":207,"text":""},{"line":208,"text":"COMMAND_ID=\"$1\""},{"line":209,"text":"MODE=\"$2\""},{"line":210,"text":"COMPONENT=\"$3\""}]},{"match_line":217,"match_text":"case \"$COMMAND_ID\" in","window":[{"line":215,"text":"[ \"$#\" -ge 1 ] || usage"},{"line":216,"text":""},{"line":217,"text":"case \"$COMMAND_ID\" in"},{"line":218,"text":"    ''|*[!A-Za-z0-9._-]*)"},{"line":219,"text":"        echo 'RESULT=FAIL'"}]},{"match_line":220,"match_text":"        echo 'REASON=INVALID_COMMAND_ID'","window":[{"line":218,"text":"    ''|*[!A-Za-z0-9._-]*)"},{"line":219,"text":"        echo 'RESULT=FAIL'"},{"line":220,"text":"        echo 'REASON=INVALID_COMMAND_ID'"},{"line":221,"text":"        exit 65"},{"line":222,"text":"        ;;"}]},{"match_line":297,"match_text":"RAW_FILE=\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\"","window":[{"line":295,"text":"HOST_SHORT=\"$(hostname -s 2>/dev/null || hostname)\""},{"line":296,"text":""},{"line":297,"text":"RAW_FILE=\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\""},{"line":298,"text":"SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\""},{"line":299,"text":"JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\""}]},{"match_line":298,"match_text":"SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\"","window":[{"line":296,"text":""},{"line":297,"text":"RAW_FILE=\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\""},{"line":298,"text":"SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\""},{"line":299,"text":"JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\""},{"line":300,"text":"TXT_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\""}]},{"match_line":299,"match_text":"JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\"","window":[{"line":297,"text":"RAW_FILE=\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\""},{"line":298,"text":"SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\""},{"line":299,"text":"JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\""},{"line":300,"text":"TXT_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\""},{"line":301,"text":""}]},{"match_line":300,"match_text":"TXT_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\"","window":[{"line":298,"text":"SANITIZED_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\""},{"line":299,"text":"JSON_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\""},{"line":300,"text":"TXT_FILE=\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\""},{"line":301,"text":""},{"line":302,"text":"REFERENCE_SHA256=\"$(sha256sum \"$REFERENCE\" | awk '{print $1}')\""}]},{"match_line":331,"match_text":"RESULT_CONTRACT_VALID=true","window":[{"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"}]},{"match_line":332,"match_text":"CONTRACT_STATUS='NOT_APPLICABLE'","window":[{"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":334,"text":"ROLLBACK_STARTED=false"}]},{"match_line":333,"match_text":"CHANGES_MADE=false","window":[{"line":331,"text":"RESULT_CONTRACT_VALID=true"},{"line":332,"text":"CONTRACT_STATUS='NOT_APPLICABLE'"},{"line":333,"text":"CHANGES_MADE=false"},{"line":334,"text":"ROLLBACK_STARTED=false"},{"line":335,"text":"ROLLBACK_RESTORED=null"}]},{"match_line":334,"match_text":"ROLLBACK_STARTED=false","window":[{"line":332,"text":"CONTRACT_STATUS='NOT_APPLICABLE'"},{"line":333,"text":"CHANGES_MADE=false"},{"line":334,"text":"ROLLBACK_STARTED=false"},{"line":335,"text":"ROLLBACK_RESTORED=null"},{"line":336,"text":"MUTATION_OUTCOME='NO_MUTATION'"}]},{"match_line":335,"match_text":"ROLLBACK_RESTORED=null","window":[{"line":333,"text":"CHANGES_MADE=false"},{"line":334,"text":"ROLLBACK_STARTED=false"},{"line":335,"text":"ROLLBACK_RESTORED=null"},{"line":336,"text":"MUTATION_OUTCOME='NO_MUTATION'"},{"line":337,"text":"RESULT_CONTRACT_ERROR='NONE'"}]},{"match_line":337,"match_text":"RESULT_CONTRACT_ERROR='NONE'","window":[{"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":""}]},{"match_line":342,"match_text":"    RESULT_CONTRACT_VALID=false","window":[{"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"}]},{"match_line":343,"match_text":"    CONTRACT_STATUS='UNKNOWN'","window":[{"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":345,"text":"    ROLLBACK_STARTED=unknown"}]},{"match_line":344,"match_text":"    CHANGES_MADE=unknown","window":[{"line":342,"text":"    RESULT_CONTRACT_VALID=false"},{"line":343,"text":"    CONTRACT_STATUS='UNKNOWN'"},{"line":344,"text":"    CHANGES_MADE=unknown"},{"line":345,"text":"    ROLLBACK_STARTED=unknown"},{"line":346,"text":"    ROLLBACK_RESTORED=null"}]},{"match_line":345,"match_text":"    ROLLBACK_STARTED=unknown","window":[{"line":343,"text":"    CONTRACT_STATUS='UNKNOWN'"},{"line":344,"text":"    CHANGES_MADE=unknown"},{"line":345,"text":"    ROLLBACK_STARTED=unknown"},{"line":346,"text":"    ROLLBACK_RESTORED=null"},{"line":347,"text":"    MUTATION_OUTCOME='UNKNOWN'"}]},{"match_line":346,"match_text":"    ROLLBACK_RESTORED=null","window":[{"line":344,"text":"    CHANGES_MADE=unknown"},{"line":345,"text":"    ROLLBACK_STARTED=unknown"},{"line":346,"text":"    ROLLBACK_RESTORED=null"},{"line":347,"text":"    MUTATION_OUTCOME='UNKNOWN'"},{"line":348,"text":"    RESULT_CONTRACT_ERROR='MISSING_CONTRACT'"}]},{"match_line":348,"match_text":"    RESULT_CONTRACT_ERROR='MISSING_CONTRACT'","window":[{"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":""}]},{"match_line":358,"match_text":"    STATUS='BLOCKED'","window":[{"line":356,"text":"    BLOCK_REASON='EXACT_FAILED_COMMAND_REPEAT'"},{"line":357,"text":"    RC=73"},{"line":358,"text":"    STATUS='BLOCKED'"},{"line":359,"text":"    RESULT_CONTRACT_VALID=true"},{"line":360,"text":"    CONTRACT_STATUS='BLOCKED'"}]},{"match_line":359,"match_text":"    RESULT_CONTRACT_VALID=true","window":[{"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"}]},{"match_line":360,"match_text":"    CONTRACT_STATUS='BLOCKED'","window":[{"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":362,"text":"    ROLLBACK_STARTED=false"}]},{"match_line":361,"match_text":"    CHANGES_MADE=false","window":[{"line":359,"text":"    RESULT_CONTRACT_VALID=true"},{"line":360,"text":"    CONTRACT_STATUS='BLOCKED'"},{"line":361,"text":"    CHANGES_MADE=false"},{"line":362,"text":"    ROLLBACK_STARTED=false"},{"line":363,"text":"    ROLLBACK_RESTORED=null"}]},{"match_line":362,"match_text":"    ROLLBACK_STARTED=false","window":[{"line":360,"text":"    CONTRACT_STATUS='BLOCKED'"},{"line":361,"text":"    CHANGES_MADE=false"},{"line":362,"text":"    ROLLBACK_STARTED=false"},{"line":363,"text":"    ROLLBACK_RESTORED=null"},{"line":364,"text":"    MUTATION_OUTCOME='NO_MUTATION'"}]},{"match_line":363,"match_text":"    ROLLBACK_RESTORED=null","window":[{"line":361,"text":"    CHANGES_MADE=false"},{"line":362,"text":"    ROLLBACK_STARTED=false"},{"line":363,"text":"    ROLLBACK_RESTORED=null"},{"line":364,"text":"    MUTATION_OUTCOME='NO_MUTATION'"},{"line":365,"text":"    RESULT_CONTRACT_ERROR='RUNNER_PREEXECUTION_BLOCK'"}]},{"match_line":365,"match_text":"    RESULT_CONTRACT_ERROR='RUNNER_PREEXECUTION_BLOCK'","window":[{"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":"    {"}]},{"match_line":389,"match_text":"            --preserve-status \\","window":[{"line":387,"text":"        timeout \\"},{"line":388,"text":"            --foreground \\"},{"line":389,"text":"            --preserve-status \\"},{"line":390,"text":"            \"$HOMELAB_TIMEOUT\" \\"},{"line":391,"text":"            \"$@\" >\"$RAW_FILE\" 2>&1"}]}]
RUNNERCONTRACT5_WINDOW_COUNT=80
RUNNERCONTRACT5_HOLD_REASONS=[]
RUNNERCONTRACT5_DECISION=RUNNER_CONTRACT_SOURCE_EVIDENCE_PUBLISHED_FOR_MANUAL_INTERPRETATION
RUNNERCONTRACT5_MUTATION_SCOPE=NO_GIT_NO_APPLICATION_NO_DB_NO_PRODUCTION_MUTATION

OUTPUT_END
CHAT_OUTPUT_END
