From 925dd86047941056a4a44b406a16daf0e7e32145 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Thu, 6 Aug 2026 03:55:42 +0000 Subject: [PATCH] runtime: publish HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z --- ...ISK-SCHEMA-READ-ONLY-20260806T035200Z.json | 38 +++++++++++++++++++ ...RISK-SCHEMA-READ-ONLY-20260806T035200Z.txt | 34 +++++++++++++++++ runtime/latest.json | 16 ++++---- runtime/latest.txt | 14 +++---- 4 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.json create mode 100644 runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.txt diff --git a/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.json b/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.json new file mode 100644 index 0000000..94e73fb --- /dev/null +++ b/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "verify", + "component": "homelab-kb-v2-r3-rollback-artifacts-r6-risk-schema-read-only", + "started_at_utc": "2026-08-06T03:55:42Z", + "finished_at_utc": "2026-08-06T03:55:42Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "ff45c88a0d1d4780d91752952c56fc75cfdcd21f555d75ebc4203c57b7b532f5", + "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": "5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114", + "sanitized_output_sha256": "5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"backup_changed\":false,\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z\",\"exact_risk_values\":[\"HIGH\",\"READ_ONLY\",\"REVERSIBLE\"],\"gitea_changed\":false,\"invalid_risk_literal_found\":true,\"mutation_outcome\":\"NO_MUTATION\",\"private_addresses_included\":false,\"production_changed\":false,\"purpose\":\"READ_ONLY_EXACT_ADAPTER_RISK_ENUM\",\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":2,\"secrets_included\":false,\"services_changed\":false,\"snippets\":[{\"basis\":\"risk_assignment\",\"snippet\":\"ALLOWED_RISKS = {\\n \\\"READ_ONLY\\\",\\n \\\"REVERSIBLE\\\",\\n \\\"HIGH\\\",\\n}\",\"snippet_sha256\":\"3fb1a623c396c6f52340e3fd2a21dcb3bf8ef20853577b1f546ef06365ce93b1\",\"values\":[\"HIGH\",\"READ_ONLY\",\"REVERSIBLE\"]},{\"basis\":\"risk_not_in\",\"snippet\":\"risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}\",\"snippet_sha256\":\"724ee6c7d954e249f31d377b059766cc67b75131513b547c93479821daff1665\",\"values\":[\"HIGH\",\"REVERSIBLE\"]},{\"basis\":\"validator_error_context\",\"line\":385,\"snippet\":\" raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\\n ):\\n raise AdapterError(\\\"invalid timeout_seconds\\\")\\n\\n risk = document.get(\\\"risk\\\")\\n if risk not in ALLOWED_RISKS:\\n raise AdapterError(\\\"invalid risk\\\")\\n if mode == \\\"change\\\" and risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}:\\n raise AdapterError(\\\"change capsule risk must be REVERSIBLE or HIGH\\\")\\n if mode != \\\"change\\\" and risk != \\\"READ_ONLY\\\":\\n raise AdapterError(\\\"non-change capsule risk must be READ_ONLY\\\")\\n\\n flags = document.get(\\\"change_flags\\\")\\n if not isinstance(flags, dict):\\n raise AdapterError(\\\"change_flags must be object\\\")\\n if set(flags) != ALLOWED_CHANGE_FLAGS:\\n raise AdapterError(\\\"change_flags keys invalid\\\")\\n if any(type(value) is not bool for value in flags.values()):\\n raise AdapterError(\\\"change_flags values must be boolean\\\")\\n\\n if mode != \\\"change\\\" and any(flags.values()):\",\"snippet_sha256\":\"9e3fc0cf1111e8c480a659092819a244d1b0d701eaec4c5c544dd3aed65280b7\"}],\"source_bytes\":86019,\"source_path\":\"/usr/local/sbin/homelab-command-adapter\",\"source_sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"status\":\"AUDIT_COMPLETE\"}\n" +} diff --git a/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.txt b/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.txt new file mode 100644 index 0000000..2dd7a81 --- /dev/null +++ b/runtime/history/HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=verify +COMPONENT=homelab-kb-v2-r3-rollback-artifacts-r6-risk-schema-read-only +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=ff45c88a0d1d4780d91752952c56fc75cfdcd21f555d75ebc4203c57b7b532f5 +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=5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114 +SANITIZED_OUTPUT_SHA256=5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114 +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"backup_changed":false,"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z","exact_risk_values":["HIGH","READ_ONLY","REVERSIBLE"],"gitea_changed":false,"invalid_risk_literal_found":true,"mutation_outcome":"NO_MUTATION","private_addresses_included":false,"production_changed":false,"purpose":"READ_ONLY_EXACT_ADAPTER_RISK_ENUM","rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":2,"secrets_included":false,"services_changed":false,"snippets":[{"basis":"risk_assignment","snippet":"ALLOWED_RISKS = {\n \"READ_ONLY\",\n \"REVERSIBLE\",\n \"HIGH\",\n}","snippet_sha256":"3fb1a623c396c6f52340e3fd2a21dcb3bf8ef20853577b1f546ef06365ce93b1","values":["HIGH","READ_ONLY","REVERSIBLE"]},{"basis":"risk_not_in","snippet":"risk not in {\"REVERSIBLE\", \"HIGH\"}","snippet_sha256":"724ee6c7d954e249f31d377b059766cc67b75131513b547c93479821daff1665","values":["HIGH","REVERSIBLE"]},{"basis":"validator_error_context","line":385,"snippet":" raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200\n ):\n raise AdapterError(\"invalid timeout_seconds\")\n\n risk = document.get(\"risk\")\n if risk not in ALLOWED_RISKS:\n raise AdapterError(\"invalid risk\")\n if mode == \"change\" and risk not in {\"REVERSIBLE\", \"HIGH\"}:\n raise AdapterError(\"change capsule risk must be REVERSIBLE or HIGH\")\n if mode != \"change\" and risk != \"READ_ONLY\":\n raise AdapterError(\"non-change capsule risk must be READ_ONLY\")\n\n flags = document.get(\"change_flags\")\n if not isinstance(flags, dict):\n raise AdapterError(\"change_flags must be object\")\n if set(flags) != ALLOWED_CHANGE_FLAGS:\n raise AdapterError(\"change_flags keys invalid\")\n if any(type(value) is not bool for value in flags.values()):\n raise AdapterError(\"change_flags values must be boolean\")\n\n if mode != \"change\" and any(flags.values()):","snippet_sha256":"9e3fc0cf1111e8c480a659092819a244d1b0d701eaec4c5c544dd3aed65280b7"}],"source_bytes":86019,"source_path":"/usr/local/sbin/homelab-command-adapter","source_sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","status":"AUDIT_COMPLETE"} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index a07519d..94e73fb 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z", + "command_id": "HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z", "status": "OK", "rc": 0, "host": "pve01", "mode": "verify", - "component": "homelab-kb-v2-r3-rollback-artifacts-r5-adapter-source-read-only", - "started_at_utc": "2026-08-06T03:49:08Z", - "finished_at_utc": "2026-08-06T03:49:08Z", + "component": "homelab-kb-v2-r3-rollback-artifacts-r6-risk-schema-read-only", + "started_at_utc": "2026-08-06T03:55:42Z", + "finished_at_utc": "2026-08-06T03:55:42Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "e9be2bfb64487a47128723e0db096ed14e33b4f5c33df81dc2afb584f812aa7d", + "command_sha256": "ff45c88a0d1d4780d91752952c56fc75cfdcd21f555d75ebc4203c57b7b532f5", "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": "aece25617c5e5cd1a9ba9d4d8b045cd63234249ee327520354cd80f17f1c2756", - "sanitized_output_sha256": "aece25617c5e5cd1a9ba9d4d8b045cd63234249ee327520354cd80f17f1c2756", + "raw_evidence_sha256": "5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114", + "sanitized_output_sha256": "5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"adapter_process_count\":2,\"adapter_processes\":[{\"argv_prefix\":[\"/usr/bin/python3\",\"-B\",\"/usr/local/sbin/homelab-command-adapter\",\"--worker\"],\"candidates\":[{\"basis\":\"process_root_absolute\",\"bytes\":86019,\"mode\":\"0o755\",\"path\":\"/proc/1487725/root/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},{\"basis\":\"host_absolute\",\"bytes\":86019,\"mode\":\"0o755\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"}],\"cmdline_sha256\":\"d889200aac33977ddb86bfaf646bc52b74137899de0d4d3f17c98c702a8964ed\",\"cwd\":\"/\",\"exe\":\"/usr/bin/python3.13\",\"pid_relation\":3,\"script_arg\":\"/usr/local/sbin/homelab-command-adapter\"},{\"argv_prefix\":[\"/usr/bin/python3\",\"-B\",\"/usr/local/sbin/homelab-command-adapter\",\"--serve\"],\"candidates\":[{\"basis\":\"process_root_absolute\",\"bytes\":86019,\"mode\":\"0o755\",\"path\":\"/proc/1131444/root/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},{\"basis\":\"host_absolute\",\"bytes\":86019,\"mode\":\"0o755\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"}],\"cmdline_sha256\":\"9d9189a1b62d8fb7a5f5713828ef28ef010f0f8109f9b3174f0ffbbc8b0f62a5\",\"cwd\":\"/\",\"exe\":\"/usr/bin/python3.13\",\"pid_relation\":4,\"script_arg\":\"/usr/local/sbin/homelab-command-adapter\"}],\"backup_changed\":false,\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z\",\"discovery_status\":\"EXACT_ADAPTER_SOURCE_AND_MODE_ENUM_FOUND\",\"exact_mode_values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"],\"gitea_changed\":false,\"mutation_outcome\":\"NO_MUTATION\",\"private_addresses_included\":false,\"production_changed\":false,\"purpose\":\"READ_ONLY_RESOLVE_EXACT_ADAPTER_SOURCE_AND_MODE_ENUM\",\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":2,\"secrets_included\":false,\"services_changed\":false,\"source_results\":[{\"basis\":\"process_root_absolute\",\"bytes\":86019,\"evidence\":{\"component_string_literal_found\":false,\"exact_mode_values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"],\"invalid_mode_literal_found\":true,\"snippets\":[{\"basis\":\"mode_assignment\",\"snippet\":\"ALLOWED_MODES = {\\n \\\"read-only\\\",\\n \\\"verify\\\",\\n \\\"change\\\",\\n \\\"transport-test\\\",\\n}\",\"snippet_sha256\":\"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702\",\"values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"]},{\"basis\":\"validator_error_context\",\"line\":371,\"snippet\":\" document.get(\\\"summary\\\"),\\n \\\"summary\\\",\\n minimum=1,\\n maximum=2000,\\n )\\n\\n mode = document.get(\\\"mode\\\")\\n if mode not in ALLOWED_MODES:\\n raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\",\"snippet_sha256\":\"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c\"}]},\"identity_basis\":\"process_argv_script\",\"mode\":\"0o755\",\"path\":\"/proc/1487725/root/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},{\"basis\":\"host_absolute\",\"bytes\":86019,\"evidence\":{\"component_string_literal_found\":false,\"exact_mode_values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"],\"invalid_mode_literal_found\":true,\"snippets\":[{\"basis\":\"mode_assignment\",\"snippet\":\"ALLOWED_MODES = {\\n \\\"read-only\\\",\\n \\\"verify\\\",\\n \\\"change\\\",\\n \\\"transport-test\\\",\\n}\",\"snippet_sha256\":\"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702\",\"values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"]},{\"basis\":\"validator_error_context\",\"line\":371,\"snippet\":\" document.get(\\\"summary\\\"),\\n \\\"summary\\\",\\n minimum=1,\\n maximum=2000,\\n )\\n\\n mode = document.get(\\\"mode\\\")\\n if mode not in ALLOWED_MODES:\\n raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\",\"snippet_sha256\":\"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c\"}]},\"identity_basis\":\"process_argv_script\",\"mode\":\"0o755\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},{\"basis\":\"process_root_absolute\",\"bytes\":86019,\"evidence\":{\"component_string_literal_found\":false,\"exact_mode_values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"],\"invalid_mode_literal_found\":true,\"snippets\":[{\"basis\":\"mode_assignment\",\"snippet\":\"ALLOWED_MODES = {\\n \\\"read-only\\\",\\n \\\"verify\\\",\\n \\\"change\\\",\\n \\\"transport-test\\\",\\n}\",\"snippet_sha256\":\"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702\",\"values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"]},{\"basis\":\"validator_error_context\",\"line\":371,\"snippet\":\" document.get(\\\"summary\\\"),\\n \\\"summary\\\",\\n minimum=1,\\n maximum=2000,\\n )\\n\\n mode = document.get(\\\"mode\\\")\\n if mode not in ALLOWED_MODES:\\n raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\",\"snippet_sha256\":\"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c\"}]},\"identity_basis\":\"process_argv_script\",\"mode\":\"0o755\",\"path\":\"/proc/1131444/root/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"},{\"basis\":\"host_absolute\",\"bytes\":86019,\"evidence\":{\"component_string_literal_found\":false,\"exact_mode_values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"],\"invalid_mode_literal_found\":true,\"snippets\":[{\"basis\":\"mode_assignment\",\"snippet\":\"ALLOWED_MODES = {\\n \\\"read-only\\\",\\n \\\"verify\\\",\\n \\\"change\\\",\\n \\\"transport-test\\\",\\n}\",\"snippet_sha256\":\"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702\",\"values\":[\"change\",\"read-only\",\"transport-test\",\"verify\"]},{\"basis\":\"validator_error_context\",\"line\":371,\"snippet\":\" document.get(\\\"summary\\\"),\\n \\\"summary\\\",\\n minimum=1,\\n maximum=2000,\\n )\\n\\n mode = document.get(\\\"mode\\\")\\n if mode not in ALLOWED_MODES:\\n raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\",\"snippet_sha256\":\"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c\"}]},\"identity_basis\":\"process_argv_script\",\"mode\":\"0o755\",\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"regular_file\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\"}],\"status\":\"AUDIT_COMPLETE\"}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"backup_changed\":false,\"changes_made\":false,\"command_id\":\"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z\",\"exact_risk_values\":[\"HIGH\",\"READ_ONLY\",\"REVERSIBLE\"],\"gitea_changed\":false,\"invalid_risk_literal_found\":true,\"mutation_outcome\":\"NO_MUTATION\",\"private_addresses_included\":false,\"production_changed\":false,\"purpose\":\"READ_ONLY_EXACT_ADAPTER_RISK_ENUM\",\"rollback_restored\":null,\"rollback_started\":false,\"sanitized\":true,\"schema\":2,\"secrets_included\":false,\"services_changed\":false,\"snippets\":[{\"basis\":\"risk_assignment\",\"snippet\":\"ALLOWED_RISKS = {\\n \\\"READ_ONLY\\\",\\n \\\"REVERSIBLE\\\",\\n \\\"HIGH\\\",\\n}\",\"snippet_sha256\":\"3fb1a623c396c6f52340e3fd2a21dcb3bf8ef20853577b1f546ef06365ce93b1\",\"values\":[\"HIGH\",\"READ_ONLY\",\"REVERSIBLE\"]},{\"basis\":\"risk_not_in\",\"snippet\":\"risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}\",\"snippet_sha256\":\"724ee6c7d954e249f31d377b059766cc67b75131513b547c93479821daff1665\",\"values\":[\"HIGH\",\"REVERSIBLE\"]},{\"basis\":\"validator_error_context\",\"line\":385,\"snippet\":\" raise AdapterError(\\\"invalid mode\\\")\\n if document.get(\\\"target\\\") != \\\"pve01\\\":\\n raise AdapterError(\\\"only pve01 target is supported\\\")\\n\\n timeout_seconds = document.get(\\\"timeout_seconds\\\")\\n if (\\n not isinstance(timeout_seconds, int)\\n or isinstance(timeout_seconds, bool)\\n or not 1 <= timeout_seconds <= 7200\\n ):\\n raise AdapterError(\\\"invalid timeout_seconds\\\")\\n\\n risk = document.get(\\\"risk\\\")\\n if risk not in ALLOWED_RISKS:\\n raise AdapterError(\\\"invalid risk\\\")\\n if mode == \\\"change\\\" and risk not in {\\\"REVERSIBLE\\\", \\\"HIGH\\\"}:\\n raise AdapterError(\\\"change capsule risk must be REVERSIBLE or HIGH\\\")\\n if mode != \\\"change\\\" and risk != \\\"READ_ONLY\\\":\\n raise AdapterError(\\\"non-change capsule risk must be READ_ONLY\\\")\\n\\n flags = document.get(\\\"change_flags\\\")\\n if not isinstance(flags, dict):\\n raise AdapterError(\\\"change_flags must be object\\\")\\n if set(flags) != ALLOWED_CHANGE_FLAGS:\\n raise AdapterError(\\\"change_flags keys invalid\\\")\\n if any(type(value) is not bool for value in flags.values()):\\n raise AdapterError(\\\"change_flags values must be boolean\\\")\\n\\n if mode != \\\"change\\\" and any(flags.values()):\",\"snippet_sha256\":\"9e3fc0cf1111e8c480a659092819a244d1b0d701eaec4c5c544dd3aed65280b7\"}],\"source_bytes\":86019,\"source_path\":\"/usr/local/sbin/homelab-command-adapter\",\"source_sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"status\":\"AUDIT_COMPLETE\"}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index c46bfa6..2dd7a81 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z +COMMAND_ID=HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z STATUS=OK RC=0 HOST=pve01 MODE=verify -COMPONENT=homelab-kb-v2-r3-rollback-artifacts-r5-adapter-source-read-only +COMPONENT=homelab-kb-v2-r3-rollback-artifacts-r6-risk-schema-read-only REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=e9be2bfb64487a47128723e0db096ed14e33b4f5c33df81dc2afb584f812aa7d +COMMAND_SHA256=ff45c88a0d1d4780d91752952c56fc75cfdcd21f555d75ebc4203c57b7b532f5 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=aece25617c5e5cd1a9ba9d4d8b045cd63234249ee327520354cd80f17f1c2756 -SANITIZED_OUTPUT_SHA256=aece25617c5e5cd1a9ba9d4d8b045cd63234249ee327520354cd80f17f1c2756 +RAW_EVIDENCE_SHA256=5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114 +SANITIZED_OUTPUT_SHA256=5b3b7e6398d26e93c0b286604a828b353e2e7aa222c732925faf93f91bb3c114 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"adapter_process_count":2,"adapter_processes":[{"argv_prefix":["/usr/bin/python3","-B","/usr/local/sbin/homelab-command-adapter","--worker"],"candidates":[{"basis":"process_root_absolute","bytes":86019,"mode":"0o755","path":"/proc/1487725/root/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"},{"basis":"host_absolute","bytes":86019,"mode":"0o755","path":"/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"}],"cmdline_sha256":"d889200aac33977ddb86bfaf646bc52b74137899de0d4d3f17c98c702a8964ed","cwd":"/","exe":"/usr/bin/python3.13","pid_relation":3,"script_arg":"/usr/local/sbin/homelab-command-adapter"},{"argv_prefix":["/usr/bin/python3","-B","/usr/local/sbin/homelab-command-adapter","--serve"],"candidates":[{"basis":"process_root_absolute","bytes":86019,"mode":"0o755","path":"/proc/1131444/root/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"},{"basis":"host_absolute","bytes":86019,"mode":"0o755","path":"/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"}],"cmdline_sha256":"9d9189a1b62d8fb7a5f5713828ef28ef010f0f8109f9b3174f0ffbbc8b0f62a5","cwd":"/","exe":"/usr/bin/python3.13","pid_relation":4,"script_arg":"/usr/local/sbin/homelab-command-adapter"}],"backup_changed":false,"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R5-ADAPTER-SOURCE-READ-ONLY-20260806T034500Z","discovery_status":"EXACT_ADAPTER_SOURCE_AND_MODE_ENUM_FOUND","exact_mode_values":["change","read-only","transport-test","verify"],"gitea_changed":false,"mutation_outcome":"NO_MUTATION","private_addresses_included":false,"production_changed":false,"purpose":"READ_ONLY_RESOLVE_EXACT_ADAPTER_SOURCE_AND_MODE_ENUM","rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":2,"secrets_included":false,"services_changed":false,"source_results":[{"basis":"process_root_absolute","bytes":86019,"evidence":{"component_string_literal_found":false,"exact_mode_values":["change","read-only","transport-test","verify"],"invalid_mode_literal_found":true,"snippets":[{"basis":"mode_assignment","snippet":"ALLOWED_MODES = {\n \"read-only\",\n \"verify\",\n \"change\",\n \"transport-test\",\n}","snippet_sha256":"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702","values":["change","read-only","transport-test","verify"]},{"basis":"validator_error_context","line":371,"snippet":" document.get(\"summary\"),\n \"summary\",\n minimum=1,\n maximum=2000,\n )\n\n mode = document.get(\"mode\")\n if mode not in ALLOWED_MODES:\n raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200","snippet_sha256":"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c"}]},"identity_basis":"process_argv_script","mode":"0o755","path":"/proc/1487725/root/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"},{"basis":"host_absolute","bytes":86019,"evidence":{"component_string_literal_found":false,"exact_mode_values":["change","read-only","transport-test","verify"],"invalid_mode_literal_found":true,"snippets":[{"basis":"mode_assignment","snippet":"ALLOWED_MODES = {\n \"read-only\",\n \"verify\",\n \"change\",\n \"transport-test\",\n}","snippet_sha256":"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702","values":["change","read-only","transport-test","verify"]},{"basis":"validator_error_context","line":371,"snippet":" document.get(\"summary\"),\n \"summary\",\n minimum=1,\n maximum=2000,\n )\n\n mode = document.get(\"mode\")\n if mode not in ALLOWED_MODES:\n raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200","snippet_sha256":"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c"}]},"identity_basis":"process_argv_script","mode":"0o755","path":"/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"},{"basis":"process_root_absolute","bytes":86019,"evidence":{"component_string_literal_found":false,"exact_mode_values":["change","read-only","transport-test","verify"],"invalid_mode_literal_found":true,"snippets":[{"basis":"mode_assignment","snippet":"ALLOWED_MODES = {\n \"read-only\",\n \"verify\",\n \"change\",\n \"transport-test\",\n}","snippet_sha256":"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702","values":["change","read-only","transport-test","verify"]},{"basis":"validator_error_context","line":371,"snippet":" document.get(\"summary\"),\n \"summary\",\n minimum=1,\n maximum=2000,\n )\n\n mode = document.get(\"mode\")\n if mode not in ALLOWED_MODES:\n raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200","snippet_sha256":"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c"}]},"identity_basis":"process_argv_script","mode":"0o755","path":"/proc/1131444/root/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"},{"basis":"host_absolute","bytes":86019,"evidence":{"component_string_literal_found":false,"exact_mode_values":["change","read-only","transport-test","verify"],"invalid_mode_literal_found":true,"snippets":[{"basis":"mode_assignment","snippet":"ALLOWED_MODES = {\n \"read-only\",\n \"verify\",\n \"change\",\n \"transport-test\",\n}","snippet_sha256":"991d590d09132346741471b688f55caa08151949f8c60719950ea547df9e8702","values":["change","read-only","transport-test","verify"]},{"basis":"validator_error_context","line":371,"snippet":" document.get(\"summary\"),\n \"summary\",\n minimum=1,\n maximum=2000,\n )\n\n mode = document.get(\"mode\")\n if mode not in ALLOWED_MODES:\n raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200","snippet_sha256":"b33f621240ebc8356f9c52430facf2bffb61cc560a8f38b9d2c8fe1e5774b04c"}]},"identity_basis":"process_argv_script","mode":"0o755","path":"/usr/local/sbin/homelab-command-adapter","regular_file":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d"}],"status":"AUDIT_COMPLETE"} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"backup_changed":false,"changes_made":false,"command_id":"HOMELAB-KB-V2-R3-ROLLBACK-ARTIFACTS-R6-RISK-SCHEMA-READ-ONLY-20260806T035200Z","exact_risk_values":["HIGH","READ_ONLY","REVERSIBLE"],"gitea_changed":false,"invalid_risk_literal_found":true,"mutation_outcome":"NO_MUTATION","private_addresses_included":false,"production_changed":false,"purpose":"READ_ONLY_EXACT_ADAPTER_RISK_ENUM","rollback_restored":null,"rollback_started":false,"sanitized":true,"schema":2,"secrets_included":false,"services_changed":false,"snippets":[{"basis":"risk_assignment","snippet":"ALLOWED_RISKS = {\n \"READ_ONLY\",\n \"REVERSIBLE\",\n \"HIGH\",\n}","snippet_sha256":"3fb1a623c396c6f52340e3fd2a21dcb3bf8ef20853577b1f546ef06365ce93b1","values":["HIGH","READ_ONLY","REVERSIBLE"]},{"basis":"risk_not_in","snippet":"risk not in {\"REVERSIBLE\", \"HIGH\"}","snippet_sha256":"724ee6c7d954e249f31d377b059766cc67b75131513b547c93479821daff1665","values":["HIGH","REVERSIBLE"]},{"basis":"validator_error_context","line":385,"snippet":" raise AdapterError(\"invalid mode\")\n if document.get(\"target\") != \"pve01\":\n raise AdapterError(\"only pve01 target is supported\")\n\n timeout_seconds = document.get(\"timeout_seconds\")\n if (\n not isinstance(timeout_seconds, int)\n or isinstance(timeout_seconds, bool)\n or not 1 <= timeout_seconds <= 7200\n ):\n raise AdapterError(\"invalid timeout_seconds\")\n\n risk = document.get(\"risk\")\n if risk not in ALLOWED_RISKS:\n raise AdapterError(\"invalid risk\")\n if mode == \"change\" and risk not in {\"REVERSIBLE\", \"HIGH\"}:\n raise AdapterError(\"change capsule risk must be REVERSIBLE or HIGH\")\n if mode != \"change\" and risk != \"READ_ONLY\":\n raise AdapterError(\"non-change capsule risk must be READ_ONLY\")\n\n flags = document.get(\"change_flags\")\n if not isinstance(flags, dict):\n raise AdapterError(\"change_flags must be object\")\n if set(flags) != ALLOWED_CHANGE_FLAGS:\n raise AdapterError(\"change_flags keys invalid\")\n if any(type(value) is not bool for value in flags.values()):\n raise AdapterError(\"change_flags values must be boolean\")\n\n if mode != \"change\" and any(flags.values()):","snippet_sha256":"9e3fc0cf1111e8c480a659092819a244d1b0d701eaec4c5c544dd3aed65280b7"}],"source_bytes":86019,"source_path":"/usr/local/sbin/homelab-command-adapter","source_sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","status":"AUDIT_COMPLETE"} OUTPUT_END CHAT_OUTPUT_END