39 lines
42 KiB
JSON
39 lines
42 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"channel": "homelab-runtime",
|
|
"command_id": "NEWFI-260907-B-PORTAL200-RUNNERCONTRACT5",
|
|
"status": "OK",
|
|
"rc": 0,
|
|
"host": "pve01",
|
|
"mode": "read-only",
|
|
"component": "newfi-portal200-runner-contract-source-evidence",
|
|
"started_at_utc": "2026-09-07T19:23:56Z",
|
|
"finished_at_utc": "2026-09-07T19:23:56Z",
|
|
"reference_register_checked": true,
|
|
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
|
|
"error_register_checked": true,
|
|
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
|
|
"command_sha256": "78728559634f5f083666b7c6889dfeac8efb1f04a5c9d2777009d2ad479e57a4",
|
|
"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": "cbef9ff8eec5a98273cdd12e712d16746764b9c2857b2f37db7efde899c698fb",
|
|
"sanitized_output_sha256": "cbef9ff8eec5a98273cdd12e712d16746764b9c2857b2f37db7efde899c698fb",
|
|
"output_truncated_in_json": false,
|
|
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
|
|
"output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRUNNERCONTRACT5_AUTHORITY={\"ERROR_REGISTER\":{\"bytes\":302058,\"ok\":true,\"sha256\":\"3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\"},\"REFERENCE\":{\"bytes\":201129,\"ok\":true,\"sha256\":\"5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\"}}\nRUNNERCONTRACT5_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\"}\nRUNNERCONTRACT5_STATUS_TOKENS=[\"BLOCKED\",\"ERROR\",\"FAIL\",\"OK\"]\nRUNNERCONTRACT5_CONTRACT_KEYS=[\"changes_made\",\"command_id\",\"rollback_restored\",\"rollback_started\",\"status\",\"version\"]\nRUNNERCONTRACT5_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),\"}]\nRUNNERCONTRACT5_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\\\"\"}]\nRUNNERCONTRACT5_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\"}]}]\nRUNNERCONTRACT5_WINDOW_COUNT=80\nRUNNERCONTRACT5_HOLD_REASONS=[]\nRUNNERCONTRACT5_DECISION=RUNNER_CONTRACT_SOURCE_EVIDENCE_PUBLISHED_FOR_MANUAL_INTERPRETATION\nRUNNERCONTRACT5_MUTATION_SCOPE=NO_GIT_NO_APPLICATION_NO_DB_NO_PRODUCTION_MUTATION\n"
|
|
}
|