1
0
Files
homelab-public-context/runtime/history/SIGNALBOT-260908-DEPLOY-PREP-API-041API.json
T
2026-09-08 06:35:36 +00:00

39 lines
13 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SIGNALBOT-260908-DEPLOY-PREP-API-041API",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "signalbot-cr0116-deploy-api-contract",
"started_at_utc": "2026-09-08T06:35:33Z",
"finished_at_utc": "2026-09-08T06:35:35Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "ce5ef6223547685761dcfca508de8d9390949208763bf7938e8d43d0c7641bab",
"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": "f271ff2f659b1a49c637ca9d67e7b6bc0314cc0dd8570fb252504418765369ce",
"sanitized_output_sha256": "f271ff2f659b1a49c637ca9d67e7b6bc0314cc0dd8570fb252504418765369ce",
"output_truncated_in_json": false,
"full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
"output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nSB041A_ACTIVE_ENV={\"exists\":true,\"sha256\":\"4bbc6bd31417f6265767c1fb971d118d36d27d7b57a90b49e6586461acf0609b\",\"values\":{\"APP_IMAGE\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"CODE_IDENTITY\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"COLLECTION_START_AT\":\"2026-09-07T00:00:00+00:00\",\"EXPERIMENT_ID\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\",\"RUNTIME_MANIFEST_ID\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"}}\nSB041A_DOCKERFILE={\"exists\":true,\"sha256\":\"901951def73961f76d2c2a93c5428a0fbdcc50113d42b39da92983a5ce157cb8\",\"text\":\"FROM 8020-demonov-shadow:ac7094a76ddc06f376d71a76432af7c2dd10ec7d\\nCOPY demonov_forward_map /app/demonov_forward_map\"}\nSB041A_DEPLOY_TOP=[{\"bytes\":336,\"kind\":\"file\",\"name\":\".env.new\",\"sha256\":\"4bbc6bd31417f6265767c1fb971d118d36d27d7b57a90b49e6586461acf0609b\"},{\"bytes\":116,\"kind\":\"file\",\"name\":\"Dockerfile\",\"sha256\":\"901951def73961f76d2c2a93c5428a0fbdcc50113d42b39da92983a5ce157cb8\"},{\"bytes\":886,\"kind\":\"file\",\"name\":\"build.log\",\"sha256\":\"601fe18bcce58d509431626b9c934e170fd572089dcfbfbf310c3aa9217293eb\"},{\"bytes\":808,\"kind\":\"file\",\"name\":\"compose-up.log\",\"sha256\":\"5758c75a39a1a7689f92513e3105708d1c71b7bcb14915e7013b1199b618f6d4\"},{\"kind\":\"dir\",\"name\":\"demonov_forward_map\"},{\"bytes\":841,\"kind\":\"file\",\"name\":\"experiment.json\",\"sha256\":\"827dc4fb5ace8a25a0bd80d05450eaa758bd39d1d09485d3d428dd20ad9325aa\"},{\"bytes\":208049,\"kind\":\"file\",\"name\":\"package.tar.gz\",\"sha256\":\"389e7aabca8887ee3b48b6ff0b4affe1163216005a4888013d9ccc82ea360e32\"},{\"bytes\":584,\"kind\":\"file\",\"name\":\"runtime_manifest.json\",\"sha256\":\"388a610997fad0071b9140a44e88edff60a3e7ee3486faeaca769c0026246c8e\"}]\nSB041A_EXPERIMENT_JSON={\"bytes\":841,\"exists\":true,\"object\":{\"code_identity\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"collection_start_at\":\"2026-09-07T00:00:00+00:00\",\"demonov_branch_policy_id\":\"ALL_FROZEN_PROFILES_ALL_NODES_RESEARCH_V1\",\"experiment_id\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\",\"experiment_version\":\"LIVE_PROSPECTIVE_V2\",\"finality_policy_id\":\"BITFINEX_SEQ_ALL_D1_V1\",\"geometry_policy_id\":\"RESEARCH_RECONSTRUCTION_8020_V1\",\"market_bundle_id\":\"78dbbebab22f49bfc4866b40e2362886b1441790d8a73a005a4eb09a5d2c64ae\",\"notification_policy_id\":\"SIGNIFICANT_STATE_CHANGE_EMAIL_V1\",\"outcome_policy_id\":\"DIRECTIONAL_CLOSE_AFTER_7_D1_BARS_V1\",\"policy_registry_id\":\"055d0b052d394f1e08176b035617fbdd96f04fff0cdfb195c2d736fd66e6ad37\",\"runtime_manifest_id\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"},\"sha256\":\"827dc4fb5ace8a25a0bd80d05450eaa758bd39d1d09485d3d428dd20ad9325aa\"}\nSB041A_MANIFEST_JSON={\"bytes\":584,\"exists\":true,\"object\":{\"application_image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"base_image_digest\":\"sha256:881d80734ee05dca6f7f42dcb080975652a53c7eda9ba1f03bb8da31aa6a6ec2\",\"code_identity\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"compose_hash\":\"6461532b0a04decc60fe1d1885990020e886d40de40c0523e34e2849600af061\",\"finality_policy_id\":\"BITFINEX_SEQ_ALL_D1_V1\",\"package_identity\":\"637acba19fb29c98408a8031dc9265a31dc36551c666fcf0b287e8af83d2b893\",\"runtime_manifest_id\":\"58d3b59200bdc0eb8d448612679d667b194263586cb3198dfc08597935053a1a\"},\"sha256\":\"388a610997fad0071b9140a44e88edff60a3e7ee3486faeaca769c0026246c8e\"}\nSB041A_SERVICE_BOOT_JSON={\"bytes\":224,\"exists\":true,\"object\":{\"booted_at\":\"2026-09-06T18:48:21.063302+00:00\",\"code_identity\":\"e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"execution_authority\":false,\"production_launch_allowed\":false,\"risk_authority\":false,\"service\":\"8020-demonov-shadow\"},\"sha256\":\"798a145e6c142bea2cd41a74a3fa707452da9a606cc84ff6afd1d60b43abb1f8\"}\nSB041A_EXPERIMENT_HASH_CHECKS=[{\"matches\":true,\"method\":\"compact_sorted_utf8\",\"sha256\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\"},{\"matches\":true,\"method\":\"compact_sorted_ascii\",\"sha256\":\"ec477ea41ecbd5cfdef5afc259595aab20674a7d933f41a389329ff05098b338\"},{\"matches\":false,\"method\":\"default_sorted_utf8\",\"sha256\":\"bcce3a27298e277b694ea2fb5848b912ad2816fd249c14a4617a0951b1d4dc4d\"},{\"matches\":false,\"method\":\"default_sorted_ascii\",\"sha256\":\"bcce3a27298e277b694ea2fb5848b912ad2816fd249c14a4617a0951b1d4dc4d\"},{\"matches\":false,\"method\":\"indent2_sorted_utf8\",\"sha256\":\"4ee2673c98107eb0bf81ebc4ef4e57b47670247bc90e0be2e4be5ed3d1348129\"}]\nSB041A_MANIFEST_HASH_CHECKS=[{\"matches\":false,\"method\":\"compact_sorted_utf8\",\"sha256\":\"7ac46712abbea24436b24af4fc962bdf5b8a348559a64c879c278fb17114c0a5\"},{\"matches\":false,\"method\":\"compact_sorted_ascii\",\"sha256\":\"7ac46712abbea24436b24af4fc962bdf5b8a348559a64c879c278fb17114c0a5\"},{\"matches\":false,\"method\":\"default_sorted_utf8\",\"sha256\":\"a68890d9717e29ac1db356e9e17f2fc10408327f8d8707caddbeb330e433d524\"},{\"matches\":false,\"method\":\"default_sorted_ascii\",\"sha256\":\"a68890d9717e29ac1db356e9e17f2fc10408327f8d8707caddbeb330e433d524\"},{\"matches\":false,\"method\":\"indent2_sorted_utf8\",\"sha256\":\"caaafb8613f463a4ed2915d1ccce0010e7945bb5058d67721a41fa3bb0d80188\"}]\nSB041A_COLLECTOR_CARDINALITY=1\nSB041A_RUNTIME_MANIFEST_SOURCE={\"classes\":[{\"name\":\"RuntimeDeploymentManifestV1\"}],\"functions\":[{\"args\":[\"value\",\"name\"],\"kwonly\":[],\"name\":\"_required\",\"source\":\"def _required(value: str, name: str) -> str:\\n if not isinstance(value, str) or not value:\\n raise DemonovError(f\\\"{name} is required\\\")\\n return value\"},{\"args\":[\"value\",\"name\"],\"kwonly\":[],\"name\":\"_sha256_hex\",\"source\":\"def _sha256_hex(value: str, name: str) -> str:\\n _required(value, name)\\n if _SHA256_RE.fullmatch(value) is None:\\n raise DemonovError(f\\\"{name} must be lowercase sha256 hex\\\")\\n return value\"},{\"args\":[\"value\",\"name\"],\"kwonly\":[],\"name\":\"_sha256_id\",\"source\":\"def _sha256_id(value: str, name: str) -> str:\\n _required(value, name)\\n if _SHA256_ID_RE.fullmatch(value) is None:\\n raise DemonovError(f\\\"{name} must be immutable sha256 identity\\\")\\n return value\"},{\"args\":[\"manifest\"],\"kwonly\":[\"expected_code_identity\",\"actual_image_id\",\"actual_package_identity\"],\"name\":\"verify_runtime_manifest\",\"source\":\"def verify_runtime_manifest(\\n manifest: RuntimeDeploymentManifestV1,\\n *,\\n expected_code_identity: str,\\n actual_image_id: str,\\n actual_package_identity: str,\\n) -> None:\\n if not isinstance(manifest, RuntimeDeploymentManifestV1):\\n raise DemonovError(\\\"runtime manifest required\\\")\\n manifest.__post_init__()\\n if manifest.code_identity != expected_code_identity:\\n raise DemonovError(\\\"runtime manifest code identity mismatch\\\")\\n if manifest.application_image_id != actual_image_id:\\n raise DemonovError(\\\"runtime manifest application image mismatch\\\")\\n if manifest.package_identity != actual_package_identity:\\n raise DemonovError(\\\"runtime manifest package identity mismatch\\\")\"}],\"lines\":123,\"rc\":0,\"sha256\":\"1064cfb74303fdc8e0bf50bae95b1e755556a5b1dfc28b2b062341becaba08f2\"}\nSB041A_LIVE_PROSPECTIVE_SOURCE={\"classes\":[{\"name\":\"ExperimentProvenance\"},{\"name\":\"LiveProspectiveStore\"}],\"functions\":[{\"args\":[\"value\"],\"kwonly\":[],\"name\":\"_hash\",\"source\":\"def _hash(value: object) -> str:\\n return hashlib.sha256(\\n json.dumps(value, sort_keys=True, separators=(\\\",\\\", \\\":\\\"), ensure_ascii=True).encode()\\n ).hexdigest()\"},{\"args\":[\"bar\"],\"kwonly\":[],\"name\":\"_bar_json\",\"source\":\"def _bar_json(bar) -> str:\\n return json.dumps({\\n \\\"bar_id\\\": bar.bar_id,\\n \\\"market_key\\\": bar.market_key,\\n \\\"open_at\\\": bar.open_at.isoformat(),\\n \\\"close_at\\\": bar.close_at.isoformat(),\\n \\\"known_at\\\": bar.known_at.isoformat(),\\n \\\"received_at\\\": bar.received_at.isoformat(),\\n \\\"open\\\": str(bar.open), \\\"high\\\": str(bar.high), \\\"low\\\": str(bar.low),\\n \\\"close\\\": str(bar.close), \\\"volume\\\": str(bar.volume),\\n \\\"boundary_policy_hash\\\": bar.boundary_policy_hash,\\n \\\"source_bar_ids\\\": list(bar.source_bar_ids),\\n }, sort_keys=True, separators=(\\\",\\\", \\\":\\\"))\"},{\"args\":[\"line\"],\"kwonly\":[],\"name\":\"_line_json\",\"source\":\"def _line_json(line: ResearchTrendLine | None) -> str:\\n if line is None:\\n return \\\"\\\"\\n return json.dumps({\\n \\\"line_id\\\": line.line_id, \\\"role\\\": line.role.value, \\\"version\\\": line.version,\\n \\\"first_at\\\": line.first_at.isoformat(), \\\"first_price\\\": str(line.first_price),\\n \\\"second_at\\\": line.second_at.isoformat(), \\\"second_price\\\": str(line.second_price),\\n \\\"frozen_at\\\": line.frozen_at.isoformat(), \\\"geometry_policy_id\\\": line.geometry_policy_id,\\n }, sort_keys=True, separators=(\\\",\\\", \\\":\\\"))\"},{\"args\":[\"raw\"],\"kwonly\":[],\"name\":\"_line_from_json\",\"source\":\"def _line_from_json(raw: str) -> ResearchTrendLine | None:\\n if not raw:\\n return None\\n x = json.loads(raw)\\n return ResearchTrendLine(\\n line_id=x[\\\"line_id\\\"], role=ResearchBarrierRole(x[\\\"role\\\"]), version=x[\\\"version\\\"],\\n first_at=datetime.fromisoformat(x[\\\"first_at\\\"]), first_price=Decimal(x[\\\"first_price\\\"]),\\n second_at=datetime.fromisoformat(x[\\\"second_at\\\"]), second_price=Decimal(x[\\\"second_price\\\"]),\\n frozen_at=datetime.fromisoformat(x[\\\"frozen_at\\\"]), geometry_policy_id=x[\\\"geometry_policy_id\\\"],\\n )\"},{\"args\":[\"states\"],\"kwonly\":[],\"name\":\"_states_json\",\"source\":\"def _states_json(states) -> str:\\n return json.dumps([{\\n \\\"state_id\\\": s.state_id, \\\"arm_id\\\": s.arm_id.value,\\n \\\"interaction_state\\\": s.interaction_state.value,\\n \\\"close_beyond_count\\\": s.close_beyond_count, \\\"last_sequence\\\": s.last_sequence,\\n } for s in states], sort_keys=True, separators=(\\\",\\\", \\\":\\\"))\"},{\"args\":[\"raw\"],\"kwonly\":[],\"name\":\"_states_from_json\",\"source\":\"def _states_from_json(raw: str):\\n from .prospective_policy import AcceptanceArmId\\n if not raw:\\n return ()\\n return tuple(ArmFSMState(\\n state_id=x[\\\"state_id\\\"], arm_id=AcceptanceArmId(x[\\\"arm_id\\\"]),\\n interaction_state=ProspectiveInteractionState(x[\\\"interaction_state\\\"]),\\n close_beyond_count=x[\\\"close_beyond_count\\\"], last_sequence=x[\\\"last_sequence\\\"],\\n ) for x in json.loads(raw))\"}],\"lines\":851,\"rc\":0,\"sha256\":\"f83f48dfeb4dc1382ebf3c77b7ec27deaeac6eec4a5dc097f90600963f0e4e98\"}\nSB041A_DECISION=DEPLOY_API_CONTRACT_READY\nSB041A_MUTATION_SCOPE=NONE_READ_ONLY\nSIGNALBOT041A_HOLDS=[]\nSIGNALBOT041A_DECISION=DEPLOY_API_CONTRACT_READY\nSIGNALBOT041A_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION\n"
}