diff --git a/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.json b/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.json new file mode 100644 index 00000000..cae7ad4c --- /dev/null +++ b/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "newfi-staging-edge-wan-ingress-fingerprint-readonly", + "started_at_utc": "2026-09-08T07:52:51Z", + "finished_at_utc": "2026-09-08T07:53:38Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "c48937b9e90fbb12e1163dd4fe9f9069aeadf0727df5f3dd9fa9e6463eafcf71", + "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": "1c2a8d51054b0e77c038cc7faf67b9051421f348c323a853d9a1c3dfe476d63c", + "sanitized_output_sha256": "44c61172b647a23279b3079ec7ed28adf5bf9c5aabe5f14df66dbbe60d7f1085", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "WAN_FORENSIC4_BEGIN=true\nCOMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4\nMODE=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\nPRIOR_FORENSIC3_GATE=PASS\nPRIOR_FORENSIC3_HISTORY_SHA256=9ea1a89282975837b1a5ceaf5a2dcc47227f57b74b18db2dcae0d4c0044f9810\nEDGE_IDENTITY={\"err\":\"\",\"hostname\":\"edge-vm\",\"rc\":0}\nEDGE_PRIMARY_LAN_ROUTE={\"err\":\"\",\"raw\":\"[{\\\"dst\\\":\\\"[PRIVATE_IP]\\\",\\\"dev\\\":\\\"eth0\\\",\\\"prefsrc\\\":\\\"[PRIVATE_IP]\\\",\\\"flags\\\":[],\\\"uid\\\":0,\\\"cache\\\":[]}]\",\"rc\":0,\"sources\":[\"[PRIVATE_IP]\"]}\nEDGE_EGRESS_TWO_PROBES={\"err\":\"\",\"rc\":0,\"valid_public_ipv4\":[\"85.121.4.192\",\"85.121.4.192\"],\"values\":[\"85.121.4.192\",\"85.121.4.192\"]}\nLOCAL_NPMPLUS_GIT_CERT={\"cert\":\"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\\nnotBefore=Aug 13 22:08:59 2026 GMT\\nnotAfter=Nov 11 22:08:58 2026 GMT\",\"err\":\"\",\"fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"rc\":0}\nDIRECT_PRIVATE_EDGE_GIT_PROBES=[{\"cert\":\"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\\nnotBefore=Aug 13 22:08:59 2026 GMT\\nnotAfter=Nov 11 22:08:58 2026 GMT\",\"curl\":{\"err\":\"\",\"http\":\"200\",\"rc\":0},\"err\":\"\",\"fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"ip\":\"[PRIVATE_IP]\",\"rc\":0}]\nEDGE_EGRESS_GIT_PROBES=[{\"cert\":\"\",\"curl\":{\"err\":\"curl: (28) Connection timed out after 18002 milliseconds\\n\",\"http\":\"000\",\"rc\":28},\"err\":\"Could not find certificate from \\n\",\"fingerprint\":null,\"ip\":\"85.121.4.192\",\"rc\":1}]\nOLD_PUBLIC_GIT_CERT={\"cert\":\"sha256 Fingerprint=EC:B6:9D:0F:A8:39:FE:D0:4D:C2:3E:E2:43:F9:F8:67:3C:BF:CD:0A:00:88:BF:D3:EF:7D:8B:94:33:14:D6:CB\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\\nnotBefore=Aug 17 02:03:29 2026 GMT\\nnotAfter=Nov 15 02:03:28 2026 GMT\",\"curl\":{\"err\":\"\",\"http\":\"200\",\"rc\":0},\"err\":\"\",\"fingerprint\":\"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB\",\"ip\":\"185.225.35.6\",\"rc\":0}\nWAN_INGRESS_FINGERPRINT_DECISION={\"egress_match_count\":0,\"egress_match_ips\":[],\"egress_two_probes_same\":true,\"local_fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"old_public_fingerprint\":\"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB\",\"old_public_matches_local\":false,\"private_match_count\":1,\"private_match_ips\":[\"[PRIVATE_IP]\"]}\nFINAL_DECISION=EDGE_EGRESS_NOT_YET_PROVEN_AS_NPMPLUS_PUBLIC_INGRESS\nWAN_FORENSIC4_END=true\n" +} diff --git a/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.txt b/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.txt new file mode 100644 index 00000000..7b5a8c80 --- /dev/null +++ b/runtime/history/NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4.txt @@ -0,0 +1,53 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=newfi-staging-edge-wan-ingress-fingerprint-readonly +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=c48937b9e90fbb12e1163dd4fe9f9069aeadf0727df5f3dd9fa9e6463eafcf71 +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=1c2a8d51054b0e77c038cc7faf67b9051421f348c323a853d9a1c3dfe476d63c +SANITIZED_OUTPUT_SHA256=44c61172b647a23279b3079ec7ed28adf5bf9c5aabe5f14df66dbbe60d7f1085 +OUTPUT_BEGIN +WAN_FORENSIC4_BEGIN=true +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4 +MODE=read-only +MUTATIONS_PERFORMED=NO +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +REFERENCE_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +PRIOR_FORENSIC3_GATE=PASS +PRIOR_FORENSIC3_HISTORY_SHA256=9ea1a89282975837b1a5ceaf5a2dcc47227f57b74b18db2dcae0d4c0044f9810 +EDGE_IDENTITY={"err":"","hostname":"edge-vm","rc":0} +EDGE_PRIMARY_LAN_ROUTE={"err":"","raw":"[{\"dst\":\"[PRIVATE_IP]\",\"dev\":\"eth0\",\"prefsrc\":\"[PRIVATE_IP]\",\"flags\":[],\"uid\":0,\"cache\":[]}]","rc":0,"sources":["[PRIVATE_IP]"]} +EDGE_EGRESS_TWO_PROBES={"err":"","rc":0,"valid_public_ipv4":["85.121.4.192","85.121.4.192"],"values":["85.121.4.192","85.121.4.192"]} +LOCAL_NPMPLUS_GIT_CERT={"cert":"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\nnotBefore=Aug 13 22:08:59 2026 GMT\nnotAfter=Nov 11 22:08:58 2026 GMT","err":"","fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","rc":0} +DIRECT_PRIVATE_EDGE_GIT_PROBES=[{"cert":"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\nnotBefore=Aug 13 22:08:59 2026 GMT\nnotAfter=Nov 11 22:08:58 2026 GMT","curl":{"err":"","http":"200","rc":0},"err":"","fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","ip":"[PRIVATE_IP]","rc":0}] +EDGE_EGRESS_GIT_PROBES=[{"cert":"","curl":{"err":"curl: (28) Connection timed out after 18002 milliseconds\n","http":"000","rc":28},"err":"Could not find certificate from \n","fingerprint":null,"ip":"85.121.4.192","rc":1}] +OLD_PUBLIC_GIT_CERT={"cert":"sha256 Fingerprint=EC:B6:9D:0F:A8:39:FE:D0:4D:C2:3E:E2:43:F9:F8:67:3C:BF:CD:0A:00:88:BF:D3:EF:7D:8B:94:33:14:D6:CB\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\nnotBefore=Aug 17 02:03:29 2026 GMT\nnotAfter=Nov 15 02:03:28 2026 GMT","curl":{"err":"","http":"200","rc":0},"err":"","fingerprint":"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB","ip":"185.225.35.6","rc":0} +WAN_INGRESS_FINGERPRINT_DECISION={"egress_match_count":0,"egress_match_ips":[],"egress_two_probes_same":true,"local_fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","old_public_fingerprint":"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB","old_public_matches_local":false,"private_match_count":1,"private_match_ips":["[PRIVATE_IP]"]} +FINAL_DECISION=EDGE_EGRESS_NOT_YET_PROVEN_AS_NPMPLUS_PUBLIC_INGRESS +WAN_FORENSIC4_END=true + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 2caf0726..cae7ad4c 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "SIGNALBOT-260908-SEAL-GENERATION-RCA-043GEN", + "command_id": "NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4", "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", + "component": "newfi-staging-edge-wan-ingress-fingerprint-readonly", + "started_at_utc": "2026-09-08T07:52:51Z", + "finished_at_utc": "2026-09-08T07:53:38Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "b8040335cd6ee0ee0382570ca5ecd189293d21953c5509bd1711312a80a2d622", + "command_sha256": "c48937b9e90fbb12e1163dd4fe9f9069aeadf0727df5f3dd9fa9e6463eafcf71", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c", - "sanitized_output_sha256": "099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c", + "raw_evidence_sha256": "1c2a8d51054b0e77c038cc7faf67b9051421f348c323a853d9a1c3dfe476d63c", + "sanitized_output_sha256": "44c61172b647a23279b3079ec7ed28adf5bf9c5aabe5f14df66dbbe60d7f1085", "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" + "output": "WAN_FORENSIC4_BEGIN=true\nCOMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4\nMODE=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\nPRIOR_FORENSIC3_GATE=PASS\nPRIOR_FORENSIC3_HISTORY_SHA256=9ea1a89282975837b1a5ceaf5a2dcc47227f57b74b18db2dcae0d4c0044f9810\nEDGE_IDENTITY={\"err\":\"\",\"hostname\":\"edge-vm\",\"rc\":0}\nEDGE_PRIMARY_LAN_ROUTE={\"err\":\"\",\"raw\":\"[{\\\"dst\\\":\\\"[PRIVATE_IP]\\\",\\\"dev\\\":\\\"eth0\\\",\\\"prefsrc\\\":\\\"[PRIVATE_IP]\\\",\\\"flags\\\":[],\\\"uid\\\":0,\\\"cache\\\":[]}]\",\"rc\":0,\"sources\":[\"[PRIVATE_IP]\"]}\nEDGE_EGRESS_TWO_PROBES={\"err\":\"\",\"rc\":0,\"valid_public_ipv4\":[\"85.121.4.192\",\"85.121.4.192\"],\"values\":[\"85.121.4.192\",\"85.121.4.192\"]}\nLOCAL_NPMPLUS_GIT_CERT={\"cert\":\"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\\nnotBefore=Aug 13 22:08:59 2026 GMT\\nnotAfter=Nov 11 22:08:58 2026 GMT\",\"err\":\"\",\"fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"rc\":0}\nDIRECT_PRIVATE_EDGE_GIT_PROBES=[{\"cert\":\"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\\nnotBefore=Aug 13 22:08:59 2026 GMT\\nnotAfter=Nov 11 22:08:58 2026 GMT\",\"curl\":{\"err\":\"\",\"http\":\"200\",\"rc\":0},\"err\":\"\",\"fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"ip\":\"[PRIVATE_IP]\",\"rc\":0}]\nEDGE_EGRESS_GIT_PROBES=[{\"cert\":\"\",\"curl\":{\"err\":\"curl: (28) Connection timed out after 18002 milliseconds\\n\",\"http\":\"000\",\"rc\":28},\"err\":\"Could not find certificate from \\n\",\"fingerprint\":null,\"ip\":\"85.121.4.192\",\"rc\":1}]\nOLD_PUBLIC_GIT_CERT={\"cert\":\"sha256 Fingerprint=EC:B6:9D:0F:A8:39:FE:D0:4D:C2:3E:E2:43:F9:F8:67:3C:BF:CD:0A:00:88:BF:D3:EF:7D:8B:94:33:14:D6:CB\\nsubject=CN=git.gram1.ru\\nissuer=C=US, O=Let's Encrypt, CN=YE1\\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\\nnotBefore=Aug 17 02:03:29 2026 GMT\\nnotAfter=Nov 15 02:03:28 2026 GMT\",\"curl\":{\"err\":\"\",\"http\":\"200\",\"rc\":0},\"err\":\"\",\"fingerprint\":\"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB\",\"ip\":\"185.225.35.6\",\"rc\":0}\nWAN_INGRESS_FINGERPRINT_DECISION={\"egress_match_count\":0,\"egress_match_ips\":[],\"egress_two_probes_same\":true,\"local_fingerprint\":\"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63\",\"old_public_fingerprint\":\"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB\",\"old_public_matches_local\":false,\"private_match_count\":1,\"private_match_ips\":[\"[PRIVATE_IP]\"]}\nFINAL_DECISION=EDGE_EGRESS_NOT_YET_PROVEN_AS_NPMPLUS_PUBLIC_INGRESS\nWAN_FORENSIC4_END=true\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 3a0fe75b..7b5a8c80 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=SIGNALBOT-260908-SEAL-GENERATION-RCA-043GEN +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4 STATUS=OK RC=0 HOST=pve01 MODE=read-only -COMPONENT=signalbot-cr0116-seal-generation-rca +COMPONENT=newfi-staging-edge-wan-ingress-fingerprint-readonly REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=b8040335cd6ee0ee0382570ca5ecd189293d21953c5509bd1711312a80a2d622 +COMMAND_SHA256=c48937b9e90fbb12e1163dd4fe9f9069aeadf0727df5f3dd9fa9e6463eafcf71 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,27 +24,30 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c -SANITIZED_OUTPUT_SHA256=099e5ef433eccdaae24a06982c949c13c323a1a84afd1ee9ba2bf094ffcfd10c +RAW_EVIDENCE_SHA256=1c2a8d51054b0e77c038cc7faf67b9051421f348c323a853d9a1c3dfe476d63c +SANITIZED_OUTPUT_SHA256=44c61172b647a23279b3079ec7ed28adf5bf9c5aabe5f14df66dbbe60d7f1085 OUTPUT_BEGIN +WAN_FORENSIC4_BEGIN=true +COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-WAN-FORENSIC4 +MODE=read-only +MUTATIONS_PERFORMED=NO ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 REFERENCE_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -SB043G_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"}} -SB043G_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"}]} -SB043G_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"}]} -SB043G_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"}] -SB043G_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"} -SB043G_PACKAGE_CANDIDATE_MATCHES=[] -SB043G_DERIVED_NEW_PACKAGE_CANDIDATES=[] -SB043G_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"} -SB043G_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"} -SB043G_HOLDS=[] -SB043G_DECISION=SEAL_GENERATION_EVIDENCE_READY -SB043G_MUTATION_SCOPE=NONE_READ_ONLY -SIGNALBOT043G_HOLDS=[] -SIGNALBOT043G_DECISION=SEAL_GENERATION_EVIDENCE_READY -SIGNALBOT043G_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION +PRIOR_FORENSIC3_GATE=PASS +PRIOR_FORENSIC3_HISTORY_SHA256=9ea1a89282975837b1a5ceaf5a2dcc47227f57b74b18db2dcae0d4c0044f9810 +EDGE_IDENTITY={"err":"","hostname":"edge-vm","rc":0} +EDGE_PRIMARY_LAN_ROUTE={"err":"","raw":"[{\"dst\":\"[PRIVATE_IP]\",\"dev\":\"eth0\",\"prefsrc\":\"[PRIVATE_IP]\",\"flags\":[],\"uid\":0,\"cache\":[]}]","rc":0,"sources":["[PRIVATE_IP]"]} +EDGE_EGRESS_TWO_PROBES={"err":"","rc":0,"valid_public_ipv4":["85.121.4.192","85.121.4.192"],"values":["85.121.4.192","85.121.4.192"]} +LOCAL_NPMPLUS_GIT_CERT={"cert":"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\nnotBefore=Aug 13 22:08:59 2026 GMT\nnotAfter=Nov 11 22:08:58 2026 GMT","err":"","fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","rc":0} +DIRECT_PRIVATE_EDGE_GIT_PROBES=[{"cert":"sha256 Fingerprint=70:7E:D6:56:03:3C:03:C4:B4:2F:DE:D8:3F:97:00:C1:0C:EF:FD:2D:2E:2D:98:A7:56:C8:B1:9C:DF:1D:AB:63\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=05499CF6D49C49CDFC8DBF28C4B9F9FBC55A\nnotBefore=Aug 13 22:08:59 2026 GMT\nnotAfter=Nov 11 22:08:58 2026 GMT","curl":{"err":"","http":"200","rc":0},"err":"","fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","ip":"[PRIVATE_IP]","rc":0}] +EDGE_EGRESS_GIT_PROBES=[{"cert":"","curl":{"err":"curl: (28) Connection timed out after 18002 milliseconds\n","http":"000","rc":28},"err":"Could not find certificate from \n","fingerprint":null,"ip":"85.121.4.192","rc":1}] +OLD_PUBLIC_GIT_CERT={"cert":"sha256 Fingerprint=EC:B6:9D:0F:A8:39:FE:D0:4D:C2:3E:E2:43:F9:F8:67:3C:BF:CD:0A:00:88:BF:D3:EF:7D:8B:94:33:14:D6:CB\nsubject=CN=git.gram1.ru\nissuer=C=US, O=Let's Encrypt, CN=YE1\nserial=0668B385C8D6C5BBB0435761F84FADD0DB23\nnotBefore=Aug 17 02:03:29 2026 GMT\nnotAfter=Nov 15 02:03:28 2026 GMT","curl":{"err":"","http":"200","rc":0},"err":"","fingerprint":"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB","ip":"185.225.35.6","rc":0} +WAN_INGRESS_FINGERPRINT_DECISION={"egress_match_count":0,"egress_match_ips":[],"egress_two_probes_same":true,"local_fingerprint":"707ED656033C03C4B42FDED83F9700C10CEFFD2D2E2D98A756C8B19CDF1DAB63","old_public_fingerprint":"ECB69D0FA839FED04DC23EE243F9F8673CBFCD0A0088BFD3EF7D8B943314D6CB","old_public_matches_local":false,"private_match_count":1,"private_match_ips":["[PRIVATE_IP]"]} +FINAL_DECISION=EDGE_EGRESS_NOT_YET_PROVEN_AS_NPMPLUS_PUBLIC_INGRESS +WAN_FORENSIC4_END=true OUTPUT_END CHAT_OUTPUT_END