diff --git a/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.json b/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.json new file mode 100644 index 00000000..596c50c8 --- /dev/null +++ b/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "signalbot-order-normalization-durable-preflight", + "started_at_utc": "2026-09-21T03:24:10Z", + "finished_at_utc": "2026-09-21T03:24:11Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "740c67a5b9c05f3461a233f923b383796190f8829a7480988383cc0e5a5c49eb", + "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": "7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6", + "sanitized_output_sha256": "7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "SIGNALBOT052FIXPREP2_RESULT={\"guest\":{\"exitcode\":0,\"outer_rc\":0,\"stderr_present\":false,\"stdout\":\"PWD=/opt/stacks/8020-demonov-shadow\\n---FILES---\\n-rw------- 1 root root 324 Sep 17 20:32 .env\\n-rw-r--r-- 1 root root 3243 Sep 6 21:33 compose.yaml\\n---HASHES---\\n6e0d68a9e92a8a5269e5206db653adde49db4cc5c05c3c39ae6e2f6e74f27556 .env\\n6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061 compose.yaml\\n---ENV---\\nAPP_IMAGE=8020-demonov-shadow:signalbot-050r6-749073ae0f89\\nCODE_IDENTITY=749073ae0f894debc06fb0ffbf7a84abf9da531f\\nEXPERIMENT_ID=4a78c74b381b0424ccd22fa5466526cb324dfbb6855ffb3de8f0c3ac29dac397\\nRUNTIME_MANIFEST_ID=927480bca5dccc11c8e605151db035b4d678f3adb63a0c4ec27544dca0e45d14\\nCOLLECTION_START_AT=2026-09-18T00:00:00+00:00\\n---SERVICES---\\nrelay\\nshadow\\nworker\\ncollector\\n---CONTAINERS---\\n/demonov-shadow-8020-collector-1|8a65d323beda0410f180baf1e11144aaf53bf00f3329d758623bb711c1959f1f|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-worker-1|8677c7c7388e1f023ddc214a703de207085d21ceebca7565f673dd80b93c414d|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-relay-1|8c7689a8e46e72f94747f002af43d3a3b68c75af81f92d9287f0828c60738e6a|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-shadow-1|80ab5a8cad2b0eb99c4d0b86d66de1a673e4e40ff1fb7ac52b444d5a657bddb3|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n\"},\"repos\":[{\"branch\":\"cr-2026-0116-reliability-finality\",\"clean\":true,\"deployer_hits\":[\"7:import argparse\",\"253:def verify_compose_no_source_bind(compose_text: str) -> None:\",\"254: for raw in compose_text.splitlines():\",\"273: \\\"docker compose stop collector worker relay shadow\\\"\",\"319: f\\\"cd {STACK} && C=$(docker compose ps -q {service}) && \\\"\",\"320: 'test -n \\\"$C\\\" && docker inspect \\\"$C\\\"'\",\"337: f\\\"cd {STACK} && C=$(docker compose ps -q {service}) && \\\"\",\"338: 'test -n \\\"$C\\\" && docker inspect -f \\\"{{.Image}}\\\" \\\"$C\\\"'\",\"369: f\\\"docker inspect -f '{{{{.State.Status}}}}' \\\"\",\"375: f\\\"docker inspect -f '{{{{range .Config.Env}}}}{{{{println .}}}}{{{{end}}}}' \\\"\",\"446: f\\\"cd {STACK} && docker compose exec -T shadow python -c \\\"\",\"481: compose_path = root / \\\"deploy/8020-shadow/compose.yaml\\\"\",\"483: compose_text = compose_path.read_text(encoding=\\\"utf-8\\\")\",\"484: verify_compose_no_source_bind(compose_text)\",\"510: f\\\"docker build --build-arg PYTHON_BASE='{base_lock}' \\\"\",\"511: \\\"-f deploy/8020-shadow/Dockerfile \\\"\",\"513: f\\\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\\\"\",\"523: f\\\"APP_IMAGE='{image_tag}' \\\"\",\"524: f\\\"CODE_IDENTITY='{code_head}' \\\"\",\"526: f\\\"RUNTIME_MANIFEST_ID='{placeholder_runtime}' \\\"\",\"528: \\\"docker compose -f compose.yaml config -q\\\"\",\"534: \\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"549: \\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"573: f\\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"592: f\\\"docker run --rm --cap-drop ALL \\\"\",\"612: from demonov_forward_map.code_identity import (\",\"613: package_code_identity,\",\"616: RuntimeDeploymentManifestV1,\",\"620: package_identity = package_code_identity(\",\"623: compose_hash = _sha256_bytes(compose_path.read_bytes())\",\"624: manifest = RuntimeDeploymentManifestV1.build(\",\"625: code_identity=code_head,\",\"629: compose_hash=compose_hash,\",\"634: expected_code_identity=code_head,\",\"644: \\\"runtime_manifest_id\\\": manifest.runtime_manifest_id,\",\"680: compose_path = root / \\\"deploy/8020-shadow/compose.yaml\\\"\",\"682: compose_text = compose_path.read_text(encoding=\\\"utf-8\\\")\",\"683: verify_compose_no_source_bind(compose_text)\",\"707: f\\\"docker build --build-arg PYTHON_BASE='{base_lock}' \\\"\",\"708: \\\"-f deploy/8020-shadow/Dockerfile \\\"\",\"710: f\\\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\\\"\",\"715: from demonov_forward_map.code_identity import (\",\"716: package_code_identity,\",\"736: RuntimeDeploymentManifestV1,\",\"740: package_identity = package_code_identity(\",\"743: compose_hash = _sha256_bytes(\",\"744: compose_path.read_bytes()\",\"746: runtime_manifest = RuntimeDeploymentManifestV1.build(\",\"747: code_identity=code_head,\",\"751: compose_hash=compose_hash,\",\"756: expected_code_identity=code_head,\",\"768: code_identity=code_head,\",\"777: runtime_manifest_id=runtime_manifest.runtime_manifest_id,\",\"796: f\\\"cp {BUILD_DIR}/deploy/8020-shadow/compose.yaml \\\"\",\"797: f\\\"{STACK}/compose.yaml\\\"\",\"820: f\\\"APP_IMAGE={image_tag}\\\\n\\\"\",\"821: f\\\"CODE_IDENTITY={code_head}\\\\n\\\"\",\"823: f\\\"RUNTIME_MANIFEST_ID={runtime_manifest.runtime_manifest_id}\\\\n\\\"\",\"831: \\\"docker compose config -q\\\"\",\"836: \\\"docker compose up -d collector worker relay shadow\\\"\",\"907: \\\"runtime_manifest_id\\\": runtime_manifest.runtime_manifest_id,\",\"926:def main(argv: list[str] | None = None) -> int:\",\"927: parser = argparse.ArgumentParser()\"],\"files\":{\"ops/cr0116_deploy.py\":{\"bytes\":31515,\"sha256\":\"3ca98e06c9ca24ed0e2e96a8b882a2f9c66451f31b7429faff56c241ec700a20\"}},\"git_rc\":0,\"head\":\"ac7094a76ddc06f376d71a76432af7c2dd10ec7d\",\"path\":\"/root/8020-demonov-shadow-bot-cr0116\"},{\"branch\":\"cr-2026-0105-demonov-shadow-orchestrator\",\"clean\":true,\"git_rc\":0,\"head\":\"559948bcb6baead49a47d9953b0cc0090e332fd7\",\"path\":\"/root/8020-demonov-shadow-bot\"}]}\nTASK_RESULT=PASS_SIGNALBOT_052FIXPREP2_EVIDENCE_CAPTURED\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" +} diff --git a/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.txt b/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.txt new file mode 100644 index 00000000..665f902a --- /dev/null +++ b/runtime/history/SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2.txt @@ -0,0 +1,35 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=signalbot-order-normalization-durable-preflight +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=740c67a5b9c05f3461a233f923b383796190f8829a7480988383cc0e5a5c49eb +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGE_DECLARED=false +RESULT_CONTRACT_VALID=true +RESULT_CONTRACT_STATUS=NOT_APPLICABLE +RESULT_CONTRACT_ERROR=NONE +COMMAND_RC=0 +CHANGES_MADE=false +ROLLBACK_STARTED=false +ROLLBACK_RESTORED=null +MUTATION_OUTCOME=NO_MUTATION +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6 +SANITIZED_OUTPUT_SHA256=7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6 +OUTPUT_BEGIN +SIGNALBOT052FIXPREP2_RESULT={"guest":{"exitcode":0,"outer_rc":0,"stderr_present":false,"stdout":"PWD=/opt/stacks/8020-demonov-shadow\n---FILES---\n-rw------- 1 root root 324 Sep 17 20:32 .env\n-rw-r--r-- 1 root root 3243 Sep 6 21:33 compose.yaml\n---HASHES---\n6e0d68a9e92a8a5269e5206db653adde49db4cc5c05c3c39ae6e2f6e74f27556 .env\n6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061 compose.yaml\n---ENV---\nAPP_IMAGE=8020-demonov-shadow:signalbot-050r6-749073ae0f89\nCODE_IDENTITY=749073ae0f894debc06fb0ffbf7a84abf9da531f\nEXPERIMENT_ID=4a78c74b381b0424ccd22fa5466526cb324dfbb6855ffb3de8f0c3ac29dac397\nRUNTIME_MANIFEST_ID=927480bca5dccc11c8e605151db035b4d678f3adb63a0c4ec27544dca0e45d14\nCOLLECTION_START_AT=2026-09-18T00:00:00+00:00\n---SERVICES---\nrelay\nshadow\nworker\ncollector\n---CONTAINERS---\n/demonov-shadow-8020-collector-1|8a65d323beda0410f180baf1e11144aaf53bf00f3329d758623bb711c1959f1f|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-worker-1|8677c7c7388e1f023ddc214a703de207085d21ceebca7565f673dd80b93c414d|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-relay-1|8c7689a8e46e72f94747f002af43d3a3b68c75af81f92d9287f0828c60738e6a|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-shadow-1|80ab5a8cad2b0eb99c4d0b86d66de1a673e4e40ff1fb7ac52b444d5a657bddb3|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n"},"repos":[{"branch":"cr-2026-0116-reliability-finality","clean":true,"deployer_hits":["7:import argparse","253:def verify_compose_no_source_bind(compose_text: str) -> None:","254: for raw in compose_text.splitlines():","273: \"docker compose stop collector worker relay shadow\"","319: f\"cd {STACK} && C=$(docker compose ps -q {service}) && \"","320: 'test -n \"$C\" && docker inspect \"$C\"'","337: f\"cd {STACK} && C=$(docker compose ps -q {service}) && \"","338: 'test -n \"$C\" && docker inspect -f \"{{.Image}}\" \"$C\"'","369: f\"docker inspect -f '{{{{.State.Status}}}}' \"","375: f\"docker inspect -f '{{{{range .Config.Env}}}}{{{{println .}}}}{{{{end}}}}' \"","446: f\"cd {STACK} && docker compose exec -T shadow python -c \"","481: compose_path = root / \"deploy/8020-shadow/compose.yaml\"","483: compose_text = compose_path.read_text(encoding=\"utf-8\")","484: verify_compose_no_source_bind(compose_text)","510: f\"docker build --build-arg PYTHON_BASE='{base_lock}' \"","511: \"-f deploy/8020-shadow/Dockerfile \"","513: f\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\"","523: f\"APP_IMAGE='{image_tag}' \"","524: f\"CODE_IDENTITY='{code_head}' \"","526: f\"RUNTIME_MANIFEST_ID='{placeholder_runtime}' \"","528: \"docker compose -f compose.yaml config -q\"","534: \"docker run --rm --read-only --tmpfs /tmp \"","549: \"docker run --rm --read-only --tmpfs /tmp \"","573: f\"docker run --rm --read-only --tmpfs /tmp \"","592: f\"docker run --rm --cap-drop ALL \"","612: from demonov_forward_map.code_identity import (","613: package_code_identity,","616: RuntimeDeploymentManifestV1,","620: package_identity = package_code_identity(","623: compose_hash = _sha256_bytes(compose_path.read_bytes())","624: manifest = RuntimeDeploymentManifestV1.build(","625: code_identity=code_head,","629: compose_hash=compose_hash,","634: expected_code_identity=code_head,","644: \"runtime_manifest_id\": manifest.runtime_manifest_id,","680: compose_path = root / \"deploy/8020-shadow/compose.yaml\"","682: compose_text = compose_path.read_text(encoding=\"utf-8\")","683: verify_compose_no_source_bind(compose_text)","707: f\"docker build --build-arg PYTHON_BASE='{base_lock}' \"","708: \"-f deploy/8020-shadow/Dockerfile \"","710: f\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\"","715: from demonov_forward_map.code_identity import (","716: package_code_identity,","736: RuntimeDeploymentManifestV1,","740: package_identity = package_code_identity(","743: compose_hash = _sha256_bytes(","744: compose_path.read_bytes()","746: runtime_manifest = RuntimeDeploymentManifestV1.build(","747: code_identity=code_head,","751: compose_hash=compose_hash,","756: expected_code_identity=code_head,","768: code_identity=code_head,","777: runtime_manifest_id=runtime_manifest.runtime_manifest_id,","796: f\"cp {BUILD_DIR}/deploy/8020-shadow/compose.yaml \"","797: f\"{STACK}/compose.yaml\"","820: f\"APP_IMAGE={image_tag}\\n\"","821: f\"CODE_IDENTITY={code_head}\\n\"","823: f\"RUNTIME_MANIFEST_ID={runtime_manifest.runtime_manifest_id}\\n\"","831: \"docker compose config -q\"","836: \"docker compose up -d collector worker relay shadow\"","907: \"runtime_manifest_id\": runtime_manifest.runtime_manifest_id,","926:def main(argv: list[str] | None = None) -> int:","927: parser = argparse.ArgumentParser()"],"files":{"ops/cr0116_deploy.py":{"bytes":31515,"sha256":"3ca98e06c9ca24ed0e2e96a8b882a2f9c66451f31b7429faff56c241ec700a20"}},"git_rc":0,"head":"ac7094a76ddc06f376d71a76432af7c2dd10ec7d","path":"/root/8020-demonov-shadow-bot-cr0116"},{"branch":"cr-2026-0105-demonov-shadow-orchestrator","clean":true,"git_rc":0,"head":"559948bcb6baead49a47d9953b0cc0090e332fd7","path":"/root/8020-demonov-shadow-bot"}]} +TASK_RESULT=PASS_SIGNALBOT_052FIXPREP2_EVIDENCE_CAPTURED +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 6f5cc70f..596c50c8 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,27 +1,27 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1", - "status": "FAIL", - "rc": 1, + "command_id": "SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2", + "status": "OK", + "rc": 0, "host": "pve01", - "mode": "change", - "component": "homelab-backup-consolidated-remediation", - "started_at_utc": "2026-09-21T03:21:37Z", - "finished_at_utc": "2026-09-21T03:22:24Z", + "mode": "read-only", + "component": "signalbot-order-normalization-durable-preflight", + "started_at_utc": "2026-09-21T03:24:10Z", + "finished_at_utc": "2026-09-21T03:24:11Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "0c3f4bb36b014f38cd26f51c1e0adf2a122efdf84836d3bac80b3f8ecd1888c0", + "command_sha256": "740c67a5b9c05f3461a233f923b383796190f8829a7480988383cc0e5a5c49eb", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "FAIL", + "result_contract_status": null, "result_contract_error": null, - "command_rc": 1, + "command_rc": 0, "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": "de7d192301cd9ab02a055ce8cd74d14f0e083b468ec926ae0e129b231eae9840", - "sanitized_output_sha256": "de7d192301cd9ab02a055ce8cd74d14f0e083b468ec926ae0e129b231eae9840", + "raw_evidence_sha256": "7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6", + "sanitized_output_sha256": "7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "WORKERS2_BACKUP_CONSOLIDATED_REMEDIATION_BEGIN=1\nCOMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1\nMODE=change\nCOMPONENT=homelab-backup-consolidated-remediation\nMUTATION_BOUNDARY=SOURCE_COMMIT_PLUS_APP_CATCHUP_APP_TIMER_V2_CATCHUP_RETENTION_PIN_SAFE_GC_RETENTION_TIMER_V2_AWARE_AUDIT;NO_MAIL_NO_ALERTMANAGER_CONFIG_NO_SOURCE_PUSH_NO_RESTORE_DRILL\nFAILURE=TRACKED_MATCH_homelab-app-cloud-quorum-queue_0\nSOURCE_COMMITTED=false\nSOURCE_COMMIT=null\nAPP_BACKUPS_STARTED=false\nRETENTION_GC_STARTED=false\nRETENTION_GC_SUCCESS=false\nCHANGES_MADE_OBSERVED=false\nTASK_RESULT=FAIL_HOMELAB_BACKUP_CONSOLIDATED_REMEDIATION\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\nWORKERS2_BACKUP_CONSOLIDATED_REMEDIATION_END=1\n" + "output": "SIGNALBOT052FIXPREP2_RESULT={\"guest\":{\"exitcode\":0,\"outer_rc\":0,\"stderr_present\":false,\"stdout\":\"PWD=/opt/stacks/8020-demonov-shadow\\n---FILES---\\n-rw------- 1 root root 324 Sep 17 20:32 .env\\n-rw-r--r-- 1 root root 3243 Sep 6 21:33 compose.yaml\\n---HASHES---\\n6e0d68a9e92a8a5269e5206db653adde49db4cc5c05c3c39ae6e2f6e74f27556 .env\\n6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061 compose.yaml\\n---ENV---\\nAPP_IMAGE=8020-demonov-shadow:signalbot-050r6-749073ae0f89\\nCODE_IDENTITY=749073ae0f894debc06fb0ffbf7a84abf9da531f\\nEXPERIMENT_ID=4a78c74b381b0424ccd22fa5466526cb324dfbb6855ffb3de8f0c3ac29dac397\\nRUNTIME_MANIFEST_ID=927480bca5dccc11c8e605151db035b4d678f3adb63a0c4ec27544dca0e45d14\\nCOLLECTION_START_AT=2026-09-18T00:00:00+00:00\\n---SERVICES---\\nrelay\\nshadow\\nworker\\ncollector\\n---CONTAINERS---\\n/demonov-shadow-8020-collector-1|8a65d323beda0410f180baf1e11144aaf53bf00f3329d758623bb711c1959f1f|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-worker-1|8677c7c7388e1f023ddc214a703de207085d21ceebca7565f673dd80b93c414d|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-relay-1|8c7689a8e46e72f94747f002af43d3a3b68c75af81f92d9287f0828c60738e6a|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n/demonov-shadow-8020-shadow-1|80ab5a8cad2b0eb99c4d0b86d66de1a673e4e40ff1fb7ac52b444d5a657bddb3|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\\n\"},\"repos\":[{\"branch\":\"cr-2026-0116-reliability-finality\",\"clean\":true,\"deployer_hits\":[\"7:import argparse\",\"253:def verify_compose_no_source_bind(compose_text: str) -> None:\",\"254: for raw in compose_text.splitlines():\",\"273: \\\"docker compose stop collector worker relay shadow\\\"\",\"319: f\\\"cd {STACK} && C=$(docker compose ps -q {service}) && \\\"\",\"320: 'test -n \\\"$C\\\" && docker inspect \\\"$C\\\"'\",\"337: f\\\"cd {STACK} && C=$(docker compose ps -q {service}) && \\\"\",\"338: 'test -n \\\"$C\\\" && docker inspect -f \\\"{{.Image}}\\\" \\\"$C\\\"'\",\"369: f\\\"docker inspect -f '{{{{.State.Status}}}}' \\\"\",\"375: f\\\"docker inspect -f '{{{{range .Config.Env}}}}{{{{println .}}}}{{{{end}}}}' \\\"\",\"446: f\\\"cd {STACK} && docker compose exec -T shadow python -c \\\"\",\"481: compose_path = root / \\\"deploy/8020-shadow/compose.yaml\\\"\",\"483: compose_text = compose_path.read_text(encoding=\\\"utf-8\\\")\",\"484: verify_compose_no_source_bind(compose_text)\",\"510: f\\\"docker build --build-arg PYTHON_BASE='{base_lock}' \\\"\",\"511: \\\"-f deploy/8020-shadow/Dockerfile \\\"\",\"513: f\\\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\\\"\",\"523: f\\\"APP_IMAGE='{image_tag}' \\\"\",\"524: f\\\"CODE_IDENTITY='{code_head}' \\\"\",\"526: f\\\"RUNTIME_MANIFEST_ID='{placeholder_runtime}' \\\"\",\"528: \\\"docker compose -f compose.yaml config -q\\\"\",\"534: \\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"549: \\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"573: f\\\"docker run --rm --read-only --tmpfs /tmp \\\"\",\"592: f\\\"docker run --rm --cap-drop ALL \\\"\",\"612: from demonov_forward_map.code_identity import (\",\"613: package_code_identity,\",\"616: RuntimeDeploymentManifestV1,\",\"620: package_identity = package_code_identity(\",\"623: compose_hash = _sha256_bytes(compose_path.read_bytes())\",\"624: manifest = RuntimeDeploymentManifestV1.build(\",\"625: code_identity=code_head,\",\"629: compose_hash=compose_hash,\",\"634: expected_code_identity=code_head,\",\"644: \\\"runtime_manifest_id\\\": manifest.runtime_manifest_id,\",\"680: compose_path = root / \\\"deploy/8020-shadow/compose.yaml\\\"\",\"682: compose_text = compose_path.read_text(encoding=\\\"utf-8\\\")\",\"683: verify_compose_no_source_bind(compose_text)\",\"707: f\\\"docker build --build-arg PYTHON_BASE='{base_lock}' \\\"\",\"708: \\\"-f deploy/8020-shadow/Dockerfile \\\"\",\"710: f\\\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\\\"\",\"715: from demonov_forward_map.code_identity import (\",\"716: package_code_identity,\",\"736: RuntimeDeploymentManifestV1,\",\"740: package_identity = package_code_identity(\",\"743: compose_hash = _sha256_bytes(\",\"744: compose_path.read_bytes()\",\"746: runtime_manifest = RuntimeDeploymentManifestV1.build(\",\"747: code_identity=code_head,\",\"751: compose_hash=compose_hash,\",\"756: expected_code_identity=code_head,\",\"768: code_identity=code_head,\",\"777: runtime_manifest_id=runtime_manifest.runtime_manifest_id,\",\"796: f\\\"cp {BUILD_DIR}/deploy/8020-shadow/compose.yaml \\\"\",\"797: f\\\"{STACK}/compose.yaml\\\"\",\"820: f\\\"APP_IMAGE={image_tag}\\\\n\\\"\",\"821: f\\\"CODE_IDENTITY={code_head}\\\\n\\\"\",\"823: f\\\"RUNTIME_MANIFEST_ID={runtime_manifest.runtime_manifest_id}\\\\n\\\"\",\"831: \\\"docker compose config -q\\\"\",\"836: \\\"docker compose up -d collector worker relay shadow\\\"\",\"907: \\\"runtime_manifest_id\\\": runtime_manifest.runtime_manifest_id,\",\"926:def main(argv: list[str] | None = None) -> int:\",\"927: parser = argparse.ArgumentParser()\"],\"files\":{\"ops/cr0116_deploy.py\":{\"bytes\":31515,\"sha256\":\"3ca98e06c9ca24ed0e2e96a8b882a2f9c66451f31b7429faff56c241ec700a20\"}},\"git_rc\":0,\"head\":\"ac7094a76ddc06f376d71a76432af7c2dd10ec7d\",\"path\":\"/root/8020-demonov-shadow-bot-cr0116\"},{\"branch\":\"cr-2026-0105-demonov-shadow-orchestrator\",\"clean\":true,\"git_rc\":0,\"head\":\"559948bcb6baead49a47d9953b0cc0090e332fd7\",\"path\":\"/root/8020-demonov-shadow-bot\"}]}\nTASK_RESULT=PASS_SIGNALBOT_052FIXPREP2_EVIDENCE_CAPTURED\nHOMELAB_RESULT_CONTRACT={\"version\":1,\"command_id\":\"SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2\",\"status\":\"OK\",\"changes_made\":false,\"rollback_started\":false,\"rollback_restored\":null}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 08ddf719..665f902a 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1 -STATUS=FAIL -RC=1 +COMMAND_ID=SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2 +STATUS=OK +RC=0 HOST=pve01 -MODE=change -COMPONENT=homelab-backup-consolidated-remediation +MODE=read-only +COMPONENT=signalbot-order-normalization-durable-preflight REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=0c3f4bb36b014f38cd26f51c1e0adf2a122efdf84836d3bac80b3f8ecd1888c0 +COMMAND_SHA256=740c67a5b9c05f3461a233f923b383796190f8829a7480988383cc0e5a5c49eb DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=FAIL +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=1 +COMMAND_RC=0 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,24 +24,12 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=de7d192301cd9ab02a055ce8cd74d14f0e083b468ec926ae0e129b231eae9840 -SANITIZED_OUTPUT_SHA256=de7d192301cd9ab02a055ce8cd74d14f0e083b468ec926ae0e129b231eae9840 +RAW_EVIDENCE_SHA256=7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6 +SANITIZED_OUTPUT_SHA256=7126decea2df7f2ccaddca0e16e6968b918d52647144fcc0e5657fae62173de6 OUTPUT_BEGIN -WORKERS2_BACKUP_CONSOLIDATED_REMEDIATION_BEGIN=1 -COMMAND_ID=SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1 -MODE=change -COMPONENT=homelab-backup-consolidated-remediation -MUTATION_BOUNDARY=SOURCE_COMMIT_PLUS_APP_CATCHUP_APP_TIMER_V2_CATCHUP_RETENTION_PIN_SAFE_GC_RETENTION_TIMER_V2_AWARE_AUDIT;NO_MAIL_NO_ALERTMANAGER_CONFIG_NO_SOURCE_PUSH_NO_RESTORE_DRILL -FAILURE=TRACKED_MATCH_homelab-app-cloud-quorum-queue_0 -SOURCE_COMMITTED=false -SOURCE_COMMIT=null -APP_BACKUPS_STARTED=false -RETENTION_GC_STARTED=false -RETENTION_GC_SUCCESS=false -CHANGES_MADE_OBSERVED=false -TASK_RESULT=FAIL_HOMELAB_BACKUP_CONSOLIDATED_REMEDIATION -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"SUPPORT-260921-HOMELAB-BACKUP-CONSOLIDATED-REMEDIATION-1043R1","rollback_restored":null,"rollback_started":false,"status":"FAIL","version":1} -WORKERS2_BACKUP_CONSOLIDATED_REMEDIATION_END=1 +SIGNALBOT052FIXPREP2_RESULT={"guest":{"exitcode":0,"outer_rc":0,"stderr_present":false,"stdout":"PWD=/opt/stacks/8020-demonov-shadow\n---FILES---\n-rw------- 1 root root 324 Sep 17 20:32 .env\n-rw-r--r-- 1 root root 3243 Sep 6 21:33 compose.yaml\n---HASHES---\n6e0d68a9e92a8a5269e5206db653adde49db4cc5c05c3c39ae6e2f6e74f27556 .env\n6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061 compose.yaml\n---ENV---\nAPP_IMAGE=8020-demonov-shadow:signalbot-050r6-749073ae0f89\nCODE_IDENTITY=749073ae0f894debc06fb0ffbf7a84abf9da531f\nEXPERIMENT_ID=4a78c74b381b0424ccd22fa5466526cb324dfbb6855ffb3de8f0c3ac29dac397\nRUNTIME_MANIFEST_ID=927480bca5dccc11c8e605151db035b4d678f3adb63a0c4ec27544dca0e45d14\nCOLLECTION_START_AT=2026-09-18T00:00:00+00:00\n---SERVICES---\nrelay\nshadow\nworker\ncollector\n---CONTAINERS---\n/demonov-shadow-8020-collector-1|8a65d323beda0410f180baf1e11144aaf53bf00f3329d758623bb711c1959f1f|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-worker-1|8677c7c7388e1f023ddc214a703de207085d21ceebca7565f673dd80b93c414d|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-relay-1|8c7689a8e46e72f94747f002af43d3a3b68c75af81f92d9287f0828c60738e6a|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n/demonov-shadow-8020-shadow-1|80ab5a8cad2b0eb99c4d0b86d66de1a673e4e40ff1fb7ac52b444d5a657bddb3|sha256:bc7fe43a1627532cf2ffbea2489352bb97c9a9e445e097cd5837b80a9e90cc60|8020-demonov-shadow:signalbot-050r6-749073ae0f89|0|true|false|false\n"},"repos":[{"branch":"cr-2026-0116-reliability-finality","clean":true,"deployer_hits":["7:import argparse","253:def verify_compose_no_source_bind(compose_text: str) -> None:","254: for raw in compose_text.splitlines():","273: \"docker compose stop collector worker relay shadow\"","319: f\"cd {STACK} && C=$(docker compose ps -q {service}) && \"","320: 'test -n \"$C\" && docker inspect \"$C\"'","337: f\"cd {STACK} && C=$(docker compose ps -q {service}) && \"","338: 'test -n \"$C\" && docker inspect -f \"{{.Image}}\" \"$C\"'","369: f\"docker inspect -f '{{{{.State.Status}}}}' \"","375: f\"docker inspect -f '{{{{range .Config.Env}}}}{{{{println .}}}}{{{{end}}}}' \"","446: f\"cd {STACK} && docker compose exec -T shadow python -c \"","481: compose_path = root / \"deploy/8020-shadow/compose.yaml\"","483: compose_text = compose_path.read_text(encoding=\"utf-8\")","484: verify_compose_no_source_bind(compose_text)","510: f\"docker build --build-arg PYTHON_BASE='{base_lock}' \"","511: \"-f deploy/8020-shadow/Dockerfile \"","513: f\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\"","523: f\"APP_IMAGE='{image_tag}' \"","524: f\"CODE_IDENTITY='{code_head}' \"","526: f\"RUNTIME_MANIFEST_ID='{placeholder_runtime}' \"","528: \"docker compose -f compose.yaml config -q\"","534: \"docker run --rm --read-only --tmpfs /tmp \"","549: \"docker run --rm --read-only --tmpfs /tmp \"","573: f\"docker run --rm --read-only --tmpfs /tmp \"","592: f\"docker run --rm --cap-drop ALL \"","612: from demonov_forward_map.code_identity import (","613: package_code_identity,","616: RuntimeDeploymentManifestV1,","620: package_identity = package_code_identity(","623: compose_hash = _sha256_bytes(compose_path.read_bytes())","624: manifest = RuntimeDeploymentManifestV1.build(","625: code_identity=code_head,","629: compose_hash=compose_hash,","634: expected_code_identity=code_head,","644: \"runtime_manifest_id\": manifest.runtime_manifest_id,","680: compose_path = root / \"deploy/8020-shadow/compose.yaml\"","682: compose_text = compose_path.read_text(encoding=\"utf-8\")","683: verify_compose_no_source_bind(compose_text)","707: f\"docker build --build-arg PYTHON_BASE='{base_lock}' \"","708: \"-f deploy/8020-shadow/Dockerfile \"","710: f\"docker image inspect '{image_tag}' -f '{{{{.Id}}}}'\"","715: from demonov_forward_map.code_identity import (","716: package_code_identity,","736: RuntimeDeploymentManifestV1,","740: package_identity = package_code_identity(","743: compose_hash = _sha256_bytes(","744: compose_path.read_bytes()","746: runtime_manifest = RuntimeDeploymentManifestV1.build(","747: code_identity=code_head,","751: compose_hash=compose_hash,","756: expected_code_identity=code_head,","768: code_identity=code_head,","777: runtime_manifest_id=runtime_manifest.runtime_manifest_id,","796: f\"cp {BUILD_DIR}/deploy/8020-shadow/compose.yaml \"","797: f\"{STACK}/compose.yaml\"","820: f\"APP_IMAGE={image_tag}\\n\"","821: f\"CODE_IDENTITY={code_head}\\n\"","823: f\"RUNTIME_MANIFEST_ID={runtime_manifest.runtime_manifest_id}\\n\"","831: \"docker compose config -q\"","836: \"docker compose up -d collector worker relay shadow\"","907: \"runtime_manifest_id\": runtime_manifest.runtime_manifest_id,","926:def main(argv: list[str] | None = None) -> int:","927: parser = argparse.ArgumentParser()"],"files":{"ops/cr0116_deploy.py":{"bytes":31515,"sha256":"3ca98e06c9ca24ed0e2e96a8b882a2f9c66451f31b7429faff56c241ec700a20"}},"git_rc":0,"head":"ac7094a76ddc06f376d71a76432af7c2dd10ec7d","path":"/root/8020-demonov-shadow-bot-cr0116"},{"branch":"cr-2026-0105-demonov-shadow-orchestrator","clean":true,"git_rc":0,"head":"559948bcb6baead49a47d9953b0cc0090e332fd7","path":"/root/8020-demonov-shadow-bot"}]} +TASK_RESULT=PASS_SIGNALBOT_052FIXPREP2_EVIDENCE_CAPTURED +HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SIGNALBOT-260921-ORDER-NORMALIZATION-DURABLE-PREFLIGHT-052FIXPREP2","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null} OUTPUT_END CHAT_OUTPUT_END