39 lines
38 KiB
JSON
39 lines
38 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"channel": "homelab-runtime",
|
|
"command_id": "NEWFI-260907-A-PORTAL200-APPLY4DESIGN2",
|
|
"status": "OK",
|
|
"rc": 0,
|
|
"host": "pve01",
|
|
"mode": "read-only",
|
|
"component": "newfi-portal200-apply4-candidate-exact-recovery",
|
|
"started_at_utc": "2026-09-07T20:15:19Z",
|
|
"finished_at_utc": "2026-09-07T20:15:32Z",
|
|
"reference_register_checked": true,
|
|
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
|
|
"error_register_checked": true,
|
|
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
|
|
"command_sha256": "d9ecc50604b452f7f25f062a6d5c744609c344a965cb5a785f7c8eb28a1b74e3",
|
|
"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": "eb768ba37e84529ac30bac9faff315d6be84c63c2590d855fabd0f9231ba5bb0",
|
|
"sanitized_output_sha256": "eb768ba37e84529ac30bac9faff315d6be84c63c2590d855fabd0f9231ba5bb0",
|
|
"output_truncated_in_json": false,
|
|
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
|
|
"output": "APPLY4_DESIGN2_BEGIN=true\nCOMMAND_ID=NEWFI-260907-A-PORTAL200-APPLY4DESIGN2\nMUTATION_SCOPE=NONE_READ_ONLY\nMUTATIONS_PERFORMED=NO\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nHISTORY_NEWFI_260907_PORTAL200_APPLY1_SHA256=e352a1ee17b6588b878c02a7ca5096e99b5bfd20391cfadaf9cd2a67f7043f17\nHISTORY_NEWFI_260907_PORTAL200_APPLY1_STATUS=FAIL\nHISTORY_NEWFI_260907_PORTAL200_APPLY1_RC=76\nHISTORY_NEWFI_260907_PORTAL200_APPLY1_CHANGES_MADE=unknown\nHISTORY_NEWFI_260907_PORTAL200_APPLY1_MUTATION_OUTCOME=UNKNOWN\nHISTORY_NEWFI_260907_PORTAL200_APPLY2_SHA256=5e043e4f2429583487a791569aeca832f744bb71a5eee1617bb6706f6657051b\nHISTORY_NEWFI_260907_PORTAL200_APPLY2_STATUS=FAIL\nHISTORY_NEWFI_260907_PORTAL200_APPLY2_RC=1\nHISTORY_NEWFI_260907_PORTAL200_APPLY2_CHANGES_MADE=false\nHISTORY_NEWFI_260907_PORTAL200_APPLY2_MUTATION_OUTCOME=NO_MUTATION\nHISTORY_NEWFI_260907_PORTAL200_APPLY3_SHA256=f3ea3fcebd7b182e64db6e963a34f1b90baca0d08477e25e27bf88c48b33611c\nHISTORY_NEWFI_260907_PORTAL200_APPLY3_STATUS=FAIL\nHISTORY_NEWFI_260907_PORTAL200_APPLY3_RC=76\nHISTORY_NEWFI_260907_PORTAL200_APPLY3_CHANGES_MADE=unknown\nHISTORY_NEWFI_260907_PORTAL200_APPLY3_MUTATION_OUTCOME=UNKNOWN\nHISTORY_NEWFI_260907_PORTAL200_CONTRACTAST1_SHA256=00c4dc5e100be0cb26a80262a8af96555457b5dc4fa924c6a9458089cd01474e\nHISTORY_NEWFI_260907_PORTAL200_CONTRACTAST1_STATUS=OK\nHISTORY_NEWFI_260907_PORTAL200_CONTRACTAST1_RC=0\nHISTORY_NEWFI_260907_PORTAL200_CONTRACTAST1_CHANGES_MADE=false\nHISTORY_NEWFI_260907_PORTAL200_CONTRACTAST1_MUTATION_OUTCOME=NO_MUTATION\nHISTORY_NEWFI_260907_PORTAL200_IMPORTDISC2_SHA256=805954f73608dbd343da33d387c59a6ad258a7f6a51965db4e78c3fd0f588fd4\nHISTORY_NEWFI_260907_PORTAL200_IMPORTDISC2_STATUS=OK\nHISTORY_NEWFI_260907_PORTAL200_IMPORTDISC2_RC=0\nHISTORY_NEWFI_260907_PORTAL200_IMPORTDISC2_CHANGES_MADE=false\nHISTORY_NEWFI_260907_PORTAL200_IMPORTDISC2_MUTATION_OUTCOME=NO_MUTATION\nHISTORY_NEWFI_260907_PORTAL200_REBUILDHELP1_SHA256=30370cad3d4d7e73c6612a5df702abe1fac6ae559bf142b5e489a19a1258cfb7\nHISTORY_NEWFI_260907_PORTAL200_REBUILDHELP1_STATUS=OK\nHISTORY_NEWFI_260907_PORTAL200_REBUILDHELP1_RC=0\nHISTORY_NEWFI_260907_PORTAL200_REBUILDHELP1_CHANGES_MADE=false\nHISTORY_NEWFI_260907_PORTAL200_REBUILDHELP1_MUTATION_OUTCOME=NO_MUTATION\nHISTORY_NEWFI_260907_B_PORTAL200_RECOVERY5_SHA256=08c00e675ffa960eca55102a114d305fb1a15291ff7e401dc43c09d087c32ece\nHISTORY_NEWFI_260907_B_PORTAL200_RECOVERY5_STATUS=OK\nHISTORY_NEWFI_260907_B_PORTAL200_RECOVERY5_RC=0\nHISTORY_NEWFI_260907_B_PORTAL200_RECOVERY5_CHANGES_MADE=false\nHISTORY_NEWFI_260907_B_PORTAL200_RECOVERY5_MUTATION_OUTCOME=NO_MUTATION\nHISTORY_NEWFI_260907_A_PORTAL200_APPLY4DESIGN1_SHA256=37d9ad10d0d9abb7fede76a4716cde8abe70866cb6ce8024243f399e39082ad7\nHISTORY_NEWFI_260907_A_PORTAL200_APPLY4DESIGN1_STATUS=OK\nHISTORY_NEWFI_260907_A_PORTAL200_APPLY4DESIGN1_RC=0\nHISTORY_NEWFI_260907_A_PORTAL200_APPLY4DESIGN1_CHANGES_MADE=false\nHISTORY_NEWFI_260907_A_PORTAL200_APPLY4DESIGN1_MUTATION_OUTCOME=NO_MUTATION\nNEWFI_260907_PORTAL200_APPLY1_CANDIDATE_RELEVANT_LINES=[\"CHAT_OUTPUT_BEGIN\",\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\",\"STATUS=FAIL\",\"RC=76\",\"HOST=pve01\",\"MODE=change\",\"COMPONENT=newfi-portal200-deploy\",\"REFERENCE_REGISTER_CHECK=OK\",\"REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\",\"COMMAND_RC=1\",\"CHANGES_MADE=unknown\",\"ROLLBACK_STARTED=unknown\",\"ROLLBACK_RESTORED=null\",\"MUTATION_OUTCOME=UNKNOWN\",\"SANITIZED=yes\",\"SANITIZED_OUTPUT_SHA256=50310a6619ab35d100c11d8842e044852dc3f5589b3d100948bd7fd05bdd5f0b\",\"OUTPUT_BEGIN\",\"NEWFI200_BEGIN\",\"PORTAL200_REMAINING_FULL_PRODUCT_COMMANDS_BEFORE=22\",\"PORTAL200_FLOW=candidate->staging-apply->rollback-proof->staging-reapply->git-push->production\",\"PORTAL200_CANDIDATE_IDENTITY=PASS\",\"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_FAILURE=QGA_GUEST_RC\",\"HOMELAB_RESULT_CONTRACT={\\\"changes_made\\\":false,\\\"command_id\\\":\\\"NEWFI-260907-PORTAL200-APPLY1\\\",\\\"rollback_restored\\\":null,\\\"rollback_started\\\":false,\\\"status\\\":\\\"ERROR\\\",\\\"version\\\":1}\",\"PORTAL200_ROADMAP_REMAINS=22\",\"NEWFI200_END\",\"\",\"OUTPUT_END\"]\nNEWFI_260907_PORTAL200_APPLY2_CANDIDATE_RELEVANT_LINES=[\"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\",\"COMMAND_RC=1\",\"CHANGES_MADE=false\",\"ROLLBACK_STARTED=false\",\"ROLLBACK_RESTORED=null\",\"MUTATION_OUTCOME=NO_MUTATION\",\"SANITIZED=yes\",\"SANITIZED_OUTPUT_SHA256=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a\",\"OUTPUT_BEGIN\",\"NEWFI200_BEGIN\",\"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\"]\nNEWFI_260907_PORTAL200_APPLY3_CANDIDATE_RELEVANT_LINES=[\"CHAT_OUTPUT_BEGIN\",\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\",\"STATUS=FAIL\",\"RC=76\",\"HOST=pve01\",\"MODE=change\",\"COMPONENT=newfi-portal200-deploy\",\"REFERENCE_REGISTER_CHECK=OK\",\"REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\",\"COMMAND_RC=1\",\"CHANGES_MADE=unknown\",\"ROLLBACK_STARTED=unknown\",\"ROLLBACK_RESTORED=null\",\"MUTATION_OUTCOME=UNKNOWN\",\"SANITIZED=yes\",\"SANITIZED_OUTPUT_SHA256=312b61dd11c589bcf59b0425107fe3673b1b8e6e64af31a9954ca43541faaa98\",\"OUTPUT_BEGIN\",\"NEWFI200_BEGIN\",\"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={\\\"css_href_regex_fixed\\\":true,\\\"failure_status\\\":\\\"FAIL\\\",\\\"prod_http_via_pve01_public_route\\\":true,\\\"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\\\":2,\\\"css_marker\\\":false,\\\"css_status\\\":[200,200],\\\"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_HTTP={\\\"bytes\\\":25939,\\\"css_count\\\":2,\\\"css_marker\\\":false,\\\"css_status\\\":[200,200],\\\"forced_css_marker\\\":null,\\\"forced_css_status\\\":null,\\\"html_marker\\\":false,\\\"old_copy\\\":true,\\\"state\\\":\\\"old\\\",\\\"status\\\":200,\\\"target\\\":\\\"prod\\\"}\",\"PORTAL200_PREFLIGHT=PASS\",\"PORTAL200_FAILURE=IMPORT_FAILED\",\"PORTAL200_FAILURE_STAGING_ROLLBACK=PASS\",\"HOMELAB_RESULT_CONTRACT={\\\"changes_made\\\":false,\\\"command_id\\\":\\\"NEWFI-260907-PORTAL200-APPLY3\\\",\\\"rollback_restored\\\":true,\\\"rollback_started\\\":true,\\\"status\\\":\\\"FAIL\\\",\\\"version\\\":1}\",\"PORTAL200_ROADMAP_REMAINS=22\",\"NEWFI200_END\",\"\",\"OUTPUT_END\"]\nNEWFI_260907_PORTAL200_APPLY2_OUTPUT_BLOCK_SHA256=c86dd3bbfbc94ff56e5cb678b0d8dd999af220229e3aea248a99e3d1f51d007a\nNEWFI_260907_PORTAL200_APPLY2_OUTPUT_BLOCK=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\nNEWFI_260907_PORTAL200_APPLY3_OUTPUT_BLOCK_SHA256=312b61dd11c589bcf59b0425107fe3673b1b8e6e64af31a9954ca43541faaa98\nNEWFI_260907_PORTAL200_APPLY3_OUTPUT_BLOCK=NEWFI200_BEGIN\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\\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={\"css_href_regex_fixed\":true,\"failure_status\":\"FAIL\",\"prod_http_via_pve01_public_route\":true,\"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\":2,\"css_marker\":false,\"css_status\":[200,200],\"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_HTTP={\"bytes\":25939,\"css_count\":2,\"css_marker\":false,\"css_status\":[200,200],\"forced_css_marker\":null,\"forced_css_status\":null,\"html_marker\":false,\"old_copy\":true,\"state\":\"old\",\"status\":200,\"target\":\"prod\"}\\nPORTAL200_PREFLIGHT=PASS\\nPORTAL200_FAILURE=IMPORT_FAILED\\nPORTAL200_HTTP={\"bytes\":23800,\"css_count\":2,\"css_marker\":false,\"css_status\":[200,200],\"forced_css_marker\":null,\"forced_css_status\":null,\"html_marker\":false,\"old_copy\":false,\"state\":\"old\",\"status\":503,\"target\":\"staging\"}\\nPORTAL200_FAILURE_STAGING_ROLLBACK=PASS\\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260907-PORTAL200-APPLY3\",\"rollback_restored\":true,\"rollback_started\":true,\"status\":\"FAIL\",\"version\":1}\\nPORTAL200_ROADMAP_REMAINS=22\\nNEWFI200_END\\n\nNEWFI_260907_PORTAL200_APPLY1_ATTEMPT_INVENTORY=[{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/attempt.txt\",\"sha256\":\"e499da1ae348df5f86b560c4655d92d4ad6bccd24925c9cc8e818e0ad2e45e47\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\\nSTATE=RESERVED_BEFORE_EXECUTION\\n\"},{\"bytes\":94,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/receipt.txt\",\"sha256\":\"dc440de62a30fa2480b0b3d83c8eaa5b9692a90afc2cea28012c757f0b410c78\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\\nWRAPPER_RC=76\\nPUBLICATION=NOT_INDEPENDENTLY_VERIFIED\\n\"},{\"bytes\":669,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/wrapper.log\",\"sha256\":\"9685a3719da39ed64273e57bad5cd9a52bb637863d267750792bde1d82295f0e\",\"text\":\"PAYLOAD_VALIDATION=OK\\nremote: . Processing 1 references \\nremote: Processed 1 references in total \\nRESULT=OK\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\\nCOMMIT_SHA=55aa9f336df6f3b8a7976899b2a1d58d878431c7\\nSTATIC_PUBLICATION=OK\\nRAW_BRANCH_PUBLICATION=OK\\n\\n===== HOMELAB CHAT RUN COMPLETE =====\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\\nSTATUS=FAIL\\nRC=76\\nREFERENCE_REGISTER_CHECK=OK\\nERROR_REGISTER_CHECK=OK\\nDUPLICATE_FAILED_COMMAND_BLOCKED=false\\nGITEA_PUBLICATION=OK\\nPUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\\nLOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY1-20260907T095034Z.log\\nSHELL_SESSION_PRESERVED=yes\\n\"}]\nNEWFI_260907_PORTAL200_APPLY2_ATTEMPT_INVENTORY=[{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/attempt.txt\",\"sha256\":\"83643d80ccdc44fddd2837ef415cac4b96431e3af3b0db7d9f13364f75442f33\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\\nSTATE=RESERVED_BEFORE_EXECUTION\\n\"},{\"bytes\":89,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/receipt.txt\",\"sha256\":\"07b965c02187f78a8aa6836ec8267fc8ef01270717114e4c5ff39efa31121929\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\\nWRAPPER_RC=1\\nPUBLICATION=GITEA_RUNTIME_EXPECTED\\n\"},{\"bytes\":668,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/wrapper.log\",\"sha256\":\"4c72462531ac8b9200007c954a1f9a90cebbfe346031bb71a07cb2ef67ac329d\",\"text\":\"PAYLOAD_VALIDATION=OK\\nremote: . Processing 1 references \\nremote: Processed 1 references in total \\nRESULT=OK\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\\nCOMMIT_SHA=fe5f3ed2f5c68fc46fcbab828685c0a872b1ce59\\nSTATIC_PUBLICATION=OK\\nRAW_BRANCH_PUBLICATION=OK\\n\\n===== HOMELAB CHAT RUN COMPLETE =====\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\\nSTATUS=FAIL\\nRC=1\\nREFERENCE_REGISTER_CHECK=OK\\nERROR_REGISTER_CHECK=OK\\nDUPLICATE_FAILED_COMMAND_BLOCKED=false\\nGITEA_PUBLICATION=OK\\nPUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\\nLOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY2-20260907T105610Z.log\\nSHELL_SESSION_PRESERVED=yes\\n\"}]\nNEWFI_260907_PORTAL200_APPLY3_ATTEMPT_INVENTORY=[{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/attempt.txt\",\"sha256\":\"fc3d53a77acceff697ec5111ab3ba411ede195fd9a8e358de5ae94dbc94f4d14\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\\nSTATE=RESERVED_BEFORE_EXECUTION\\n\"},{\"bytes\":90,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/receipt.txt\",\"sha256\":\"a993d3503cd786e73baa68900ae5bc46eac405da3430cfab0bb5db981e0f1b4b\",\"text\":\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\\nWRAPPER_RC=76\\nPUBLICATION=GITEA_RUNTIME_EXPECTED\\n\"},{\"bytes\":669,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/wrapper.log\",\"sha256\":\"dec036ea985e75d776b2de8c2bede77fe4b4aafa5da33648b2a6b5f79f3dec30\",\"text\":\"PAYLOAD_VALIDATION=OK\\nremote: . Processing 1 references \\nremote: Processed 1 references in total \\nRESULT=OK\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\\nCOMMIT_SHA=bb707af34d2a2b6a6b23c3d4d03f6b701150a653\\nSTATIC_PUBLICATION=OK\\nRAW_BRANCH_PUBLICATION=OK\\n\\n===== HOMELAB CHAT RUN COMPLETE =====\\nCOMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\\nSTATUS=FAIL\\nRC=76\\nREFERENCE_REGISTER_CHECK=OK\\nERROR_REGISTER_CHECK=OK\\nDUPLICATE_FAILED_COMMAND_BLOCKED=false\\nGITEA_PUBLICATION=OK\\nPUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\\nLOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY3-20260907T112033Z.log\\nSHELL_SESSION_PRESERVED=yes\\n\"}]\nFILESYSTEM_PORTAL200_EVIDENCE=[{\"bytes\":14898,\"path\":\"/root/.bash_history\",\"relevant_lines\":[\"]]></template>\",\"\",\" <template type=\\\"public\\\" title=\\\"newfi_portal.less\\\" version_id=\\\"1000010\\\" version_string=\\\"1.0.0 Alpha 1\\\"><![CDATA[\",\".newfiPortal\",\"{\",\"\\t--newfi-portal200: 1;\",\"\\tdisplay: flex;\",\"\\tflex-direction: column;\",\"templates_path = (\",\" root / \\\"src/addons/Newfi/Portal/_data/templates.xml\\\"\",\")\",\"for token in [\",\" 'data-newfi-portal200=\\\"1\\\"',\",\" '--newfi-portal200: 1',\",\" 'data-portal-locked=\\\"resources\\\"',\",\" 'data-portal-locked=\\\"media\\\"',\",\"print(\\\"PORTAL200_CANDIDATE_SOURCE_CONTRACT=PASS\\\")\",\"print(\\\"PORTAL200_CANDIDATE_TEMPLATE_COUNT=2\\\")\",\"print(\\\"PORTAL200_CANDIDATE_RAW_SQL_MUTATION_SCAN=PASS\\\")\",\"print(\\\"PORTAL200_CANDIDATE_FAKE_CONTENT_SCAN=PASS\\\")\",\"print(\",\" \\\"PORTAL200_CANDIDATE_MANIFEST=\\\"\",\" + json.dumps(manifest, sort_keys=True, separators=(\\\",\\\", \\\":\\\"))\",\"PYCHECK\",\" CHECK_RC=$?; printf 'PORTAL200_CANDIDATE_SOURCE_CHECK_RC=%s\\\\n' \\\"$CHECK_RC\\\"; if [ \\\"$CHECK_RC\\\" -ne 0 ]; then RC=1; fi; fi; lint_php() { FILE=\\\"$1\\\"; LABEL=\\\"$2\\\"; B64=\\\"$(base64 -w0 \\\"$FILE\\\")\\\"; OUT=\\\"$(\",\" ssh \\\\\",\" -T \\\\\",\" \\\"printf '%s' '$B64' | base64 -d | /usr/sbin/qm guest exec 211 --synchronous 1 --timeout 60 --pass-stdin 1 -- /usr/bin/php8.3 -l\\\" \\\\\",\" 2>&1\",\" )\\\"; SSH_RC=$?; printf 'PORTAL200_CANDIDATE_%s_QGA_BEGIN\\\\n' \\\"$LABEL\\\"; printf '%s\\\\n' \\\"$OUT\\\"; printf 'PORTAL200_CANDIDATE_%s_QGA_END\\\\n' \\\"$LABEL\\\"; printf 'PORTAL200_CANDIDATE_%s_SSH_RC=%s\\\\n' \\\"$LABEL\\\" \\\"$SSH_RC\\\"; if [ \\\"$SSH_RC\\\" -ne 0 ]; then return 1; fi; printf '%s' \\\"$OUT\\\" | python3 -c '\",\"import json\",\"import sys\",\"assert \\\"No syntax errors detected\\\" in out\",\"' || return 1; return 0; }; if [ \\\"$RC\\\" -eq 0 ]; then lint_php \\\"$CAND/src/addons/Newfi/Portal/Pub/Controller/Portal.php\\\" CONTROLLER; L1=$?; lint_php \\\"$CAND/src/addons/Newfi/Portal/Service/PortalData.php\\\" SERVICE; L2=$?; printf 'PORTAL200_CANDIDATE_CONTROLLER_LINT_RC=%s\\\\n' \\\"$L1\\\"; printf 'PORTAL200_CANDIDATE_SERVICE_LINT_RC=%s\\\\n' \\\"$L2\\\"; if [ \\\"$L1\\\" -ne 0 ] || [ \\\"$L2\\\" -ne 0 ]; then RC=1; fi; fi; END_HEAD=\\\"$(git -C \\\"$WT\\\" rev-parse HEAD 2>/dev/null)\\\"; END_STATUS=\\\"$(\",\" git -C \\\"$WT\\\" status --porcelain=v1 --untracked-files=all 2>/dev/null\",\")\\\"; printf 'PORTAL200_CANDIDATE_END_GIT_HEAD=%s\\\\n' \\\"$END_HEAD\\\"; printf 'PORTAL200_CANDIDATE_END_GIT_CLEAN=%s\\\\n' \\\"$(\",\" if [ -z \\\"$END_STATUS\\\" ]; then printf true; else printf false; fi\",\")\\\"; if [ \\\"$END_HEAD\\\" != \\\"$EXPECTED_HEAD\\\" ] || [ -n \\\"$END_STATUS\\\" ]; then RC=1; fi; if [ \\\"$RC\\\" -eq 0 ]; then printf 'PORTAL200_CANDIDATE_RESULT=PASS\\\\n'; printf 'PORTAL200_CANDIDATE_PATH=%s\\\\n' \\\"$CAND\\\"; printf 'PORTAL200_EXECUTED=NO\\\\n'; else printf 'PORTAL200_CANDIDATE_RESULT=FAIL\\\\n'; rm -rf \\\"$CAND\\\" 2>/dev/null || true; fi; printf 'PORTAL200_ROADMAP_REMAINS=22\\\\n'; printf 'PORTAL200_CANDIDATE_END=%s\\\\n' \\\"$CID\\\"; printf 'WRAPPER_RC=%s\\\\n' \\\"$RC\\\"; printf 'TERMINAL=KEEP_OPEN\\\\n'; printf 'NEWFI_COMMAND_SHELL_EXIT=DISABLED\\\\n'; true; ) || true\",\"printf 'WRAPPER_SHELL_RC=0\\\\n'\",\"printf 'TERMINAL=KEEP_OPEN\\\\n'\"],\"sha256\":\"0d1e6f73b9c6f8ffe1b3a3849bb0f787ed523b1e46a34960ad9ba422e4a3b91f\"},{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/attempt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\",\"STATE=RESERVED_BEFORE_EXECUTION\"],\"sha256\":\"fc3d53a77acceff697ec5111ab3ba411ede195fd9a8e358de5ae94dbc94f4d14\"},{\"bytes\":90,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/receipt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\",\"WRAPPER_RC=76\",\"PUBLICATION=GITEA_RUNTIME_EXPECTED\"],\"sha256\":\"a993d3503cd786e73baa68900ae5bc46eac405da3430cfab0bb5db981e0f1b4b\"},{\"bytes\":669,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY3/wrapper.log\",\"relevant_lines\":[\"remote: Processed 1 references in total \",\"RESULT=OK\",\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY3\",\"COMMIT_SHA=bb707af34d2a2b6a6b23c3d4d03f6b701150a653\",\"STATIC_PUBLICATION=OK\",\"\",\"===== HOMELAB CHAT RUN COMPLETE =====\",\"STATUS=FAIL\",\"RC=76\",\"GITEA_PUBLICATION=OK\",\"PUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"LOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY3-20260907T112033Z.log\",\"SHELL_SESSION_PRESERVED=yes\"],\"sha256\":\"dec036ea985e75d776b2de8c2bede77fe4b4aafa5da33648b2a6b5f79f3dec30\"},{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/attempt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\",\"STATE=RESERVED_BEFORE_EXECUTION\"],\"sha256\":\"e499da1ae348df5f86b560c4655d92d4ad6bccd24925c9cc8e818e0ad2e45e47\"},{\"bytes\":94,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/receipt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\",\"WRAPPER_RC=76\",\"PUBLICATION=NOT_INDEPENDENTLY_VERIFIED\"],\"sha256\":\"dc440de62a30fa2480b0b3d83c8eaa5b9692a90afc2cea28012c757f0b410c78\"},{\"bytes\":669,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY1/wrapper.log\",\"relevant_lines\":[\"remote: Processed 1 references in total \",\"RESULT=OK\",\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY1\",\"COMMIT_SHA=55aa9f336df6f3b8a7976899b2a1d58d878431c7\",\"STATIC_PUBLICATION=OK\",\"\",\"===== HOMELAB CHAT RUN COMPLETE =====\",\"STATUS=FAIL\",\"RC=76\",\"GITEA_PUBLICATION=OK\",\"PUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"LOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY1-20260907T095034Z.log\",\"SHELL_SESSION_PRESERVED=yes\"],\"sha256\":\"9685a3719da39ed64273e57bad5cd9a52bb637863d267750792bde1d82295f0e\"},{\"bytes\":73,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/attempt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\",\"STATE=RESERVED_BEFORE_EXECUTION\"],\"sha256\":\"83643d80ccdc44fddd2837ef415cac4b96431e3af3b0db7d9f13364f75442f33\"},{\"bytes\":89,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/receipt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\",\"WRAPPER_RC=1\",\"PUBLICATION=GITEA_RUNTIME_EXPECTED\"],\"sha256\":\"07b965c02187f78a8aa6836ec8267fc8ef01270717114e4c5ff39efa31121929\"},{\"bytes\":668,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-APPLY2/wrapper.log\",\"relevant_lines\":[\"remote: Processed 1 references in total \",\"RESULT=OK\",\"COMMAND_ID=NEWFI-260907-PORTAL200-APPLY2\",\"COMMIT_SHA=fe5f3ed2f5c68fc46fcbab828685c0a872b1ce59\",\"STATIC_PUBLICATION=OK\",\"\",\"===== HOMELAB CHAT RUN COMPLETE =====\",\"STATUS=FAIL\",\"RC=1\",\"GITEA_PUBLICATION=OK\",\"PUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"LOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-APPLY2-20260907T105610Z.log\",\"SHELL_SESSION_PRESERVED=yes\"],\"sha256\":\"4c72462531ac8b9200007c954a1f9a90cebbfe346031bb71a07cb2ef67ac329d\"},{\"bytes\":71,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-RCA4/attempt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-RCA4\",\"STATE=RESERVED_BEFORE_EXECUTION\"],\"sha256\":\"6f5f48b114a59b391450532fdf2c73a2627105ffe91942054e272931af0af62b\"},{\"bytes\":91,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-RCA4/receipt.txt\",\"relevant_lines\":[\"COMMAND_ID=NEWFI-260907-PORTAL200-RCA4\",\"WRAPPER_RC=0\",\"PUBLICATION=NOT_INDEPENDENTLY_VERIFIED\"],\"sha256\":\"6406f6bc528bf48bd88eabccc9dd88a9fa25d6415f5121ed55b8aa8f357d0c84\"},{\"bytes\":660,\"path\":\"/root/newfi-run-NEWFI-260907-PORTAL200-RCA4/wrapper.log\",\"relevant_lines\":[\"remote: Processed 1 references in total \",\"RESULT=OK\",\"COMMAND_ID=NEWFI-260907-PORTAL200-RCA4\",\"COMMIT_SHA=74bee60e6746db6bf0eba73b3c66c184bf148680\",\"STATIC_PUBLICATION=OK\",\"\",\"===== HOMELAB CHAT RUN COMPLETE =====\",\"STATUS=OK\",\"RC=0\",\"GITEA_PUBLICATION=OK\",\"PUBLIC_URL=https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"LOCAL_RAW_FILE=/var/lib/homelab-chat-run/raw/NEWFI-260907-PORTAL200-RCA4-20260907T103455Z.log\",\"SHELL_SESSION_PRESERVED=yes\"],\"sha256\":\"b7f1ea0cdee90fe027b3302bf1e932c15fbb80a73764b948269d3025307c7672\"}]\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nRUNNER_CONTRACT_EXACT_RELEVANT_LINES=[\"import json\",\"import sys\",\"from pathlib import Path\",\"\",\"raw_path, command_id, mode, command_rc = sys.argv[1:]\",\"command_rc = int(command_rc)\",\"result = {\",\" \\\"valid\\\": True,\",\" \\\"status\\\": \\\"NOT_APPLICABLE\\\",\",\" \\\"changes_made\\\": \\\"false\\\",\",\" \\\"rollback_started\\\": \\\"false\\\",\",\" \\\"rollback_restored\\\": \\\"null\\\",\",\" \\\"mutation_outcome\\\": \\\"NO_MUTATION\\\",\",\" \\\"error\\\": \\\"NONE\\\",\",\"}\",\"if mode == \\\"change\\\":\",\" result = {\",\" \\\"valid\\\": False,\",\" \\\"status\\\": \\\"UNKNOWN\\\",\",\" \\\"changes_made\\\": \\\"unknown\\\",\",\" \\\"rollback_started\\\": \\\"unknown\\\",\",\" \\\"rollback_restored\\\": \\\"null\\\",\",\" \\\"mutation_outcome\\\": \\\"UNKNOWN\\\",\",\" \\\"error\\\": \\\"MISSING_CONTRACT\\\",\",\" }\",\" marker = \\\"HOMELAB_RESULT_CONTRACT=\\\"\",\" lines = Path(raw_path).read_bytes().decode(\",\" \\\"utf-8\\\",\",\" errors=\\\"replace\\\",\",\" ).splitlines()\",\" document = json.loads(payloads[0])\",\" if not isinstance(document, dict):\",\" raise ValueError(\\\"contract root is not object\\\")\",\" if document.get(\\\"version\\\") != 1:\",\" raise ValueError(\\\"unsupported version\\\")\",\" if document.get(\\\"command_id\\\") != command_id:\",\" raise ValueError(\\\"command_id mismatch\\\")\",\" status = document.get(\\\"status\\\")\",\" if status not in {\\\"OK\\\", \\\"BLOCKED\\\", \\\"FAIL\\\"}:\",\" raise ValueError(\\\"invalid status\\\")\",\" changes = document.get(\\\"changes_made\\\")\",\" rollback_started = document.get(\\\"rollback_started\\\")\",\" rollback_restored = document.get(\\\"rollback_restored\\\")\",\" if not isinstance(changes, bool):\",\" raise ValueError(\\\"changes_made must be boolean\\\")\",\" if not isinstance(rollback_started, bool):\",\" raise ValueError(\\\"rollback_started must be boolean\\\")\",\" if rollback_restored is not None and not isinstance(\",\" rollback_restored,\",\" bool,\",\" ):\",\" raise ValueError(\",\" \\\"rollback_restored must be boolean or null\\\"\",\" )\",\" if rollback_restored is True and rollback_started is not True:\",\" \\\"rollback_restored without rollback_started\\\"\",\" if rollback_started is True and changes is not True:\",\" \\\"rollback_started without changes\\\"\",\" if status == \\\"BLOCKED\\\" and (\",\" changes\",\" or rollback_started\",\" or command_rc != 2\",\" \\\"BLOCKED contract inconsistent with rc/mutation\\\"\",\" raise ValueError(\\\"FAIL contract inconsistent with rc\\\")\",\" if not changes:\",\" outcome = \\\"NO_MUTATION\\\"\",\" elif not rollback_started:\",\" outcome = \\\"MUTATED\\\"\",\" elif rollback_restored is True:\",\" outcome = \\\"ROLLED_BACK\\\"\",\" elif rollback_restored is False:\",\" outcome = \\\"ROLLBACK_FAILED\\\"\",\" else:\",\" outcome = \\\"ROLLBACK_UNKNOWN\\\"\",\" result = {\",\" \\\"valid\\\": True,\",\" \\\"status\\\": status,\",\" \\\"changes_made\\\": str(changes).lower(),\",\" \\\"rollback_started\\\": str(\",\" rollback_started\",\" ).lower(),\",\" \\\"rollback_restored\\\": (\",\" \\\"null\\\"\",\" if rollback_restored is None\",\" else str(rollback_restored).lower()\",\" ),\",\" \\\"mutation_outcome\\\": outcome,\",\" \\\"error\\\": \\\"NONE\\\",\",\" }\",\" except Exception as exc:\",\" result[\\\"error\\\"] = (\",\" \\\"INVALID_CONTRACT:\\\" + type(exc).__name__\",\" )\",\" elif len(payloads) > 1:\",\" result[\\\"error\\\"] = \\\"MULTIPLE_CONTRACTS\\\"\",\"print(\\\"\\\\t\\\".join([\",\" str(result[\\\"valid\\\"]).lower(),\",\" result[\\\"status\\\"],\",\" result[\\\"changes_made\\\"],\",\" result[\\\"rollback_started\\\"],\",\" result[\\\"rollback_restored\\\"],\",\" result[\\\"mutation_outcome\\\"],\",\" result[\\\"error\\\"],\",\"]))\",\"PY_CONTRACT\",\" tmp=\\\"$(mktemp)\\\"\",\" trap 'rm -f \\\"$tmp\\\"' RETURN\",\" printf '%s\\\\n' \\\\\",\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T1\\\",\\\"status\\\":\\\"BLOCKED\\\",\\\"changes_made\\\":false,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\",\" >\\\"$tmp\\\"\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T1 change 2)\\\" = \\\\\",\" $'true\\\\tBLOCKED\\\\tfalse\\\\tfalse\\\\tnull\\\\tNO_MUTATION\\\\tNONE' ]\",\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T2\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T2 change 0)\\\" = \\\\\",\" $'true\\\\tOK\\\\ttrue\\\\tfalse\\\\tnull\\\\tMUTATED\\\\tNONE' ]\",\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T3\\\",\\\"status\\\":\\\"FAIL\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":true,\\\"rollback_restored\\\":true}' \\\\\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T3 change 1)\\\" = \\\\\",\" $'true\\\\tFAIL\\\\ttrue\\\\ttrue\\\\ttrue\\\\tROLLED_BACK\\\\tNONE' ]\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T5 verify 0)\\\" = \\\\\",\" $'true\\\\tNOT_APPLICABLE\\\\tfalse\\\\tfalse\\\\tnull\\\\tNO_MUTATION\\\\tNONE' ]\",\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"OTHER\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T6 change 0)\\\" = \\\\\",\" $'false\\\\tUNKNOWN\\\\tunknown\\\\tunknown\\\\tnull\\\\tUNKNOWN\\\\tINVALID_CONTRACT:ValueError' ]\",\" 'HOMELAB_RESULT_CONTRACT={\\\"version\\\":1,\\\"command_id\\\":\\\"T7\\\",\\\"status\\\":\\\"OK\\\",\\\"changes_made\\\":true,\\\"rollback_started\\\":false,\\\"rollback_restored\\\":null}' \\\\\",\" [ \\\"$(read_mutation_contract \\\"$tmp\\\" T7 change 0)\\\" = \\\\\",\" $'false\\\\tUNKNOWN\\\\tunknown\\\\tunknown\\\\tnull\\\\tUNKNOWN\\\\tMULTIPLE_CONTRACTS' ]\",\"usage() {\",\" cat >&2 <<'USAGE'\",\"Usage:\",\" homelab-chat-run COMMAND_ID MODE COMPONENT -- command [arguments...]\",\"MODE:\",\" read-only\",\" verify\",\"[ \\\"$#\\\" -ge 5 ] || usage\",\"COMMAND_ID=\\\"$1\\\"\",\"MODE=\\\"$2\\\"\",\"COMPONENT=\\\"$3\\\"\",\"shift 3\",\"[ \\\"${1:-}\\\" = '--' ] || usage\",\"shift\",\"[ \\\"$#\\\" -ge 1 ] || usage\",\"case \\\"$COMMAND_ID\\\" in\",\" ''|*[!A-Za-z0-9._-]*)\",\" echo 'RESULT=FAIL'\",\" echo 'REASON=INVALID_COMMAND_ID'\",\" exit 65\",\" ;;\",\"esac\",\"STARTED_AT=\\\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\\\"\",\"STAMP=\\\"$(date -u +%Y%m%dT%H%M%SZ)\\\"\",\"HOST_SHORT=\\\"$(hostname -s 2>/dev/null || hostname)\\\"\",\"RAW_FILE=\\\"$RAW_DIR/${COMMAND_ID}-${STAMP}.log\\\"\",\"SANITIZED_FILE=\\\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.txt\\\"\",\"JSON_FILE=\\\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}.json\\\"\",\"TXT_FILE=\\\"$PUBLIC_DIR/${COMMAND_ID}-${STAMP}-latest.txt\\\"\",\"REFERENCE_SHA256=\\\"$(sha256sum \\\"$REFERENCE\\\" | awk '{print $1}')\\\"\",\"ERROR_REGISTER_SHA256=\\\"$(sha256sum \\\"$ERROR_REGISTER\\\" | awk '{print $1}')\\\"\",\"BLOCK_REASON=''\",\"CHANGE_DECLARED=false\",\"RESULT_CONTRACT_VALID=true\",\"CONTRACT_STATUS='NOT_APPLICABLE'\",\"CHANGES_MADE=false\",\"ROLLBACK_STARTED=false\",\"ROLLBACK_RESTORED=null\",\"MUTATION_OUTCOME='NO_MUTATION'\",\"RESULT_CONTRACT_ERROR='NONE'\",\"COMMAND_RC=''\",\"if [ \\\"$MODE\\\" = change ]; then\",\" CHANGE_DECLARED=true\",\" RESULT_CONTRACT_VALID=false\",\" CONTRACT_STATUS='UNKNOWN'\",\" CHANGES_MADE=unknown\",\" ROLLBACK_STARTED=unknown\",\" ROLLBACK_RESTORED=null\",\" MUTATION_OUTCOME='UNKNOWN'\",\" RESULT_CONTRACT_ERROR='MISSING_CONTRACT'\",\"fi\",\" RC=73\",\" STATUS='BLOCKED'\",\" RESULT_CONTRACT_VALID=true\",\" CONTRACT_STATUS='BLOCKED'\",\" CHANGES_MADE=false\",\" ROLLBACK_STARTED=false\",\" MUTATION_OUTCOME='NO_MUTATION'\",\" RESULT_CONTRACT_ERROR='RUNNER_PREEXECUTION_BLOCK'\",\" {\",\" IFS=$'\\\\t' read -r \\\\\",\" RESULT_CONTRACT_VALID \\\\\",\" CONTRACT_STATUS \\\\\",\" CHANGES_MADE \\\\\",\" ROLLBACK_STARTED \\\\\",\" ROLLBACK_RESTORED \\\\\",\" MUTATION_OUTCOME \\\\\",\" RESULT_CONTRACT_ERROR < <(\",\" read_mutation_contract \\\\\",\" \\\"$RAW_FILE\\\" \\\\\",\" \\\"$COMMAND_ID\\\" \\\\\",\" \\\"$MODE\\\" \\\\\",\" \\\"$COMMAND_RC\\\"\",\" )\",\"python3 - \\\\\",\" \\\"$JSON_FILE\\\" \\\\\",\" \\\"$SANITIZED_FILE\\\" \\\\\",\" \\\"$COMMAND_ID\\\" \\\\\",\" \\\"$STATUS\\\" \\\\\",\" \\\"$RC\\\" \\\\\",\" \\\"$HOST_SHORT\\\" \\\\\",\" \\\"$MODE\\\" \\\\\",\" \\\"$BLOCK_REASON\\\" \\\\\",\" \\\"$CHANGE_DECLARED\\\" \\\\\",\" \\\"$RESULT_CONTRACT_VALID\\\" \\\\\",\" \\\"$CONTRACT_STATUS\\\" \\\\\",\" \\\"$CHANGES_MADE\\\" \\\\\",\" \\\"$ROLLBACK_STARTED\\\" \\\\\",\" \\\"$ROLLBACK_RESTORED\\\" \\\\\",\" \\\"$MUTATION_OUTCOME\\\" \\\\\",\" \\\"$RESULT_CONTRACT_ERROR\\\" \\\\\",\" \\\"$COMMAND_RC\\\" <<'PY'\",\"(\",\" json_path,\",\" output_path,\",\" command_id,\",\" status,\",\" rc,\",\" host,\",\" mode,\",\" block_reason,\",\" change_declared,\",\" result_contract_valid,\",\" contract_status,\",\" changes_made,\",\" rollback_started,\",\" rollback_restored,\",\" mutation_outcome,\",\" result_contract_error,\",\" command_rc,\",\") = sys.argv[1:]\",\"document = {\",\" \\\"schema_version\\\": 1,\",\" \\\"channel\\\": \\\"homelab-runtime\\\",\",\" \\\"command_id\\\": command_id,\",\" \\\"status\\\": status,\",\" \\\"rc\\\": int(rc),\",\" \\\"host\\\": host,\",\" \\\"mode\\\": mode,\",\" \\\"change_declared\\\": change_declared == \\\"true\\\",\",\" \\\"result_contract_valid\\\": result_contract_valid == \\\"true\\\",\",\" \\\"result_contract_status\\\": (\",\" None\",\" if contract_status in {\\\"\\\", \\\"UNKNOWN\\\", \\\"NOT_APPLICABLE\\\"}\",\" else contract_status\",\" ),\",\" \\\"result_contract_error\\\": (\",\" if result_contract_error == \\\"NONE\\\"\",\" else result_contract_error\",\" \\\"command_rc\\\": int(command_rc) if command_rc else None,\",\" \\\"changes_made\\\": optional_bool(changes_made),\",\" \\\"rollback_started\\\": optional_bool(rollback_started),\",\" \\\"rollback_restored\\\": optional_bool(rollback_restored),\",\" \\\"mutation_outcome\\\": mutation_outcome,\"]\nCANDIDATE_EXACTNESS_SIGNALS={\"source_or_hash\":true,\"version_id\":true,\"version_string\":true}\nHOLD_REASONS=[]\nFINAL_DECISION=ELIGIBLE_FOR_PORTAL200_APPLY4_CHANGE_CARRIER_BUILD\nAPPLY4_DESIGN2_END=true\n"
|
|
}
|