From 11adf38aa47ea370ec5eb2731c7647d383916713 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Tue, 8 Sep 2026 05:42:17 +0000 Subject: [PATCH] runtime: publish SIGNALBOT-260908-CONNECT-POLICY-RCA-038 --- ...GNALBOT-260908-CONNECT-POLICY-RCA-038.json | 38 +++++++++++++ ...IGNALBOT-260908-CONNECT-POLICY-RCA-038.txt | 50 +++++++++++++++++ runtime/latest.json | 28 +++++----- runtime/latest.txt | 54 +++++++++---------- 4 files changed, 128 insertions(+), 42 deletions(-) create mode 100644 runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.json create mode 100644 runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.txt diff --git a/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.json b/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.json new file mode 100644 index 00000000..f5e644b6 --- /dev/null +++ b/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "SIGNALBOT-260908-CONNECT-POLICY-RCA-038", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "signalbot-cr0116-connect-policy-rca", + "started_at_utc": "2026-09-08T05:42:15Z", + "finished_at_utc": "2026-09-08T05:42:16Z", + "reference_register_checked": true, + "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", + "error_register_checked": true, + "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", + "command_sha256": "07ce1cf96c685ff689f8a9a2d34f1dc1b9876f40b2813255123ec0e1a286ab96", + "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": "42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969", + "sanitized_output_sha256": "42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969", + "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\nSB038_COLLECTOR={\"id\":\"a546a70c3e8c\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"name\":\"demonov-shadow-8020-collector-1\",\"ok\":true,\"pid\":210213,\"restart_count\":13,\"running\":true,\"started_at\":\"2026-09-08T05:01:08.70385245Z\",\"status\":\"running\"}\nSB038_RECONNECT_STATE={\"activity_count\":181306,\"fail_closed_reason\":\"source reconnect detected\",\"gap_detected\":false,\"last_reconnect_at\":\"2026-09-08T05:01:09.298101+00:00\",\"max_event_seq\":181306,\"max_received_at\":\"2026-09-08T05:42:13.860438+00:00\",\"post_finality_revision\":false,\"prospective_fail_closed_reason\":\"\",\"prospective_gap_detected\":false,\"prospective_reconnect_detected\":false,\"quick_check\":\"ok\",\"reconnect_count\":10,\"reconnect_detected\":true}\nSB038_SOURCE_ID={\"lines\":1246,\"path\":\"/app/demonov_forward_map/bitfinex_trade_collector.py\",\"sha256\":\"d21cf0c3a0d4fcaf9210a57da04fd560dba4952ac1dd5a085abcc4e76ccf2eb0\",\"websockets_version\":\"15.0.1\"}\nSB038_CONNECT_CALLS=[{\"args\":[\"str(self.path)\"],\"end_lineno\":128,\"keywords\":{\"isolation_level\":\"None\",\"timeout\":\"5\"},\"lineno\":124},{\"args\":[\"BITFINEX_WS_URL\"],\"end_lineno\":1157,\"keywords\":{\"close_timeout\":\"5\",\"open_timeout\":\"10\"},\"lineno\":1153}]\nSB038_TRANSPORT_KNOBS=[{\"line\":1155,\"text\":\"open_timeout=10,\"},{\"line\":1156,\"text\":\"close_timeout=5,\"}]\nSB038_WINDOW_00={\"around\":124,\"lines\":[{\"line\":120,\"text\":\"collection_start_at,\"},{\"line\":121,\"text\":\"\\\"collection_start_at\\\",\"},{\"line\":122,\"text\":\")\"},{\"line\":123,\"text\":\"self.path.parent.mkdir(parents=True, exist_ok=True)\"},{\"line\":124,\"text\":\"self._db = sqlite3.connect(\"},{\"line\":125,\"text\":\"str(self.path),\"},{\"line\":126,\"text\":\"timeout=5,\"},{\"line\":127,\"text\":\"isolation_level=None,\"},{\"line\":128,\"text\":\")\"},{\"line\":129,\"text\":\"self._db.row_factory = sqlite3.Row\"}]}\nSB038_WINDOW_01={\"around\":1135,\"lines\":[{\"line\":1131,\"text\":\"\"},{\"line\":1132,\"text\":\"\"},{\"line\":1133,\"text\":\"def main() -> int:\"},{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"}]}\nSB038_WINDOW_02={\"around\":1136,\"lines\":[{\"line\":1132,\"text\":\"\"},{\"line\":1133,\"text\":\"def main() -> int:\"},{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"},{\"line\":1141,\"text\":\"data_dir = Path(os.environ.get(\\\"DATA_DIR\\\", \\\"/data\\\"))\"}]}\nSB038_WINDOW_03={\"around\":1138,\"lines\":[{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"},{\"line\":1141,\"text\":\"data_dir = Path(os.environ.get(\\\"DATA_DIR\\\", \\\"/data\\\"))\"},{\"line\":1142,\"text\":\"path = data_dir / \\\"bitfinex_source.db\\\"\"},{\"line\":1143,\"text\":\"collection_start_at = _dt(\"}]}\nSB038_WINDOW_04={\"around\":1153,\"lines\":[{\"line\":1149,\"text\":\"with SQLiteBitfinexSourceJournal(\"},{\"line\":1150,\"text\":\"path,\"},{\"line\":1151,\"text\":\"collection_start_at=collection_start_at,\"},{\"line\":1152,\"text\":\") as journal:\"},{\"line\":1153,\"text\":\"with connect(\"},{\"line\":1154,\"text\":\"BITFINEX_WS_URL,\"},{\"line\":1155,\"text\":\"open_timeout=10,\"},{\"line\":1156,\"text\":\"close_timeout=5,\"},{\"line\":1157,\"text\":\") as ws:\"},{\"line\":1158,\"text\":\"ws.send(\"}]}\nSB038_WINDOW_05={\"around\":1175,\"lines\":[{\"line\":1171,\"text\":\"\\\"symbol\\\": BITFINEX_TRADE_SYMBOL,\"},{\"line\":1172,\"text\":\"}\"},{\"line\":1173,\"text\":\")\"},{\"line\":1174,\"text\":\")\"},{\"line\":1175,\"text\":\"for raw in ws:\"},{\"line\":1176,\"text\":\"message = json.loads(raw)\"},{\"line\":1177,\"text\":\"if isinstance(message, dict):\"},{\"line\":1178,\"text\":\"if (\"},{\"line\":1179,\"text\":\"message.get(\\\"event\\\") == \\\"subscribed\\\"\"},{\"line\":1180,\"text\":\"and message.get(\\\"channel\\\") == \\\"trades\\\"\"}]}\nSB038_DECISION=CONNECT_POLICY_EVIDENCE_READY\nSB038_MUTATION_SCOPE=NONE_READ_ONLY\nSIGNALBOT038_DECISION=CONNECT_POLICY_EVIDENCE_READY\nSIGNALBOT038_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION\n" +} diff --git a/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.txt b/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.txt new file mode 100644 index 00000000..8d0568b4 --- /dev/null +++ b/runtime/history/SIGNALBOT-260908-CONNECT-POLICY-RCA-038.txt @@ -0,0 +1,50 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=SIGNALBOT-260908-CONNECT-POLICY-RCA-038 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=signalbot-cr0116-connect-policy-rca +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 +COMMAND_SHA256=07ce1cf96c685ff689f8a9a2d34f1dc1b9876f40b2813255123ec0e1a286ab96 +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=42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969 +SANITIZED_OUTPUT_SHA256=42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969 +OUTPUT_BEGIN +ERROR_REGISTER_CHECK=OK +REFERENCE_CHECK=OK +AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED +SB038_COLLECTOR={"id":"a546a70c3e8c","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","name":"demonov-shadow-8020-collector-1","ok":true,"pid":210213,"restart_count":13,"running":true,"started_at":"2026-09-08T05:01:08.70385245Z","status":"running"} +SB038_RECONNECT_STATE={"activity_count":181306,"fail_closed_reason":"source reconnect detected","gap_detected":false,"last_reconnect_at":"2026-09-08T05:01:09.298101+00:00","max_event_seq":181306,"max_received_at":"2026-09-08T05:42:13.860438+00:00","post_finality_revision":false,"prospective_fail_closed_reason":"","prospective_gap_detected":false,"prospective_reconnect_detected":false,"quick_check":"ok","reconnect_count":10,"reconnect_detected":true} +SB038_SOURCE_ID={"lines":1246,"path":"/app/demonov_forward_map/bitfinex_trade_collector.py","sha256":"d21cf0c3a0d4fcaf9210a57da04fd560dba4952ac1dd5a085abcc4e76ccf2eb0","websockets_version":"15.0.1"} +SB038_CONNECT_CALLS=[{"args":["str(self.path)"],"end_lineno":128,"keywords":{"isolation_level":"None","timeout":"5"},"lineno":124},{"args":["BITFINEX_WS_URL"],"end_lineno":1157,"keywords":{"close_timeout":"5","open_timeout":"10"},"lineno":1153}] +SB038_TRANSPORT_KNOBS=[{"line":1155,"text":"open_timeout=10,"},{"line":1156,"text":"close_timeout=5,"}] +SB038_WINDOW_00={"around":124,"lines":[{"line":120,"text":"collection_start_at,"},{"line":121,"text":"\"collection_start_at\","},{"line":122,"text":")"},{"line":123,"text":"self.path.parent.mkdir(parents=True, exist_ok=True)"},{"line":124,"text":"self._db = sqlite3.connect("},{"line":125,"text":"str(self.path),"},{"line":126,"text":"timeout=5,"},{"line":127,"text":"isolation_level=None,"},{"line":128,"text":")"},{"line":129,"text":"self._db.row_factory = sqlite3.Row"}]} +SB038_WINDOW_01={"around":1135,"lines":[{"line":1131,"text":""},{"line":1132,"text":""},{"line":1133,"text":"def main() -> int:"},{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""}]} +SB038_WINDOW_02={"around":1136,"lines":[{"line":1132,"text":""},{"line":1133,"text":"def main() -> int:"},{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""},{"line":1141,"text":"data_dir = Path(os.environ.get(\"DATA_DIR\", \"/data\"))"}]} +SB038_WINDOW_03={"around":1138,"lines":[{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""},{"line":1141,"text":"data_dir = Path(os.environ.get(\"DATA_DIR\", \"/data\"))"},{"line":1142,"text":"path = data_dir / \"bitfinex_source.db\""},{"line":1143,"text":"collection_start_at = _dt("}]} +SB038_WINDOW_04={"around":1153,"lines":[{"line":1149,"text":"with SQLiteBitfinexSourceJournal("},{"line":1150,"text":"path,"},{"line":1151,"text":"collection_start_at=collection_start_at,"},{"line":1152,"text":") as journal:"},{"line":1153,"text":"with connect("},{"line":1154,"text":"BITFINEX_WS_URL,"},{"line":1155,"text":"open_timeout=10,"},{"line":1156,"text":"close_timeout=5,"},{"line":1157,"text":") as ws:"},{"line":1158,"text":"ws.send("}]} +SB038_WINDOW_05={"around":1175,"lines":[{"line":1171,"text":"\"symbol\": BITFINEX_TRADE_SYMBOL,"},{"line":1172,"text":"}"},{"line":1173,"text":")"},{"line":1174,"text":")"},{"line":1175,"text":"for raw in ws:"},{"line":1176,"text":"message = json.loads(raw)"},{"line":1177,"text":"if isinstance(message, dict):"},{"line":1178,"text":"if ("},{"line":1179,"text":"message.get(\"event\") == \"subscribed\""},{"line":1180,"text":"and message.get(\"channel\") == \"trades\""}]} +SB038_DECISION=CONNECT_POLICY_EVIDENCE_READY +SB038_MUTATION_SCOPE=NONE_READ_ONLY +SIGNALBOT038_DECISION=CONNECT_POLICY_EVIDENCE_READY +SIGNALBOT038_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 6ae1a00c..f5e644b6 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,27 +1,27 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "NEWFI-260908-A-STAGINGEDGE-APPLY3", - "status": "BLOCKED", - "rc": 2, + "command_id": "SIGNALBOT-260908-CONNECT-POLICY-RCA-038", + "status": "OK", + "rc": 0, "host": "pve01", - "mode": "change", - "component": "newfi-staging-persistent-dns01-cert-edge-route-dns", - "started_at_utc": "2026-09-08T05:41:29Z", - "finished_at_utc": "2026-09-08T05:41:55Z", + "mode": "read-only", + "component": "signalbot-cr0116-connect-policy-rca", + "started_at_utc": "2026-09-08T05:42:15Z", + "finished_at_utc": "2026-09-08T05:42:16Z", "reference_register_checked": true, "reference_sha256": "5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66", "error_register_checked": true, "error_register_sha256": "3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0", - "command_sha256": "a70453ec91740834101233667b1fe44a1996ad31916d7843f1fb1f9eb2589ce2", + "command_sha256": "07ce1cf96c685ff689f8a9a2d34f1dc1b9876f40b2813255123ec0e1a286ab96", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "change_declared": true, + "change_declared": false, "result_contract_valid": true, - "result_contract_status": "BLOCKED", + "result_contract_status": null, "result_contract_error": null, - "command_rc": 2, + "command_rc": 0, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "3853467b52b9b752cc920abd3b16cac421127eda57fdce5c0c0959f350105ff2", - "sanitized_output_sha256": "8f3b18af23d59fd7407df56bd403733aa356919207c4ca5d998aae3e2c706caa", + "raw_evidence_sha256": "42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969", + "sanitized_output_sha256": "42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "STAGINGEDGE_APPLY3_BEGIN=true\nCOMMAND_ID=NEWFI-260908-A-STAGINGEDGE-APPLY3\nCOMPONENT=newfi-staging-persistent-dns01-cert-edge-route-dns\nMODE=change\nERROR_REGISTER_CHECK=OK\nERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0\nREFERENCE_CHECK=OK\nREFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nRUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\nPRIOR_STAGINGEDGE_APPLY2_HISTORY_SHA256=dfb1675efa87545cf2e782ac7fbada7c475c4cbbc01a1f16a194c88923b9fdbd\nPORTAL_PRODUCT_STATE_GATE=PASS\nNEWFI_STAGING_IDENTITY={\"name\":\"newfi-staging\",\"node\":\"pve03\",\"vmid\":211}\nSTAGING_BACKEND_PREFLIGHT={\"ip\":\"[PRIVATE_IP]\",\"local_http\":\"503\"}\nEDGE_VM_IDENTITY={\"name\":\"edge-vm\",\"node\":\"pve03\",\"vmid\":130}\nNPMPLUS_PREFLIGHT={\"container\":\"npmplus\",\"data_source\":\"/opt/npmplus\",\"nginx\":\"/usr/local/nginx/sbin/nginx\"}\nEDGE_CF_TOKEN_GATE={\"source_path\":\"/root/cert38-narrow-migration-20260904T074428Z/credentials-38.before\",\"valid_count\":1,\"zone_id_sha256\":\"5a88f12ebe16612b4e42f11ee57b4b95ca4a13c4abb8f0009f09babfbec927e7\"}\nSTAGINGEDGE_BLOCKED_REASON=DEDICATED_CERTBOT_ROOT_ALREADY_EXISTS\nFINAL_DECISION=BLOCKED_NEWFI_STAGING_EDGE_DEDICATED_CERTBOT_ROOT_ALREADY_EXISTS\nHOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"NEWFI-260908-A-STAGINGEDGE-APPLY3\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"BLOCKED\",\"version\":1}\n" + "output": "ERROR_REGISTER_CHECK=OK\nREFERENCE_CHECK=OK\nAUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED\nSB038_COLLECTOR={\"id\":\"a546a70c3e8c\",\"image\":\"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70\",\"name\":\"demonov-shadow-8020-collector-1\",\"ok\":true,\"pid\":210213,\"restart_count\":13,\"running\":true,\"started_at\":\"2026-09-08T05:01:08.70385245Z\",\"status\":\"running\"}\nSB038_RECONNECT_STATE={\"activity_count\":181306,\"fail_closed_reason\":\"source reconnect detected\",\"gap_detected\":false,\"last_reconnect_at\":\"2026-09-08T05:01:09.298101+00:00\",\"max_event_seq\":181306,\"max_received_at\":\"2026-09-08T05:42:13.860438+00:00\",\"post_finality_revision\":false,\"prospective_fail_closed_reason\":\"\",\"prospective_gap_detected\":false,\"prospective_reconnect_detected\":false,\"quick_check\":\"ok\",\"reconnect_count\":10,\"reconnect_detected\":true}\nSB038_SOURCE_ID={\"lines\":1246,\"path\":\"/app/demonov_forward_map/bitfinex_trade_collector.py\",\"sha256\":\"d21cf0c3a0d4fcaf9210a57da04fd560dba4952ac1dd5a085abcc4e76ccf2eb0\",\"websockets_version\":\"15.0.1\"}\nSB038_CONNECT_CALLS=[{\"args\":[\"str(self.path)\"],\"end_lineno\":128,\"keywords\":{\"isolation_level\":\"None\",\"timeout\":\"5\"},\"lineno\":124},{\"args\":[\"BITFINEX_WS_URL\"],\"end_lineno\":1157,\"keywords\":{\"close_timeout\":\"5\",\"open_timeout\":\"10\"},\"lineno\":1153}]\nSB038_TRANSPORT_KNOBS=[{\"line\":1155,\"text\":\"open_timeout=10,\"},{\"line\":1156,\"text\":\"close_timeout=5,\"}]\nSB038_WINDOW_00={\"around\":124,\"lines\":[{\"line\":120,\"text\":\"collection_start_at,\"},{\"line\":121,\"text\":\"\\\"collection_start_at\\\",\"},{\"line\":122,\"text\":\")\"},{\"line\":123,\"text\":\"self.path.parent.mkdir(parents=True, exist_ok=True)\"},{\"line\":124,\"text\":\"self._db = sqlite3.connect(\"},{\"line\":125,\"text\":\"str(self.path),\"},{\"line\":126,\"text\":\"timeout=5,\"},{\"line\":127,\"text\":\"isolation_level=None,\"},{\"line\":128,\"text\":\")\"},{\"line\":129,\"text\":\"self._db.row_factory = sqlite3.Row\"}]}\nSB038_WINDOW_01={\"around\":1135,\"lines\":[{\"line\":1131,\"text\":\"\"},{\"line\":1132,\"text\":\"\"},{\"line\":1133,\"text\":\"def main() -> int:\"},{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"}]}\nSB038_WINDOW_02={\"around\":1136,\"lines\":[{\"line\":1132,\"text\":\"\"},{\"line\":1133,\"text\":\"def main() -> int:\"},{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"},{\"line\":1141,\"text\":\"data_dir = Path(os.environ.get(\\\"DATA_DIR\\\", \\\"/data\\\"))\"}]}\nSB038_WINDOW_03={\"around\":1138,\"lines\":[{\"line\":1134,\"text\":\"try:\"},{\"line\":1135,\"text\":\"from websockets.sync.client import connect\"},{\"line\":1136,\"text\":\"except ImportError as exc:\"},{\"line\":1137,\"text\":\"raise DemonovError(\"},{\"line\":1138,\"text\":\"\\\"websockets runtime dependency is required\\\"\"},{\"line\":1139,\"text\":\") from exc\"},{\"line\":1140,\"text\":\"\"},{\"line\":1141,\"text\":\"data_dir = Path(os.environ.get(\\\"DATA_DIR\\\", \\\"/data\\\"))\"},{\"line\":1142,\"text\":\"path = data_dir / \\\"bitfinex_source.db\\\"\"},{\"line\":1143,\"text\":\"collection_start_at = _dt(\"}]}\nSB038_WINDOW_04={\"around\":1153,\"lines\":[{\"line\":1149,\"text\":\"with SQLiteBitfinexSourceJournal(\"},{\"line\":1150,\"text\":\"path,\"},{\"line\":1151,\"text\":\"collection_start_at=collection_start_at,\"},{\"line\":1152,\"text\":\") as journal:\"},{\"line\":1153,\"text\":\"with connect(\"},{\"line\":1154,\"text\":\"BITFINEX_WS_URL,\"},{\"line\":1155,\"text\":\"open_timeout=10,\"},{\"line\":1156,\"text\":\"close_timeout=5,\"},{\"line\":1157,\"text\":\") as ws:\"},{\"line\":1158,\"text\":\"ws.send(\"}]}\nSB038_WINDOW_05={\"around\":1175,\"lines\":[{\"line\":1171,\"text\":\"\\\"symbol\\\": BITFINEX_TRADE_SYMBOL,\"},{\"line\":1172,\"text\":\"}\"},{\"line\":1173,\"text\":\")\"},{\"line\":1174,\"text\":\")\"},{\"line\":1175,\"text\":\"for raw in ws:\"},{\"line\":1176,\"text\":\"message = json.loads(raw)\"},{\"line\":1177,\"text\":\"if isinstance(message, dict):\"},{\"line\":1178,\"text\":\"if (\"},{\"line\":1179,\"text\":\"message.get(\\\"event\\\") == \\\"subscribed\\\"\"},{\"line\":1180,\"text\":\"and message.get(\\\"channel\\\") == \\\"trades\\\"\"}]}\nSB038_DECISION=CONNECT_POLICY_EVIDENCE_READY\nSB038_MUTATION_SCOPE=NONE_READ_ONLY\nSIGNALBOT038_DECISION=CONNECT_POLICY_EVIDENCE_READY\nSIGNALBOT038_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index c0f908ec..8d0568b4 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-APPLY3 -STATUS=BLOCKED -RC=2 +COMMAND_ID=SIGNALBOT-260908-CONNECT-POLICY-RCA-038 +STATUS=OK +RC=0 HOST=pve01 -MODE=change -COMPONENT=newfi-staging-persistent-dns01-cert-edge-route-dns +MODE=read-only +COMPONENT=signalbot-cr0116-connect-policy-rca REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 -COMMAND_SHA256=a70453ec91740834101233667b1fe44a1996ad31916d7843f1fb1f9eb2589ce2 +COMMAND_SHA256=07ce1cf96c685ff689f8a9a2d34f1dc1b9876f40b2813255123ec0e1a286ab96 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGE_DECLARED=true +CHANGE_DECLARED=false RESULT_CONTRACT_VALID=true -RESULT_CONTRACT_STATUS=BLOCKED +RESULT_CONTRACT_STATUS=NOT_APPLICABLE RESULT_CONTRACT_ERROR=NONE -COMMAND_RC=2 +COMMAND_RC=0 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,29 +24,27 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=3853467b52b9b752cc920abd3b16cac421127eda57fdce5c0c0959f350105ff2 -SANITIZED_OUTPUT_SHA256=8f3b18af23d59fd7407df56bd403733aa356919207c4ca5d998aae3e2c706caa +RAW_EVIDENCE_SHA256=42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969 +SANITIZED_OUTPUT_SHA256=42af5cc0018db20c59cc42cad276379dc496b379592154fffc5afaa24a726969 OUTPUT_BEGIN -STAGINGEDGE_APPLY3_BEGIN=true -COMMAND_ID=NEWFI-260908-A-STAGINGEDGE-APPLY3 -COMPONENT=newfi-staging-persistent-dns01-cert-edge-route-dns -MODE=change ERROR_REGISTER_CHECK=OK -ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0 REFERENCE_CHECK=OK -REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66 AUTHORITY_CHECK_SCOPE=READABILITY_ONLY_INCIDENTS_NOT_CLOSED -RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d -PRIOR_STAGINGEDGE_APPLY2_HISTORY_SHA256=dfb1675efa87545cf2e782ac7fbada7c475c4cbbc01a1f16a194c88923b9fdbd -PORTAL_PRODUCT_STATE_GATE=PASS -NEWFI_STAGING_IDENTITY={"name":"newfi-staging","node":"pve03","vmid":211} -STAGING_BACKEND_PREFLIGHT={"ip":"[PRIVATE_IP]","local_http":"503"} -EDGE_VM_IDENTITY={"name":"edge-vm","node":"pve03","vmid":130} -NPMPLUS_PREFLIGHT={"container":"npmplus","data_source":"/opt/npmplus","nginx":"/usr/local/nginx/sbin/nginx"} -EDGE_CF_TOKEN_GATE={"source_path":"/root/cert38-narrow-migration-20260904T074428Z/credentials-38.before","valid_count":1,"zone_id_sha256":"5a88f12ebe16612b4e42f11ee57b4b95ca4a13c4abb8f0009f09babfbec927e7"} -STAGINGEDGE_BLOCKED_REASON=DEDICATED_CERTBOT_ROOT_ALREADY_EXISTS -FINAL_DECISION=BLOCKED_NEWFI_STAGING_EDGE_DEDICATED_CERTBOT_ROOT_ALREADY_EXISTS -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"NEWFI-260908-A-STAGINGEDGE-APPLY3","rollback_restored":null,"rollback_started":false,"status":"BLOCKED","version":1} +SB038_COLLECTOR={"id":"a546a70c3e8c","image":"8020-demonov-shadow:e32760c69a4311728db9066ee8bf2bf66b1e5a70","name":"demonov-shadow-8020-collector-1","ok":true,"pid":210213,"restart_count":13,"running":true,"started_at":"2026-09-08T05:01:08.70385245Z","status":"running"} +SB038_RECONNECT_STATE={"activity_count":181306,"fail_closed_reason":"source reconnect detected","gap_detected":false,"last_reconnect_at":"2026-09-08T05:01:09.298101+00:00","max_event_seq":181306,"max_received_at":"2026-09-08T05:42:13.860438+00:00","post_finality_revision":false,"prospective_fail_closed_reason":"","prospective_gap_detected":false,"prospective_reconnect_detected":false,"quick_check":"ok","reconnect_count":10,"reconnect_detected":true} +SB038_SOURCE_ID={"lines":1246,"path":"/app/demonov_forward_map/bitfinex_trade_collector.py","sha256":"d21cf0c3a0d4fcaf9210a57da04fd560dba4952ac1dd5a085abcc4e76ccf2eb0","websockets_version":"15.0.1"} +SB038_CONNECT_CALLS=[{"args":["str(self.path)"],"end_lineno":128,"keywords":{"isolation_level":"None","timeout":"5"},"lineno":124},{"args":["BITFINEX_WS_URL"],"end_lineno":1157,"keywords":{"close_timeout":"5","open_timeout":"10"},"lineno":1153}] +SB038_TRANSPORT_KNOBS=[{"line":1155,"text":"open_timeout=10,"},{"line":1156,"text":"close_timeout=5,"}] +SB038_WINDOW_00={"around":124,"lines":[{"line":120,"text":"collection_start_at,"},{"line":121,"text":"\"collection_start_at\","},{"line":122,"text":")"},{"line":123,"text":"self.path.parent.mkdir(parents=True, exist_ok=True)"},{"line":124,"text":"self._db = sqlite3.connect("},{"line":125,"text":"str(self.path),"},{"line":126,"text":"timeout=5,"},{"line":127,"text":"isolation_level=None,"},{"line":128,"text":")"},{"line":129,"text":"self._db.row_factory = sqlite3.Row"}]} +SB038_WINDOW_01={"around":1135,"lines":[{"line":1131,"text":""},{"line":1132,"text":""},{"line":1133,"text":"def main() -> int:"},{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""}]} +SB038_WINDOW_02={"around":1136,"lines":[{"line":1132,"text":""},{"line":1133,"text":"def main() -> int:"},{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""},{"line":1141,"text":"data_dir = Path(os.environ.get(\"DATA_DIR\", \"/data\"))"}]} +SB038_WINDOW_03={"around":1138,"lines":[{"line":1134,"text":"try:"},{"line":1135,"text":"from websockets.sync.client import connect"},{"line":1136,"text":"except ImportError as exc:"},{"line":1137,"text":"raise DemonovError("},{"line":1138,"text":"\"websockets runtime dependency is required\""},{"line":1139,"text":") from exc"},{"line":1140,"text":""},{"line":1141,"text":"data_dir = Path(os.environ.get(\"DATA_DIR\", \"/data\"))"},{"line":1142,"text":"path = data_dir / \"bitfinex_source.db\""},{"line":1143,"text":"collection_start_at = _dt("}]} +SB038_WINDOW_04={"around":1153,"lines":[{"line":1149,"text":"with SQLiteBitfinexSourceJournal("},{"line":1150,"text":"path,"},{"line":1151,"text":"collection_start_at=collection_start_at,"},{"line":1152,"text":") as journal:"},{"line":1153,"text":"with connect("},{"line":1154,"text":"BITFINEX_WS_URL,"},{"line":1155,"text":"open_timeout=10,"},{"line":1156,"text":"close_timeout=5,"},{"line":1157,"text":") as ws:"},{"line":1158,"text":"ws.send("}]} +SB038_WINDOW_05={"around":1175,"lines":[{"line":1171,"text":"\"symbol\": BITFINEX_TRADE_SYMBOL,"},{"line":1172,"text":"}"},{"line":1173,"text":")"},{"line":1174,"text":")"},{"line":1175,"text":"for raw in ws:"},{"line":1176,"text":"message = json.loads(raw)"},{"line":1177,"text":"if isinstance(message, dict):"},{"line":1178,"text":"if ("},{"line":1179,"text":"message.get(\"event\") == \"subscribed\""},{"line":1180,"text":"and message.get(\"channel\") == \"trades\""}]} +SB038_DECISION=CONNECT_POLICY_EVIDENCE_READY +SB038_MUTATION_SCOPE=NONE_READ_ONLY +SIGNALBOT038_DECISION=CONNECT_POLICY_EVIDENCE_READY +SIGNALBOT038_MUTATION_SCOPE=NO_RUNTIME_NO_GIT_NO_EXCHANGE_MUTATION OUTPUT_END CHAT_OUTPUT_END