{ "schema_version": 1, "channel": "homelab-runtime", "command_id": "HOMELAB-CLUSTER-KB-V1-READER-V3-HANDLER-CONTROL-FLOW-READ-ONLY-20260805T085100Z", "status": "OK", "rc": 0, "host": "pve01", "mode": "verify", "component": "cluster-knowledge-base-error-system", "started_at_utc": "2026-08-05T08:52:14Z", "finished_at_utc": "2026-08-05T08:52:14Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", "command_sha256": "4fad4d5f515708b583f402441e1ea240b2688d94da0496e4afd2a37489e81a4b", "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": "17cf9be1f2e911f7f5e392c00def5e5d77fe08c3425cce755acac1ce3a9e1d06", "sanitized_output_sha256": "17cf9be1f2e911f7f5e392c00def5e5d77fe08c3425cce755acac1ce3a9e1d06", "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-HANDLER-CONTROL-FLOW-READ-ONLY-20260805T085100Z\",\"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{\"ast_source_selection\":{\"selected_count\":1,\"selected_paths\":[\"/usr/local/sbin/homelab-reader-server-v3\"],\"systemd_unit_excluded\":true},\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-HANDLER-CONTROL-FLOW-READ-ONLY-20260805T085100Z\",\"command_rc\":0,\"correction_of_previous_logic_gaps\":[{\"exact_fix\":\"verify both exact files by SHA but pass only /usr/local/sbin/homelab-reader-server-v3 to ast.parse, then trace do_GET/do_HEAD comparisons and probe only source-supported contracts\",\"proven_gap\":\"the previous command passed the systemd unit to ast.parse, producing invalid decimal literal and suppressing an otherwise valid Python AST result\",\"regression_test\":\"the exact server path is accepted as Python and the systemd unit path is rejected before AST parsing\"}],\"error_fingerprint\":\"14c4867b57e7cadf602ed3e999632ca22c1347c101703fc01af7d49a4e3266e3\",\"latest_exact_result_basis\":{\"capsule_sha256\":\"d98c087a390bafb4d580de8c55af701ae8cf661780b8abc0def05517f911c1d0\",\"changes_made\":false,\"command_id\":\"HOMELAB-CLUSTER-KB-V1-READER-V3-EXACT-AUTH-ROUTE-CONTRACT-READ-ONLY-20260805T083200Z\",\"command_rc\":0,\"control_plane_error\":null,\"error_fingerprint\":\"dd4ebd816db1715f38801e549b40d82b48b543981dc18cf6c6345157419ecd90\",\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_HANDLER_CONTROL_FLOW_TRACE\",\"output_complete\":true,\"output_sha256\":\"9c385a174b858d468f1366d42c1b90cb713b245cb1e7ebcff39242de9d3439b3\",\"output_truncated_in_json\":false,\"rc\":0,\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_LISTENER_FOUND_BUT_AST_AUTH_ROUTE_CONTRACT_NOT_DERIVED\",\"runner_document_rc\":0,\"runner_json_sha256\":\"b6ac6f9e8f5f72de6eccb4064236021728562861d636f91f162ce76914376046\",\"runner_rc\":0,\"runner_text_sha256\":\"ea3b963f5a878892eedbd5d0c3f27a69aedfd8bffd46bcc358c9c313504bb25a\",\"runner_wrapper_matches_document\":true,\"status\":\"OK\"},\"mutation_outcome\":\"NO_MUTATION\",\"next_action\":\"RUN_ONE_READ_ONLY_READER_V3_HANDLER_CONTROL_FLOW_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; hard source, response, route, probe and output limits\"},{\"id\":\"runner-wrapper-mismatch-20260805\",\"prevention\":\"single compact JSON below 42000 bytes; no raw sources or response bodies\"},{\"id\":\"gitea-owner-hardcoded-20260805\",\"prevention\":\"no repository owner or repository URL is assumed\"},{\"id\":\"gitea-git-auth-unavailable-20260805\",\"prevention\":\"no Git or Gitea authentication retry in this command\"},{\"id\":\"pvesh-adapter-context-unreadable-20260805\",\"prevention\":\"pvesh is not called\"},{\"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 regression test\"},{\"id\":\"reader-v3-skipped-on-nonauthoritative-inventory-20260805\",\"prevention\":\"this command directly probes Reader V3\"},{\"id\":\"reader-path-env-misclassified-as-route-20260805\",\"prevention\":\"PATH/PYTHONPATH and colon-separated filesystem values are explicitly forbidden as HTTP routes\"},{\"id\":\"reader-loopback-only-probe-20260805\",\"prevention\":\"connections use the exact address of the socket owned by the Reader ControlGroup; 127.0.0.1 is not assumed\"},{\"id\":\"reader-capability-not-secret-20260805\",\"prevention\":\"all capability values are secret; values and concrete secret-bearing routes are never output\"},{\"id\":\"reader-v3-root-404-no-json-20260805\",\"prevention\":\"derive auth and route only from exact AST comparisons, source literals and process environment before probing\"},{\"id\":\"reader-systemd-unit-parsed-as-python-20260805\",\"prevention\":\"only the exact Python server source is passed to ast.parse; systemd units are verified by SHA but never parsed as Python\"}]},\"prevention_test\":{\"must_run_before_future_cluster_or_gitea_commands\":true,\"name\":\"reader_v3_handler_control_flow_preflight\",\"requirements\":[\"verify exact Reader source SHA\",\"bind process and socket to exact systemd ControlGroup\",\"resolve auth and route from exact AST and process environment\",\"never output capability values or private addresses\",\"probe only source-supported request contracts\",\"accept inventory only from successful JSON with normalized guest rows\"]},\"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},\"protocol_probe\":{\"auth_candidate_count\":0,\"gitea_candidates\":[],\"guest_count\":0,\"probes\":[],\"request_contract_count\":0,\"successful_inventory_routes\":[]},\"rc\":0,\"read_only\":true,\"ready_for_guest_probe\":false,\"result_projection\":{\"bytes_before_projection\":6951,\"compacted\":false,\"max_bytes\":36000},\"rollback_restored\":null,\"rollback_started\":false,\"root_cause_classification\":\"READER_V3_LISTENER_FOUND_BUT_AST_AUTH_ROUTE_CONTRACT_NOT_DERIVED\",\"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_semantics\":{\"ast_parse_ok\":true,\"auth_variants\":[{\"basis\":\"control\",\"header_names\":[],\"label\":\"none\"}],\"handler_count\":2,\"header_contract_count\":0,\"header_names\":[],\"parse_errors\":[],\"protocol_markers\":[\"basehttprequesthandler\",\"content-type\",\"do_get\",\"http.server\",\"send_response\"],\"query_contract_count\":0,\"query_keys\":[],\"resolved_scope_names\":[\"CAPABILITY\",\"PORT\",\"allow_reuse_address\",\"server_version\"],\"route_template_count\":0,\"route_templates\":[],\"source_environment_references\":[\"HOMELAB_READER_CAPABILITY\",\"HOMELAB_READER_PORT\"]},\"source_state\":\"MATCH\",\"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" }