diff --git a/runtime/history/NEWFI-260907-PORTAL200-APPLY2.json b/runtime/history/NEWFI-260907-PORTAL200-APPLY2.json new file mode 100644 index 00000000..2101fcf5 --- /dev/null +++ b/runtime/history/NEWFI-260907-PORTAL200-APPLY2.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260907-PORTAL200-APPLY2", + "status": "FAIL", + "rc": 1, + "host": "pve01", + "mode": "change", + "component": "newfi-portal200-deploy", + "started_at_utc": "2026-09-07T10:56:10Z", + "finished_at_utc": "2026-09-07T10:56:22Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "cd49b083f747f4e121e0fb56e10ebb1eec3bf7a29fe12ec0b57055f981011999", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "change_declared": true, + "result_contract_valid": true, + "result_contract_status": "FAIL", + "result_contract_error": null, + "command_rc": 1, + "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": "c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a", + "sanitized_output_sha256": "c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "NEWFI200_BEGIN\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\nPORTAL200_REMAINING_FULL_PRODUCT_COMMANDS_BEFORE=22\nPORTAL200_FLOW=candidate->staging-apply->rollback-proof->staging-reapply->git-push->production\nPORTAL200_CANDIDATE_IDENTITY=PASS\nPORTAL200_ORCHESTRATION_FIXES={\"failure_status\":\"FAIL\",\"staging_503_without_css_links\":true}\nPORTAL200_GIT_PRESTATE={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"head\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"remote\":\"06bab5acd124e768f70305b3d7eca2f595871890\"}\nPORTAL200_CLUSTER=PASS\nPORTAL200_RUNTIME_HELPER_LINT=PASS\nPORTAL200_ERROR_BASELINE={\"prod\":0,\"staging\":40}\nPORTAL200_HTTP={\"bytes\":23800,\"css_count\":0,\"css_marker\":false,\"css_status\":[],\"forced_css_marker\":null,\"forced_css_status\":null,\"html_marker\":false,\"old_copy\":false,\"state\":\"old\",\"status\":503,\"target\":\"staging\"}\nPORTAL200_RUNTIME={\"html_bytes\":1116,\"html_marker\":false,\"old_copy\":true,\"state\":\"old\",\"target\":\"prod\"}\nPORTAL200_FAILURE=QGA_GUEST_RC\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260907-PORTAL200-APPLY2\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\nPORTAL200_ROADMAP_REMAINS=22\nNEWFI200_END\n" +} diff --git a/runtime/history/NEWFI-260907-PORTAL200-APPLY2.txt b/runtime/history/NEWFI-260907-PORTAL200-APPLY2.txt new file mode 100644 index 00000000..0341cdcf --- /dev/null +++ b/runtime/history/NEWFI-260907-PORTAL200-APPLY2.txt @@ -0,0 +1,48 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2 +STATUS=FAIL +RC=1 +HOST=pve01 +MODE=change +COMPONENT=newfi-portal200-deploy +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=cd49b083f747f4e121e0fb56e10ebb1eec3bf7a29fe12ec0b57055f981011999 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=true +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=FAIL +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=1 +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=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a +SANITIZED_OUTPUT_SHA256=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a +OUTPUT_BEGIN +NEWFI200_BEGIN +COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2 +PORTAL200_REMAINING_FULL_PRODUCT_COMMANDS_BEFORE=22 +PORTAL200_FLOW=candidate->staging-apply->rollback-proof->staging-reapply->git-push->production +PORTAL200_CANDIDATE_IDENTITY=PASS +PORTAL200_ORCHESTRATION_FIXES={"failure_status":"FAIL","staging_503_without_css_links":true} +PORTAL200_GIT_PRESTATE={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"06bab5acd124e768f70305b3d7eca2f595871890","remote":"06bab5acd124e768f70305b3d7eca2f595871890"} +PORTAL200_CLUSTER=PASS +PORTAL200_RUNTIME_HELPER_LINT=PASS +PORTAL200_ERROR_BASELINE={"prod":0,"staging":40} +PORTAL200_HTTP={"bytes":23800,"css_count":0,"css_marker":false,"css_status":[],"forced_css_marker":null,"forced_css_status":null,"html_marker":false,"old_copy":false,"state":"old","status":503,"target":"staging"} +PORTAL200_RUNTIME={"html_bytes":1116,"html_marker":false,"old_copy":true,"state":"old","target":"prod"} +PORTAL200_FAILURE=QGA_GUEST_RC +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260907-PORTAL200-APPLY2","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1} +PORTAL200_ROADMAP_REMAINS=22 +NEWFI200_END + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index c4ce6a93..2101fcf5 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,27 +1,27 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260907-RUNNERCONTRACT47", - "status": "OK", - "rc": 0, + "command_id": "NEWFI-260907-PORTAL200-APPLY2", + "status": "FAIL", + "rc": 1, "host": "pve01", - "mode": "read-only", - "component": "newfi-runner-contract-status-rca", - "started_at_utc": "2026-09-07T10:49:28Z", - "finished_at_utc": "2026-09-07T10:49:29Z", + "mode": "change", + "component": "newfi-portal200-deploy", + "started_at_utc": "2026-09-07T10:56:10Z", + "finished_at_utc": "2026-09-07T10:56:22Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "63ee0255b910daf2f06f62bca781d351b6e54a1ad4cbe8f16a0d325edc204626", + "command_sha256": "cd49b083f747f4e121e0fb56e10ebb1eec3bf7a29fe12ec0b57055f981011999", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": false, + "change_declared": true, "result_contract_valid": true, - "result_contract_status": null, + "result_contract_status": "FAIL", "result_contract_error": null, - "command_rc": 0, + "command_rc": 1, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200", - "sanitized_output_sha256": "f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200", + "raw_evidence_sha256": "c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a", + "sanitized_output_sha256": "c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "NEWFI47_BEGIN\nCOMMAND_ID=NEWFI-260907-RUNNERCONTRACT47\nMUTATION_SCOPE=NONE_READ_ONLY\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nRUNNER_BYTES=21321\nSTATUS_LITERALS_NEAR_CONTRACT=[\"FAIL\",\"MUTATED\",\"NOT_APPLICABLE\",\"NO_MUTATION\",\"OK\",\"ROLLED_BACK\",\"UNKNOWN\"]\nSTATUS_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\"]\nSELECTED_SOURCE_LINES_BEGIN\n{\"line\":15,\"text\":\" \\\"valid\\\": True,\"}\n{\"line\":16,\"text\":\" \\\"status\\\": \\\"NOT_APPLICABLE\\\",\"}\n{\"line\":17,\"text\":\" \\\"changes_made\\\": \\\"false\\\",\"}\n{\"line\":18,\"text\":\" \\\"rollback_started\\\": \\\"false\\\",\"}\n{\"line\":19,\"text\":\" \\\"rollback_restored\\\": \\\"null\\\",\"}\n{\"line\":20,\"text\":\" \\\"mutation_outcome\\\": \\\"NO_MUTATION\\\",\"}\n{\"line\":21,\"text\":\" \\\"error\\\": \\\"NONE\\\",\"}\n{\"line\":26,\"text\":\" \\\"valid\\\": False,\"}\n{\"line\":27,\"text\":\" \\\"status\\\": \\\"UNKNOWN\\\",\"}\n{\"line\":28,\"text\":\" \\\"changes_made\\\": \\\"unknown\\\",\"}\n{\"line\":29,\"text\":\" \\\"rollback_started\\\": \\\"unknown\\\",\"}\n{\"line\":30,\"text\":\" \\\"rollback_restored\\\": \\\"null\\\",\"}\n{\"line\":31,\"text\":\" \\\"mutation_outcome\\\": \\\"UNKNOWN\\\",\"}\n{\"line\":32,\"text\":\" \\\"error\\\": \\\"MISSING_CONTRACT\\\",\"}\n{\"line\":33,\"text\":\" }\"}\n{\"line\":34,\"text\":\" marker = \\\"HOMELAB_RESULT_CONTRACT=\\\"\"}\n{\"line\":35,\"text\":\" lines = Path(raw_path).read_bytes().decode(\"}\n{\"line\":36,\"text\":\" \\\"utf-8\\\",\"}\n{\"line\":46,\"text\":\" document = json.loads(payloads[0])\"}\n{\"line\":47,\"text\":\" if not isinstance(document, dict):\"}\n{\"line\":48,\"text\":\" raise ValueError(\\\"contract root is not object\\\")\"}\n{\"line\":49,\"text\":\" if document.get(\\\"version\\\") != 1:\"}\n{\"line\":50,\"text\":\" raise ValueError(\\\"unsupported version\\\")\"}\n{\"line\":51,\"text\":\" if document.get(\\\"command_id\\\") != command_id:\"}\n{\"line\":52,\"text\":\" raise ValueError(\\\"command_id mismatch\\\")\"}\n{\"line\":53,\"text\":\" status = document.get(\\\"status\\\")\"}\n{\"line\":54,\"text\":\" if status not in {\\\"OK\\\", \\\"BLOCKED\\\", \\\"FAIL\\\"}:\"}\n{\"line\":55,\"text\":\" raise ValueError(\\\"invalid status\\\")\"}\n{\"line\":56,\"text\":\" changes = document.get(\\\"changes_made\\\")\"}\n{\"line\":57,\"text\":\" rollback_started = document.get(\\\"rollback_started\\\")\"}\n{\"line\":58,\"text\":\" rollback_restored = document.get(\\\"rollback_restored\\\")\"}\n{\"line\":59,\"text\":\" if not isinstance(changes, bool):\"}\n{\"line\":60,\"text\":\" raise ValueError(\\\"changes_made must be boolean\\\")\"}\n{\"line\":61,\"text\":\" if not isinstance(rollback_started, bool):\"}\n{\"line\":62,\"text\":\" raise ValueError(\\\"rollback_started must be boolean\\\")\"}\n{\"line\":63,\"text\":\" if rollback_restored is not None and not isinstance(\"}\n{\"line\":64,\"text\":\" rollback_restored,\"}\n{\"line\":65,\"text\":\" bool,\"}\n{\"line\":66,\"text\":\" ):\"}\n{\"line\":67,\"text\":\" raise ValueError(\"}\n{\"line\":68,\"text\":\" \\\"rollback_restored must be boolean or null\\\"\"}\n{\"line\":69,\"text\":\" )\"}\n{\"line\":70,\"text\":\" if rollback_restored is True and rollback_started is not True:\"}\n{\"line\":71,\"text\":\" raise ValueError(\"}\n{\"line\":72,\"text\":\" \\\"rollback_restored without rollback_started\\\"\"}\n{\"line\":73,\"text\":\" )\"}\n{\"line\":74,\"text\":\" if rollback_started is True and changes is not True:\"}\n{\"line\":75,\"text\":\" raise ValueError(\"}\n{\"line\":76,\"text\":\" \\\"rollback_started without changes\\\"\"}\n{\"line\":77,\"text\":\" )\"}\n{\"line\":78,\"text\":\" if status == \\\"BLOCKED\\\" and (\"}\n{\"line\":79,\"text\":\" changes\"}\n{\"line\":80,\"text\":\" or rollback_started\"}\n{\"line\":81,\"text\":\" or command_rc != 2\"}\n{\"line\":82,\"text\":\" ):\"}\n{\"line\":83,\"text\":\" raise ValueError(\"}\n{\"line\":84,\"text\":\" \\\"BLOCKED contract inconsistent with rc/mutation\\\"\"}\n{\"line\":85,\"text\":\" )\"}\n{\"line\":86,\"text\":\" if status == \\\"OK\\\" and command_rc != 0:\"}\n{\"line\":87,\"text\":\" raise ValueError(\\\"OK contract inconsistent with rc\\\")\"}\n{\"line\":88,\"text\":\" if status == \\\"FAIL\\\" and command_rc == 0:\"}\n{\"line\":89,\"text\":\" raise ValueError(\\\"FAIL contract inconsistent with rc\\\")\"}\n{\"line\":90,\"text\":\"\"}\n{\"line\":91,\"text\":\" if not changes:\"}\n{\"line\":92,\"text\":\" outcome = \\\"NO_MUTATION\\\"\"}\n{\"line\":93,\"text\":\" elif not rollback_started:\"}\n{\"line\":94,\"text\":\" outcome = \\\"MUTATED\\\"\"}\n{\"line\":95,\"text\":\" elif rollback_restored is True:\"}\n{\"line\":96,\"text\":\" outcome = \\\"ROLLED_BACK\\\"\"}\n{\"line\":97,\"text\":\" elif rollback_restored is False:\"}\n{\"line\":98,\"text\":\" outcome = \\\"ROLLBACK_FAILED\\\"\"}\n{\"line\":99,\"text\":\" else:\"}\n{\"line\":103,\"text\":\" \\\"valid\\\": True,\"}\n{\"line\":104,\"text\":\" \\\"status\\\": status,\"}\n{\"line\":105,\"text\":\" \\\"changes_made\\\": str(changes).lower(),\"}\n{\"line\":106,\"text\":\" \\\"rollback_started\\\": str(\"}\n{\"line\":107,\"text\":\" rollback_started\"}\n{\"line\":108,\"text\":\" ).lower(),\"}\n{\"line\":109,\"text\":\" \\\"rollback_restored\\\": (\"}\n{\"line\":110,\"text\":\" \\\"null\\\"\"}\n{\"line\":111,\"text\":\" if rollback_restored is None\"}\n{\"line\":112,\"text\":\" else str(rollback_restored).lower()\"}\n{\"line\":113,\"text\":\" ),\"}\n{\"line\":114,\"text\":\" \\\"mutation_outcome\\\": outcome,\"}\n{\"line\":125,\"text\":\" str(result[\\\"valid\\\"]).lower(),\"}\n{\"line\":126,\"text\":\" result[\\\"status\\\"],\"}\n{\"line\":127,\"text\":\" result[\\\"changes_made\\\"],\"}\n{\"line\":128,\"text\":\" result[\\\"rollback_started\\\"],\"}\n{\"line\":129,\"text\":\" result[\\\"rollback_restored\\\"],\"}\n{\"line\":130,\"text\":\" result[\\\"mutation_outcome\\\"],\"}\n{\"line\":131,\"text\":\" result[\\\"error\\\"],\"}\n{\"line\":140,\"text\":\"\"}\n{\"line\":141,\"text\":\" printf '%s\\\\n' \\\\\"}\n{\"line\":142,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T1\\\",\\\"status\\\":\\\"BLOCKED\\\",\\\"changes_made\\\":false,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\"}\n{\"line\":143,\"text\":\" >\\\"$tmp\\\"\"}\n{\"line\":144,\"text\":\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T1 change 2)\\\" = \\\\\"}\n{\"line\":146,\"text\":\"\"}\n{\"line\":147,\"text\":\" printf '%s\\\\n' \\\\\"}\n{\"line\":148,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T2\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\"}\n{\"line\":149,\"text\":\" >\\\"$tmp\\\"\"}\n{\"line\":150,\"text\":\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T2 change 0)\\\" = \\\\\"}\n{\"line\":152,\"text\":\"\"}\n{\"line\":153,\"text\":\" printf '%s\\\\n' \\\\\"}\n{\"line\":154,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T3\\\",\\\"status\\\":\\\"FAIL\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":true,\\\"rollback_restored\\\":true}' \\\\\"}\n{\"line\":155,\"text\":\" >\\\"$tmp\\\"\"}\n{\"line\":156,\"text\":\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T3 change 1)\\\" = \\\\\"}\n{\"line\":166,\"text\":\"\"}\n{\"line\":167,\"text\":\" printf '%s\\\\n' \\\\\"}\n{\"line\":168,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"OTHER\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\"}\n{\"line\":169,\"text\":\" >\\\"$tmp\\\"\"}\n{\"line\":170,\"text\":\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T6 change 0)\\\" = \\\\\"}\n{\"line\":171,\"text\":\" $'false\\\\tUNKNOWN\\\\tunknown\\\\tunknown\\\\tnull\\\\tUNKNOWN\\\\tINVALID_CONTRACT:ValueError' ]\"}\n{\"line\":172,\"text\":\"\"}\n{\"line\":173,\"text\":\" printf '%s\\\\n' \\\\\"}\n{\"line\":174,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T7\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\"}\n{\"line\":175,\"text\":\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T7\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\"}\n{\"line\":176,\"text\":\" >\\\"$tmp\\\"\"}\n{\"line\":177,\"text\":\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T7 change 0)\\\" = \\\\\"}\n{\"line\":329,\"text\":\"BLOCK_REASON=''\"}\n{\"line\":330,\"text\":\"CHANGE_DECLARED=false\"}\n{\"line\":331,\"text\":\"RESULT_CONTRACT_VALID=true\"}\n{\"line\":332,\"text\":\"CONTRACT_STATUS='NOT_APPLICABLE'\"}\n{\"line\":333,\"text\":\"CHANGES_MADE=false\"}\n{\"line\":335,\"text\":\"ROLLBACK_RESTORED=null\"}\n{\"line\":336,\"text\":\"MUTATION_OUTCOME='NO_MUTATION'\"}\n{\"line\":337,\"text\":\"RESULT_CONTRACT_ERROR='NONE'\"}\n{\"line\":338,\"text\":\"COMMAND_RC=''\"}\n{\"line\":339,\"text\":\"\"}\n{\"line\":340,\"text\":\"if [ \\\"$MODE\\\" = change ]; then\"}\n{\"line\":341,\"text\":\" CHANGE_DECLARED=true\"}\n{\"line\":342,\"text\":\" RESULT_CONTRACT_VALID=false\"}\n{\"line\":343,\"text\":\" CONTRACT_STATUS='UNKNOWN'\"}\n{\"line\":344,\"text\":\" CHANGES_MADE=unknown\"}\n{\"line\":346,\"text\":\" ROLLBACK_RESTORED=null\"}\n{\"line\":347,\"text\":\" MUTATION_OUTCOME='UNKNOWN'\"}\n{\"line\":348,\"text\":\" RESULT_CONTRACT_ERROR='MISSING_CONTRACT'\"}\n{\"line\":349,\"text\":\"fi\"}\n{\"line\":350,\"text\":\"\"}\n{\"line\":357,\"text\":\" RC=73\"}\n{\"line\":358,\"text\":\" STATUS='BLOCKED'\"}\n{\"line\":359,\"text\":\" RESULT_CONTRACT_VALID=true\"}\n{\"line\":360,\"text\":\" CONTRACT_STATUS='BLOCKED'\"}\n{\"line\":361,\"text\":\" CHANGES_MADE=false\"}\n{\"line\":363,\"text\":\" ROLLBACK_RESTORED=null\"}\n{\"line\":364,\"text\":\" MUTATION_OUTCOME='NO_MUTATION'\"}\n{\"line\":365,\"text\":\" RESULT_CONTRACT_ERROR='RUNNER_PREEXECUTION_BLOCK'\"}\n{\"line\":366,\"text\":\"\"}\n{\"line\":367,\"text\":\" {\"}\n{\"line\":407,\"text\":\"\"}\n{\"line\":408,\"text\":\" IFS=$'\\\\t' read -r \\\\\"}\n{\"line\":409,\"text\":\" RESULT_CONTRACT_VALID \\\\\"}\n{\"line\":410,\"text\":\" CONTRACT_STATUS \\\\\"}\n{\"line\":411,\"text\":\" CHANGES_MADE \\\\\"}\n{\"line\":413,\"text\":\" ROLLBACK_RESTORED \\\\\"}\n{\"line\":414,\"text\":\" MUTATION_OUTCOME \\\\\"}\n{\"line\":415,\"text\":\" RESULT_CONTRACT_ERROR < <(\"}\n{\"line\":416,\"text\":\" read_mutation_contract \\\\\"}\n{\"line\":417,\"text\":\" \\\"$RAW_FILE\\\" \\\\\"}\n{\"line\":422,\"text\":\"\"}\n{\"line\":423,\"text\":\" if [ \\\"$MODE\\\" = change ]; then\"}\n{\"line\":424,\"text\":\" if [ \\\"$RESULT_CONTRACT_VALID\\\" != true ]; then\"}\n{\"line\":425,\"text\":\" RC=76\"}\n{\"line\":426,\"text\":\" STATUS='FAIL'\"}\n{\"line\":561,\"text\":\" \\\"$BLOCK_REASON\\\" \\\\\"}\n{\"line\":562,\"text\":\" \\\"$CHANGE_DECLARED\\\" \\\\\"}\n{\"line\":563,\"text\":\" \\\"$RESULT_CONTRACT_VALID\\\" \\\\\"}\n{\"line\":564,\"text\":\" \\\"$CONTRACT_STATUS\\\" \\\\\"}\n{\"line\":565,\"text\":\" \\\"$CHANGES_MADE\\\" \\\\\"}\n{\"line\":567,\"text\":\" \\\"$ROLLBACK_RESTORED\\\" \\\\\"}\n{\"line\":568,\"text\":\" \\\"$MUTATION_OUTCOME\\\" \\\\\"}\n{\"line\":569,\"text\":\" \\\"$RESULT_CONTRACT_ERROR\\\" \\\\\"}\n{\"line\":570,\"text\":\" \\\"$COMMAND_RC\\\" <<'PY'\"}\n{\"line\":571,\"text\":\"import json\"}\n{\"line\":595,\"text\":\" result_contract_valid,\"}\n{\"line\":596,\"text\":\" contract_status,\"}\n{\"line\":597,\"text\":\" changes_made,\"}\n{\"line\":598,\"text\":\" rollback_started,\"}\n{\"line\":599,\"text\":\" rollback_restored,\"}\n{\"line\":600,\"text\":\" mutation_outcome,\"}\n{\"line\":601,\"text\":\" result_contract_error,\"}\n{\"line\":660,\"text\":\" ),\"}\n{\"line\":661,\"text\":\" \\\"command_rc\\\": int(command_rc) if command_rc else None,\"}\n{\"line\":662,\"text\":\" \\\"changes_made\\\": optional_bool(changes_made),\"}\n{\"line\":663,\"text\":\" \\\"rollback_started\\\": optional_bool(rollback_started),\"}\n{\"line\":664,\"text\":\" \\\"rollback_restored\\\": optional_bool(rollback_restored),\"}\n{\"line\":665,\"text\":\" \\\"mutation_outcome\\\": mutation_outcome,\"}\n{\"line\":666,\"text\":\" \\\"sanitized\\\": True,\"}\n{\"line\":705,\"text\":\" echo \\\"EXECUTION_STARTED=$RUN_STARTED\\\"\"}\n{\"line\":706,\"text\":\" echo \\\"CHANGE_DECLARED=$CHANGE_DECLARED\\\"\"}\n{\"line\":707,\"text\":\" echo \\\"RESULT_CONTRACT_VALID=$RESULT_CONTRACT_VALID\\\"\"}\n{\"line\":708,\"text\":\" echo \\\"RESULT_CONTRACT_STATUS=$CONTRACT_STATUS\\\"\"}\n{\"line\":709,\"text\":\" echo \\\"RESULT_CONTRACT_ERROR=$RESULT_CONTRACT_ERROR\\\"\"}\n{\"line\":710,\"text\":\" echo \\\"COMMAND_RC=${COMMAND_RC:-}\\\"\"}\n{\"line\":711,\"text\":\" echo \\\"CHANGES_MADE=$CHANGES_MADE\\\"\"}\nSELECTED_SOURCE_LINES_END\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"NEWFI-260907-RUNNERCONTRACT47\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\nNEWFI47_END\n" + "output": "NEWFI200_BEGIN\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\nPORTAL200_REMAINING_FULL_PRODUCT_COMMANDS_BEFORE=22\nPORTAL200_FLOW=candidate->staging-apply->rollback-proof->staging-reapply->git-push->production\nPORTAL200_CANDIDATE_IDENTITY=PASS\nPORTAL200_ORCHESTRATION_FIXES={\"failure_status\":\"FAIL\",\"staging_503_without_css_links\":true}\nPORTAL200_GIT_PRESTATE={\"branch\":\"implementation/newfi-closed-mvp-20260906\",\"clean\":true,\"head\":\"06bab5acd124e768f70305b3d7eca2f595871890\",\"remote\":\"06bab5acd124e768f70305b3d7eca2f595871890\"}\nPORTAL200_CLUSTER=PASS\nPORTAL200_RUNTIME_HELPER_LINT=PASS\nPORTAL200_ERROR_BASELINE={\"prod\":0,\"staging\":40}\nPORTAL200_HTTP={\"bytes\":23800,\"css_count\":0,\"css_marker\":false,\"css_status\":[],\"forced_css_marker\":null,\"forced_css_status\":null,\"html_marker\":false,\"old_copy\":false,\"state\":\"old\",\"status\":503,\"target\":\"staging\"}\nPORTAL200_RUNTIME={\"html_bytes\":1116,\"html_marker\":false,\"old_copy\":true,\"state\":\"old\",\"target\":\"prod\"}\nPORTAL200_FAILURE=QGA_GUEST_RC\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260907-PORTAL200-APPLY2\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\nPORTAL200_ROADMAP_REMAINS=22\nNEWFI200_END\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 33c2b9bf..0341cdcf 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260907-RUNNERCONTRACT47 -STATUS=OK -RC=0 +COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2 +STATUS=FAIL +RC=1 HOST=pve01 -MODE=read-only -COMPONENT=newfi-runner-contract-status-rca +MODE=change +COMPONENT=newfi-portal200-deploy REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=63ee0255b910daf2f06f62bca781d351b6e54a1ad4cbe8f16a0d325edc204626 +COMMAND_SHA256=cd49b083f747f4e121e0fb56e10ebb1eec3bf7a29fe12ec0b57055f981011999 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=false +CHANGE_DECLARED=true RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_STATUS=FAIL RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=0 +COMMAND_RC=1 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,214 +24,25 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200 -SANITIZED_OUTPUT_SHA256=f9b3192a7eced7003947dfaeab409344216b73c58a17b7a5a3a0849a7817b200 +RAW_EVIDENCE_SHA256=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a +SANITIZED_OUTPUT_SHA256=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a 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 +NEWFI200_BEGIN +COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2 +PORTAL200_REMAINING_FULL_PRODUCT_COMMANDS_BEFORE=22 +PORTAL200_FLOW=candidate->staging-apply->rollback-proof->staging-reapply->git-push->production +PORTAL200_CANDIDATE_IDENTITY=PASS +PORTAL200_ORCHESTRATION_FIXES={"failure_status":"FAIL","staging_503_without_css_links":true} +PORTAL200_GIT_PRESTATE={"branch":"implementation/newfi-closed-mvp-20260906","clean":true,"head":"06bab5acd124e768f70305b3d7eca2f595871890","remote":"06bab5acd124e768f70305b3d7eca2f595871890"} +PORTAL200_CLUSTER=PASS +PORTAL200_RUNTIME_HELPER_LINT=PASS +PORTAL200_ERROR_BASELINE={"prod":0,"staging":40} +PORTAL200_HTTP={"bytes":23800,"css_count":0,"css_marker":false,"css_status":[],"forced_css_marker":null,"forced_css_status":null,"html_marker":false,"old_copy":false,"state":"old","status":503,"target":"staging"} +PORTAL200_RUNTIME={"html_bytes":1116,"html_marker":false,"old_copy":true,"state":"old","target":"prod"} +PORTAL200_FAILURE=QGA_GUEST_RC +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260907-PORTAL200-APPLY2","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1} +PORTAL200_ROADMAP_REMAINS=22 +NEWFI200_END OUTPUT_END CHAT_OUTPUT_END