From 9068f532506003852589bc1294a5f9d61e886307 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Wed, 5 Aug 2026 10:30:33 +0000 Subject: [PATCH] runtime: publish HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z --- ...DING-TRACE-READ-ONLY-20260805T102300Z.json | 38 +++++++++++++++++++ ...NDING-TRACE-READ-ONLY-20260805T102300Z.txt | 34 +++++++++++++++++ runtime/latest.json | 16 ++++---- runtime/latest.txt | 14 +++---- 4 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.json create mode 100644 runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.txt diff --git a/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.json b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.json new file mode 100644 index 0000000..0df0b9f --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "verify", + "component": "cluster-knowledge-base-error-system", + "started_at_utc": "2026-08-05T10:30:33Z", + "finished_at_utc": "2026-08-05T10:30:33Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "3284acfea1c13e8ec59ea2eb99da410d8844a088612af6aef6d60526bffddcb0", + "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": "f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9", + "sanitized_output_sha256": "f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9", + "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-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"correction_of_previous_logic_gap\":{\"exact_fix\":\"separate negative-control exceptions from production variants and derive one bounded filename from the exact compiled RESULT_RE in memory; verify fullmatch and emit only hashes and length\",\"proven_gap\":\"the prior result mixed the expected negative-control NameError into production exception classification, while successful variants read only the manifest and did not prove a filename accepted by the exact RESULT_RE\",\"regression_test\":\"a regex not covered by the old hard-coded candidates must yield a verified matching filename, trigger both manifest and result-file reads, return structured JSON, and keep the negative-control NameError classification-isolated\"},\"error_fingerprint\":\"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047\",\"latest_exact_result_basis\":{\"capsule_sha256\":\"5ff4ff8183c11fb356da0ed1fd0199408ea8c6ddd2cd47858a2878da5d55f43b\",\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-SANDBOX-GLOBAL-BINDING-FIX-READ-ONLY-20260805T101800Z\",\"command_rc\":0,\"control_plane_error\":null,\"error_fingerprint\":\"710c2ff6ffab246cdeee319e83f650f33579824a72451450821eec3e98894a98\",\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_UNRESOLVED_GLOBAL_BINDING_TRACE\",\"output_complete\":true,\"output_sha256\":\"8da3c12ce5470a5e17ad5c50e548c57dc3f80d6483fadfe2fc0bd7d013d717e1\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN\",\"runner_document_rc\":0,\"runner_json_sha256\":\"2c7b112545cda004239a341608d7fea55da9d46c0792586c5020c8ad3d07a217\",\"runner_rc\":0,\"runner_text_sha256\":\"5f12c1d6b790e4724b0208d95505e4cb701476f8c0853b3906a259b5fa0e3045\",\"runner_wrapper_matches_document\":true,\"status\":\"OK\"},\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX\",\"output_truncated_in_json\":false,\"owned_listeners\":[{\"address_class\":\"private\",\"address_sha256\":\"fb345731d21c612ed2cb13088c10fd26bac959c79a7634cb55e23ee6bfb428d9\",\"family\":\"ipv4\",\"inode\":\"24795\",\"port\":18788}],\"pre_command_known_error_gate\":{\"checked\":true,\"items\":[{\"id\":\"candidate-scan-limit-20260805\",\"prevention\":\"exact files only; bounded AST, simulation, response and output limits\"},{\"id\":\"runner-wrapper-mismatch-20260805\",\"prevention\":\"single compact JSON below 42000 bytes; no raw source, secret or response body\"},{\"id\":\"gitea-owner-hardcoded-20260805\",\"prevention\":\"no repository owner, guest ID or repository URL is assumed\"},{\"id\":\"gitea-git-auth-unavailable-20260805\",\"prevention\":\"no Git or Gitea authentication attempt\"},{\"id\":\"pvesh-adapter-context-unreadable-20260805\",\"prevention\":\"the payload does not call pvesh or any real executor\"},{\"id\":\"gitea-process-self-match-20260805\",\"prevention\":\"Reader identity is bound to exact systemd ControlGroup\"},{\"id\":\"sanitize-non-string-attributeerror-20260805\",\"prevention\":\"sanitize converts Any to str; embedded bool test\"},{\"id\":\"reader-path-env-misclassified-as-route-20260805\",\"prevention\":\"PATH and filesystem-like values are excluded from request candidates\"},{\"id\":\"reader-loopback-only-probe-20260805\",\"prevention\":\"owned listeners are inspected but no network connection is made\"},{\"id\":\"reader-capability-not-secret-20260805\",\"prevention\":\"capability values are redacted before every output projection\"},{\"id\":\"reader-systemd-unit-parsed-as-python-20260805\",\"prevention\":\"only the exact Python server source is parsed or compiled\"},{\"id\":\"reader-helper-contract-coverage-gap-20260805\",\"prevention\":\"all handler methods reachable from do_GET/do_HEAD are traced\"},{\"id\":\"reader-capability-root-empty-suffix-404-20260805\",\"prevention\":\"never infer inventory from capability-only paths; trace the exact post-prefix suffix and response branch with fake executors first\"},{\"id\":\"reader-generic-suffix-missed-exact-operation-20260805\",\"prevention\":\"derive route operations from exact compiled branch constants and intersect them with AST path literals before sandbox execution\"},{\"id\":\"reader-feed-500-without-origin-20260805\",\"prevention\":\"before any live feed request, trace global helper reachability, exact executor/file argument origins and caught sandbox exceptions; health alone never proves inventory safety\"},{\"id\":\"reader-sandbox-global-binding-undefined-20260805\",\"prevention\":\"materialize reachable module globals only through a strict AST allowlist; Path joins and re.compile are allowed, arbitrary calls are blocked, and MANIFEST/RESULTS/RESULT_RE are regression-tested before any live request\"},{\"id\":\"reader-negative-control-exception-polluted-classification-20260805\",\"prevention\":\"negative-control exceptions are reported separately and can never determine the production readiness classification\"},{\"id\":\"reader-result-regex-candidate-not-proven-20260805\",\"prevention\":\"derive one bounded matching filename from the exact compiled RESULT_RE in memory, verify fullmatch, and emit only length and hashes\"}]},\"prevention_test\":{\"must_run_before_future_cluster_or_gitea_commands\":true,\"name\":\"reader_v3_unresolved_global_binding_and_regex_preflight\",\"requirements\":[\"verify exact Reader source SHA and systemd identity\",\"materialize reachable module globals only through the strict AST allowlist\",\"require MANIFEST, RESULTS and RESULT_RE to be bound when referenced by the feed path\",\"derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text\",\"keep negative-control exceptions separate from production readiness\",\"exercise at least two fake read-only file sources and require structured JSON before any live request\",\"block arbitrary assignment calls and every real network, executor or filesystem mutation\",\"never output capability values, private addresses, raw source, regex text or response bodies\"]},\"process_environment\":{\"capability_name_present\":true,\"names\":[\"HOME\",\"HOMELAB_READER_CAPABILITY\",\"HOMELAB_READER_PORT\",\"INVOCATION_ID\",\"JOURNAL_STREAM\",\"LANG\",\"LOGNAME\",\"MEMORY_PRESSURE_WATCH\",\"MEMORY_PRESSURE_WRITE\",\"PATH\",\"SHELL\",\"SYSTEMD_EXEC_PID\",\"USER\"],\"secret_name_count\":1},\"rc\":0,\"read_only\":true,\"ready_for_live_inventory_probe\":false,\"real_executor_calls_made\":false,\"real_file_mutations_made\":false,\"real_network_requests_made\":false,\"result_projection\":{\"bytes_before_projection\":23150,\"compacted\":false,\"max_bytes\":36000},\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN\",\"sandbox_global_binding_trace\":{\"caught_exception_types\":[\"AttributeError\"],\"live_probe_contract_ready\":false,\"negative_control_exception_types\":[\"NameError\"],\"ready_variant_count\":0,\"regex_matching_variant_count\":3,\"variant_count\":4,\"variants\":[{\"all_effects_read_only\":false,\"body_bytes\":13,\"body_sha256\":\"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7\",\"caught_exception_count\":1,\"caught_exceptions\":[{\"line\":60,\"message\":\"name 'MANIFEST' is not defined\",\"message_sha256\":\"7ffaa9a9433abf55defe29684eca6160f703dc251b5b9ab47ccbd33b3dd3411c\",\"symbol\":\"handle_reader\",\"type\":\"NameError\"}],\"content_type\":\"text/plain; charset=utf-8\",\"data_source_call_count\":0,\"effect_call_count\":0,\"effects\":[],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":6,\"excluded_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"],\"include_safe_assignments\":false,\"included_assignment_count\":0,\"included_assignment_names\":[]},\"regex_candidate_contract\":{\"candidate_fullmatch\":false,\"candidate_generated\":false,\"candidate_length\":null,\"candidate_sha256\":null,\"compiled_pattern_present\":false,\"pattern_sha256\":null,\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"expires\",\"pragma\",\"surrogate-control\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":500,\"variant\":\"definitions-plus-resolved-scope-control\"},{\"all_effects_read_only\":true,\"body_bytes\":369,\"body_sha256\":\"4049eba0d723152deaf89bb6262b7f9abbbc508a09cce98afd4de6fa123c37fe\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":{\"top_key_count\":5,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"results\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"pragma\",\"surrogate-control\",\"x-homelab-generation\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":200,\"variant\":\"strict-global-bindings-filename-results\"},{\"all_effects_read_only\":true,\"body_bytes\":2013,\"body_sha256\":\"c82641747a4bca29d18b61a84aa424cedd00a785ed364b7c704c91d6d486dfd7\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":{\"top_key_count\":5,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"results\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"pragma\",\"surrogate-control\",\"x-homelab-generation\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":200,\"variant\":\"manifest-object-results\"},{\"all_effects_read_only\":true,\"body_bytes\":13,\"body_sha256\":\"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7\",\"caught_exception_count\":1,\"caught_exceptions\":[{\"line\":62,\"message\":\"'list' object has no attribute 'get'\",\"message_sha256\":\"73c2dbfd4deaed7a7fafa1d233c6631ae8d7650f0d5f3bce5a9da6386d739734\",\"symbol\":\"handle_reader\",\"type\":\"AttributeError\"}],\"content_type\":\"text/plain; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"expires\",\"pragma\",\"surrogate-control\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":500,\"variant\":\"manifest-list\"}]},\"sanitized_bytecode_branch_trace\":{\"branch_instruction_count\":14,\"branch_literal_count\":7,\"branch_literal_templates\":[\"X-Homelab-Generation\",\"X-Robots-Tag\",\"feed\",\"health\",\"health-v3\",\"include_body\",\"results\"],\"bytecode_disassembly_emitted\":false,\"bytecode_literal_count\":28,\"call_instruction_count\":53,\"code_object_count\":8,\"compile_ok\":true,\"exact_branch_operation_count\":2,\"exact_compiled_operation_count\":2,\"operation_suffixes\":[\"feed\",\"health\"],\"operation_suffixes_sha256\":\"7b2583665af60a5f63c575c89ecaff1cd688710d29507b6d79238e5d9ca5e58b\",\"raw_source_emitted\":false,\"source_literal_count\":2},\"schema\":1,\"source_files\":[{\"actual_sha256\":\"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1\",\"bytes\":580,\"expected_sha256\":\"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1\",\"matches_expected\":true,\"path\":\"/etc/systemd/system/homelab-reader-v3.service\"},{\"actual_sha256\":\"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536\",\"bytes\":3539,\"expected_sha256\":\"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536\",\"matches_expected\":true,\"path\":\"/usr/local/sbin/homelab-reader-server-v3\"}],\"source_selection\":{\"raw_source_emitted\":false,\"selected_path\":\"/usr/local/sbin/homelab-reader-server-v3\",\"systemd_unit_excluded\":true},\"source_state\":\"MATCH\",\"static_executor_argument_origin_trace\":{\"all_resolved_origins_read_only\":true,\"call_edge_count\":3,\"call_edges\":[{\"from\":\"Handler.do_GET\",\"to\":\"Handler.handle_reader\"},{\"from\":\"Handler.do_HEAD\",\"to\":\"Handler.handle_reader\"},{\"from\":\"Handler.handle_reader\",\"to\":\"Handler.reply\"}],\"handler_roots\":[\"Handler.do_GET\",\"Handler.do_HEAD\"],\"raw_source_emitted\":false,\"reachable_data_origin_count\":2,\"reachable_data_origins\":[{\"argument_origin_names\":[],\"argument_resolved\":false,\"call\":\"MANIFEST.read_bytes\",\"evidence_sha256\":\"3b9f9140c901f027be26f124b8c983ccfddbb3a62b03a416b5e7bfbb19f9fe59\",\"kind\":\"file\",\"mode\":\"r\",\"origin_symbol\":\"Handler.handle_reader\",\"path_class\":null,\"path_sha256\":null,\"read_only_basis\":\"file_read\",\"read_only_proven\":true},{\"argument_origin_names\":[],\"argument_resolved\":false,\"call\":\"target.read_bytes\",\"evidence_sha256\":\"aa896c2be567c54cf2da0cf24792da33575188def3c5d95fda4745ed3de4fdaf\",\"kind\":\"file\",\"mode\":\"r\",\"origin_symbol\":\"Handler.handle_reader\",\"path_class\":null,\"path_sha256\":null,\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"reachable_symbol_count\":4,\"reachable_symbols\":[\"Handler.do_GET\",\"Handler.do_HEAD\",\"Handler.handle_reader\",\"Handler.reply\"],\"unresolved_origin_count\":2},\"static_response_trace\":{\"ast_parse_ok\":true,\"capability_prefix_count\":1,\"capability_prefix_templates\":[\"//\"],\"handler_count\":1,\"reachable_methods\":[\"do_GET\",\"do_HEAD\",\"handle_reader\",\"reply\"],\"resolved_scope_names\":[\"CAPABILITY\",\"PORT\"],\"source_suffix_literal_count\":2,\"source_suffix_literal_templates\":[\"feed\",\"health\"]},\"status\":\"OK\",\"systemd_identity\":{\"identity_valid\":true,\"pid_count\":1,\"probe\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_bytes\":375,\"stdout_sha256\":\"49094d65d3787c1479e6408e1fefb7af3758d0fa55e1d37bf22907442aab35e9\",\"stdout_truncated\":false},\"properties\":{\"ActiveState\":\"active\",\"ControlGroup\":\"/system.slice/homelab-reader-v3.service\",\"ExecStart_present\":true,\"ExecStart_sha256\":\"2500fde09569176736b4f2f1dd29d6289b6a6ae6a59b52b6a3c31f797f567379\",\"FragmentPath\":\"/etc/systemd/system/homelab-reader-v3.service\",\"LoadState\":\"loaded\",\"MainPID\":\"1282\",\"SubState\":\"running\"}}}\n" +} diff --git a/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.txt b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.txt new file mode 100644 index 0000000..72792a8 --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=verify +COMPONENT=cluster-knowledge-base-error-system +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=3284acfea1c13e8ec59ea2eb99da410d8844a088612af6aef6d60526bffddcb0 +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=f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9 +SANITIZED_OUTPUT_SHA256=f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9 +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"mutation_outcome":"NO_MUTATION","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"correction_of_previous_logic_gap":{"exact_fix":"separate negative-control exceptions from production variants and derive one bounded filename from the exact compiled RESULT_RE in memory; verify fullmatch and emit only hashes and length","proven_gap":"the prior result mixed the expected negative-control NameError into production exception classification, while successful variants read only the manifest and did not prove a filename accepted by the exact RESULT_RE","regression_test":"a regex not covered by the old hard-coded candidates must yield a verified matching filename, trigger both manifest and result-file reads, return structured JSON, and keep the negative-control NameError classification-isolated"},"error_fingerprint":"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047","latest_exact_result_basis":{"capsule_sha256":"5ff4ff8183c11fb356da0ed1fd0199408ea8c6ddd2cd47858a2878da5d55f43b","changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-SANDBOX-GLOBAL-BINDING-FIX-READ-ONLY-20260805T101800Z","command_rc":0,"control_plane_error":null,"error_fingerprint":"710c2ff6ffab246cdeee319e83f650f33579824a72451450821eec3e98894a98","mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_UNRESOLVED_GLOBAL_BINDING_TRACE","output_complete":true,"output_sha256":"8da3c12ce5470a5e17ad5c50e548c57dc3f80d6483fadfe2fc0bd7d013d717e1","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"root_cause_classification":"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN","runner_document_rc":0,"runner_json_sha256":"2c7b112545cda004239a341608d7fea55da9d46c0792586c5020c8ad3d07a217","runner_rc":0,"runner_text_sha256":"5f12c1d6b790e4724b0208d95505e4cb701476f8c0853b3906a259b5fa0e3045","runner_wrapper_matches_document":true,"status":"OK"},"mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX","output_truncated_in_json":false,"owned_listeners":[{"address_class":"private","address_sha256":"fb345731d21c612ed2cb13088c10fd26bac959c79a7634cb55e23ee6bfb428d9","family":"ipv4","inode":"24795","port":18788}],"pre_command_known_error_gate":{"checked":true,"items":[{"id":"candidate-scan-limit-20260805","prevention":"exact files only; bounded AST, simulation, response and output limits"},{"id":"runner-wrapper-mismatch-20260805","prevention":"single compact JSON below 42000 bytes; no raw source, secret or response body"},{"id":"gitea-owner-hardcoded-20260805","prevention":"no repository owner, guest ID or repository URL is assumed"},{"id":"gitea-git-auth-unavailable-20260805","prevention":"no Git or Gitea authentication attempt"},{"id":"pvesh-adapter-context-unreadable-20260805","prevention":"the payload does not call pvesh or any real executor"},{"id":"gitea-process-self-match-20260805","prevention":"Reader identity is bound to exact systemd ControlGroup"},{"id":"sanitize-non-string-attributeerror-20260805","prevention":"sanitize converts Any to str; embedded bool test"},{"id":"reader-path-env-misclassified-as-route-20260805","prevention":"PATH and filesystem-like values are excluded from request candidates"},{"id":"reader-loopback-only-probe-20260805","prevention":"owned listeners are inspected but no network connection is made"},{"id":"reader-capability-not-secret-20260805","prevention":"capability values are redacted before every output projection"},{"id":"reader-systemd-unit-parsed-as-python-20260805","prevention":"only the exact Python server source is parsed or compiled"},{"id":"reader-helper-contract-coverage-gap-20260805","prevention":"all handler methods reachable from do_GET/do_HEAD are traced"},{"id":"reader-capability-root-empty-suffix-404-20260805","prevention":"never infer inventory from capability-only paths; trace the exact post-prefix suffix and response branch with fake executors first"},{"id":"reader-generic-suffix-missed-exact-operation-20260805","prevention":"derive route operations from exact compiled branch constants and intersect them with AST path literals before sandbox execution"},{"id":"reader-feed-500-without-origin-20260805","prevention":"before any live feed request, trace global helper reachability, exact executor/file argument origins and caught sandbox exceptions; health alone never proves inventory safety"},{"id":"reader-sandbox-global-binding-undefined-20260805","prevention":"materialize reachable module globals only through a strict AST allowlist; Path joins and re.compile are allowed, arbitrary calls are blocked, and MANIFEST/RESULTS/RESULT_RE are regression-tested before any live request"},{"id":"reader-negative-control-exception-polluted-classification-20260805","prevention":"negative-control exceptions are reported separately and can never determine the production readiness classification"},{"id":"reader-result-regex-candidate-not-proven-20260805","prevention":"derive one bounded matching filename from the exact compiled RESULT_RE in memory, verify fullmatch, and emit only length and hashes"}]},"prevention_test":{"must_run_before_future_cluster_or_gitea_commands":true,"name":"reader_v3_unresolved_global_binding_and_regex_preflight","requirements":["verify exact Reader source SHA and systemd identity","materialize reachable module globals only through the strict AST allowlist","require MANIFEST, RESULTS and RESULT_RE to be bound when referenced by the feed path","derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text","keep negative-control exceptions separate from production readiness","exercise at least two fake read-only file sources and require structured JSON before any live request","block arbitrary assignment calls and every real network, executor or filesystem mutation","never output capability values, private addresses, raw source, regex text or response bodies"]},"process_environment":{"capability_name_present":true,"names":["HOME","HOMELAB_READER_CAPABILITY","HOMELAB_READER_PORT","INVOCATION_ID","JOURNAL_STREAM","LANG","LOGNAME","MEMORY_PRESSURE_WATCH","MEMORY_PRESSURE_WRITE","PATH","SHELL","SYSTEMD_EXEC_PID","USER"],"secret_name_count":1},"rc":0,"read_only":true,"ready_for_live_inventory_probe":false,"real_executor_calls_made":false,"real_file_mutations_made":false,"real_network_requests_made":false,"result_projection":{"bytes_before_projection":23150,"compacted":false,"max_bytes":36000},"rollback_restored":null,"rollback_started":false,"root_cause_classification":"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN","sandbox_global_binding_trace":{"caught_exception_types":["AttributeError"],"live_probe_contract_ready":false,"negative_control_exception_types":["NameError"],"ready_variant_count":0,"regex_matching_variant_count":3,"variant_count":4,"variants":[{"all_effects_read_only":false,"body_bytes":13,"body_sha256":"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7","caught_exception_count":1,"caught_exceptions":[{"line":60,"message":"name 'MANIFEST' is not defined","message_sha256":"7ffaa9a9433abf55defe29684eca6160f703dc251b5b9ab47ccbd33b3dd3411c","symbol":"handle_reader","type":"NameError"}],"content_type":"text/plain; charset=utf-8","data_source_call_count":0,"effect_call_count":0,"effects":[],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":6,"excluded_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"],"include_safe_assignments":false,"included_assignment_count":0,"included_assignment_names":[]},"regex_candidate_contract":{"candidate_fullmatch":false,"candidate_generated":false,"candidate_length":null,"candidate_sha256":null,"compiled_pattern_present":false,"pattern_sha256":null,"pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","expires","pragma","surrogate-control","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":500,"variant":"definitions-plus-resolved-scope-control"},{"all_effects_read_only":true,"body_bytes":369,"body_sha256":"4049eba0d723152deaf89bb6262b7f9abbbc508a09cce98afd4de6fa123c37fe","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":{"top_key_count":5,"top_keys":["entries","files","generation","items","results"],"type":"dict"},"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","etag","expires","pragma","surrogate-control","x-homelab-generation","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":200,"variant":"strict-global-bindings-filename-results"},{"all_effects_read_only":true,"body_bytes":2013,"body_sha256":"c82641747a4bca29d18b61a84aa424cedd00a785ed364b7c704c91d6d486dfd7","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":{"top_key_count":5,"top_keys":["entries","files","generation","items","results"],"type":"dict"},"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","etag","expires","pragma","surrogate-control","x-homelab-generation","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":200,"variant":"manifest-object-results"},{"all_effects_read_only":true,"body_bytes":13,"body_sha256":"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7","caught_exception_count":1,"caught_exceptions":[{"line":62,"message":"'list' object has no attribute 'get'","message_sha256":"73c2dbfd4deaed7a7fafa1d233c6631ae8d7650f0d5f3bce5a9da6386d739734","symbol":"handle_reader","type":"AttributeError"}],"content_type":"text/plain; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","expires","pragma","surrogate-control","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":500,"variant":"manifest-list"}]},"sanitized_bytecode_branch_trace":{"branch_instruction_count":14,"branch_literal_count":7,"branch_literal_templates":["X-Homelab-Generation","X-Robots-Tag","feed","health","health-v3","include_body","results"],"bytecode_disassembly_emitted":false,"bytecode_literal_count":28,"call_instruction_count":53,"code_object_count":8,"compile_ok":true,"exact_branch_operation_count":2,"exact_compiled_operation_count":2,"operation_suffixes":["feed","health"],"operation_suffixes_sha256":"7b2583665af60a5f63c575c89ecaff1cd688710d29507b6d79238e5d9ca5e58b","raw_source_emitted":false,"source_literal_count":2},"schema":1,"source_files":[{"actual_sha256":"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1","bytes":580,"expected_sha256":"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1","matches_expected":true,"path":"/etc/systemd/system/homelab-reader-v3.service"},{"actual_sha256":"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536","bytes":3539,"expected_sha256":"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536","matches_expected":true,"path":"/usr/local/sbin/homelab-reader-server-v3"}],"source_selection":{"raw_source_emitted":false,"selected_path":"/usr/local/sbin/homelab-reader-server-v3","systemd_unit_excluded":true},"source_state":"MATCH","static_executor_argument_origin_trace":{"all_resolved_origins_read_only":true,"call_edge_count":3,"call_edges":[{"from":"Handler.do_GET","to":"Handler.handle_reader"},{"from":"Handler.do_HEAD","to":"Handler.handle_reader"},{"from":"Handler.handle_reader","to":"Handler.reply"}],"handler_roots":["Handler.do_GET","Handler.do_HEAD"],"raw_source_emitted":false,"reachable_data_origin_count":2,"reachable_data_origins":[{"argument_origin_names":[],"argument_resolved":false,"call":"MANIFEST.read_bytes","evidence_sha256":"3b9f9140c901f027be26f124b8c983ccfddbb3a62b03a416b5e7bfbb19f9fe59","kind":"file","mode":"r","origin_symbol":"Handler.handle_reader","path_class":null,"path_sha256":null,"read_only_basis":"file_read","read_only_proven":true},{"argument_origin_names":[],"argument_resolved":false,"call":"target.read_bytes","evidence_sha256":"aa896c2be567c54cf2da0cf24792da33575188def3c5d95fda4745ed3de4fdaf","kind":"file","mode":"r","origin_symbol":"Handler.handle_reader","path_class":null,"path_sha256":null,"read_only_basis":"file_read","read_only_proven":true}],"reachable_symbol_count":4,"reachable_symbols":["Handler.do_GET","Handler.do_HEAD","Handler.handle_reader","Handler.reply"],"unresolved_origin_count":2},"static_response_trace":{"ast_parse_ok":true,"capability_prefix_count":1,"capability_prefix_templates":["//"],"handler_count":1,"reachable_methods":["do_GET","do_HEAD","handle_reader","reply"],"resolved_scope_names":["CAPABILITY","PORT"],"source_suffix_literal_count":2,"source_suffix_literal_templates":["feed","health"]},"status":"OK","systemd_identity":{"identity_valid":true,"pid_count":1,"probe":{"duration_seconds":0.007,"rc":0,"stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_bytes":375,"stdout_sha256":"49094d65d3787c1479e6408e1fefb7af3758d0fa55e1d37bf22907442aab35e9","stdout_truncated":false},"properties":{"ActiveState":"active","ControlGroup":"/system.slice/homelab-reader-v3.service","ExecStart_present":true,"ExecStart_sha256":"2500fde09569176736b4f2f1dd29d6289b6a6ae6a59b52b6a3c31f797f567379","FragmentPath":"/etc/systemd/system/homelab-reader-v3.service","LoadState":"loaded","MainPID":"1282","SubState":"running"}}} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index d0aba4b..0df0b9f 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "HOMELAB-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z", + "command_id": "HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z", "status": "OK", "rc": 0, "host": "pve01", "mode": "verify", - "component": "skladchik-runtime-exact-summary-read-only", - "started_at_utc": "2026-08-05T10:29:54Z", - "finished_at_utc": "2026-08-05T10:29:54Z", + "component": "cluster-knowledge-base-error-system", + "started_at_utc": "2026-08-05T10:30:33Z", + "finished_at_utc": "2026-08-05T10:30:33Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "be3e707d94385f364171e799ae8a27db2a26e9a44feda2c7cdd02a21935a9741", + "command_sha256": "3284acfea1c13e8ec59ea2eb99da410d8844a088612af6aef6d60526bffddcb0", "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": "f19a8cf0f70a091ebc7f9956c9c8e5df934d2fd7369dde5d47afd2241fba9450", - "sanitized_output_sha256": "f19a8cf0f70a091ebc7f9956c9c8e5df934d2fd7369dde5d47afd2241fba9450", + "raw_evidence_sha256": "f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9", + "sanitized_output_sha256": "f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9", "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-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"analysis_ready\":false,\"auth_artifacts\":[],\"changes_made\":false,\"command_id\":\"HOMELAB-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"TARGET_FAILED_EXECUTION_PATH_FROM_UNIT_AND_JOURNAL\",\"output_truncated_in_json\":false,\"projection_bytes\":8878,\"rc\":0,\"read_only\":true,\"related_runtime_files\":[{\"binary\":false,\"bytes\":182,\"env_key_names\":[],\"hits\":[{\"line\":2,\"terms\":[],\"text\":\"Description=Skladchik reports monitor full supervisor\"},{\"line\":7,\"terms\":[],\"text\":\"ExecStart=/usr/local/sbin/skladchik-reports-monitor-supervisor check\"}],\"path\":\"/etc/systemd/system/skladchik-reports-monitor-supervisor.service\",\"sha256\":\"e874fb03573b76181f3eb812c7285848e60705923c172a2f102504a7b9100ef7\",\"terms\":[]},{\"binary\":false,\"bytes\":20598,\"env_key_names\":[],\"hits\":[{\"line\":12,\"terms\":[],\"text\":\"EDGE = os.environ.get(\\\"SKLADCHIK_EDGE\\\", \\\"debian@\\\")\"},{\"line\":13,\"terms\":[],\"text\":\"STATE_DIR = Path(\\\"/var/lib/skladchik-reports-monitor-supervisor\\\")\"},{\"line\":14,\"terms\":[],\"text\":\"LOG_DIR = Path(\\\"/var/log/skladchik-reports-monitor-supervisor\\\")\"},{\"line\":19,\"terms\":[],\"text\":\"MONITOR_HEALTH_AGE_MAX = int(os.environ.get(\\\"SKLADCHIK_MONITOR_HEALTH_MAX_SECONDS\\\", \\\"600\\\"))\"},{\"line\":20,\"terms\":[],\"text\":\"BACKUP_HEALTH_AGE_MAX = int(os.environ.get(\\\"SKLADCHIK_BACKUP_HEALTH_MAX_SECONDS\\\", \\\"129600\\\"))\"},{\"line\":21,\"terms\":[],\"text\":\"RESTORE_HEALTH_AGE_MAX = int(os.environ.get(\\\"SKLADCHIK_RESTORE_HEALTH_MAX_SECONDS\\\", \\\"691200\\\"))\"}],\"path\":\"/usr/local/sbin/skladchik-reports-monitor-supervisor\",\"sha256\":\"bd40ee19ea8b277d52f4240b97d3c79b825c90154272bac8a43004591bd0ddc3\",\"terms\":[]}],\"repo_evidence\":{\"matching_files\":[{\"binary\":null,\"bytes\":1340,\"env_key_names\":[],\"hits\":[{\"line\":4,\"terms\":[\"skladchik\"],\"text\":\"\\\"branch\\\": \\\"cr-2026-0007-skladchik-controlled-reauth\\\",\"},{\"line\":6,\"terms\":[\"skladchik\"],\"text\":\"\\\"scope\\\": \\\"controlled Skladchik monitor reauthentication with strict known_hosts\\\",\"},{\"line\":9,\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\"],\"text\":\"\\\"task_id\\\": \\\"skladchik-reports-monitor-controlled-reauth-v1\\\",\"},{\"line\":23,\"terms\":[\"skladchik\"],\"text\":\"\\\"active_skladchik_sources_versioned\\\": 5,\"}],\"path\":\"changes/CR-2026-0007/plan.json\",\"sha256\":\"9a1cd77ebb9a880869aa24711408a88abadddd3ac4e43b04510e8ac13ba545c2\",\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\"]},{\"binary\":null,\"bytes\":3498,\"env_key_names\":[],\"hits\":[{\"line\":1,\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\"],\"text\":\"31ddb9088f30e892690e3dd7fe184b8da113d473dd4744fc7d78857d9b43b272 tasks/skladchik-reports-monitor-controlled-reauth-v1/README.txt\"},{\"line\":2,\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\",\"cookie\"],\"text\":\"b13d846cf089d450e3d5ac9e85ad1e232c198930e466bb8b82f6983a4d48ce0e tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge/skladchik-reports-monitor-cookie-update-edge\"},{\"line\":3,\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\"],\"text\":\"971b63baa5c9d9e0391e9adf8c289406e8da408a1aeb32e089740272eb280bd9 tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-dry-run.sh\"},{\"line\":4,\"terms\":[\"skladchik-reports-monitor\",\"skladchik\",\"report\"],\"text\":\"bc46788a8f7dbe50b7ef600727f72b76981a23fdfc026cd10ba857fad9edb0e1 tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-preflight.sh\"}],\"path\":\"changes/CR-2026-0007/task-package.sha256\",\"sha256\":\"40515974b5cb0acac0e1d4c1b6f1eea95f71a9df093304e65c1c66cc9b820356\",\"terms\":[\"skladchik-reports-monitor-supervisor\",\"skladchik-reports-monitor\",\"skladchik\",\"report\",\"cookie\"]}],\"tracked_path_markers\":[\"docs/skladchik-cookie-refresh.md\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/README.txt\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-dry-run.sh\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-preflight.sh\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-prepare.sh\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-rollback.sh\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-seal.sh\",\"tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-verify.sh\"]},\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"SUPERVISOR_FAILED_RUNTIME_EVIDENCE_CAPTURED\",\"rules_page\":{\"attempts\":[],\"selected_present\":false,\"success\":false,\"target_url\":\"https://az52.skladchik.org/threads/pravila-moderirovanija.163004/\"},\"schema\":1,\"status\":\"OK\",\"systemd\":{\"journal\":{\"last_lines\":[\"2026-08-05T12:36:26+03:00 pve01 systemd[1]: Starting skladchik-reports-monitor-supervisor.service - Skladchik reports monitor full supervisor...\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_STATUS=FAIL\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_MAIL_SENT=no\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_PROBLEMS=backup_health_stale,restore_health_stale,skladchik_reports_monitor_backup_timer_bad,skladchik_reports_monitor_backup_restore_check_timer_bad\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: MONITOR=OK reports=27 open=18 resolved=9\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: BACKUP=OK run=20260724T012808Z\",\"2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: RESTORE=OK run=20260719T021125Z\",\"2026-08-05T12:36:27+03:00 pve01 systemd[1]: skladchik-reports-monitor-supervisor.service: Main process exited, code=exited, status=1/FAILURE\"],\"rc\":0,\"stderr\":\"\",\"stdout_bytes\":21504,\"stdout_sha256\":\"27dcacde03b29a70cafadc8c9bf47a602539b15ce51987d93b5eb8e1fb26d307\"},\"service\":\"skladchik-reports-monitor-supervisor.service\",\"show\":{\"ActiveEnterTimestamp\":\"\",\"ActiveState\":\"failed\",\"DropInPaths\":\"\",\"ExecMainCode\":\"1\",\"ExecMainStatus\":\"1\",\"ExecStart\":\"{ path=/usr/local/sbin/skladchik-reports-monitor-supervisor ; argv[]=/usr/local/sbin/skladchik-reports-monitor-supervisor check ; ignore_errors=no ; start_time=[Wed 2026-08-05 13:16:26 MSK] ; stop_time=[Wed 2026-08-05 13:16:27 MSK] ; pid=2400803 ; code=exited ; status=1 }\",\"FragmentPath\":\"/etc/systemd/system/skladchik-reports-monitor-supervisor.service\",\"Group\":\"\",\"InactiveExitTimestamp\":\"Wed 2026-08-05 13:16:26 MSK\",\"LoadState\":\"loaded\",\"NRestarts\":\"0\",\"Restart\":\"no\",\"RestartUSec\":\"100ms\",\"Result\":\"exit-code\",\"RootDirectory\":\"\",\"StateChangeTimestamp\":\"Wed 2026-08-05 13:16:27 MSK\",\"SubState\":\"failed\",\"User\":\"\",\"WorkingDirectory\":\"\",\"probe\":{\"duration_seconds\":0.006,\"rc\":0,\"stderr\":\"\",\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"5a1e3fc2dd8927afa2c98b5dec56bf6a508604e39d9c33bbae80f32db21fc7b4\"}},\"unit\":{\"rc\":0,\"stderr\":\"\",\"text\":\"# /etc/systemd/system/skladchik-reports-monitor-supervisor.service\\n[Unit]\\nDescription=Skladchik reports monitor full supervisor\\nAfter=network-online.target\\n\\n[Service]\\nType=oneshot\\nExecStart=/usr/local/sbin/skladchik-reports-monitor-supervisor check\",\"text_sha256\":\"29e5210aa4e7492b22674d5ce7b0366ba8a92ec23dfacb28b99d141c1bd3b198\"}},\"target_execution\":{\"control_plane_error\":null,\"runner_document_rc\":0,\"runner_rc\":0,\"runner_status\":\"OK\",\"runner_wrapper_matches_document\":true,\"state_status\":\"OK\",\"task_result_contract\":{\"changes_made\":false,\"command_id\":\"HOMELAB-SKLADCHIK-RUNTIME-TOPOLOGY-RULES-AUTH-READ-ONLY-20260805T101800Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}},\"target_identity\":{\"capsule_sha256\":\"d28db98524b6f8b3e5e6759effff662691505994c6f394057eeded532eb1e0db\",\"command_id\":\"HOMELAB-SKLADCHIK-RUNTIME-TOPOLOGY-RULES-AUTH-READ-ONLY-20260805T101800Z\",\"full_output_sha_verified\":true,\"output_sha256\":\"5d925702fd34664dba7dcd0c107505d45ccf56bddaa95c8849571cd221f2da49\",\"runner_json_sha256\":\"381b67138a8a6e9ddbfa006ba6b70f7ec919915a14f8df042dcaf6046ecd3cee\",\"runner_text_sha256\":\"cb07ca7e740cd0ab2b2950328a99761ce19fcc7b7cd63b419de0c326a268cea2\"},\"virtualization\":{\"matching_guest_configs\":[],\"pct\":{\"rc\":255,\"relevant_lines\":[],\"stderr\":\"ipcc_send_rec[1] failed: Unknown error -1 ipcc_send_rec[2] failed: Unknown error -1 ipcc_send_rec[3] failed: Unknown error -1 Unable to load access control list: Unknown error -1\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"podman\":{\"rc\":0,\"relevant_lines\":[],\"stderr\":\"\",\"stdout_sha256\":\"fd06fb7ad7e6d8248b40e67821d7572fc71bb2c3dc27ebc52d99b254b0d1e2ef\"},\"qm\":{\"rc\":255,\"relevant_lines\":[],\"stderr\":\"ipcc_send_rec[1] failed: Unknown error -1 ipcc_send_rec[2] failed: Unknown error -1 ipcc_send_rec[3] failed: Unknown error -1 Unable to load access control list: Unknown error -1\",\"stdout_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}}}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"mutation_outcome\":\"NO_MUTATION\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"correction_of_previous_logic_gap\":{\"exact_fix\":\"separate negative-control exceptions from production variants and derive one bounded filename from the exact compiled RESULT_RE in memory; verify fullmatch and emit only hashes and length\",\"proven_gap\":\"the prior result mixed the expected negative-control NameError into production exception classification, while successful variants read only the manifest and did not prove a filename accepted by the exact RESULT_RE\",\"regression_test\":\"a regex not covered by the old hard-coded candidates must yield a verified matching filename, trigger both manifest and result-file reads, return structured JSON, and keep the negative-control NameError classification-isolated\"},\"error_fingerprint\":\"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047\",\"latest_exact_result_basis\":{\"capsule_sha256\":\"5ff4ff8183c11fb356da0ed1fd0199408ea8c6ddd2cd47858a2878da5d55f43b\",\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-SANDBOX-GLOBAL-BINDING-FIX-READ-ONLY-20260805T101800Z\",\"command_rc\":0,\"control_plane_error\":null,\"error_fingerprint\":\"710c2ff6ffab246cdeee319e83f650f33579824a72451450821eec3e98894a98\",\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_UNRESOLVED_GLOBAL_BINDING_TRACE\",\"output_complete\":true,\"output_sha256\":\"8da3c12ce5470a5e17ad5c50e548c57dc3f80d6483fadfe2fc0bd7d013d717e1\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN\",\"runner_document_rc\":0,\"runner_json_sha256\":\"2c7b112545cda004239a341608d7fea55da9d46c0792586c5020c8ad3d07a217\",\"runner_rc\":0,\"runner_text_sha256\":\"5f12c1d6b790e4724b0208d95505e4cb701476f8c0853b3906a259b5fa0e3045\",\"runner_wrapper_matches_document\":true,\"status\":\"OK\"},\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX\",\"output_truncated_in_json\":false,\"owned_listeners\":[{\"address_class\":\"private\",\"address_sha256\":\"fb345731d21c612ed2cb13088c10fd26bac959c79a7634cb55e23ee6bfb428d9\",\"family\":\"ipv4\",\"inode\":\"24795\",\"port\":18788}],\"pre_command_known_error_gate\":{\"checked\":true,\"items\":[{\"id\":\"candidate-scan-limit-20260805\",\"prevention\":\"exact files only; bounded AST, simulation, response and output limits\"},{\"id\":\"runner-wrapper-mismatch-20260805\",\"prevention\":\"single compact JSON below 42000 bytes; no raw source, secret or response body\"},{\"id\":\"gitea-owner-hardcoded-20260805\",\"prevention\":\"no repository owner, guest ID or repository URL is assumed\"},{\"id\":\"gitea-git-auth-unavailable-20260805\",\"prevention\":\"no Git or Gitea authentication attempt\"},{\"id\":\"pvesh-adapter-context-unreadable-20260805\",\"prevention\":\"the payload does not call pvesh or any real executor\"},{\"id\":\"gitea-process-self-match-20260805\",\"prevention\":\"Reader identity is bound to exact systemd ControlGroup\"},{\"id\":\"sanitize-non-string-attributeerror-20260805\",\"prevention\":\"sanitize converts Any to str; embedded bool test\"},{\"id\":\"reader-path-env-misclassified-as-route-20260805\",\"prevention\":\"PATH and filesystem-like values are excluded from request candidates\"},{\"id\":\"reader-loopback-only-probe-20260805\",\"prevention\":\"owned listeners are inspected but no network connection is made\"},{\"id\":\"reader-capability-not-secret-20260805\",\"prevention\":\"capability values are redacted before every output projection\"},{\"id\":\"reader-systemd-unit-parsed-as-python-20260805\",\"prevention\":\"only the exact Python server source is parsed or compiled\"},{\"id\":\"reader-helper-contract-coverage-gap-20260805\",\"prevention\":\"all handler methods reachable from do_GET/do_HEAD are traced\"},{\"id\":\"reader-capability-root-empty-suffix-404-20260805\",\"prevention\":\"never infer inventory from capability-only paths; trace the exact post-prefix suffix and response branch with fake executors first\"},{\"id\":\"reader-generic-suffix-missed-exact-operation-20260805\",\"prevention\":\"derive route operations from exact compiled branch constants and intersect them with AST path literals before sandbox execution\"},{\"id\":\"reader-feed-500-without-origin-20260805\",\"prevention\":\"before any live feed request, trace global helper reachability, exact executor/file argument origins and caught sandbox exceptions; health alone never proves inventory safety\"},{\"id\":\"reader-sandbox-global-binding-undefined-20260805\",\"prevention\":\"materialize reachable module globals only through a strict AST allowlist; Path joins and re.compile are allowed, arbitrary calls are blocked, and MANIFEST/RESULTS/RESULT_RE are regression-tested before any live request\"},{\"id\":\"reader-negative-control-exception-polluted-classification-20260805\",\"prevention\":\"negative-control exceptions are reported separately and can never determine the production readiness classification\"},{\"id\":\"reader-result-regex-candidate-not-proven-20260805\",\"prevention\":\"derive one bounded matching filename from the exact compiled RESULT_RE in memory, verify fullmatch, and emit only length and hashes\"}]},\"prevention_test\":{\"must_run_before_future_cluster_or_gitea_commands\":true,\"name\":\"reader_v3_unresolved_global_binding_and_regex_preflight\",\"requirements\":[\"verify exact Reader source SHA and systemd identity\",\"materialize reachable module globals only through the strict AST allowlist\",\"require MANIFEST, RESULTS and RESULT_RE to be bound when referenced by the feed path\",\"derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text\",\"keep negative-control exceptions separate from production readiness\",\"exercise at least two fake read-only file sources and require structured JSON before any live request\",\"block arbitrary assignment calls and every real network, executor or filesystem mutation\",\"never output capability values, private addresses, raw source, regex text or response bodies\"]},\"process_environment\":{\"capability_name_present\":true,\"names\":[\"HOME\",\"HOMELAB_READER_CAPABILITY\",\"HOMELAB_READER_PORT\",\"INVOCATION_ID\",\"JOURNAL_STREAM\",\"LANG\",\"LOGNAME\",\"MEMORY_PRESSURE_WATCH\",\"MEMORY_PRESSURE_WRITE\",\"PATH\",\"SHELL\",\"SYSTEMD_EXEC_PID\",\"USER\"],\"secret_name_count\":1},\"rc\":0,\"read_only\":true,\"ready_for_live_inventory_probe\":false,\"real_executor_calls_made\":false,\"real_file_mutations_made\":false,\"real_network_requests_made\":false,\"result_projection\":{\"bytes_before_projection\":23150,\"compacted\":false,\"max_bytes\":36000},\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN\",\"sandbox_global_binding_trace\":{\"caught_exception_types\":[\"AttributeError\"],\"live_probe_contract_ready\":false,\"negative_control_exception_types\":[\"NameError\"],\"ready_variant_count\":0,\"regex_matching_variant_count\":3,\"variant_count\":4,\"variants\":[{\"all_effects_read_only\":false,\"body_bytes\":13,\"body_sha256\":\"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7\",\"caught_exception_count\":1,\"caught_exceptions\":[{\"line\":60,\"message\":\"name 'MANIFEST' is not defined\",\"message_sha256\":\"7ffaa9a9433abf55defe29684eca6160f703dc251b5b9ab47ccbd33b3dd3411c\",\"symbol\":\"handle_reader\",\"type\":\"NameError\"}],\"content_type\":\"text/plain; charset=utf-8\",\"data_source_call_count\":0,\"effect_call_count\":0,\"effects\":[],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":6,\"excluded_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"],\"include_safe_assignments\":false,\"included_assignment_count\":0,\"included_assignment_names\":[]},\"regex_candidate_contract\":{\"candidate_fullmatch\":false,\"candidate_generated\":false,\"candidate_length\":null,\"candidate_sha256\":null,\"compiled_pattern_present\":false,\"pattern_sha256\":null,\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"expires\",\"pragma\",\"surrogate-control\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":500,\"variant\":\"definitions-plus-resolved-scope-control\"},{\"all_effects_read_only\":true,\"body_bytes\":369,\"body_sha256\":\"4049eba0d723152deaf89bb6262b7f9abbbc508a09cce98afd4de6fa123c37fe\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":{\"top_key_count\":5,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"results\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"pragma\",\"surrogate-control\",\"x-homelab-generation\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":200,\"variant\":\"strict-global-bindings-filename-results\"},{\"all_effects_read_only\":true,\"body_bytes\":2013,\"body_sha256\":\"c82641747a4bca29d18b61a84aa424cedd00a785ed364b7c704c91d6d486dfd7\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":{\"top_key_count\":5,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"results\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"pragma\",\"surrogate-control\",\"x-homelab-generation\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":200,\"variant\":\"manifest-object-results\"},{\"all_effects_read_only\":true,\"body_bytes\":13,\"body_sha256\":\"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7\",\"caught_exception_count\":1,\"caught_exceptions\":[{\"line\":62,\"message\":\"'list' object has no attribute 'get'\",\"message_sha256\":\"73c2dbfd4deaed7a7fafa1d233c6631ae8d7650f0d5f3bce5a9da6386d739734\",\"symbol\":\"handle_reader\",\"type\":\"AttributeError\"}],\"content_type\":\"text/plain; charset=utf-8\",\"data_source_call_count\":1,\"effect_call_count\":1,\"effects\":[{\"kind\":\"path.read_bytes\",\"mode\":\"r\",\"origin_type\":\"file\",\"path_class\":\"/var\",\"path_sha256\":\"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca\",\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"module_projection\":{\"excluded_assignment_count\":0,\"excluded_assignment_names\":[],\"include_safe_assignments\":true,\"included_assignment_count\":6,\"included_assignment_names\":[\"CAPABILITY\",\"MANIFEST\",\"PORT\",\"RESULTS\",\"RESULT_RE\",\"ROOT\"]},\"regex_candidate_contract\":{\"candidate_fullmatch\":true,\"candidate_generated\":true,\"candidate_length\":70,\"candidate_sha256\":\"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20\",\"compiled_pattern_present\":true,\"pattern_sha256\":\"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c\",\"pattern_text_emitted\":false},\"response_header_names\":[\"cache-control\",\"content-length\",\"content-type\",\"expires\",\"pragma\",\"surrogate-control\",\"x-robots-tag\"],\"route_template\":\"//feed\",\"source_call_count\":3,\"source_calls\":[{\"line\":42,\"symbol\":\"do_GET\"},{\"line\":45,\"symbol\":\"handle_reader\"},{\"line\":23,\"symbol\":\"reply\"}],\"status\":500,\"variant\":\"manifest-list\"}]},\"sanitized_bytecode_branch_trace\":{\"branch_instruction_count\":14,\"branch_literal_count\":7,\"branch_literal_templates\":[\"X-Homelab-Generation\",\"X-Robots-Tag\",\"feed\",\"health\",\"health-v3\",\"include_body\",\"results\"],\"bytecode_disassembly_emitted\":false,\"bytecode_literal_count\":28,\"call_instruction_count\":53,\"code_object_count\":8,\"compile_ok\":true,\"exact_branch_operation_count\":2,\"exact_compiled_operation_count\":2,\"operation_suffixes\":[\"feed\",\"health\"],\"operation_suffixes_sha256\":\"7b2583665af60a5f63c575c89ecaff1cd688710d29507b6d79238e5d9ca5e58b\",\"raw_source_emitted\":false,\"source_literal_count\":2},\"schema\":1,\"source_files\":[{\"actual_sha256\":\"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1\",\"bytes\":580,\"expected_sha256\":\"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1\",\"matches_expected\":true,\"path\":\"/etc/systemd/system/homelab-reader-v3.service\"},{\"actual_sha256\":\"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536\",\"bytes\":3539,\"expected_sha256\":\"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536\",\"matches_expected\":true,\"path\":\"/usr/local/sbin/homelab-reader-server-v3\"}],\"source_selection\":{\"raw_source_emitted\":false,\"selected_path\":\"/usr/local/sbin/homelab-reader-server-v3\",\"systemd_unit_excluded\":true},\"source_state\":\"MATCH\",\"static_executor_argument_origin_trace\":{\"all_resolved_origins_read_only\":true,\"call_edge_count\":3,\"call_edges\":[{\"from\":\"Handler.do_GET\",\"to\":\"Handler.handle_reader\"},{\"from\":\"Handler.do_HEAD\",\"to\":\"Handler.handle_reader\"},{\"from\":\"Handler.handle_reader\",\"to\":\"Handler.reply\"}],\"handler_roots\":[\"Handler.do_GET\",\"Handler.do_HEAD\"],\"raw_source_emitted\":false,\"reachable_data_origin_count\":2,\"reachable_data_origins\":[{\"argument_origin_names\":[],\"argument_resolved\":false,\"call\":\"MANIFEST.read_bytes\",\"evidence_sha256\":\"3b9f9140c901f027be26f124b8c983ccfddbb3a62b03a416b5e7bfbb19f9fe59\",\"kind\":\"file\",\"mode\":\"r\",\"origin_symbol\":\"Handler.handle_reader\",\"path_class\":null,\"path_sha256\":null,\"read_only_basis\":\"file_read\",\"read_only_proven\":true},{\"argument_origin_names\":[],\"argument_resolved\":false,\"call\":\"target.read_bytes\",\"evidence_sha256\":\"aa896c2be567c54cf2da0cf24792da33575188def3c5d95fda4745ed3de4fdaf\",\"kind\":\"file\",\"mode\":\"r\",\"origin_symbol\":\"Handler.handle_reader\",\"path_class\":null,\"path_sha256\":null,\"read_only_basis\":\"file_read\",\"read_only_proven\":true}],\"reachable_symbol_count\":4,\"reachable_symbols\":[\"Handler.do_GET\",\"Handler.do_HEAD\",\"Handler.handle_reader\",\"Handler.reply\"],\"unresolved_origin_count\":2},\"static_response_trace\":{\"ast_parse_ok\":true,\"capability_prefix_count\":1,\"capability_prefix_templates\":[\"//\"],\"handler_count\":1,\"reachable_methods\":[\"do_GET\",\"do_HEAD\",\"handle_reader\",\"reply\"],\"resolved_scope_names\":[\"CAPABILITY\",\"PORT\"],\"source_suffix_literal_count\":2,\"source_suffix_literal_templates\":[\"feed\",\"health\"]},\"status\":\"OK\",\"systemd_identity\":{\"identity_valid\":true,\"pid_count\":1,\"probe\":{\"duration_seconds\":0.007,\"rc\":0,\"stderr_bytes\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stderr_truncated\":false,\"stdout_bytes\":375,\"stdout_sha256\":\"49094d65d3787c1479e6408e1fefb7af3758d0fa55e1d37bf22907442aab35e9\",\"stdout_truncated\":false},\"properties\":{\"ActiveState\":\"active\",\"ControlGroup\":\"/system.slice/homelab-reader-v3.service\",\"ExecStart_present\":true,\"ExecStart_sha256\":\"2500fde09569176736b4f2f1dd29d6289b6a6ae6a59b52b6a3c31f797f567379\",\"FragmentPath\":\"/etc/systemd/system/homelab-reader-v3.service\",\"LoadState\":\"loaded\",\"MainPID\":\"1282\",\"SubState\":\"running\"}}}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 7e0b7c4..72792a8 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z +COMMAND_ID=HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z STATUS=OK RC=0 HOST=pve01 MODE=verify -COMPONENT=skladchik-runtime-exact-summary-read-only +COMPONENT=cluster-knowledge-base-error-system REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=be3e707d94385f364171e799ae8a27db2a26e9a44feda2c7cdd02a21935a9741 +COMMAND_SHA256=3284acfea1c13e8ec59ea2eb99da410d8844a088612af6aef6d60526bffddcb0 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=f19a8cf0f70a091ebc7f9956c9c8e5df934d2fd7369dde5d47afd2241fba9450 -SANITIZED_OUTPUT_SHA256=f19a8cf0f70a091ebc7f9956c9c8e5df934d2fd7369dde5d47afd2241fba9450 +RAW_EVIDENCE_SHA256=f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9 +SANITIZED_OUTPUT_SHA256=f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z","command_rc":0,"mutation_outcome":"NO_MUTATION","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"analysis_ready":false,"auth_artifacts":[],"changes_made":false,"command_id":"HOMELAB-SKLADCHIK-RUNTIME-EXACT-SUMMARY-READ-ONLY-20260805T102600Z","command_rc":0,"mutation_outcome":"NO_MUTATION","next_action":"TARGET_FAILED_EXECUTION_PATH_FROM_UNIT_AND_JOURNAL","output_truncated_in_json":false,"projection_bytes":8878,"rc":0,"read_only":true,"related_runtime_files":[{"binary":false,"bytes":182,"env_key_names":[],"hits":[{"line":2,"terms":[],"text":"Description=Skladchik reports monitor full supervisor"},{"line":7,"terms":[],"text":"ExecStart=/usr/local/sbin/skladchik-reports-monitor-supervisor check"}],"path":"/etc/systemd/system/skladchik-reports-monitor-supervisor.service","sha256":"e874fb03573b76181f3eb812c7285848e60705923c172a2f102504a7b9100ef7","terms":[]},{"binary":false,"bytes":20598,"env_key_names":[],"hits":[{"line":12,"terms":[],"text":"EDGE = os.environ.get(\"SKLADCHIK_EDGE\", \"debian@\")"},{"line":13,"terms":[],"text":"STATE_DIR = Path(\"/var/lib/skladchik-reports-monitor-supervisor\")"},{"line":14,"terms":[],"text":"LOG_DIR = Path(\"/var/log/skladchik-reports-monitor-supervisor\")"},{"line":19,"terms":[],"text":"MONITOR_HEALTH_AGE_MAX = int(os.environ.get(\"SKLADCHIK_MONITOR_HEALTH_MAX_SECONDS\", \"600\"))"},{"line":20,"terms":[],"text":"BACKUP_HEALTH_AGE_MAX = int(os.environ.get(\"SKLADCHIK_BACKUP_HEALTH_MAX_SECONDS\", \"129600\"))"},{"line":21,"terms":[],"text":"RESTORE_HEALTH_AGE_MAX = int(os.environ.get(\"SKLADCHIK_RESTORE_HEALTH_MAX_SECONDS\", \"691200\"))"}],"path":"/usr/local/sbin/skladchik-reports-monitor-supervisor","sha256":"bd40ee19ea8b277d52f4240b97d3c79b825c90154272bac8a43004591bd0ddc3","terms":[]}],"repo_evidence":{"matching_files":[{"binary":null,"bytes":1340,"env_key_names":[],"hits":[{"line":4,"terms":["skladchik"],"text":"\"branch\": \"cr-2026-0007-skladchik-controlled-reauth\","},{"line":6,"terms":["skladchik"],"text":"\"scope\": \"controlled Skladchik monitor reauthentication with strict known_hosts\","},{"line":9,"terms":["skladchik-reports-monitor","skladchik","report"],"text":"\"task_id\": \"skladchik-reports-monitor-controlled-reauth-v1\","},{"line":23,"terms":["skladchik"],"text":"\"active_skladchik_sources_versioned\": 5,"}],"path":"changes/CR-2026-0007/plan.json","sha256":"9a1cd77ebb9a880869aa24711408a88abadddd3ac4e43b04510e8ac13ba545c2","terms":["skladchik-reports-monitor","skladchik","report"]},{"binary":null,"bytes":3498,"env_key_names":[],"hits":[{"line":1,"terms":["skladchik-reports-monitor","skladchik","report"],"text":"31ddb9088f30e892690e3dd7fe184b8da113d473dd4744fc7d78857d9b43b272 tasks/skladchik-reports-monitor-controlled-reauth-v1/README.txt"},{"line":2,"terms":["skladchik-reports-monitor","skladchik","report","cookie"],"text":"b13d846cf089d450e3d5ac9e85ad1e232c198930e466bb8b82f6983a4d48ce0e tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge/skladchik-reports-monitor-cookie-update-edge"},{"line":3,"terms":["skladchik-reports-monitor","skladchik","report"],"text":"971b63baa5c9d9e0391e9adf8c289406e8da408a1aeb32e089740272eb280bd9 tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-dry-run.sh"},{"line":4,"terms":["skladchik-reports-monitor","skladchik","report"],"text":"bc46788a8f7dbe50b7ef600727f72b76981a23fdfc026cd10ba857fad9edb0e1 tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-preflight.sh"}],"path":"changes/CR-2026-0007/task-package.sha256","sha256":"40515974b5cb0acac0e1d4c1b6f1eea95f71a9df093304e65c1c66cc9b820356","terms":["skladchik-reports-monitor-supervisor","skladchik-reports-monitor","skladchik","report","cookie"]}],"tracked_path_markers":["docs/skladchik-cookie-refresh.md","tasks/skladchik-reports-monitor-controlled-reauth-v1/README.txt","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-dry-run.sh","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-preflight.sh","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-prepare.sh","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-rollback.sh","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-seal.sh","tasks/skladchik-reports-monitor-controlled-reauth-v1/assets/edge-verify.sh"]},"rollback_restored":null,"rollback_started":false,"root_cause_classification":"SUPERVISOR_FAILED_RUNTIME_EVIDENCE_CAPTURED","rules_page":{"attempts":[],"selected_present":false,"success":false,"target_url":"https://az52.skladchik.org/threads/pravila-moderirovanija.163004/"},"schema":1,"status":"OK","systemd":{"journal":{"last_lines":["2026-08-05T12:36:26+03:00 pve01 systemd[1]: Starting skladchik-reports-monitor-supervisor.service - Skladchik reports monitor full supervisor...","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_STATUS=FAIL","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_MAIL_SENT=no","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: SUPERVISOR_PROBLEMS=backup_health_stale,restore_health_stale,skladchik_reports_monitor_backup_timer_bad,skladchik_reports_monitor_backup_restore_check_timer_bad","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: MONITOR=OK reports=27 open=18 resolved=9","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: BACKUP=OK run=20260724T012808Z","2026-08-05T12:36:27+03:00 pve01 skladchik-reports-monitor-supervisor[2278551]: RESTORE=OK run=20260719T021125Z","2026-08-05T12:36:27+03:00 pve01 systemd[1]: skladchik-reports-monitor-supervisor.service: Main process exited, code=exited, status=1/FAILURE"],"rc":0,"stderr":"","stdout_bytes":21504,"stdout_sha256":"27dcacde03b29a70cafadc8c9bf47a602539b15ce51987d93b5eb8e1fb26d307"},"service":"skladchik-reports-monitor-supervisor.service","show":{"ActiveEnterTimestamp":"","ActiveState":"failed","DropInPaths":"","ExecMainCode":"1","ExecMainStatus":"1","ExecStart":"{ path=/usr/local/sbin/skladchik-reports-monitor-supervisor ; argv[]=/usr/local/sbin/skladchik-reports-monitor-supervisor check ; ignore_errors=no ; start_time=[Wed 2026-08-05 13:16:26 MSK] ; stop_time=[Wed 2026-08-05 13:16:27 MSK] ; pid=2400803 ; code=exited ; status=1 }","FragmentPath":"/etc/systemd/system/skladchik-reports-monitor-supervisor.service","Group":"","InactiveExitTimestamp":"Wed 2026-08-05 13:16:26 MSK","LoadState":"loaded","NRestarts":"0","Restart":"no","RestartUSec":"100ms","Result":"exit-code","RootDirectory":"","StateChangeTimestamp":"Wed 2026-08-05 13:16:27 MSK","SubState":"failed","User":"","WorkingDirectory":"","probe":{"duration_seconds":0.006,"rc":0,"stderr":"","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"5a1e3fc2dd8927afa2c98b5dec56bf6a508604e39d9c33bbae80f32db21fc7b4"}},"unit":{"rc":0,"stderr":"","text":"# /etc/systemd/system/skladchik-reports-monitor-supervisor.service\n[Unit]\nDescription=Skladchik reports monitor full supervisor\nAfter=network-online.target\n\n[Service]\nType=oneshot\nExecStart=/usr/local/sbin/skladchik-reports-monitor-supervisor check","text_sha256":"29e5210aa4e7492b22674d5ce7b0366ba8a92ec23dfacb28b99d141c1bd3b198"}},"target_execution":{"control_plane_error":null,"runner_document_rc":0,"runner_rc":0,"runner_status":"OK","runner_wrapper_matches_document":true,"state_status":"OK","task_result_contract":{"changes_made":false,"command_id":"HOMELAB-SKLADCHIK-RUNTIME-TOPOLOGY-RULES-AUTH-READ-ONLY-20260805T101800Z","command_rc":0,"mutation_outcome":"NO_MUTATION","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"status":"OK","version":1}},"target_identity":{"capsule_sha256":"d28db98524b6f8b3e5e6759effff662691505994c6f394057eeded532eb1e0db","command_id":"HOMELAB-SKLADCHIK-RUNTIME-TOPOLOGY-RULES-AUTH-READ-ONLY-20260805T101800Z","full_output_sha_verified":true,"output_sha256":"5d925702fd34664dba7dcd0c107505d45ccf56bddaa95c8849571cd221f2da49","runner_json_sha256":"381b67138a8a6e9ddbfa006ba6b70f7ec919915a14f8df042dcaf6046ecd3cee","runner_text_sha256":"cb07ca7e740cd0ab2b2950328a99761ce19fcc7b7cd63b419de0c326a268cea2"},"virtualization":{"matching_guest_configs":[],"pct":{"rc":255,"relevant_lines":[],"stderr":"ipcc_send_rec[1] failed: Unknown error -1 ipcc_send_rec[2] failed: Unknown error -1 ipcc_send_rec[3] failed: Unknown error -1 Unable to load access control list: Unknown error -1","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"podman":{"rc":0,"relevant_lines":[],"stderr":"","stdout_sha256":"fd06fb7ad7e6d8248b40e67821d7572fc71bb2c3dc27ebc52d99b254b0d1e2ef"},"qm":{"rc":255,"relevant_lines":[],"stderr":"ipcc_send_rec[1] failed: Unknown error -1 ipcc_send_rec[2] failed: Unknown error -1 ipcc_send_rec[3] failed: Unknown error -1 Unable to load access control list: Unknown error -1","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}}} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"mutation_outcome":"NO_MUTATION","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"correction_of_previous_logic_gap":{"exact_fix":"separate negative-control exceptions from production variants and derive one bounded filename from the exact compiled RESULT_RE in memory; verify fullmatch and emit only hashes and length","proven_gap":"the prior result mixed the expected negative-control NameError into production exception classification, while successful variants read only the manifest and did not prove a filename accepted by the exact RESULT_RE","regression_test":"a regex not covered by the old hard-coded candidates must yield a verified matching filename, trigger both manifest and result-file reads, return structured JSON, and keep the negative-control NameError classification-isolated"},"error_fingerprint":"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047","latest_exact_result_basis":{"capsule_sha256":"5ff4ff8183c11fb356da0ed1fd0199408ea8c6ddd2cd47858a2878da5d55f43b","changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-SANDBOX-GLOBAL-BINDING-FIX-READ-ONLY-20260805T101800Z","command_rc":0,"control_plane_error":null,"error_fingerprint":"710c2ff6ffab246cdeee319e83f650f33579824a72451450821eec3e98894a98","mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_UNRESOLVED_GLOBAL_BINDING_TRACE","output_complete":true,"output_sha256":"8da3c12ce5470a5e17ad5c50e548c57dc3f80d6483fadfe2fc0bd7d013d717e1","output_truncated_in_json":false,"rc":0,"rollback_restored":null,"rollback_started":false,"root_cause_classification":"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN","runner_document_rc":0,"runner_json_sha256":"2c7b112545cda004239a341608d7fea55da9d46c0792586c5020c8ad3d07a217","runner_rc":0,"runner_text_sha256":"5f12c1d6b790e4724b0208d95505e4cb701476f8c0853b3906a259b5fa0e3045","runner_wrapper_matches_document":true,"status":"OK"},"mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX","output_truncated_in_json":false,"owned_listeners":[{"address_class":"private","address_sha256":"fb345731d21c612ed2cb13088c10fd26bac959c79a7634cb55e23ee6bfb428d9","family":"ipv4","inode":"24795","port":18788}],"pre_command_known_error_gate":{"checked":true,"items":[{"id":"candidate-scan-limit-20260805","prevention":"exact files only; bounded AST, simulation, response and output limits"},{"id":"runner-wrapper-mismatch-20260805","prevention":"single compact JSON below 42000 bytes; no raw source, secret or response body"},{"id":"gitea-owner-hardcoded-20260805","prevention":"no repository owner, guest ID or repository URL is assumed"},{"id":"gitea-git-auth-unavailable-20260805","prevention":"no Git or Gitea authentication attempt"},{"id":"pvesh-adapter-context-unreadable-20260805","prevention":"the payload does not call pvesh or any real executor"},{"id":"gitea-process-self-match-20260805","prevention":"Reader identity is bound to exact systemd ControlGroup"},{"id":"sanitize-non-string-attributeerror-20260805","prevention":"sanitize converts Any to str; embedded bool test"},{"id":"reader-path-env-misclassified-as-route-20260805","prevention":"PATH and filesystem-like values are excluded from request candidates"},{"id":"reader-loopback-only-probe-20260805","prevention":"owned listeners are inspected but no network connection is made"},{"id":"reader-capability-not-secret-20260805","prevention":"capability values are redacted before every output projection"},{"id":"reader-systemd-unit-parsed-as-python-20260805","prevention":"only the exact Python server source is parsed or compiled"},{"id":"reader-helper-contract-coverage-gap-20260805","prevention":"all handler methods reachable from do_GET/do_HEAD are traced"},{"id":"reader-capability-root-empty-suffix-404-20260805","prevention":"never infer inventory from capability-only paths; trace the exact post-prefix suffix and response branch with fake executors first"},{"id":"reader-generic-suffix-missed-exact-operation-20260805","prevention":"derive route operations from exact compiled branch constants and intersect them with AST path literals before sandbox execution"},{"id":"reader-feed-500-without-origin-20260805","prevention":"before any live feed request, trace global helper reachability, exact executor/file argument origins and caught sandbox exceptions; health alone never proves inventory safety"},{"id":"reader-sandbox-global-binding-undefined-20260805","prevention":"materialize reachable module globals only through a strict AST allowlist; Path joins and re.compile are allowed, arbitrary calls are blocked, and MANIFEST/RESULTS/RESULT_RE are regression-tested before any live request"},{"id":"reader-negative-control-exception-polluted-classification-20260805","prevention":"negative-control exceptions are reported separately and can never determine the production readiness classification"},{"id":"reader-result-regex-candidate-not-proven-20260805","prevention":"derive one bounded matching filename from the exact compiled RESULT_RE in memory, verify fullmatch, and emit only length and hashes"}]},"prevention_test":{"must_run_before_future_cluster_or_gitea_commands":true,"name":"reader_v3_unresolved_global_binding_and_regex_preflight","requirements":["verify exact Reader source SHA and systemd identity","materialize reachable module globals only through the strict AST allowlist","require MANIFEST, RESULTS and RESULT_RE to be bound when referenced by the feed path","derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text","keep negative-control exceptions separate from production readiness","exercise at least two fake read-only file sources and require structured JSON before any live request","block arbitrary assignment calls and every real network, executor or filesystem mutation","never output capability values, private addresses, raw source, regex text or response bodies"]},"process_environment":{"capability_name_present":true,"names":["HOME","HOMELAB_READER_CAPABILITY","HOMELAB_READER_PORT","INVOCATION_ID","JOURNAL_STREAM","LANG","LOGNAME","MEMORY_PRESSURE_WATCH","MEMORY_PRESSURE_WRITE","PATH","SHELL","SYSTEMD_EXEC_PID","USER"],"secret_name_count":1},"rc":0,"read_only":true,"ready_for_live_inventory_probe":false,"real_executor_calls_made":false,"real_file_mutations_made":false,"real_network_requests_made":false,"result_projection":{"bytes_before_projection":23150,"compacted":false,"max_bytes":36000},"rollback_restored":null,"rollback_started":false,"root_cause_classification":"READER_V3_FEED_CAUGHT_EXCEPTION_ORIGIN_PROVEN","sandbox_global_binding_trace":{"caught_exception_types":["AttributeError"],"live_probe_contract_ready":false,"negative_control_exception_types":["NameError"],"ready_variant_count":0,"regex_matching_variant_count":3,"variant_count":4,"variants":[{"all_effects_read_only":false,"body_bytes":13,"body_sha256":"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7","caught_exception_count":1,"caught_exceptions":[{"line":60,"message":"name 'MANIFEST' is not defined","message_sha256":"7ffaa9a9433abf55defe29684eca6160f703dc251b5b9ab47ccbd33b3dd3411c","symbol":"handle_reader","type":"NameError"}],"content_type":"text/plain; charset=utf-8","data_source_call_count":0,"effect_call_count":0,"effects":[],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":6,"excluded_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"],"include_safe_assignments":false,"included_assignment_count":0,"included_assignment_names":[]},"regex_candidate_contract":{"candidate_fullmatch":false,"candidate_generated":false,"candidate_length":null,"candidate_sha256":null,"compiled_pattern_present":false,"pattern_sha256":null,"pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","expires","pragma","surrogate-control","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":500,"variant":"definitions-plus-resolved-scope-control"},{"all_effects_read_only":true,"body_bytes":369,"body_sha256":"4049eba0d723152deaf89bb6262b7f9abbbc508a09cce98afd4de6fa123c37fe","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":{"top_key_count":5,"top_keys":["entries","files","generation","items","results"],"type":"dict"},"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","etag","expires","pragma","surrogate-control","x-homelab-generation","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":200,"variant":"strict-global-bindings-filename-results"},{"all_effects_read_only":true,"body_bytes":2013,"body_sha256":"c82641747a4bca29d18b61a84aa424cedd00a785ed364b7c704c91d6d486dfd7","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":{"top_key_count":5,"top_keys":["entries","files","generation","items","results"],"type":"dict"},"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","etag","expires","pragma","surrogate-control","x-homelab-generation","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":200,"variant":"manifest-object-results"},{"all_effects_read_only":true,"body_bytes":13,"body_sha256":"326ce78e3deb6574ce072bbe8379c0e4deb1cb12c160a0f1a8161f8ddc6f4bd7","caught_exception_count":1,"caught_exceptions":[{"line":62,"message":"'list' object has no attribute 'get'","message_sha256":"73c2dbfd4deaed7a7fafa1d233c6631ae8d7650f0d5f3bce5a9da6386d739734","symbol":"handle_reader","type":"AttributeError"}],"content_type":"text/plain; charset=utf-8","data_source_call_count":1,"effect_call_count":1,"effects":[{"kind":"path.read_bytes","mode":"r","origin_type":"file","path_class":"/var","path_sha256":"e3e86f7cca26be90bb29b569ebbc865b3b544ad6f47fb1e976afae301aa02aca","read_only_basis":"file_read","read_only_proven":true}],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"module_projection":{"excluded_assignment_count":0,"excluded_assignment_names":[],"include_safe_assignments":true,"included_assignment_count":6,"included_assignment_names":["CAPABILITY","MANIFEST","PORT","RESULTS","RESULT_RE","ROOT"]},"regex_candidate_contract":{"candidate_fullmatch":true,"candidate_generated":true,"candidate_length":70,"candidate_sha256":"27a097a71de27938e5281eb61506b29a833e1cb65c0ec59f4d8eaff7108a1b20","compiled_pattern_present":true,"pattern_sha256":"cc0d3d6eeabb57c6262c3e83d6561e587ad62b5f370dab9cbf080b67c533b47c","pattern_text_emitted":false},"response_header_names":["cache-control","content-length","content-type","expires","pragma","surrogate-control","x-robots-tag"],"route_template":"//feed","source_call_count":3,"source_calls":[{"line":42,"symbol":"do_GET"},{"line":45,"symbol":"handle_reader"},{"line":23,"symbol":"reply"}],"status":500,"variant":"manifest-list"}]},"sanitized_bytecode_branch_trace":{"branch_instruction_count":14,"branch_literal_count":7,"branch_literal_templates":["X-Homelab-Generation","X-Robots-Tag","feed","health","health-v3","include_body","results"],"bytecode_disassembly_emitted":false,"bytecode_literal_count":28,"call_instruction_count":53,"code_object_count":8,"compile_ok":true,"exact_branch_operation_count":2,"exact_compiled_operation_count":2,"operation_suffixes":["feed","health"],"operation_suffixes_sha256":"7b2583665af60a5f63c575c89ecaff1cd688710d29507b6d79238e5d9ca5e58b","raw_source_emitted":false,"source_literal_count":2},"schema":1,"source_files":[{"actual_sha256":"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1","bytes":580,"expected_sha256":"d672b74b390efa787ffd5a090e8c8eea8fdf038075421231a9d9b3053ea926b1","matches_expected":true,"path":"/etc/systemd/system/homelab-reader-v3.service"},{"actual_sha256":"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536","bytes":3539,"expected_sha256":"092780e76ff18dfe2920c51f8b97dd09d194fd6cbdb59c3755c9fbf6530f3536","matches_expected":true,"path":"/usr/local/sbin/homelab-reader-server-v3"}],"source_selection":{"raw_source_emitted":false,"selected_path":"/usr/local/sbin/homelab-reader-server-v3","systemd_unit_excluded":true},"source_state":"MATCH","static_executor_argument_origin_trace":{"all_resolved_origins_read_only":true,"call_edge_count":3,"call_edges":[{"from":"Handler.do_GET","to":"Handler.handle_reader"},{"from":"Handler.do_HEAD","to":"Handler.handle_reader"},{"from":"Handler.handle_reader","to":"Handler.reply"}],"handler_roots":["Handler.do_GET","Handler.do_HEAD"],"raw_source_emitted":false,"reachable_data_origin_count":2,"reachable_data_origins":[{"argument_origin_names":[],"argument_resolved":false,"call":"MANIFEST.read_bytes","evidence_sha256":"3b9f9140c901f027be26f124b8c983ccfddbb3a62b03a416b5e7bfbb19f9fe59","kind":"file","mode":"r","origin_symbol":"Handler.handle_reader","path_class":null,"path_sha256":null,"read_only_basis":"file_read","read_only_proven":true},{"argument_origin_names":[],"argument_resolved":false,"call":"target.read_bytes","evidence_sha256":"aa896c2be567c54cf2da0cf24792da33575188def3c5d95fda4745ed3de4fdaf","kind":"file","mode":"r","origin_symbol":"Handler.handle_reader","path_class":null,"path_sha256":null,"read_only_basis":"file_read","read_only_proven":true}],"reachable_symbol_count":4,"reachable_symbols":["Handler.do_GET","Handler.do_HEAD","Handler.handle_reader","Handler.reply"],"unresolved_origin_count":2},"static_response_trace":{"ast_parse_ok":true,"capability_prefix_count":1,"capability_prefix_templates":["//"],"handler_count":1,"reachable_methods":["do_GET","do_HEAD","handle_reader","reply"],"resolved_scope_names":["CAPABILITY","PORT"],"source_suffix_literal_count":2,"source_suffix_literal_templates":["feed","health"]},"status":"OK","systemd_identity":{"identity_valid":true,"pid_count":1,"probe":{"duration_seconds":0.007,"rc":0,"stderr_bytes":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stderr_truncated":false,"stdout_bytes":375,"stdout_sha256":"49094d65d3787c1479e6408e1fefb7af3758d0fa55e1d37bf22907442aab35e9","stdout_truncated":false},"properties":{"ActiveState":"active","ControlGroup":"/system.slice/homelab-reader-v3.service","ExecStart_present":true,"ExecStart_sha256":"2500fde09569176736b4f2f1dd29d6289b6a6ae6a59b52b6a3c31f797f567379","FragmentPath":"/etc/systemd/system/homelab-reader-v3.service","LoadState":"loaded","MainPID":"1282","SubState":"running"}}} OUTPUT_END CHAT_OUTPUT_END