From 4856a063adb75018e5869d6659c612f1af723261 Mon Sep 17 00:00:00 2001 From: homelab-runtime-publisher Date: Wed, 5 Aug 2026 10:51:01 +0000 Subject: [PATCH] runtime: publish HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z --- ...NTRACT-FIX-READ-ONLY-20260805T104000Z.json | 38 +++++++++++++++++++ ...ONTRACT-FIX-READ-ONLY-20260805T104000Z.txt | 34 +++++++++++++++++ runtime/latest.json | 22 +++++------ runtime/latest.txt | 20 +++++----- 4 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.json create mode 100644 runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.txt diff --git a/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.json b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.json new file mode 100644 index 0000000..37a4dd9 --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "verify", + "component": "cluster-knowledge-base-error-system", + "started_at_utc": "2026-08-05T10:51:00Z", + "finished_at_utc": "2026-08-05T10:51:00Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "27e9d986cc5280c8fee14ef647fd09b807bf939336d0dbd7f4d38c54286ab54c", + "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": "8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89", + "sanitized_output_sha256": "8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89", + "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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z\",\"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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z\",\"command_rc\":0,\"correction_of_previous_logic_gap\":{\"exact_fix\":\"derive manifest keys and access modes from the exact handler AST, test bounded string-list, rich-object-list, mapping, scalar and top-level mapping fixtures, and require two distinct read-only paths including the regex-matched result file\",\"proven_gap\":\"the prior result proved RESULT_RE fullmatch but all successful production fixtures still read only MANIFEST; the fake manifest container shape did not match the exact Reader dependency contract\",\"regression_test\":\"an exact handler using a non-default manifest key and dict.items must select a source-derived mapping fixture, read both MANIFEST and the RESULT_RE-matched file, return structured JSON, and keep all real effects blocked\"},\"error_fingerprint\":\"f625204be2a45aca4b0e31f18a66146eee3d05ca9cb2d6705b9a821bfc0e993e\",\"latest_exact_result_basis\":{\"capsule_sha256\":\"c1bf540b8af3111c34ac23fd1ed5ce1d9115a6dafdfa9f47d8559afe2a9d4789\",\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"control_plane_error\":null,\"error_fingerprint\":\"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047\",\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX\",\"output_complete\":true,\"output_sha256\":\"f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9\",\"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\":\"c67a7a94816c1c30c1b5b7a718139108cc6319c6ae55387e6186db2604ed7778\",\"runner_rc\":0,\"runner_text_sha256\":\"fbed4d1ad2f339c147bdc014aa6f4cf279d72ee765be85d10cef8041cfe64563\",\"runner_wrapper_matches_document\":true,\"status\":\"OK\"},\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_EXACT_MANIFEST_SCHEMA_TRACE\",\"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\"},{\"id\":\"reader-fake-dependency-contract-incomplete-20260805\",\"prevention\":\"derive manifest access keys and container shapes from the exact handler AST, test bounded list/object/map/scalar fixtures, and require two distinct read-only file paths before any live request\"}]},\"prevention_test\":{\"must_run_before_future_cluster_or_gitea_commands\":true,\"name\":\"reader_v3_fake_dependency_contract_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 manifest keys and access modes from the exact handler AST\",\"test bounded string-list, rich-list, mapping, scalar and top-level mapping fixture shapes\",\"derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text\",\"keep negative-control exceptions separate from production readiness\",\"require two distinct fake read-only file paths including the result file and 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\":33249,\"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,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":false},\"negative_control_exception_types\":[\"NameError\"],\"ready_variant_count\":0,\"ready_variant_names\":[],\"regex_matching_variant_count\":8,\"result_file_read_variant_count\":0,\"tested_profile_names\":[\"control\",\"source-keys-string-list\",\"source-keys-rich-list\",\"source-keys-map\",\"source-keys-scalar\",\"top-level-result-map\",\"manifest-object-results\",\"manifest-list\",\"result-object\"],\"variant_count\":9,\"variant_evidence_count\":6,\"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,\"distinct_read_path_count\":0,\"effect_call_count\":0,\"effects\":[],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":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,\"distinct_read_path_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,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\"},{\"all_effects_read_only\":true,\"body_bytes\":413,\"body_sha256\":\"c9a7f661d84dc4e503844d1418a169a221d1d65d7da9f7f8b42753cdb535d8b9\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-string-list\"},{\"all_effects_read_only\":true,\"body_bytes\":2569,\"body_sha256\":\"7f6beff186df6e00795b3d931fbfd0e12eb00bfc2676840f3c2bd43a9fc09631\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-rich-list\"},{\"all_effects_read_only\":true,\"body_bytes\":2861,\"body_sha256\":\"f4c751cad191814cccfebb086aea7c85cd611fd1d47c91def1326919cbe11a0d\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-map\"},{\"all_effects_read_only\":true,\"body_bytes\":405,\"body_sha256\":\"7d51795cb0f426b85ebf5252a4aa8ca2586992c1af24c0929b831d1e315829f6\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-scalar\"}]},\"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.005,\"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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.txt b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.txt new file mode 100644 index 0000000..4c6347a --- /dev/null +++ b/runtime/history/HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z +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=27e9d986cc5280c8fee14ef647fd09b807bf939336d0dbd7f4d38c54286ab54c +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=8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89 +SANITIZED_OUTPUT_SHA256=8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89 +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z","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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z","command_rc":0,"correction_of_previous_logic_gap":{"exact_fix":"derive manifest keys and access modes from the exact handler AST, test bounded string-list, rich-object-list, mapping, scalar and top-level mapping fixtures, and require two distinct read-only paths including the regex-matched result file","proven_gap":"the prior result proved RESULT_RE fullmatch but all successful production fixtures still read only MANIFEST; the fake manifest container shape did not match the exact Reader dependency contract","regression_test":"an exact handler using a non-default manifest key and dict.items must select a source-derived mapping fixture, read both MANIFEST and the RESULT_RE-matched file, return structured JSON, and keep all real effects blocked"},"error_fingerprint":"f625204be2a45aca4b0e31f18a66146eee3d05ca9cb2d6705b9a821bfc0e993e","latest_exact_result_basis":{"capsule_sha256":"c1bf540b8af3111c34ac23fd1ed5ce1d9115a6dafdfa9f47d8559afe2a9d4789","changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"control_plane_error":null,"error_fingerprint":"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047","mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX","output_complete":true,"output_sha256":"f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9","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":"c67a7a94816c1c30c1b5b7a718139108cc6319c6ae55387e6186db2604ed7778","runner_rc":0,"runner_text_sha256":"fbed4d1ad2f339c147bdc014aa6f4cf279d72ee765be85d10cef8041cfe64563","runner_wrapper_matches_document":true,"status":"OK"},"mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_EXACT_MANIFEST_SCHEMA_TRACE","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"},{"id":"reader-fake-dependency-contract-incomplete-20260805","prevention":"derive manifest access keys and container shapes from the exact handler AST, test bounded list/object/map/scalar fixtures, and require two distinct read-only file paths before any live request"}]},"prevention_test":{"must_run_before_future_cluster_or_gitea_commands":true,"name":"reader_v3_fake_dependency_contract_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 manifest keys and access modes from the exact handler AST","test bounded string-list, rich-list, mapping, scalar and top-level mapping fixture shapes","derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text","keep negative-control exceptions separate from production readiness","require two distinct fake read-only file paths including the result file and 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":33249,"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,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":false},"negative_control_exception_types":["NameError"],"ready_variant_count":0,"ready_variant_names":[],"regex_matching_variant_count":8,"result_file_read_variant_count":0,"tested_profile_names":["control","source-keys-string-list","source-keys-rich-list","source-keys-map","source-keys-scalar","top-level-result-map","manifest-object-results","manifest-list","result-object"],"variant_count":9,"variant_evidence_count":6,"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,"distinct_read_path_count":0,"effect_call_count":0,"effects":[],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":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,"distinct_read_path_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,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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"},{"all_effects_read_only":true,"body_bytes":413,"body_sha256":"c9a7f661d84dc4e503844d1418a169a221d1d65d7da9f7f8b42753cdb535d8b9","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-string-list"},{"all_effects_read_only":true,"body_bytes":2569,"body_sha256":"7f6beff186df6e00795b3d931fbfd0e12eb00bfc2676840f3c2bd43a9fc09631","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-rich-list"},{"all_effects_read_only":true,"body_bytes":2861,"body_sha256":"f4c751cad191814cccfebb086aea7c85cd611fd1d47c91def1326919cbe11a0d","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-map"},{"all_effects_read_only":true,"body_bytes":405,"body_sha256":"7d51795cb0f426b85ebf5252a4aa8ca2586992c1af24c0929b831d1e315829f6","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-scalar"}]},"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.005,"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 86166eb..37a4dd9 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "HOMELAB-CLUSTER-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z", - "status": "FAIL", - "rc": 1, + "command_id": "HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z", + "status": "OK", + "rc": 0, "host": "pve01", "mode": "verify", - "component": "homelab-cluster-admin-update-visibility", - "started_at_utc": "2026-08-05T10:50:15Z", - "finished_at_utc": "2026-08-05T10:50:15Z", + "component": "cluster-knowledge-base-error-system", + "started_at_utc": "2026-08-05T10:51:00Z", + "finished_at_utc": "2026-08-05T10:51:00Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "a7878de372fb306cc0a189b94b9719cd8d78f33c2db2afa22ddcb3ab93bda156", + "command_sha256": "27e9d986cc5280c8fee14ef647fd09b807bf939336d0dbd7f4d38c54286ab54c", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -21,7 +21,7 @@ "result_contract_valid": true, "result_contract_status": null, "result_contract_error": null, - "command_rc": 1, + "command_rc": 0, "changes_made": false, "rollback_started": false, "rollback_restored": null, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "06ff6111d6953bf48590b68642873b516612eb9fabd1631148c08d94f32dfa32", - "sanitized_output_sha256": "06ff6111d6953bf48590b68642873b516612eb9fabd1631148c08d94f32dfa32", + "raw_evidence_sha256": "8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89", + "sanitized_output_sha256": "8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89", "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-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z\",\"command_rc\":1,\"control_plane_error\":null,\"mutation_outcome\":\"NO_MUTATION\",\"rc\":1,\"rollback_restored\":false,\"rollback_started\":false,\"status\":\"FAIL\",\"version\":1}\n{\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z\",\"error\":\"V6 output cardinality contracts=1 reports=0\",\"error_type\":\"RuntimeError\",\"mutation_outcome\":\"NO_MUTATION\",\"read_only\":true,\"rollback_restored\":false,\"rollback_started\":false,\"schema\":7,\"status\":\"FAIL\"}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z\",\"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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z\",\"command_rc\":0,\"correction_of_previous_logic_gap\":{\"exact_fix\":\"derive manifest keys and access modes from the exact handler AST, test bounded string-list, rich-object-list, mapping, scalar and top-level mapping fixtures, and require two distinct read-only paths including the regex-matched result file\",\"proven_gap\":\"the prior result proved RESULT_RE fullmatch but all successful production fixtures still read only MANIFEST; the fake manifest container shape did not match the exact Reader dependency contract\",\"regression_test\":\"an exact handler using a non-default manifest key and dict.items must select a source-derived mapping fixture, read both MANIFEST and the RESULT_RE-matched file, return structured JSON, and keep all real effects blocked\"},\"error_fingerprint\":\"f625204be2a45aca4b0e31f18a66146eee3d05ca9cb2d6705b9a821bfc0e993e\",\"latest_exact_result_basis\":{\"capsule_sha256\":\"c1bf540b8af3111c34ac23fd1ed5ce1d9115a6dafdfa9f47d8559afe2a9d4789\",\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z\",\"command_rc\":0,\"control_plane_error\":null,\"error_fingerprint\":\"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047\",\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX\",\"output_complete\":true,\"output_sha256\":\"f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9\",\"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\":\"c67a7a94816c1c30c1b5b7a718139108cc6319c6ae55387e6186db2604ed7778\",\"runner_rc\":0,\"runner_text_sha256\":\"fbed4d1ad2f339c147bdc014aa6f4cf279d72ee765be85d10cef8041cfe64563\",\"runner_wrapper_matches_document\":true,\"status\":\"OK\"},\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_EXACT_MANIFEST_SCHEMA_TRACE\",\"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\"},{\"id\":\"reader-fake-dependency-contract-incomplete-20260805\",\"prevention\":\"derive manifest access keys and container shapes from the exact handler AST, test bounded list/object/map/scalar fixtures, and require two distinct read-only file paths before any live request\"}]},\"prevention_test\":{\"must_run_before_future_cluster_or_gitea_commands\":true,\"name\":\"reader_v3_fake_dependency_contract_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 manifest keys and access modes from the exact handler AST\",\"test bounded string-list, rich-list, mapping, scalar and top-level mapping fixture shapes\",\"derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text\",\"keep negative-control exceptions separate from production readiness\",\"require two distinct fake read-only file paths including the result file and 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\":33249,\"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,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":false},\"negative_control_exception_types\":[\"NameError\"],\"ready_variant_count\":0,\"ready_variant_names\":[],\"regex_matching_variant_count\":8,\"result_file_read_variant_count\":0,\"tested_profile_names\":[\"control\",\"source-keys-string-list\",\"source-keys-rich-list\",\"source-keys-map\",\"source-keys-scalar\",\"top-level-result-map\",\"manifest-object-results\",\"manifest-list\",\"result-object\"],\"variant_count\":9,\"variant_evidence_count\":6,\"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,\"distinct_read_path_count\":0,\"effect_call_count\":0,\"effects\":[],\"handler_error_count\":0,\"json\":null,\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":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,\"distinct_read_path_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,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\"},{\"all_effects_read_only\":true,\"body_bytes\":413,\"body_sha256\":\"c9a7f661d84dc4e503844d1418a169a221d1d65d7da9f7f8b42753cdb535d8b9\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-string-list\"},{\"all_effects_read_only\":true,\"body_bytes\":2569,\"body_sha256\":\"7f6beff186df6e00795b3d931fbfd0e12eb00bfc2676840f3c2bd43a9fc09631\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-rich-list\"},{\"all_effects_read_only\":true,\"body_bytes\":2861,\"body_sha256\":\"f4c751cad191814cccfebb086aea7c85cd611fd1d47c91def1326919cbe11a0d\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-map\"},{\"all_effects_read_only\":true,\"body_bytes\":405,\"body_sha256\":\"7d51795cb0f426b85ebf5252a4aa8ca2586992c1af24c0929b831d1e315829f6\",\"caught_exception_count\":0,\"caught_exceptions\":[],\"content_type\":\"application/json; charset=utf-8\",\"data_source_call_count\":1,\"distinct_read_path_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\":9,\"top_keys\":[\"entries\",\"files\",\"generation\",\"items\",\"rc\",\"results\",\"schema\",\"status\",\"version\"],\"type\":\"dict\"},\"live_probe_contract_ready\":false,\"manifest_contract\":{\"access_modes\":[],\"key_count\":0,\"keys\":[],\"manifest_variable_count\":1,\"raw_source_emitted\":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\"],\"result_file_read_proven\":false,\"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\":\"source-keys-scalar\"}]},\"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.005,\"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 17ae77e..4c6347a 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,22 +1,22 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-CLUSTER-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z -STATUS=FAIL -RC=1 +COMMAND_ID=HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z +STATUS=OK +RC=0 HOST=pve01 MODE=verify -COMPONENT=homelab-cluster-admin-update-visibility +COMPONENT=cluster-knowledge-base-error-system REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=a7878de372fb306cc0a189b94b9719cd8d78f33c2db2afa22ddcb3ab93bda156 +COMMAND_SHA256=27e9d986cc5280c8fee14ef647fd09b807bf939336d0dbd7f4d38c54286ab54c 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=1 +COMMAND_RC=0 CHANGES_MADE=false ROLLBACK_STARTED=false ROLLBACK_RESTORED=null @@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=06ff6111d6953bf48590b68642873b516612eb9fabd1631148c08d94f32dfa32 -SANITIZED_OUTPUT_SHA256=06ff6111d6953bf48590b68642873b516612eb9fabd1631148c08d94f32dfa32 +RAW_EVIDENCE_SHA256=8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89 +SANITIZED_OUTPUT_SHA256=8b175d403825bf21d0222a3ecb18a502790378b739bf85e140c62740af58fb89 OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z","command_rc":1,"control_plane_error":null,"mutation_outcome":"NO_MUTATION","rc":1,"rollback_restored":false,"rollback_started":false,"status":"FAIL","version":1} -{"changes_made":false,"command_id":"HOMELAB-CLUSTER-ADMIN-UPDATES-V7-ARCHITECTURE-READ-ONLY-20260805T103600Z","error":"V6 output cardinality contracts=1 reports=0","error_type":"RuntimeError","mutation_outcome":"NO_MUTATION","read_only":true,"rollback_restored":false,"rollback_started":false,"schema":7,"status":"FAIL"} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z","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-FAKE-DEPENDENCY-CONTRACT-FIX-READ-ONLY-20260805T104000Z","command_rc":0,"correction_of_previous_logic_gap":{"exact_fix":"derive manifest keys and access modes from the exact handler AST, test bounded string-list, rich-object-list, mapping, scalar and top-level mapping fixtures, and require two distinct read-only paths including the regex-matched result file","proven_gap":"the prior result proved RESULT_RE fullmatch but all successful production fixtures still read only MANIFEST; the fake manifest container shape did not match the exact Reader dependency contract","regression_test":"an exact handler using a non-default manifest key and dict.items must select a source-derived mapping fixture, read both MANIFEST and the RESULT_RE-matched file, return structured JSON, and keep all real effects blocked"},"error_fingerprint":"f625204be2a45aca4b0e31f18a66146eee3d05ca9cb2d6705b9a821bfc0e993e","latest_exact_result_basis":{"capsule_sha256":"c1bf540b8af3111c34ac23fd1ed5ce1d9115a6dafdfa9f47d8559afe2a9d4789","changes_made":false,"command_id":"HOMELAB-CLUSTER-KB-V1-READER-V3-UNRESOLVED-GLOBAL-BINDING-TRACE-READ-ONLY-20260805T102300Z","command_rc":0,"control_plane_error":null,"error_fingerprint":"1f7e91361842a64a5cf2549e37a5014cd149154bee51dbcd3b7ac635e0924047","mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_FAKE_DEPENDENCY_CONTRACT_FIX","output_complete":true,"output_sha256":"f64e9bbd9b05f8462d1484d5bf437d49efc42cc50a20a6d81ff7a7b46e293ef9","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":"c67a7a94816c1c30c1b5b7a718139108cc6319c6ae55387e6186db2604ed7778","runner_rc":0,"runner_text_sha256":"fbed4d1ad2f339c147bdc014aa6f4cf279d72ee765be85d10cef8041cfe64563","runner_wrapper_matches_document":true,"status":"OK"},"mutation_outcome":"NO_MUTATION","next_action":"RUN_ONE_READ_ONLY_READER_V3_EXACT_MANIFEST_SCHEMA_TRACE","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"},{"id":"reader-fake-dependency-contract-incomplete-20260805","prevention":"derive manifest access keys and container shapes from the exact handler AST, test bounded list/object/map/scalar fixtures, and require two distinct read-only file paths before any live request"}]},"prevention_test":{"must_run_before_future_cluster_or_gitea_commands":true,"name":"reader_v3_fake_dependency_contract_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 manifest keys and access modes from the exact handler AST","test bounded string-list, rich-list, mapping, scalar and top-level mapping fixture shapes","derive and fullmatch one bounded RESULT_RE filename without emitting regex text or candidate text","keep negative-control exceptions separate from production readiness","require two distinct fake read-only file paths including the result file and 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":33249,"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,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":false},"negative_control_exception_types":["NameError"],"ready_variant_count":0,"ready_variant_names":[],"regex_matching_variant_count":8,"result_file_read_variant_count":0,"tested_profile_names":["control","source-keys-string-list","source-keys-rich-list","source-keys-map","source-keys-scalar","top-level-result-map","manifest-object-results","manifest-list","result-object"],"variant_count":9,"variant_evidence_count":6,"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,"distinct_read_path_count":0,"effect_call_count":0,"effects":[],"handler_error_count":0,"json":null,"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":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,"distinct_read_path_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,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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"},{"all_effects_read_only":true,"body_bytes":413,"body_sha256":"c9a7f661d84dc4e503844d1418a169a221d1d65d7da9f7f8b42753cdb535d8b9","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-string-list"},{"all_effects_read_only":true,"body_bytes":2569,"body_sha256":"7f6beff186df6e00795b3d931fbfd0e12eb00bfc2676840f3c2bd43a9fc09631","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-rich-list"},{"all_effects_read_only":true,"body_bytes":2861,"body_sha256":"f4c751cad191814cccfebb086aea7c85cd611fd1d47c91def1326919cbe11a0d","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-map"},{"all_effects_read_only":true,"body_bytes":405,"body_sha256":"7d51795cb0f426b85ebf5252a4aa8ca2586992c1af24c0929b831d1e315829f6","caught_exception_count":0,"caught_exceptions":[],"content_type":"application/json; charset=utf-8","data_source_call_count":1,"distinct_read_path_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":9,"top_keys":["entries","files","generation","items","rc","results","schema","status","version"],"type":"dict"},"live_probe_contract_ready":false,"manifest_contract":{"access_modes":[],"key_count":0,"keys":[],"manifest_variable_count":1,"raw_source_emitted":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"],"result_file_read_proven":false,"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":"source-keys-scalar"}]},"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.005,"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