1
0
Files
homelab-public-context/runtime/latest.json
T
2026-09-08 07:40:40 +00:00

39 lines
28 KiB
JSON

{
"schema_version": 1,
"channel": "homelab-runtime",
"command_id": "SIGNALBOT-260908-SEAL-GENERATION-RCA-043GEN",
"status": "OK",
"rc": 0,
"host": "pve01",
"mode": "read-only",
"component": "signalbot-cr0116-seal-generation-rca",
"started_at_utc": "2026-09-08T07:40:38Z",
"finished_at_utc": "2026-09-08T07:40:40Z",
"reference_register_checked": true,
"reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66",
"error_register_checked": true,
"error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0",
"command_sha256": "b8040335cd6ee0ee0382570ca5ecd189293d21953c5509bd1711312a80a2d622",
"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": "099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c",
"sanitized_output_sha256": "099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c",
"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\nSB043G_PRESTATE={\"active_env\":{\"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\"},\"new_image_id\":\"sha256:341f71a906c91d3fa9c1d50bd89df2a849dfb0b168bb4551efb444bf61c4ab99\",\"services\":[{\"container_id\":\"a546a70c3e8c263d9b590cd78ee206bcda0cfcdb6662327e8415ca0e29ad1501\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":14,\"running\":true,\"service\":\"collector\",\"started_at\":\"2026-09-08T07:38:09.79483772Z\"},{\"container_id\":\"d8023f4cbf91f9382e39eec0436c9cebc7665535b42b950e95408c03ff9bf30d\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"relay\",\"started_at\":\"2026-09-06T18:48:20.603414848Z\"},{\"container_id\":\"1feeca2d9428cd5a277c026bef34534db307657dcdcd63aff98ea66e44f8b9c5\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"shadow\",\"started_at\":\"2026-09-06T18:48:20.768190553Z\"},{\"container_id\":\"889be41d2cee9d327811da78388f834ba6eafe4c0eeae456867ed0df76832d01\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"image_id\":\"sha256:403c4266282a56cb210bed95cd58295692296502913e7440e2133d7b5664c736\",\"restart_count\":0,\"running\":true,\"service\":\"worker\",\"started_at\":\"2026-09-06T18:48:20.586788319Z\"}],\"stage_result\":{\"active_env_unchanged\":true,\"build_context\":\"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5\",\"collector_source_sha256\":\"193dd0c7f9890fdb4026c24dbc5add825f1641d92097e881806705ca452812d5\",\"copy_source\":\"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5/demonov_forward_map\",\"decision\":\"DEPLOY_STAGE_READY\",\"dockerfile\":\"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5/Dockerfile\",\"helper_candidates\":{\"demonov_forward_map.live_prospective\":[{\"name\":\"_hash\",\"pure_candidate\":true,\"signature\":\"(value: 'object') -> 'str'\"}],\"demonov_forward_map.runtime_integrity\":[{\"name\":\"canonical_hash\",\"pure_candidate\":true,\"signature\":\"(payload: 'Any') -> 'str'\"},{\"name\":\"verify_experiment_seal_receipt\",\"pure_candidate\":true,\"signature\":\"(*, bundle: 'FinalProspectiveSealBundle', receipt: 'ExperimentSealReceipt', collection_start_at: 'datetime', receipt_verifier: 'Callable[[ExperimentSealReceipt], bool]') -> 'None'\"},{\"name\":\"required_retained_hashes\",\"pure_candidate\":true,\"signature\":\"(*, runtime_registry: 'RuntimeRegistry', model_registry: 'FinalModelRegistry', state_snapshots: 'Sequence[StateSnapshotManifest]' = (), predictor_runtime: 'PredictorRuntimeManifest | None' = None) -> 'Mapping[str, RetainedArtifactKind]'\"}],\"demonov_forward_map.runtime_manifest\":[{\"name\":\"canonical_hash\",\"pure_candidate\":true,\"signature\":\"(payload: 'Any') -> 'str'\"},{\"name\":\"verify_runtime_manifest\",\"pure_candidate\":true,\"signature\":\"(manifest: 'RuntimeDeploymentManifestV1', *, expected_code_identity: 'str', actual_image_id: 'str', actual_package_identity: 'str') -> 'None'\"}]},\"new_image\":\"8020-demonov-shadow:76e1f58baa544a0e208bba317f0150e5b6d74dbd\",\"new_image_id\":\"sha256:341f71a906c91d3fa9c1d50bd89df2a849dfb0b168bb4551efb444bf61c4ab99\",\"policy\":{\"close_timeout\":5,\"open_timeout\":10,\"ping_interval\":20,\"ping_timeout\":60},\"runtime_activated\":false,\"service_identity_unchanged\":true,\"stage_path\":\"/opt/stacks/8020-demonov-shadow/.deploy/SIGNALBOT-260908-DEPLOY-STAGE-042FIX5\",\"websockets_version\":\"15.0.1\"}}\nSB043G_MANIFEST_CLASS_CONTRACT={\"class\":\"RuntimeDeploymentManifestV1\",\"decorators\":[\"dataclass(frozen=True)\"],\"fields\":[\"runtime_manifest_id\",\"code_identity\",\"package_identity\",\"application_image_id\",\"base_image_digest\",\"compose_hash\",\"finality_policy_id\"],\"identity_methods\":[{\"args\":[\"self\"],\"decorators\":[\"property\"],\"kwonly\":[],\"name\":\"content_hash\",\"source\":\"def content_hash(self) -> str:\\n return canonical_hash(\\n {\\n \\\"schema\\\": \\\"CR0116_RUNTIME_DEPLOYMENT_MANIFEST_V1\\\",\\n \\\"code_identity\\\": self.code_identity,\\n \\\"package_identity\\\": self.package_identity,\\n \\\"application_image_id\\\": self.application_image_id,\\n \\\"base_image_digest\\\": self.base_image_digest,\\n \\\"compose_hash\\\": self.compose_hash,\\n \\\"finality_policy_id\\\": self.finality_policy_id,\\n }\\n )\",\"source_sha256\":\"5ca3618001bfac422d4ff365e429f2f057196f3b78d67cd666458d4db2011e4b\"},{\"args\":[\"self\"],\"decorators\":[],\"kwonly\":[],\"name\":\"__post_init__\",\"source\":\"def __post_init__(self) -> None:\\n _sha256_hex(self.runtime_manifest_id, \\\"runtime manifest id\\\")\\n _required(self.code_identity, \\\"code identity\\\")\\n if _GIT_ID_RE.fullmatch(self.code_identity) is None:\\n raise DemonovError(\\n \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\\n _sha256_hex(self.compose_hash, \\\"compose hash\\\")\\n _required(self.finality_policy_id, \\\"finality policy id\\\")\\n if self.runtime_manifest_id != self.content_hash:\\n raise DemonovError(\\n \\\"runtime manifest id must be content-addressed\\\"\\n )\",\"source_sha256\":\"bb8a8ccd8a52d6d3ac094e6e8abecdc4aeb6edaf8094d2c6477a0cd0d26fa868\"},{\"args\":[\"cls\"],\"decorators\":[\"classmethod\"],\"kwonly\":[\"code_identity\",\"package_identity\",\"application_image_id\",\"base_image_digest\",\"compose_hash\",\"finality_policy_id\"],\"name\":\"build\",\"source\":\"def build(\\n cls,\\n *,\\n code_identity: str,\\n package_identity: str,\\n application_image_id: str,\\n base_image_digest: str,\\n compose_hash: str,\\n finality_policy_id: str,\\n ) -> \\\"RuntimeDeploymentManifestV1\\\":\\n payload = {\\n \\\"code_identity\\\": code_identity,\\n \\\"package_identity\\\": package_identity,\\n \\\"application_image_id\\\": application_image_id,\\n \\\"base_image_digest\\\": base_image_digest,\\n \\\"compose_hash\\\": compose_hash,\\n \\\"finality_policy_id\\\": finality_policy_id,\\n }\\n runtime_manifest_id = canonical_hash(\\n {\\n \\\"schema\\\": \\\"CR0116_RUNTIME_DEPLOYMENT_MANIFEST_V1\\\",\\n **payload,\\n }\\n )\\n return cls(\\n runtime_manifest_id=runtime_manifest_id,\\n **payload,\\n )\",\"source_sha256\":\"1b6e558b28eb2a46959d4761d391e7e755188743919bddb6f19365278d731655\"}]}\nSB043G_EXPERIMENT_CLASS_CONTRACT={\"class\":\"ExperimentProvenance\",\"decorators\":[\"dataclass(frozen=True)\"],\"fields\":[\"experiment_id\",\"collection_start_at\",\"code_identity\",\"policy_registry_id\",\"market_bundle_id\",\"geometry_policy_id\",\"demonov_branch_policy_id\",\"notification_policy_id\",\"outcome_policy_id\",\"experiment_version\",\"finality_policy_id\",\"runtime_manifest_id\"],\"identity_methods\":[{\"args\":[\"self\"],\"decorators\":[],\"kwonly\":[],\"name\":\"_base_hash_payload\",\"source\":\"def _base_hash_payload(self) -> dict:\\n return {\\n \\\"collection_start_at\\\": self.collection_start_at.isoformat(),\\n \\\"code_identity\\\": self.code_identity,\\n \\\"policy_registry_id\\\": self.policy_registry_id,\\n \\\"market_bundle_id\\\": self.market_bundle_id,\\n \\\"geometry_policy_id\\\": self.geometry_policy_id,\\n \\\"demonov_branch_policy_id\\\": self.demonov_branch_policy_id,\\n \\\"notification_policy_id\\\": self.notification_policy_id,\\n \\\"outcome_policy_id\\\": self.outcome_policy_id,\\n }\",\"source_sha256\":\"5c0856d58b2198065cead5610b07495683872df3c1102c76275626ef39077bbe\"},{\"args\":[\"self\"],\"decorators\":[\"property\"],\"kwonly\":[],\"name\":\"content_hash\",\"source\":\"def content_hash(self) -> str:\\n payload = self._base_hash_payload()\\n if self.experiment_version == \\\"LIVE_PROSPECTIVE_V1\\\":\\n return _hash(payload)\\n if self.experiment_version == \\\"LIVE_PROSPECTIVE_V2\\\":\\n payload.update({\\n \\\"experiment_version\\\": self.experiment_version,\\n \\\"finality_policy_id\\\": self.finality_policy_id,\\n \\\"runtime_manifest_id\\\": self.runtime_manifest_id,\\n })\\n return _hash(payload)\\n raise DemonovError(\\\"experiment provenance version invalid\\\")\",\"source_sha256\":\"6c1f33004948b1a62c9ae567c7556ab6d3ccb414d8fdd0ea641ad24e2577914a\"},{\"args\":[\"self\"],\"decorators\":[],\"kwonly\":[],\"name\":\"__post_init__\",\"source\":\"def __post_init__(self) -> None:\\n if (\\n self.collection_start_at.tzinfo is None\\n or self.collection_start_at.utcoffset() is None\\n ):\\n raise DemonovError(\\n \\\"experiment collection start must be timezone-aware\\\"\\n )\\n if self.experiment_version == \\\"LIVE_PROSPECTIVE_V1\\\":\\n if self.finality_policy_id or self.runtime_manifest_id:\\n raise DemonovError(\\n \\\"V1 experiment provenance cannot bind V2 finality/runtime identity\\\"\\n )\\n elif self.experiment_version == \\\"LIVE_PROSPECTIVE_V2\\\":\\n if not isinstance(self.finality_policy_id, str) or not self.finality_policy_id:\\n raise DemonovError(\\n \\\"V2 experiment finality policy id is required\\\"\\n )\\n if (\\n not isinstance(self.runtime_manifest_id, str)\\n or len(self.runtime_manifest_id) != 64\\n or any(\\n c not in \\\"0123456789abcdef\\\"\\n for c in self.runtime_manifest_id\\n )\\n ):\\n raise DemonovError(\\n \\\"V2 experiment runtime manifest id must be lowercase sha256 hex\\\"\\n )\\n else:\\n raise DemonovError(\\\"experiment provenance version invalid\\\")\\n if self.experiment_id != self.content_hash:\\n raise DemonovError(\\n \\\"experiment provenance id must be content-addressed\\\"\\n )\",\"source_sha256\":\"0451d874842317d2aaad4a3f285d8e8c9531610fe507c7a6c51cb7541410a8cb\"},{\"args\":[\"cls\"],\"decorators\":[\"classmethod\"],\"kwonly\":[],\"name\":\"build\",\"source\":\"def build(cls, **kwargs) -> \\\"ExperimentProvenance\\\":\\n payload = dict(kwargs)\\n version = payload.get(\\n \\\"experiment_version\\\",\\n \\\"LIVE_PROSPECTIVE_V1\\\",\\n )\\n payload[\\\"experiment_version\\\"] = version\\n payload.setdefault(\\\"finality_policy_id\\\", \\\"\\\")\\n payload.setdefault(\\\"runtime_manifest_id\\\", \\\"\\\")\\n base = {\\n \\\"collection_start_at\\\": payload[\\\"collection_start_at\\\"].isoformat(),\\n \\\"code_identity\\\": payload[\\\"code_identity\\\"],\\n \\\"policy_registry_id\\\": payload[\\\"policy_registry_id\\\"],\\n \\\"market_bundle_id\\\": payload[\\\"market_bundle_id\\\"],\\n \\\"geometry_policy_id\\\": payload[\\\"geometry_policy_id\\\"],\\n \\\"demonov_branch_policy_id\\\": payload[\\\"demonov_branch_policy_id\\\"],\\n \\\"notification_policy_id\\\": payload[\\\"notification_policy_id\\\"],\\n \\\"outcome_policy_id\\\": payload[\\\"outcome_policy_id\\\"],\\n }\\n if version == \\\"LIVE_PROSPECTIVE_V1\\\":\\n eid = _hash(base)\\n elif version == \\\"LIVE_PROSPECTIVE_V2\\\":\\n eid = _hash({\\n **base,\\n \\\"experiment_version\\\": version,\\n \\\"finality_policy_id\\\": payload[\\\"finality_policy_id\\\"],\\n \\\"runtime_manifest_id\\\": payload[\\\"runtime_manifest_id\\\"],\\n })\\n else:\\n raise DemonovError(\\\"experiment provenance version invalid\\\")\\n return cls(experiment_id=eid, **payload)\",\"source_sha256\":\"baff34f1b0f70ebba9ab9f354e9e91523e3cfa85fcd4ec747c1d7d62d37642c6\"},{\"args\":[\"cls\",\"data\"],\"decorators\":[\"classmethod\"],\"kwonly\":[],\"name\":\"from_json\",\"source\":\"def from_json(cls, data: dict) -> \\\"ExperimentProvenance\\\":\\n payload = dict(data)\\n payload[\\\"collection_start_at\\\"] = datetime.fromisoformat(\\n payload[\\\"collection_start_at\\\"]\\n )\\n payload.setdefault(\\n \\\"experiment_version\\\",\\n \\\"LIVE_PROSPECTIVE_V1\\\",\\n )\\n payload.setdefault(\\\"finality_policy_id\\\", \\\"\\\")\\n payload.setdefault(\\\"runtime_manifest_id\\\", \\\"\\\")\\n return cls(**payload)\",\"source_sha256\":\"4b526e7094fb03b02d5e63439627dc0340040cebc9b77f557b107e475e9c4f9f\"}]}\nSB043G_PACKAGE_REFERENCES=[{\"lineno\":29,\"name\":\"PackageCodeIdentityV1844\",\"node\":\"ClassDef\",\"path\":\"code_identity.py\",\"source\":\"class PackageCodeIdentityV1844:\\n package_name: str\\n modules: Tuple[ModuleCodeIdentityV1844, ...]\\n\\n @property\\n def package_manifest_id(self) -> str:\\n return canonical_hash({\\n \\\"package_name\\\": self.package_name,\\n \\\"modules\\\": tuple((m.relative_path, m.semantic_ast_hash, m.top_level_bindings) for m in self.modules),\\n })\",\"source_sha256\":\"d4faf873bec896466fdfcd7514cd453a8646994d5f998aa3bc0b84716c3118f5\"},{\"lineno\":80,\"name\":\"package_code_identity\",\"node\":\"FunctionDef\",\"path\":\"code_identity.py\",\"source\":\"def package_code_identity(package_dir: str | Path) -> PackageCodeIdentityV1844:\\n root = Path(package_dir)\\n modules = tuple(module_code_identity(p, root=root) for p in sorted(root.rglob('*.py')))\\n if not modules:\\n raise DemonovError('package contains no Python modules')\\n return PackageCodeIdentityV1844(root.name, modules)\",\"source_sha256\":\"a45a4817fabf86fb8f47df513d780c6dfe1d3cc159fb428a36a5180f2020a607\"},{\"lineno\":34,\"name\":\"package_manifest_id\",\"node\":\"FunctionDef\",\"path\":\"code_identity.py\",\"source\":\"def package_manifest_id(self) -> str:\\n return canonical_hash({\\n \\\"package_name\\\": self.package_name,\\n \\\"modules\\\": tuple((m.relative_path, m.semantic_ast_hash, m.top_level_bindings) for m in self.modules),\\n })\",\"source_sha256\":\"7d15a9e82d5388664fa96a527ed60716f32dadb1561284ae2f7d1024ed5edb2b\"},{\"lineno\":40,\"name\":null,\"node\":\"AnnAssign\",\"path\":\"runtime_manifest.py\",\"source\":\" runtime_manifest_id: str\\n code_identity: str\\n package_identity: str\\n application_image_id: str\\n base_image_digest: str\",\"source_sha256\":\"e8973e35539c5cdc865235a94aa7806032fec4558a81676bd1b6b6df120e0926\"},{\"lineno\":122,\"name\":null,\"node\":\"If\",\"path\":\"runtime_manifest.py\",\"source\":\" 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\\\")\",\"source_sha256\":\"4136a5ccb7d998a38e77368dc0c3cd3dce49127799dc62951f9584f7de351faa\"},{\"lineno\":40,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" runtime_manifest_id: str\\n code_identity: str\\n package_identity: str\\n application_image_id: str\\n base_image_digest: str\",\"source_sha256\":\"e8973e35539c5cdc865235a94aa7806032fec4558a81676bd1b6b6df120e0926\"},{\"lineno\":67,\"name\":null,\"node\":\"Expr\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\",\"source_sha256\":\"eb7af820b99d09b06910fe507ce82dd3439fe2d1a325429a7c7baa3643513897\"},{\"lineno\":113,\"name\":null,\"node\":\"arg\",\"path\":\"runtime_manifest.py\",\"source\":\" expected_code_identity: str,\\n actual_image_id: str,\\n actual_package_identity: str,\\n) -> None:\\n if not isinstance(manifest, RuntimeDeploymentManifestV1):\",\"source_sha256\":\"9ca161961de23dfb6e30851f61395e6edfa3f623e6b40f9a46812eb4fcd7311d\"},{\"lineno\":122,\"name\":null,\"node\":\"Compare\",\"path\":\"runtime_manifest.py\",\"source\":\" 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\\\")\",\"source_sha256\":\"4136a5ccb7d998a38e77368dc0c3cd3dce49127799dc62951f9584f7de351faa\"},{\"lineno\":67,\"name\":null,\"node\":\"Call\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\",\"source_sha256\":\"eb7af820b99d09b06910fe507ce82dd3439fe2d1a325429a7c7baa3643513897\"},{\"lineno\":82,\"name\":null,\"node\":\"arg\",\"path\":\"runtime_manifest.py\",\"source\":\" *,\\n code_identity: str,\\n package_identity: str,\\n application_image_id: str,\\n base_image_digest: str,\",\"source_sha256\":\"3318eac6352275bf21d2ce04604537ac7aa59a61c2ce6ebbc588a03acbfec5e6\"},{\"lineno\":113,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" expected_code_identity: str,\\n actual_image_id: str,\\n actual_package_identity: str,\\n) -> None:\\n if not isinstance(manifest, RuntimeDeploymentManifestV1):\",\"source_sha256\":\"9ca161961de23dfb6e30851f61395e6edfa3f623e6b40f9a46812eb4fcd7311d\"},{\"lineno\":122,\"name\":null,\"node\":\"Attribute\",\"path\":\"runtime_manifest.py\",\"source\":\" 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\\\")\",\"source_sha256\":\"4136a5ccb7d998a38e77368dc0c3cd3dce49127799dc62951f9584f7de351faa\"},{\"lineno\":122,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" 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\\\")\",\"source_sha256\":\"4136a5ccb7d998a38e77368dc0c3cd3dce49127799dc62951f9584f7de351faa\"},{\"lineno\":67,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\",\"source_sha256\":\"eb7af820b99d09b06910fe507ce82dd3439fe2d1a325429a7c7baa3643513897\"},{\"lineno\":67,\"name\":null,\"node\":\"Attribute\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\",\"source_sha256\":\"eb7af820b99d09b06910fe507ce82dd3439fe2d1a325429a7c7baa3643513897\"},{\"lineno\":67,\"name\":null,\"node\":\"Constant\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"code identity must be lowercase 40-64 hex\\\"\\n )\\n _sha256_hex(self.package_identity, \\\"package identity\\\")\\n _sha256_id(self.application_image_id, \\\"application image id\\\")\\n _sha256_id(self.base_image_digest, \\\"base image digest\\\")\",\"source_sha256\":\"eb7af820b99d09b06910fe507ce82dd3439fe2d1a325429a7c7baa3643513897\"},{\"lineno\":82,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" *,\\n code_identity: str,\\n package_identity: str,\\n application_image_id: str,\\n base_image_digest: str,\",\"source_sha256\":\"3318eac6352275bf21d2ce04604537ac7aa59a61c2ce6ebbc588a03acbfec5e6\"},{\"lineno\":90,\"name\":null,\"node\":\"Constant\",\"path\":\"runtime_manifest.py\",\"source\":\" payload = {\\n \\\"code_identity\\\": code_identity,\\n \\\"package_identity\\\": package_identity,\\n \\\"application_image_id\\\": application_image_id,\\n \\\"base_image_digest\\\": base_image_digest,\",\"source_sha256\":\"3a24759c9d3fea5a1002cabae3ef4b398ccbafde61c4afea25ca3a997b324157\"},{\"lineno\":90,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" payload = {\\n \\\"code_identity\\\": code_identity,\\n \\\"package_identity\\\": package_identity,\\n \\\"application_image_id\\\": application_image_id,\\n \\\"base_image_digest\\\": base_image_digest,\",\"source_sha256\":\"3a24759c9d3fea5a1002cabae3ef4b398ccbafde61c4afea25ca3a997b324157\"},{\"lineno\":52,\"name\":null,\"node\":\"Constant\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"schema\\\": \\\"CR0116_RUNTIME_DEPLOYMENT_MANIFEST_V1\\\",\\n \\\"code_identity\\\": self.code_identity,\\n \\\"package_identity\\\": self.package_identity,\\n \\\"application_image_id\\\": self.application_image_id,\\n \\\"base_image_digest\\\": self.base_image_digest,\",\"source_sha256\":\"328fe038817500e32b4271d965c5ac98a2c391baf0b753e2b1709022c6fbcc61\"},{\"lineno\":52,\"name\":null,\"node\":\"Attribute\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"schema\\\": \\\"CR0116_RUNTIME_DEPLOYMENT_MANIFEST_V1\\\",\\n \\\"code_identity\\\": self.code_identity,\\n \\\"package_identity\\\": self.package_identity,\\n \\\"application_image_id\\\": self.application_image_id,\\n \\\"base_image_digest\\\": self.base_image_digest,\",\"source_sha256\":\"328fe038817500e32b4271d965c5ac98a2c391baf0b753e2b1709022c6fbcc61\"},{\"lineno\":52,\"name\":null,\"node\":\"Name\",\"path\":\"runtime_manifest.py\",\"source\":\" \\\"schema\\\": \\\"CR0116_RUNTIME_DEPLOYMENT_MANIFEST_V1\\\",\\n \\\"code_identity\\\": self.code_identity,\\n \\\"package_identity\\\": self.package_identity,\\n \\\"application_image_id\\\": self.application_image_id,\\n \\\"base_image_digest\\\": self.base_image_digest,\",\"source_sha256\":\"328fe038817500e32b4271d965c5ac98a2c391baf0b753e2b1709022c6fbcc61\"}]\nSB043G_OLD_PACKAGE_DIRECT={\"compressed_sha256\":\"389e7aabca8887ee3b48b6ff0b4affe1163216005a4888013d9ccc82ea360e32\",\"new_dir_file_count\":57,\"old_dir_file_count\":57,\"old_package_identity\":\"637acba19fb29c98408a8031dc9265a31dc36551c666fcf0b287e8af83d2b893\",\"tar_exists\":true,\"tar_sha256\":\"431ddf9e8938d5e583553f05f9e3d019aff0b439c83b0b23c81808073b7d61a8\"}\nSB043G_PACKAGE_CANDIDATE_MATCHES=[]\nSB043G_DERIVED_NEW_PACKAGE_CANDIDATES=[]\nSB043G_OLD_MANIFEST_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\"}\nSB043G_OLD_EXPERIMENT_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\"}\nSB043G_HOLDS=[]\nSB043G_DECISION=SEAL_GENERATION_EVIDENCE_READY\nSB043G_MUTATION_SCOPE=NONE_READ_ONLY\nSIGNALBOT043G_HOLDS=[]\nSIGNALBOT043G_DECISION=SEAL_GENERATION_EVIDENCE_READY\nSIGNALBOT043G_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION\n"
}