39 lines
8.0 KiB
JSON
39 lines
8.0 KiB
JSON
{
|
|
"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"
|
|
}
|