diff --git a/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.json b/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.json new file mode 100644 index 0000000..0ef0f43 --- /dev/null +++ b/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "verify", + "component": "stable-local-result-feed-full-latest-plan-fix3-runner-contract", + "started_at_utc": "2026-07-28T16:39:30Z", + "finished_at_utc": "2026-07-28T16:39:50Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "9db30ecae10f79ea07365d2acb9855f0dc845d6c4a86a1128212d8e09d958096", + "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": "b88401e3399424484cba486f4dc05bca6f676770164d7c38e02d8441d51bc2f1", + "sanitized_output_sha256": "259a2e656163a223bc48f823de2ebd0a55572b9ec95c5c1c40b83f5fcec845ce", + "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\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"06a5cb5fb7aaed2588430661b3fcaa94b7d52fcd4a06cd10c0795833d51cda2c\",\"backup_changed\":false,\"changes_made\":false,\"cluster_changed\":false,\"command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z\",\"failure_code_contract\":{\"ADAPTER_CANDIDATE\":47,\"CURRENT_PUBLIC_SURFACE\":46,\"EDGE_CANDIDATE\":52,\"EDGE_DISCOVERY\":50,\"EDGE_SOURCE_LOCK\":51,\"LEDGER_PRECONDITION\":45,\"LOOKUP_CANDIDATE\":48,\"PRODUCTION_DRIFT\":53,\"ROOT_OR_HOST\":41,\"SERVICE_BASIC_HEALTH\":43,\"SERVICE_STABILITY\":44,\"SOURCE_LOCK\":42,\"TEMPORARY_CLEANUP\":54,\"UNEXPECTED\":99,\"UNIT_CANDIDATE\":49},\"gitea_changed\":false,\"minio_changed\":false,\"observations\":{\"candidate\":{\"adapter_sha256\":\"2b6936af2b19ba158aae89b75639590c11134480ce034fb3a8027fb45c914935\",\"edge_container_started_at\":\"2026-07-28T11:06:45.929887242Z\",\"edge_source_sha256\":\"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8\",\"edge_target_sha256\":\"ae63d937b8d9189cd016784fb735d1fae32a363cb88ebcc7efdecc22665cc8aa\",\"lookup_sha256\":\"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e\",\"unit_sha256\":\"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01\"},\"current_public\":{\"exact_full_output_present\":false,\"exact_http\":200,\"feed_http\":200,\"latest_http\":200},\"fixture\":{\"corruption_http\":409,\"exact_http\":200,\"feed_http\":200,\"latest_http\":200,\"latest_output_present\":true,\"latest_plan_sha_present\":true,\"restart_persistence\":true,\"sequence\":\"efea7986e5d4989d0b8deaa393c8e8a62658185acbc964b14a49a87152a5b9c4\"},\"service_stability\":{\"adapter\":{\"after\":{\"MainPID\":\"11360\",\"NRestarts\":\"22\"},\"before\":{\"MainPID\":\"11360\",\"NRestarts\":\"22\"}},\"lookup\":{\"after\":{\"MainPID\":\"466244\",\"NRestarts\":\"0\"},\"before\":{\"MainPID\":\"466244\",\"NRestarts\":\"0\"}},\"portal\":{\"after\":{\"MainPID\":\"466240\",\"NRestarts\":\"0\"},\"before\":{\"MainPID\":\"466240\",\"NRestarts\":\"0\"}}},\"source_hashes\":{\"/etc/systemd/system/homelab-command-portal.service\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"/etc/systemd/system/homelab-result-lookup.service\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"/usr/local/sbin/homelab-command-portal\":\"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52\",\"/usr/local/sbin/homelab-result-lookup\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\"}},\"plan\":{\"anti_regression\":[\"AR-001-STABLE-URLS-NO-QUERY-STRING\",\"AR-002-FEED-AND-LATEST-SAME-SEQUENCE\",\"AR-003-LATEST-CONTAINS-FULL-OUTPUT\",\"AR-004-LATEST-CONTAINS-PLAN-SHA256\",\"AR-005-LOCAL-LEDGER-BEFORE-MINIO\",\"AR-006-IMMUTABLE-COLLISION-REJECTED\",\"AR-007-CORRUPTION-RETURNS-409\",\"AR-008-NO-GITEA-LOOKUP-DEPENDENCY\",\"AR-009-NO-MINIO-LOOKUP-DEPENDENCY\",\"AR-010-NO-PORTAL-LOOKUP-DEPENDENCY\",\"AR-011-HISTORICAL-NRESTARTS-ALLOWED\",\"AR-012-PID-AND-NRESTARTS-STABILITY\",\"AR-013-EDGE-SOURCE-SHA-LOCK\",\"AR-014-NGINX-CANDIDATE-MARKER-CARDINALITY\",\"AR-015-NO-SECOND-RUNNER\",\"AR-016-BACKUP-UNTOUCHED\",\"AR-017-FAILURE-RC-IDENTIFIES-STAGE\",\"AR-018-PLAN-SHA-BINDS-APPLY\",\"AR-019-RUNNER-DOES-NOT-USE-PVESH\",\"AR-020-EDGE-DIRECT-SSH-DEBIAN-SUDO\",\"AR-021-STRICT-HOST-KEY-CHECKING\",\"AR-022-SSH-BATCH-MODE-NO-PROMPT\",\"AR-023-SSH-REMOTE-COMMAND-IS-ONE-ARGV\",\"AR-024-EVERY-REMOTE-ARGV-ELEMENT-SHELL-QUOTED\",\"AR-025-PYTHON-C-STUB-ROUNDTRIP-THROUGH-BIN-SH\",\"AR-026-UNQUOTED-SEMICOLON-REGRESSION\",\"AR-027-PRODUCTION-FLATTENED-RUNNER-CONTRACT-SCHEMA\",\"AR-028-NESTED-RUNNER-CONTRACT-BACKWARD-COMPATIBILITY\",\"AR-029-DUPLICATE-CONTRACT-LINE-REJECTED\",\"AR-030-FLATTENED-FIELD-MISMATCH-REJECTED\",\"AR-031-BACKFILL-BEFORE-MUTATION-PASSES\"],\"apply_postconditions\":[\"new runtime smoke writes one immutable local ledger result\",\"permanent feed and latest expose the same result_sequence\",\"permanent latest command_id and capsule_sha256 match smoke\",\"permanent latest contains full output and PLAN_SHA256\",\"readback remains healthy with Portal stopped during controlled test\",\"readback remains healthy when Gitea and MinIO probes fail\",\"edge nginx container ID and StartedAt unchanged\",\"all changed files stable and services stable for 20 seconds\"],\"apply_preconditions\":[\"recompute and require this exact PLAN_SHA256\",\"all source SHA-256 locks unchanged\",\"direct SSH to debian@[PRIVATE_IP] succeeds with strict host-key checking and sudo -n; edge-vm and npmplus identity remain unchanged\",\"Adapter, Portal and Lookup stable for 20 seconds\",\"production ledger root absent\",\"current public exact lookup route healthy\",\"candidate fixture matrix PASS\",\"edge source configuration SHA exact\",\"actual production runner JSON schema fixture passes ledger write\",\"failed APPLY FIX2 is confirmed FAILED_BEFORE_MUTATION with source SHA locks intact\"],\"changes_for_apply\":{\"edge_vm\":{\"container_restart\":false,\"modify\":[\"/opt/npmplus/nginx/proxy_host/9.conf\"],\"reload_only\":\"npmplus nginx\"},\"forbidden\":[\"modify backup\",\"modify cluster membership\",\"modify Gitea repositories\",\"modify MinIO objects\",\"create a second runner\",\"force push\"],\"pve01\":{\"create\":[\"/var/lib/homelab-result-ledger\"],\"do_not_restart\":[\"homelab-command-portal.service\",\"homelab-chat-run\"],\"modify\":[\"/usr/local/sbin/homelab-command-adapter\",\"/usr/local/sbin/homelab-result-lookup\",\"/etc/systemd/system/homelab-result-lookup.service\"],\"restart\":[\"homelab-command-adapter.service\",\"homelab-result-lookup.service\"]}},\"data_contract\":{\"allowed_methods\":[\"GET\",\"HEAD\"],\"cache\":\"no-store/no-cache/must-revalidate\",\"feed_version\":4,\"full_latest_fields\":[\"command_id\",\"capsule_sha256\",\"finished_at_utc\",\"result_sequence\",\"status\",\"runner_rc\",\"runner_document_rc\",\"runner_wrapper_matches_document\",\"PLAN_SHA256\",\"output\",\"result_contract\",\"runner_document\"],\"immutable_identity\":\"{capsule_sha256}/{command_id}.json\",\"integrity_failure_http\":409,\"missing_http\":404,\"recent_results_max\":32,\"runner_contract_normalization\":{\"cross_checks\":[\"result_contract_valid=true when field exists\",\"result_contract_error is null or NONE\",\"changes_made equality\",\"rollback_started equality\",\"rollback_restored equality\",\"result_contract_status is null, NOT_APPLICABLE, or exact contract status\"],\"duplicate_contract_lines\":\"rejected\",\"flattened_schema\":\"exactly one HOMELAB_RESULT_CONTRACT= line required\",\"invalid_or_mismatched_contract\":\"rejected\",\"nested_schema\":\"accepted and validated\"},\"writer_position\":\"after validated runner_document and before evidence bundle creation and MinIO upload\"},\"deterministic_material\":{\"adapter_transform_sha256\":\"0281a8321a6a41f3eccdca5080ea592903248a23597b64079390e48c221cea22\",\"edge_route_block_sha256\":\"ca1609b433b72dba0970aa51983651f5490aeaddafc1687cbd8980ab0a78313d\",\"ledger_helpers_sha256\":\"7aeb36f73fa5427257ea525a69958db7768e40db12305c48c02837eb72f66946\",\"lookup_candidate_sha256\":\"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e\",\"unit_candidate_sha256\":\"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01\"},\"diagnosis\":{\"classification\":\"FAILED_BEFORE_MUTATION\",\"completion_forensic_command_id\":\"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z\",\"evidence_sha256\":\"07358e9577c93d1efa8e42e745558b0fbd6631eb58d24dfe95907e458f8e6d0d\",\"failed_apply_command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"failure\":\"runner result contract missing\",\"fix\":\"Normalize both supported runner schemas: prefer a nested result_contract object when present; otherwise require exactly one HOMELAB_RESULT_CONTRACT= line, parse and validate it, and cross-check every available flattened validation field.\",\"root_cause\":\"The ledger writer required runner_document.result_contract as a nested object, but the production runner JSON schema stores the validated contract as a single HOMELAB_RESULT_CONTRACT= JSON line in output plus flattened validation fields. Therefore initial ledger backfill failed before any production mutation.\",\"superseded_plan_command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX2-20260728T152616Z\"},\"edge_discovery_contract\":{\"batch_mode\":true,\"pvesh_forbidden\":true,\"qm_guest_exec_forbidden\":true,\"remote_argv\":[\"/usr/bin/sudo\",\"-n\",\"/usr/bin/python3\",\"-B\",\"-c\",\"\"],\"remote_command_transport\":\"single remote command string; each remote argv element is shell-quoted with shlex.quote\",\"remote_probe\":\"hostname, exact config SHA, base64 config, Docker container identity/state/network mode and nginx -t\",\"strict_host_key_checking\":true,\"sudo\":\"sudo -n\",\"target\":\"debian@[PRIVATE_IP]\",\"transport\":\"direct-ssh\",\"unquoted_python_c_forbidden\":true,\"writes\":false},\"failure_code_contract\":{\"ADAPTER_CANDIDATE\":47,\"CURRENT_PUBLIC_SURFACE\":46,\"EDGE_CANDIDATE\":52,\"EDGE_DISCOVERY\":50,\"EDGE_SOURCE_LOCK\":51,\"LEDGER_PRECONDITION\":45,\"LOOKUP_CANDIDATE\":48,\"PRODUCTION_DRIFT\":53,\"ROOT_OR_HOST\":41,\"SERVICE_BASIC_HEALTH\":43,\"SERVICE_STABILITY\":44,\"SOURCE_LOCK\":42,\"TEMPORARY_CLEANUP\":54,\"UNEXPECTED\":99,\"UNIT_CANDIDATE\":49},\"objective\":\"Make the two already trusted permanent URLs result-feed.json and latest.json read only from the local immutable result ledger. latest.json must contain the complete sanitized output and PLAN_SHA256. Gitea, MinIO and Portal must not be in the readback critical path.\",\"operation\":\"STABLE_LOCAL_RESULT_FEED_AND_FULL_LATEST_PLAN_FIX3_RUNNER_CONTRACT_COMPAT\",\"read_only_plan\":true,\"rollback\":{\"container_restart_forbidden\":true,\"diagnostics_before_rollback\":true,\"nginx_test_before_reload\":true,\"remove_ledger_only_if_created_by_apply\":true,\"restore_exact_files\":true,\"verify_old_routes_after_restore\":true},\"schema\":1,\"service_health_contract\":{\"basic\":\"loaded, enabled, active, running, Result=success, ExecMainStatus=0, MainPID>1\",\"historical_nonzero_nrestarts_allowed\":true,\"stability_window_seconds\":20,\"stable\":\"MainPID and cumulative NRestarts unchanged\"},\"source_locks\":{\"/etc/systemd/system/homelab-command-portal.service\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"/etc/systemd/system/homelab-result-lookup.service\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"/usr/local/sbin/homelab-command-portal\":\"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52\",\"/usr/local/sbin/homelab-result-lookup\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\",\"edge\":{\"config\":\"/opt/npmplus/nginx/proxy_host/9.conf\",\"container_id\":\"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9\",\"container_image\":\"docker.io/zoeyvid/npmplus:2026-06-17-b1\",\"container_name\":\"npmplus\",\"current_sha256\":\"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8\",\"node\":\"pve03\",\"ssh_batch_mode\":true,\"ssh_host\":\"[PRIVATE_IP]\",\"ssh_strict_host_key_checking\":true,\"ssh_target\":\"debian@[PRIVATE_IP]\",\"ssh_user\":\"debian\",\"sudo_noninteractive\":true,\"vm_name\":\"edge-vm\",\"vmid\":130}},\"stable_urls\":{\"feed\":\"https://git.gram1.ru/.well-known/homelab-runtime/result-feed.json\",\"latest\":\"https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"query_parameters_required\":false},\"target\":\"pve01-and-edge-vm\"},\"private_addresses_included\":false,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secrets_included\":false,\"status\":\"PLAN_READY\"}\n" +} diff --git a/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.txt b/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.txt new file mode 100644 index 0000000..0f29f53 --- /dev/null +++ b/runtime/history/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z.txt @@ -0,0 +1,34 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=verify +COMPONENT=stable-local-result-feed-full-latest-plan-fix3-runner-contract +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=9db30ecae10f79ea07365d2acb9855f0dc845d6c4a86a1128212d8e09d958096 +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=b88401e3399424484cba486f4dc05bca6f676770164d7c38e02d8441d51bc2f1 +SANITIZED_OUTPUT_SHA256=259a2e656163a223bc48f823de2ebd0a55572b9ec95c5c1c40b83f5fcec845ce +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"PLAN_SHA256":"06a5cb5fb7aaed2588430661b3fcaa94b7d52fcd4a06cd10c0795833d51cda2c","backup_changed":false,"changes_made":false,"cluster_changed":false,"command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z","failure_code_contract":{"ADAPTER_CANDIDATE":47,"CURRENT_PUBLIC_SURFACE":46,"EDGE_CANDIDATE":52,"EDGE_DISCOVERY":50,"EDGE_SOURCE_LOCK":51,"LEDGER_PRECONDITION":45,"LOOKUP_CANDIDATE":48,"PRODUCTION_DRIFT":53,"ROOT_OR_HOST":41,"SERVICE_BASIC_HEALTH":43,"SERVICE_STABILITY":44,"SOURCE_LOCK":42,"TEMPORARY_CLEANUP":54,"UNEXPECTED":99,"UNIT_CANDIDATE":49},"gitea_changed":false,"minio_changed":false,"observations":{"candidate":{"adapter_sha256":"2b6936af2b19ba158aae89b75639590c11134480ce034fb3a8027fb45c914935","edge_container_started_at":"2026-07-28T11:06:45.929887242Z","edge_source_sha256":"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8","edge_target_sha256":"ae63d937b8d9189cd016784fb735d1fae32a363cb88ebcc7efdecc22665cc8aa","lookup_sha256":"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e","unit_sha256":"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01"},"current_public":{"exact_full_output_present":false,"exact_http":200,"feed_http":200,"latest_http":200},"fixture":{"corruption_http":409,"exact_http":200,"feed_http":200,"latest_http":200,"latest_output_present":true,"latest_plan_sha_present":true,"restart_persistence":true,"sequence":"efea7986e5d4989d0b8deaa393c8e8a62658185acbc964b14a49a87152a5b9c4"},"service_stability":{"adapter":{"after":{"MainPID":"11360","NRestarts":"22"},"before":{"MainPID":"11360","NRestarts":"22"}},"lookup":{"after":{"MainPID":"466244","NRestarts":"0"},"before":{"MainPID":"466244","NRestarts":"0"}},"portal":{"after":{"MainPID":"466240","NRestarts":"0"},"before":{"MainPID":"466240","NRestarts":"0"}}},"source_hashes":{"/etc/systemd/system/homelab-command-portal.service":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","/etc/systemd/system/homelab-result-lookup.service":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","/usr/local/sbin/homelab-command-portal":"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52","/usr/local/sbin/homelab-result-lookup":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c"}},"plan":{"anti_regression":["AR-001-STABLE-URLS-NO-QUERY-STRING","AR-002-FEED-AND-LATEST-SAME-SEQUENCE","AR-003-LATEST-CONTAINS-FULL-OUTPUT","AR-004-LATEST-CONTAINS-PLAN-SHA256","AR-005-LOCAL-LEDGER-BEFORE-MINIO","AR-006-IMMUTABLE-COLLISION-REJECTED","AR-007-CORRUPTION-RETURNS-409","AR-008-NO-GITEA-LOOKUP-DEPENDENCY","AR-009-NO-MINIO-LOOKUP-DEPENDENCY","AR-010-NO-PORTAL-LOOKUP-DEPENDENCY","AR-011-HISTORICAL-NRESTARTS-ALLOWED","AR-012-PID-AND-NRESTARTS-STABILITY","AR-013-EDGE-SOURCE-SHA-LOCK","AR-014-NGINX-CANDIDATE-MARKER-CARDINALITY","AR-015-NO-SECOND-RUNNER","AR-016-BACKUP-UNTOUCHED","AR-017-FAILURE-RC-IDENTIFIES-STAGE","AR-018-PLAN-SHA-BINDS-APPLY","AR-019-RUNNER-DOES-NOT-USE-PVESH","AR-020-EDGE-DIRECT-SSH-DEBIAN-SUDO","AR-021-STRICT-HOST-KEY-CHECKING","AR-022-SSH-BATCH-MODE-NO-PROMPT","AR-023-SSH-REMOTE-COMMAND-IS-ONE-ARGV","AR-024-EVERY-REMOTE-ARGV-ELEMENT-SHELL-QUOTED","AR-025-PYTHON-C-STUB-ROUNDTRIP-THROUGH-BIN-SH","AR-026-UNQUOTED-SEMICOLON-REGRESSION","AR-027-PRODUCTION-FLATTENED-RUNNER-CONTRACT-SCHEMA","AR-028-NESTED-RUNNER-CONTRACT-BACKWARD-COMPATIBILITY","AR-029-DUPLICATE-CONTRACT-LINE-REJECTED","AR-030-FLATTENED-FIELD-MISMATCH-REJECTED","AR-031-BACKFILL-BEFORE-MUTATION-PASSES"],"apply_postconditions":["new runtime smoke writes one immutable local ledger result","permanent feed and latest expose the same result_sequence","permanent latest command_id and capsule_sha256 match smoke","permanent latest contains full output and PLAN_SHA256","readback remains healthy with Portal stopped during controlled test","readback remains healthy when Gitea and MinIO probes fail","edge nginx container ID and StartedAt unchanged","all changed files stable and services stable for 20 seconds"],"apply_preconditions":["recompute and require this exact PLAN_SHA256","all source SHA-256 locks unchanged","direct SSH to debian@[PRIVATE_IP] succeeds with strict host-key checking and sudo -n; edge-vm and npmplus identity remain unchanged","Adapter, Portal and Lookup stable for 20 seconds","production ledger root absent","current public exact lookup route healthy","candidate fixture matrix PASS","edge source configuration SHA exact","actual production runner JSON schema fixture passes ledger write","failed APPLY FIX2 is confirmed FAILED_BEFORE_MUTATION with source SHA locks intact"],"changes_for_apply":{"edge_vm":{"container_restart":false,"modify":["/opt/npmplus/nginx/proxy_host/9.conf"],"reload_only":"npmplus nginx"},"forbidden":["modify backup","modify cluster membership","modify Gitea repositories","modify MinIO objects","create a second runner","force push"],"pve01":{"create":["/var/lib/homelab-result-ledger"],"do_not_restart":["homelab-command-portal.service","homelab-chat-run"],"modify":["/usr/local/sbin/homelab-command-adapter","/usr/local/sbin/homelab-result-lookup","/etc/systemd/system/homelab-result-lookup.service"],"restart":["homelab-command-adapter.service","homelab-result-lookup.service"]}},"data_contract":{"allowed_methods":["GET","HEAD"],"cache":"no-store/no-cache/must-revalidate","feed_version":4,"full_latest_fields":["command_id","capsule_sha256","finished_at_utc","result_sequence","status","runner_rc","runner_document_rc","runner_wrapper_matches_document","PLAN_SHA256","output","result_contract","runner_document"],"immutable_identity":"{capsule_sha256}/{command_id}.json","integrity_failure_http":409,"missing_http":404,"recent_results_max":32,"runner_contract_normalization":{"cross_checks":["result_contract_valid=true when field exists","result_contract_error is null or NONE","changes_made equality","rollback_started equality","rollback_restored equality","result_contract_status is null, NOT_APPLICABLE, or exact contract status"],"duplicate_contract_lines":"rejected","flattened_schema":"exactly one HOMELAB_RESULT_CONTRACT= line required","invalid_or_mismatched_contract":"rejected","nested_schema":"accepted and validated"},"writer_position":"after validated runner_document and before evidence bundle creation and MinIO upload"},"deterministic_material":{"adapter_transform_sha256":"0281a8321a6a41f3eccdca5080ea592903248a23597b64079390e48c221cea22","edge_route_block_sha256":"ca1609b433b72dba0970aa51983651f5490aeaddafc1687cbd8980ab0a78313d","ledger_helpers_sha256":"7aeb36f73fa5427257ea525a69958db7768e40db12305c48c02837eb72f66946","lookup_candidate_sha256":"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e","unit_candidate_sha256":"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01"},"diagnosis":{"classification":"FAILED_BEFORE_MUTATION","completion_forensic_command_id":"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z","evidence_sha256":"07358e9577c93d1efa8e42e745558b0fbd6631eb58d24dfe95907e458f8e6d0d","failed_apply_command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","failure":"runner result contract missing","fix":"Normalize both supported runner schemas: prefer a nested result_contract object when present; otherwise require exactly one HOMELAB_RESULT_CONTRACT= line, parse and validate it, and cross-check every available flattened validation field.","root_cause":"The ledger writer required runner_document.result_contract as a nested object, but the production runner JSON schema stores the validated contract as a single HOMELAB_RESULT_CONTRACT= JSON line in output plus flattened validation fields. Therefore initial ledger backfill failed before any production mutation.","superseded_plan_command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX2-20260728T152616Z"},"edge_discovery_contract":{"batch_mode":true,"pvesh_forbidden":true,"qm_guest_exec_forbidden":true,"remote_argv":["/usr/bin/sudo","-n","/usr/bin/python3","-B","-c",""],"remote_command_transport":"single remote command string; each remote argv element is shell-quoted with shlex.quote","remote_probe":"hostname, exact config SHA, base64 config, Docker container identity/state/network mode and nginx -t","strict_host_key_checking":true,"sudo":"sudo -n","target":"debian@[PRIVATE_IP]","transport":"direct-ssh","unquoted_python_c_forbidden":true,"writes":false},"failure_code_contract":{"ADAPTER_CANDIDATE":47,"CURRENT_PUBLIC_SURFACE":46,"EDGE_CANDIDATE":52,"EDGE_DISCOVERY":50,"EDGE_SOURCE_LOCK":51,"LEDGER_PRECONDITION":45,"LOOKUP_CANDIDATE":48,"PRODUCTION_DRIFT":53,"ROOT_OR_HOST":41,"SERVICE_BASIC_HEALTH":43,"SERVICE_STABILITY":44,"SOURCE_LOCK":42,"TEMPORARY_CLEANUP":54,"UNEXPECTED":99,"UNIT_CANDIDATE":49},"objective":"Make the two already trusted permanent URLs result-feed.json and latest.json read only from the local immutable result ledger. latest.json must contain the complete sanitized output and PLAN_SHA256. Gitea, MinIO and Portal must not be in the readback critical path.","operation":"STABLE_LOCAL_RESULT_FEED_AND_FULL_LATEST_PLAN_FIX3_RUNNER_CONTRACT_COMPAT","read_only_plan":true,"rollback":{"container_restart_forbidden":true,"diagnostics_before_rollback":true,"nginx_test_before_reload":true,"remove_ledger_only_if_created_by_apply":true,"restore_exact_files":true,"verify_old_routes_after_restore":true},"schema":1,"service_health_contract":{"basic":"loaded, enabled, active, running, Result=success, ExecMainStatus=0, MainPID>1","historical_nonzero_nrestarts_allowed":true,"stability_window_seconds":20,"stable":"MainPID and cumulative NRestarts unchanged"},"source_locks":{"/etc/systemd/system/homelab-command-portal.service":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","/etc/systemd/system/homelab-result-lookup.service":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","/usr/local/sbin/homelab-command-portal":"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52","/usr/local/sbin/homelab-result-lookup":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c","edge":{"config":"/opt/npmplus/nginx/proxy_host/9.conf","container_id":"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9","container_image":"docker.io/zoeyvid/npmplus:2026-06-17-b1","container_name":"npmplus","current_sha256":"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8","node":"pve03","ssh_batch_mode":true,"ssh_host":"[PRIVATE_IP]","ssh_strict_host_key_checking":true,"ssh_target":"debian@[PRIVATE_IP]","ssh_user":"debian","sudo_noninteractive":true,"vm_name":"edge-vm","vmid":130}},"stable_urls":{"feed":"https://git.gram1.ru/.well-known/homelab-runtime/result-feed.json","latest":"https://git.gram1.ru/.well-known/homelab-runtime/latest.json","query_parameters_required":false},"target":"pve01-and-edge-vm"},"private_addresses_included":false,"rollback_started":false,"sanitized":true,"schema":1,"secrets_included":false,"status":"PLAN_READY"} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 4c88e32..0ef0f43 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z", + "command_id": "STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z", "status": "OK", "rc": 0, "host": "pve01", "mode": "verify", - "component": "stable-local-result-apply-fix2-completion-forensic", - "started_at_utc": "2026-07-28T16:29:53Z", - "finished_at_utc": "2026-07-28T16:29:54Z", + "component": "stable-local-result-feed-full-latest-plan-fix3-runner-contract", + "started_at_utc": "2026-07-28T16:39:30Z", + "finished_at_utc": "2026-07-28T16:39:50Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "5761187f1ed3163724e8ce86fee9746b94bed7b47aa6b94f39fb8c3d15705904", + "command_sha256": "9db30ecae10f79ea07365d2acb9855f0dc845d6c4a86a1128212d8e09d958096", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -30,9 +30,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "175b62588330d28489f03f119c48b332e33bc7437ac4dad9de4eac1ed1ba5ead", - "sanitized_output_sha256": "175b62588330d28489f03f119c48b332e33bc7437ac4dad9de4eac1ed1ba5ead", + "raw_evidence_sha256": "b88401e3399424484cba486f4dc05bca6f676770164d7c38e02d8441d51bc2f1", + "sanitized_output_sha256": "259a2e656163a223bc48f823de2ebd0a55572b9ec95c5c1c40b83f5fcec845ce", "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\":\"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"68746ed2758c37f52d2e66768999421d48468d4d46a3d3cf3abaeacf7baf9c79\",\"bootstrap_state\":{\"capsule_sha256\":\"72eb3e6230acf961c64fcdb2163f9bf4a06893df2dee1b07d8d163d8cdcc840b\",\"execution\":{\"finished_at_utc\":\"2026-07-28T16:17:07.342215+00:00\",\"runner_document_rc\":0,\"runner_rc\":0,\"runner_status\":\"OK\",\"runner_wrapper_matches_document\":true,\"started_at_utc\":\"2026-07-28T16:16:41.319088+00:00\"},\"status\":\"OK\"},\"changes_made\":false,\"classification\":\"FAILED_BEFORE_MUTATION\",\"command_id\":\"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z\",\"completion_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z-COMPLETION\",\"completion_report\":{\"exists\":true,\"sha256\":\"1139f83b78234218d424c633d864bc5216621f6f6f716498ac20393b8936acc7\",\"summary\":{\"PLAN_SHA256\":\"68746ed2758c37f52d2e66768999421d48468d4d46a3d3cf3abaeacf7baf9c79\",\"changes_made\":false,\"diagnostics_before_rollback\":{\"files\":{\"/etc/systemd/system/homelab-result-lookup.service\":{\"bytes\":785,\"exists\":true,\"gid\":0,\"is_symlink\":false,\"mode\":420,\"path\":\"/etc/systemd/system/homelab-result-lookup.service\",\"regular\":true,\"sha256\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"uid\":0},\"/usr/local/sbin/homelab-chat-run\":{\"bytes\":21321,\"exists\":true,\"gid\":0,\"is_symlink\":false,\"mode\":488,\"path\":\"/usr/local/sbin/homelab-chat-run\",\"regular\":true,\"sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"uid\":0},\"/usr/local/sbin/homelab-command-adapter\":{\"bytes\":86019,\"exists\":true,\"gid\":0,\"is_symlink\":false,\"mode\":493,\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"regular\":true,\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"uid\":0},\"/usr/local/sbin/homelab-command-portal\":{\"bytes\":39936,\"exists\":true,\"gid\":0,\"is_symlink\":false,\"mode\":493,\"path\":\"/usr/local/sbin/homelab-command-portal\",\"regular\":true,\"sha256\":\"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52\",\"uid\":0},\"/usr/local/sbin/homelab-result-lookup\":{\"bytes\":12083,\"exists\":true,\"gid\":0,\"is_symlink\":false,\"mode\":493,\"path\":\"/usr/local/sbin/homelab-result-lookup\",\"regular\":true,\"sha256\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\",\"uid\":0},\"/var/lib/homelab-result-ledger\":{\"exists\":false,\"is_symlink\":false,\"path\":\"/var/lib/homelab-result-ledger\"}},\"journal_rc\":0,\"journal_sha256\":\"bd523a12d6d82275400d8fe46fa68dab5c4d500ec4754cca95da5f6c1cd09257\",\"units\":{\"homelab-command-adapter.service\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"Group\":\"homelab-command-portal\",\"LoadState\":\"loaded\",\"MainPID\":\"11360\",\"NRestarts\":\"22\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"root\",\"show_rc\":\"0\"},\"homelab-command-portal.service\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"Group\":\"homelab-command-portal\",\"LoadState\":\"loaded\",\"MainPID\":\"466240\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"homelab-command-portal\",\"show_rc\":\"0\"},\"homelab-result-lookup.service\":{\"ActiveState\":\"active\",\"ExecMainStatus\":\"0\",\"Group\":\"homelab-result-lookup\",\"LoadState\":\"loaded\",\"MainPID\":\"466244\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"UnitFileState\":\"enabled\",\"User\":\"homelab-result-lookup\",\"show_rc\":\"0\"}}},\"failure\":\"runner result contract missing\",\"failure_type\":\"ApplyError\",\"finished_at_utc\":\"2026-07-28T16:17:10.551951+00:00\",\"rollback_error\":null,\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"FAIL\"}},\"completion_state\":null,\"diagnosed_apply_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"edge\":{\"config_sha256\":\"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8\",\"container_id\":\"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9\",\"container_image\":\"docker.io/zoeyvid/npmplus:2026-06-17-b1\",\"container_running\":true,\"container_started_at\":\"2026-07-28T11:06:45.929887242Z\",\"host\":\"edge-vm\",\"network_mode\":\"host\",\"nginx_test_rc\":0,\"rc\":0,\"source_match\":true,\"target_match\":false},\"journal\":{\"rc\":0,\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\"stdout_sha256\":\"312f4e6d9fdc7471935b846540d229e99b44632e6b876a03c32989e4248fff2b\",\"tail\":\"Jul 28 19:17:02.400716 pve01 systemd[1]: Starting homelab-stable-local-result-apply-fix2-20260728t160846z.service - [systemd-run] /usr/bin/python3 -B /var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z/apply-helper.py...\\nJul 28 19:17:10.565796 pve01 systemd[1]: homelab-stable-local-result-apply-fix2-20260728t160846z.service: Main process exited, code=exited, status=1/FAILURE\\nJul 28 19:17:10.565917 pve01 systemd[1]: homelab-stable-local-result-apply-fix2-20260728t160846z.service: Failed with result 'exit-code'.\\nJul 28 19:17:10.566127 pve01 systemd[1]: Failed to start homelab-stable-local-result-apply-fix2-20260728t160846z.service - [systemd-run] /usr/bin/python3 -B /var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z/apply-helper.py.\"},\"ledger\":{\"exists\":false,\"is_symlink\":false,\"lexists\":false,\"path\":\"/var/lib/homelab-result-ledger\"},\"local_surface\":{\"feed\":{\"body_sha256\":\"296694a5397ff493f0d6d71b105f3368fb9e5a7603dd0bb42950cfaa8cb714f9\",\"headers\":{\"cache-control\":\"no-store, no-cache, must-revalidate, max-age=0\",\"content-type\":\"application/json; charset=utf-8\",\"etag\":null},\"http\":404,\"selected\":{\"schema\":1,\"status\":\"not_found\"}},\"latest\":{\"body_sha256\":\"296694a5397ff493f0d6d71b105f3368fb9e5a7603dd0bb42950cfaa8cb714f9\",\"headers\":{\"cache-control\":\"no-store, no-cache, must-revalidate, max-age=0\",\"content-type\":\"application/json; charset=utf-8\",\"etag\":null},\"http\":404,\"selected\":{\"schema\":1,\"status\":\"not_found\"}}},\"private_addresses_included\":false,\"production_files\":{\"adapter\":{\"bytes\":86019,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"lexists\":true,\"mode\":493,\"path\":\"/usr/local/sbin/homelab-command-adapter\",\"sha256\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"source_match\":true,\"target_match\":false,\"uid\":0},\"lookup\":{\"bytes\":12083,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"lexists\":true,\"mode\":493,\"path\":\"/usr/local/sbin/homelab-result-lookup\",\"sha256\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\",\"source_match\":true,\"target_match\":false,\"uid\":0},\"unit\":{\"bytes\":785,\"exists\":true,\"gid\":0,\"is_dir\":false,\"is_file\":true,\"is_symlink\":false,\"lexists\":true,\"mode\":420,\"path\":\"/etc/systemd/system/homelab-result-lookup.service\",\"sha256\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"source_match\":true,\"target_match\":false,\"uid\":0}},\"public_surface\":{\"feed\":{\"body_sha256\":\"7cf682e9c9702e2183ca7477215aac6462d9214a2032b47d667d8a2fffdac8df\",\"headers\":{\"cache-control\":\"no-store, no-cache, must-revalidate\",\"content-type\":\"application/json; charset=utf-8\",\"etag\":null},\"http\":200,\"selected\":{\"result_sequence\":\"982647fd8de661d827ab504dd656e5ef3daa453fb2f5595614abedaf5f9d6460\",\"status\":\"ok\",\"version\":3}},\"latest\":{\"body_sha256\":\"dad975559d1220d8f33b1ef29a0588098542cf7db11f42f7f6c7975b6f534f59\",\"headers\":{\"cache-control\":\"max-age=0, private, must-revalidate, no-transform\",\"content-type\":\"application/json\",\"etag\":null},\"http\":200,\"selected\":{\"command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"output_bytes\":1288,\"output_present\":true,\"output_sha256\":\"c6dbfaff448bbbbc1aefb7135b77d65adfb588a29d14b6e49b06cd40e2eafdac\",\"private_addresses_included\":false,\"sanitized\":true,\"schema_version\":1,\"secrets_included\":false,\"status\":\"OK\"}}},\"rollback\":{\"bytes\":4096,\"exists\":true,\"gid\":0,\"is_dir\":true,\"is_file\":false,\"is_symlink\":false,\"lexists\":true,\"mode\":448,\"path\":\"/var/lib/homelab-change-rollback/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"uid\":0},\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secrets_included\":false,\"services\":{\"homelab-command-adapter.service\":{\"ActiveState\":\"active\",\"CollectMode\":\"inactive\",\"ExecMainCode\":\"0\",\"ExecMainStatus\":\"0\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-adapter.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-adapter.service\",\"LoadState\":\"loaded\",\"MainPID\":\"11360\",\"NRestarts\":\"22\",\"Result\":\"success\",\"SubState\":\"running\",\"Transient\":\"no\",\"User\":\"root\",\"show_rc\":\"0\",\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"homelab-command-portal.service\":{\"ActiveState\":\"active\",\"CollectMode\":\"inactive\",\"ExecMainCode\":\"0\",\"ExecMainStatus\":\"0\",\"FragmentPath\":\"/etc/systemd/system/homelab-command-portal.service\",\"Group\":\"homelab-command-portal\",\"Id\":\"homelab-command-portal.service\",\"LoadState\":\"loaded\",\"MainPID\":\"466240\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"Transient\":\"no\",\"User\":\"homelab-command-portal\",\"show_rc\":\"0\",\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"},\"homelab-result-lookup.service\":{\"ActiveState\":\"active\",\"CollectMode\":\"inactive\",\"ExecMainCode\":\"0\",\"ExecMainStatus\":\"0\",\"FragmentPath\":\"/etc/systemd/system/homelab-result-lookup.service\",\"Group\":\"homelab-result-lookup\",\"Id\":\"homelab-result-lookup.service\",\"LoadState\":\"loaded\",\"MainPID\":\"466244\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"running\",\"Transient\":\"no\",\"User\":\"homelab-result-lookup\",\"show_rc\":\"0\",\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}},\"staging\":{\"bytes\":4096,\"exists\":true,\"gid\":0,\"is_dir\":true,\"is_file\":false,\"is_symlink\":false,\"lexists\":true,\"mode\":448,\"path\":\"/var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"uid\":0},\"status\":\"OK\",\"transient_unit\":{\"ActiveState\":\"inactive\",\"CollectMode\":\"inactive\",\"ExecMainCode\":\"0\",\"ExecMainStatus\":\"0\",\"FragmentPath\":\"\",\"Group\":\"\",\"Id\":\"homelab-stable-local-result-apply-fix2-20260728t160846z.service\",\"LoadState\":\"not-found\",\"MainPID\":\"0\",\"NRestarts\":\"0\",\"Result\":\"success\",\"SubState\":\"dead\",\"Transient\":\"no\",\"User\":\"\",\"show_rc\":\"0\",\"stderr_sha256\":\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"}}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":false,\"command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"06a5cb5fb7aaed2588430661b3fcaa94b7d52fcd4a06cd10c0795833d51cda2c\",\"backup_changed\":false,\"changes_made\":false,\"cluster_changed\":false,\"command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z\",\"failure_code_contract\":{\"ADAPTER_CANDIDATE\":47,\"CURRENT_PUBLIC_SURFACE\":46,\"EDGE_CANDIDATE\":52,\"EDGE_DISCOVERY\":50,\"EDGE_SOURCE_LOCK\":51,\"LEDGER_PRECONDITION\":45,\"LOOKUP_CANDIDATE\":48,\"PRODUCTION_DRIFT\":53,\"ROOT_OR_HOST\":41,\"SERVICE_BASIC_HEALTH\":43,\"SERVICE_STABILITY\":44,\"SOURCE_LOCK\":42,\"TEMPORARY_CLEANUP\":54,\"UNEXPECTED\":99,\"UNIT_CANDIDATE\":49},\"gitea_changed\":false,\"minio_changed\":false,\"observations\":{\"candidate\":{\"adapter_sha256\":\"2b6936af2b19ba158aae89b75639590c11134480ce034fb3a8027fb45c914935\",\"edge_container_started_at\":\"2026-07-28T11:06:45.929887242Z\",\"edge_source_sha256\":\"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8\",\"edge_target_sha256\":\"ae63d937b8d9189cd016784fb735d1fae32a363cb88ebcc7efdecc22665cc8aa\",\"lookup_sha256\":\"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e\",\"unit_sha256\":\"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01\"},\"current_public\":{\"exact_full_output_present\":false,\"exact_http\":200,\"feed_http\":200,\"latest_http\":200},\"fixture\":{\"corruption_http\":409,\"exact_http\":200,\"feed_http\":200,\"latest_http\":200,\"latest_output_present\":true,\"latest_plan_sha_present\":true,\"restart_persistence\":true,\"sequence\":\"efea7986e5d4989d0b8deaa393c8e8a62658185acbc964b14a49a87152a5b9c4\"},\"service_stability\":{\"adapter\":{\"after\":{\"MainPID\":\"11360\",\"NRestarts\":\"22\"},\"before\":{\"MainPID\":\"11360\",\"NRestarts\":\"22\"}},\"lookup\":{\"after\":{\"MainPID\":\"466244\",\"NRestarts\":\"0\"},\"before\":{\"MainPID\":\"466244\",\"NRestarts\":\"0\"}},\"portal\":{\"after\":{\"MainPID\":\"466240\",\"NRestarts\":\"0\"},\"before\":{\"MainPID\":\"466240\",\"NRestarts\":\"0\"}}},\"source_hashes\":{\"/etc/systemd/system/homelab-command-portal.service\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"/etc/systemd/system/homelab-result-lookup.service\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"/usr/local/sbin/homelab-command-portal\":\"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52\",\"/usr/local/sbin/homelab-result-lookup\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\"}},\"plan\":{\"anti_regression\":[\"AR-001-STABLE-URLS-NO-QUERY-STRING\",\"AR-002-FEED-AND-LATEST-SAME-SEQUENCE\",\"AR-003-LATEST-CONTAINS-FULL-OUTPUT\",\"AR-004-LATEST-CONTAINS-PLAN-SHA256\",\"AR-005-LOCAL-LEDGER-BEFORE-MINIO\",\"AR-006-IMMUTABLE-COLLISION-REJECTED\",\"AR-007-CORRUPTION-RETURNS-409\",\"AR-008-NO-GITEA-LOOKUP-DEPENDENCY\",\"AR-009-NO-MINIO-LOOKUP-DEPENDENCY\",\"AR-010-NO-PORTAL-LOOKUP-DEPENDENCY\",\"AR-011-HISTORICAL-NRESTARTS-ALLOWED\",\"AR-012-PID-AND-NRESTARTS-STABILITY\",\"AR-013-EDGE-SOURCE-SHA-LOCK\",\"AR-014-NGINX-CANDIDATE-MARKER-CARDINALITY\",\"AR-015-NO-SECOND-RUNNER\",\"AR-016-BACKUP-UNTOUCHED\",\"AR-017-FAILURE-RC-IDENTIFIES-STAGE\",\"AR-018-PLAN-SHA-BINDS-APPLY\",\"AR-019-RUNNER-DOES-NOT-USE-PVESH\",\"AR-020-EDGE-DIRECT-SSH-DEBIAN-SUDO\",\"AR-021-STRICT-HOST-KEY-CHECKING\",\"AR-022-SSH-BATCH-MODE-NO-PROMPT\",\"AR-023-SSH-REMOTE-COMMAND-IS-ONE-ARGV\",\"AR-024-EVERY-REMOTE-ARGV-ELEMENT-SHELL-QUOTED\",\"AR-025-PYTHON-C-STUB-ROUNDTRIP-THROUGH-BIN-SH\",\"AR-026-UNQUOTED-SEMICOLON-REGRESSION\",\"AR-027-PRODUCTION-FLATTENED-RUNNER-CONTRACT-SCHEMA\",\"AR-028-NESTED-RUNNER-CONTRACT-BACKWARD-COMPATIBILITY\",\"AR-029-DUPLICATE-CONTRACT-LINE-REJECTED\",\"AR-030-FLATTENED-FIELD-MISMATCH-REJECTED\",\"AR-031-BACKFILL-BEFORE-MUTATION-PASSES\"],\"apply_postconditions\":[\"new runtime smoke writes one immutable local ledger result\",\"permanent feed and latest expose the same result_sequence\",\"permanent latest command_id and capsule_sha256 match smoke\",\"permanent latest contains full output and PLAN_SHA256\",\"readback remains healthy with Portal stopped during controlled test\",\"readback remains healthy when Gitea and MinIO probes fail\",\"edge nginx container ID and StartedAt unchanged\",\"all changed files stable and services stable for 20 seconds\"],\"apply_preconditions\":[\"recompute and require this exact PLAN_SHA256\",\"all source SHA-256 locks unchanged\",\"direct SSH to debian@[PRIVATE_IP] succeeds with strict host-key checking and sudo -n; edge-vm and npmplus identity remain unchanged\",\"Adapter, Portal and Lookup stable for 20 seconds\",\"production ledger root absent\",\"current public exact lookup route healthy\",\"candidate fixture matrix PASS\",\"edge source configuration SHA exact\",\"actual production runner JSON schema fixture passes ledger write\",\"failed APPLY FIX2 is confirmed FAILED_BEFORE_MUTATION with source SHA locks intact\"],\"changes_for_apply\":{\"edge_vm\":{\"container_restart\":false,\"modify\":[\"/opt/npmplus/nginx/proxy_host/9.conf\"],\"reload_only\":\"npmplus nginx\"},\"forbidden\":[\"modify backup\",\"modify cluster membership\",\"modify Gitea repositories\",\"modify MinIO objects\",\"create a second runner\",\"force push\"],\"pve01\":{\"create\":[\"/var/lib/homelab-result-ledger\"],\"do_not_restart\":[\"homelab-command-portal.service\",\"homelab-chat-run\"],\"modify\":[\"/usr/local/sbin/homelab-command-adapter\",\"/usr/local/sbin/homelab-result-lookup\",\"/etc/systemd/system/homelab-result-lookup.service\"],\"restart\":[\"homelab-command-adapter.service\",\"homelab-result-lookup.service\"]}},\"data_contract\":{\"allowed_methods\":[\"GET\",\"HEAD\"],\"cache\":\"no-store/no-cache/must-revalidate\",\"feed_version\":4,\"full_latest_fields\":[\"command_id\",\"capsule_sha256\",\"finished_at_utc\",\"result_sequence\",\"status\",\"runner_rc\",\"runner_document_rc\",\"runner_wrapper_matches_document\",\"PLAN_SHA256\",\"output\",\"result_contract\",\"runner_document\"],\"immutable_identity\":\"{capsule_sha256}/{command_id}.json\",\"integrity_failure_http\":409,\"missing_http\":404,\"recent_results_max\":32,\"runner_contract_normalization\":{\"cross_checks\":[\"result_contract_valid=true when field exists\",\"result_contract_error is null or NONE\",\"changes_made equality\",\"rollback_started equality\",\"rollback_restored equality\",\"result_contract_status is null, NOT_APPLICABLE, or exact contract status\"],\"duplicate_contract_lines\":\"rejected\",\"flattened_schema\":\"exactly one HOMELAB_RESULT_CONTRACT= line required\",\"invalid_or_mismatched_contract\":\"rejected\",\"nested_schema\":\"accepted and validated\"},\"writer_position\":\"after validated runner_document and before evidence bundle creation and MinIO upload\"},\"deterministic_material\":{\"adapter_transform_sha256\":\"0281a8321a6a41f3eccdca5080ea592903248a23597b64079390e48c221cea22\",\"edge_route_block_sha256\":\"ca1609b433b72dba0970aa51983651f5490aeaddafc1687cbd8980ab0a78313d\",\"ledger_helpers_sha256\":\"7aeb36f73fa5427257ea525a69958db7768e40db12305c48c02837eb72f66946\",\"lookup_candidate_sha256\":\"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e\",\"unit_candidate_sha256\":\"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01\"},\"diagnosis\":{\"classification\":\"FAILED_BEFORE_MUTATION\",\"completion_forensic_command_id\":\"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z\",\"evidence_sha256\":\"07358e9577c93d1efa8e42e745558b0fbd6631eb58d24dfe95907e458f8e6d0d\",\"failed_apply_command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z\",\"failure\":\"runner result contract missing\",\"fix\":\"Normalize both supported runner schemas: prefer a nested result_contract object when present; otherwise require exactly one HOMELAB_RESULT_CONTRACT= line, parse and validate it, and cross-check every available flattened validation field.\",\"root_cause\":\"The ledger writer required runner_document.result_contract as a nested object, but the production runner JSON schema stores the validated contract as a single HOMELAB_RESULT_CONTRACT= JSON line in output plus flattened validation fields. Therefore initial ledger backfill failed before any production mutation.\",\"superseded_plan_command_id\":\"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX2-20260728T152616Z\"},\"edge_discovery_contract\":{\"batch_mode\":true,\"pvesh_forbidden\":true,\"qm_guest_exec_forbidden\":true,\"remote_argv\":[\"/usr/bin/sudo\",\"-n\",\"/usr/bin/python3\",\"-B\",\"-c\",\"\"],\"remote_command_transport\":\"single remote command string; each remote argv element is shell-quoted with shlex.quote\",\"remote_probe\":\"hostname, exact config SHA, base64 config, Docker container identity/state/network mode and nginx -t\",\"strict_host_key_checking\":true,\"sudo\":\"sudo -n\",\"target\":\"debian@[PRIVATE_IP]\",\"transport\":\"direct-ssh\",\"unquoted_python_c_forbidden\":true,\"writes\":false},\"failure_code_contract\":{\"ADAPTER_CANDIDATE\":47,\"CURRENT_PUBLIC_SURFACE\":46,\"EDGE_CANDIDATE\":52,\"EDGE_DISCOVERY\":50,\"EDGE_SOURCE_LOCK\":51,\"LEDGER_PRECONDITION\":45,\"LOOKUP_CANDIDATE\":48,\"PRODUCTION_DRIFT\":53,\"ROOT_OR_HOST\":41,\"SERVICE_BASIC_HEALTH\":43,\"SERVICE_STABILITY\":44,\"SOURCE_LOCK\":42,\"TEMPORARY_CLEANUP\":54,\"UNEXPECTED\":99,\"UNIT_CANDIDATE\":49},\"objective\":\"Make the two already trusted permanent URLs result-feed.json and latest.json read only from the local immutable result ledger. latest.json must contain the complete sanitized output and PLAN_SHA256. Gitea, MinIO and Portal must not be in the readback critical path.\",\"operation\":\"STABLE_LOCAL_RESULT_FEED_AND_FULL_LATEST_PLAN_FIX3_RUNNER_CONTRACT_COMPAT\",\"read_only_plan\":true,\"rollback\":{\"container_restart_forbidden\":true,\"diagnostics_before_rollback\":true,\"nginx_test_before_reload\":true,\"remove_ledger_only_if_created_by_apply\":true,\"restore_exact_files\":true,\"verify_old_routes_after_restore\":true},\"schema\":1,\"service_health_contract\":{\"basic\":\"loaded, enabled, active, running, Result=success, ExecMainStatus=0, MainPID>1\",\"historical_nonzero_nrestarts_allowed\":true,\"stability_window_seconds\":20,\"stable\":\"MainPID and cumulative NRestarts unchanged\"},\"source_locks\":{\"/etc/systemd/system/homelab-command-portal.service\":\"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263\",\"/etc/systemd/system/homelab-result-lookup.service\":\"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d\",\"/usr/local/sbin/homelab-chat-run\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\",\"/usr/local/sbin/homelab-command-adapter\":\"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d\",\"/usr/local/sbin/homelab-command-portal\":\"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52\",\"/usr/local/sbin/homelab-result-lookup\":\"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c\",\"edge\":{\"config\":\"/opt/npmplus/nginx/proxy_host/9.conf\",\"container_id\":\"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9\",\"container_image\":\"docker.io/zoeyvid/npmplus:2026-06-17-b1\",\"container_name\":\"npmplus\",\"current_sha256\":\"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8\",\"node\":\"pve03\",\"ssh_batch_mode\":true,\"ssh_host\":\"[PRIVATE_IP]\",\"ssh_strict_host_key_checking\":true,\"ssh_target\":\"debian@[PRIVATE_IP]\",\"ssh_user\":\"debian\",\"sudo_noninteractive\":true,\"vm_name\":\"edge-vm\",\"vmid\":130}},\"stable_urls\":{\"feed\":\"https://git.gram1.ru/.well-known/homelab-runtime/result-feed.json\",\"latest\":\"https://git.gram1.ru/.well-known/homelab-runtime/latest.json\",\"query_parameters_required\":false},\"target\":\"pve01-and-edge-vm\"},\"private_addresses_included\":false,\"rollback_started\":false,\"sanitized\":true,\"schema\":1,\"secrets_included\":false,\"status\":\"PLAN_READY\"}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 4557bac..0f29f53 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,15 +1,15 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z +COMMAND_ID=STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z STATUS=OK RC=0 HOST=pve01 MODE=verify -COMPONENT=stable-local-result-apply-fix2-completion-forensic +COMPONENT=stable-local-result-feed-full-latest-plan-fix3-runner-contract REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=5761187f1ed3163724e8ce86fee9746b94bed7b47aa6b94f39fb8c3d15705904 +COMMAND_SHA256=9db30ecae10f79ea07365d2acb9855f0dc845d6c4a86a1128212d8e09d958096 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGE_DECLARED=false @@ -24,11 +24,11 @@ MUTATION_OUTCOME=NO_MUTATION SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=175b62588330d28489f03f119c48b332e33bc7437ac4dad9de4eac1ed1ba5ead -SANITIZED_OUTPUT_SHA256=175b62588330d28489f03f119c48b332e33bc7437ac4dad9de4eac1ed1ba5ead +RAW_EVIDENCE_SHA256=b88401e3399424484cba486f4dc05bca6f676770164d7c38e02d8441d51bc2f1 +SANITIZED_OUTPUT_SHA256=259a2e656163a223bc48f823de2ebd0a55572b9ec95c5c1c40b83f5fcec845ce OUTPUT_BEGIN -HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} -{"PLAN_SHA256":"68746ed2758c37f52d2e66768999421d48468d4d46a3d3cf3abaeacf7baf9c79","bootstrap_state":{"capsule_sha256":"72eb3e6230acf961c64fcdb2163f9bf4a06893df2dee1b07d8d163d8cdcc840b","execution":{"finished_at_utc":"2026-07-28T16:17:07.342215+00:00","runner_document_rc":0,"runner_rc":0,"runner_status":"OK","runner_wrapper_matches_document":true,"started_at_utc":"2026-07-28T16:16:41.319088+00:00"},"status":"OK"},"changes_made":false,"classification":"FAILED_BEFORE_MUTATION","command_id":"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z","completion_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z-COMPLETION","completion_report":{"exists":true,"sha256":"1139f83b78234218d424c633d864bc5216621f6f6f716498ac20393b8936acc7","summary":{"PLAN_SHA256":"68746ed2758c37f52d2e66768999421d48468d4d46a3d3cf3abaeacf7baf9c79","changes_made":false,"diagnostics_before_rollback":{"files":{"/etc/systemd/system/homelab-result-lookup.service":{"bytes":785,"exists":true,"gid":0,"is_symlink":false,"mode":420,"path":"/etc/systemd/system/homelab-result-lookup.service","regular":true,"sha256":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","uid":0},"/usr/local/sbin/homelab-chat-run":{"bytes":21321,"exists":true,"gid":0,"is_symlink":false,"mode":488,"path":"/usr/local/sbin/homelab-chat-run","regular":true,"sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","uid":0},"/usr/local/sbin/homelab-command-adapter":{"bytes":86019,"exists":true,"gid":0,"is_symlink":false,"mode":493,"path":"/usr/local/sbin/homelab-command-adapter","regular":true,"sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","uid":0},"/usr/local/sbin/homelab-command-portal":{"bytes":39936,"exists":true,"gid":0,"is_symlink":false,"mode":493,"path":"/usr/local/sbin/homelab-command-portal","regular":true,"sha256":"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52","uid":0},"/usr/local/sbin/homelab-result-lookup":{"bytes":12083,"exists":true,"gid":0,"is_symlink":false,"mode":493,"path":"/usr/local/sbin/homelab-result-lookup","regular":true,"sha256":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c","uid":0},"/var/lib/homelab-result-ledger":{"exists":false,"is_symlink":false,"path":"/var/lib/homelab-result-ledger"}},"journal_rc":0,"journal_sha256":"bd523a12d6d82275400d8fe46fa68dab5c4d500ec4754cca95da5f6c1cd09257","units":{"homelab-command-adapter.service":{"ActiveState":"active","ExecMainStatus":"0","Group":"homelab-command-portal","LoadState":"loaded","MainPID":"11360","NRestarts":"22","Result":"success","SubState":"running","UnitFileState":"enabled","User":"root","show_rc":"0"},"homelab-command-portal.service":{"ActiveState":"active","ExecMainStatus":"0","Group":"homelab-command-portal","LoadState":"loaded","MainPID":"466240","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"homelab-command-portal","show_rc":"0"},"homelab-result-lookup.service":{"ActiveState":"active","ExecMainStatus":"0","Group":"homelab-result-lookup","LoadState":"loaded","MainPID":"466244","NRestarts":"0","Result":"success","SubState":"running","UnitFileState":"enabled","User":"homelab-result-lookup","show_rc":"0"}}},"failure":"runner result contract missing","failure_type":"ApplyError","finished_at_utc":"2026-07-28T16:17:10.551951+00:00","rollback_error":null,"rollback_restored":null,"rollback_started":false,"status":"FAIL"}},"completion_state":null,"diagnosed_apply_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","edge":{"config_sha256":"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8","container_id":"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9","container_image":"docker.io/zoeyvid/npmplus:2026-06-17-b1","container_running":true,"container_started_at":"2026-07-28T11:06:45.929887242Z","host":"edge-vm","network_mode":"host","nginx_test_rc":0,"rc":0,"source_match":true,"target_match":false},"journal":{"rc":0,"stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","stdout_sha256":"312f4e6d9fdc7471935b846540d229e99b44632e6b876a03c32989e4248fff2b","tail":"Jul 28 19:17:02.400716 pve01 systemd[1]: Starting homelab-stable-local-result-apply-fix2-20260728t160846z.service - [systemd-run] /usr/bin/python3 -B /var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z/apply-helper.py...\nJul 28 19:17:10.565796 pve01 systemd[1]: homelab-stable-local-result-apply-fix2-20260728t160846z.service: Main process exited, code=exited, status=1/FAILURE\nJul 28 19:17:10.565917 pve01 systemd[1]: homelab-stable-local-result-apply-fix2-20260728t160846z.service: Failed with result 'exit-code'.\nJul 28 19:17:10.566127 pve01 systemd[1]: Failed to start homelab-stable-local-result-apply-fix2-20260728t160846z.service - [systemd-run] /usr/bin/python3 -B /var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z/apply-helper.py."},"ledger":{"exists":false,"is_symlink":false,"lexists":false,"path":"/var/lib/homelab-result-ledger"},"local_surface":{"feed":{"body_sha256":"296694a5397ff493f0d6d71b105f3368fb9e5a7603dd0bb42950cfaa8cb714f9","headers":{"cache-control":"no-store, no-cache, must-revalidate, max-age=0","content-type":"application/json; charset=utf-8","etag":null},"http":404,"selected":{"schema":1,"status":"not_found"}},"latest":{"body_sha256":"296694a5397ff493f0d6d71b105f3368fb9e5a7603dd0bb42950cfaa8cb714f9","headers":{"cache-control":"no-store, no-cache, must-revalidate, max-age=0","content-type":"application/json; charset=utf-8","etag":null},"http":404,"selected":{"schema":1,"status":"not_found"}}},"private_addresses_included":false,"production_files":{"adapter":{"bytes":86019,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"lexists":true,"mode":493,"path":"/usr/local/sbin/homelab-command-adapter","sha256":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","source_match":true,"target_match":false,"uid":0},"lookup":{"bytes":12083,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"lexists":true,"mode":493,"path":"/usr/local/sbin/homelab-result-lookup","sha256":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c","source_match":true,"target_match":false,"uid":0},"unit":{"bytes":785,"exists":true,"gid":0,"is_dir":false,"is_file":true,"is_symlink":false,"lexists":true,"mode":420,"path":"/etc/systemd/system/homelab-result-lookup.service","sha256":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","source_match":true,"target_match":false,"uid":0}},"public_surface":{"feed":{"body_sha256":"7cf682e9c9702e2183ca7477215aac6462d9214a2032b47d667d8a2fffdac8df","headers":{"cache-control":"no-store, no-cache, must-revalidate","content-type":"application/json; charset=utf-8","etag":null},"http":200,"selected":{"result_sequence":"982647fd8de661d827ab504dd656e5ef3daa453fb2f5595614abedaf5f9d6460","status":"ok","version":3}},"latest":{"body_sha256":"dad975559d1220d8f33b1ef29a0588098542cf7db11f42f7f6c7975b6f534f59","headers":{"cache-control":"max-age=0, private, must-revalidate, no-transform","content-type":"application/json","etag":null},"http":200,"selected":{"command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","output_bytes":1288,"output_present":true,"output_sha256":"c6dbfaff448bbbbc1aefb7135b77d65adfb588a29d14b6e49b06cd40e2eafdac","private_addresses_included":false,"sanitized":true,"schema_version":1,"secrets_included":false,"status":"OK"}}},"rollback":{"bytes":4096,"exists":true,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"lexists":true,"mode":448,"path":"/var/lib/homelab-change-rollback/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","uid":0},"rollback_started":false,"sanitized":true,"schema":1,"secrets_included":false,"services":{"homelab-command-adapter.service":{"ActiveState":"active","CollectMode":"inactive","ExecMainCode":"0","ExecMainStatus":"0","FragmentPath":"/etc/systemd/system/homelab-command-adapter.service","Group":"homelab-command-portal","Id":"homelab-command-adapter.service","LoadState":"loaded","MainPID":"11360","NRestarts":"22","Result":"success","SubState":"running","Transient":"no","User":"root","show_rc":"0","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"homelab-command-portal.service":{"ActiveState":"active","CollectMode":"inactive","ExecMainCode":"0","ExecMainStatus":"0","FragmentPath":"/etc/systemd/system/homelab-command-portal.service","Group":"homelab-command-portal","Id":"homelab-command-portal.service","LoadState":"loaded","MainPID":"466240","NRestarts":"0","Result":"success","SubState":"running","Transient":"no","User":"homelab-command-portal","show_rc":"0","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"homelab-result-lookup.service":{"ActiveState":"active","CollectMode":"inactive","ExecMainCode":"0","ExecMainStatus":"0","FragmentPath":"/etc/systemd/system/homelab-result-lookup.service","Group":"homelab-result-lookup","Id":"homelab-result-lookup.service","LoadState":"loaded","MainPID":"466244","NRestarts":"0","Result":"success","SubState":"running","Transient":"no","User":"homelab-result-lookup","show_rc":"0","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}},"staging":{"bytes":4096,"exists":true,"gid":0,"is_dir":true,"is_file":false,"is_symlink":false,"lexists":true,"mode":448,"path":"/var/lib/homelab-change-staging/STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","uid":0},"status":"OK","transient_unit":{"ActiveState":"inactive","CollectMode":"inactive","ExecMainCode":"0","ExecMainStatus":"0","FragmentPath":"","Group":"","Id":"homelab-stable-local-result-apply-fix2-20260728t160846z.service","LoadState":"not-found","MainPID":"0","NRestarts":"0","Result":"success","SubState":"dead","Transient":"no","User":"","show_rc":"0","stderr_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}} +HOMELAB_RESULT_CONTRACT={"changes_made":false,"command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"PLAN_SHA256":"06a5cb5fb7aaed2588430661b3fcaa94b7d52fcd4a06cd10c0795833d51cda2c","backup_changed":false,"changes_made":false,"cluster_changed":false,"command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX3-20260728T163543Z","failure_code_contract":{"ADAPTER_CANDIDATE":47,"CURRENT_PUBLIC_SURFACE":46,"EDGE_CANDIDATE":52,"EDGE_DISCOVERY":50,"EDGE_SOURCE_LOCK":51,"LEDGER_PRECONDITION":45,"LOOKUP_CANDIDATE":48,"PRODUCTION_DRIFT":53,"ROOT_OR_HOST":41,"SERVICE_BASIC_HEALTH":43,"SERVICE_STABILITY":44,"SOURCE_LOCK":42,"TEMPORARY_CLEANUP":54,"UNEXPECTED":99,"UNIT_CANDIDATE":49},"gitea_changed":false,"minio_changed":false,"observations":{"candidate":{"adapter_sha256":"2b6936af2b19ba158aae89b75639590c11134480ce034fb3a8027fb45c914935","edge_container_started_at":"2026-07-28T11:06:45.929887242Z","edge_source_sha256":"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8","edge_target_sha256":"ae63d937b8d9189cd016784fb735d1fae32a363cb88ebcc7efdecc22665cc8aa","lookup_sha256":"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e","unit_sha256":"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01"},"current_public":{"exact_full_output_present":false,"exact_http":200,"feed_http":200,"latest_http":200},"fixture":{"corruption_http":409,"exact_http":200,"feed_http":200,"latest_http":200,"latest_output_present":true,"latest_plan_sha_present":true,"restart_persistence":true,"sequence":"efea7986e5d4989d0b8deaa393c8e8a62658185acbc964b14a49a87152a5b9c4"},"service_stability":{"adapter":{"after":{"MainPID":"11360","NRestarts":"22"},"before":{"MainPID":"11360","NRestarts":"22"}},"lookup":{"after":{"MainPID":"466244","NRestarts":"0"},"before":{"MainPID":"466244","NRestarts":"0"}},"portal":{"after":{"MainPID":"466240","NRestarts":"0"},"before":{"MainPID":"466240","NRestarts":"0"}}},"source_hashes":{"/etc/systemd/system/homelab-command-portal.service":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","/etc/systemd/system/homelab-result-lookup.service":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","/usr/local/sbin/homelab-command-portal":"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52","/usr/local/sbin/homelab-result-lookup":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c"}},"plan":{"anti_regression":["AR-001-STABLE-URLS-NO-QUERY-STRING","AR-002-FEED-AND-LATEST-SAME-SEQUENCE","AR-003-LATEST-CONTAINS-FULL-OUTPUT","AR-004-LATEST-CONTAINS-PLAN-SHA256","AR-005-LOCAL-LEDGER-BEFORE-MINIO","AR-006-IMMUTABLE-COLLISION-REJECTED","AR-007-CORRUPTION-RETURNS-409","AR-008-NO-GITEA-LOOKUP-DEPENDENCY","AR-009-NO-MINIO-LOOKUP-DEPENDENCY","AR-010-NO-PORTAL-LOOKUP-DEPENDENCY","AR-011-HISTORICAL-NRESTARTS-ALLOWED","AR-012-PID-AND-NRESTARTS-STABILITY","AR-013-EDGE-SOURCE-SHA-LOCK","AR-014-NGINX-CANDIDATE-MARKER-CARDINALITY","AR-015-NO-SECOND-RUNNER","AR-016-BACKUP-UNTOUCHED","AR-017-FAILURE-RC-IDENTIFIES-STAGE","AR-018-PLAN-SHA-BINDS-APPLY","AR-019-RUNNER-DOES-NOT-USE-PVESH","AR-020-EDGE-DIRECT-SSH-DEBIAN-SUDO","AR-021-STRICT-HOST-KEY-CHECKING","AR-022-SSH-BATCH-MODE-NO-PROMPT","AR-023-SSH-REMOTE-COMMAND-IS-ONE-ARGV","AR-024-EVERY-REMOTE-ARGV-ELEMENT-SHELL-QUOTED","AR-025-PYTHON-C-STUB-ROUNDTRIP-THROUGH-BIN-SH","AR-026-UNQUOTED-SEMICOLON-REGRESSION","AR-027-PRODUCTION-FLATTENED-RUNNER-CONTRACT-SCHEMA","AR-028-NESTED-RUNNER-CONTRACT-BACKWARD-COMPATIBILITY","AR-029-DUPLICATE-CONTRACT-LINE-REJECTED","AR-030-FLATTENED-FIELD-MISMATCH-REJECTED","AR-031-BACKFILL-BEFORE-MUTATION-PASSES"],"apply_postconditions":["new runtime smoke writes one immutable local ledger result","permanent feed and latest expose the same result_sequence","permanent latest command_id and capsule_sha256 match smoke","permanent latest contains full output and PLAN_SHA256","readback remains healthy with Portal stopped during controlled test","readback remains healthy when Gitea and MinIO probes fail","edge nginx container ID and StartedAt unchanged","all changed files stable and services stable for 20 seconds"],"apply_preconditions":["recompute and require this exact PLAN_SHA256","all source SHA-256 locks unchanged","direct SSH to debian@[PRIVATE_IP] succeeds with strict host-key checking and sudo -n; edge-vm and npmplus identity remain unchanged","Adapter, Portal and Lookup stable for 20 seconds","production ledger root absent","current public exact lookup route healthy","candidate fixture matrix PASS","edge source configuration SHA exact","actual production runner JSON schema fixture passes ledger write","failed APPLY FIX2 is confirmed FAILED_BEFORE_MUTATION with source SHA locks intact"],"changes_for_apply":{"edge_vm":{"container_restart":false,"modify":["/opt/npmplus/nginx/proxy_host/9.conf"],"reload_only":"npmplus nginx"},"forbidden":["modify backup","modify cluster membership","modify Gitea repositories","modify MinIO objects","create a second runner","force push"],"pve01":{"create":["/var/lib/homelab-result-ledger"],"do_not_restart":["homelab-command-portal.service","homelab-chat-run"],"modify":["/usr/local/sbin/homelab-command-adapter","/usr/local/sbin/homelab-result-lookup","/etc/systemd/system/homelab-result-lookup.service"],"restart":["homelab-command-adapter.service","homelab-result-lookup.service"]}},"data_contract":{"allowed_methods":["GET","HEAD"],"cache":"no-store/no-cache/must-revalidate","feed_version":4,"full_latest_fields":["command_id","capsule_sha256","finished_at_utc","result_sequence","status","runner_rc","runner_document_rc","runner_wrapper_matches_document","PLAN_SHA256","output","result_contract","runner_document"],"immutable_identity":"{capsule_sha256}/{command_id}.json","integrity_failure_http":409,"missing_http":404,"recent_results_max":32,"runner_contract_normalization":{"cross_checks":["result_contract_valid=true when field exists","result_contract_error is null or NONE","changes_made equality","rollback_started equality","rollback_restored equality","result_contract_status is null, NOT_APPLICABLE, or exact contract status"],"duplicate_contract_lines":"rejected","flattened_schema":"exactly one HOMELAB_RESULT_CONTRACT= line required","invalid_or_mismatched_contract":"rejected","nested_schema":"accepted and validated"},"writer_position":"after validated runner_document and before evidence bundle creation and MinIO upload"},"deterministic_material":{"adapter_transform_sha256":"0281a8321a6a41f3eccdca5080ea592903248a23597b64079390e48c221cea22","edge_route_block_sha256":"ca1609b433b72dba0970aa51983651f5490aeaddafc1687cbd8980ab0a78313d","ledger_helpers_sha256":"7aeb36f73fa5427257ea525a69958db7768e40db12305c48c02837eb72f66946","lookup_candidate_sha256":"acb8a49e008d1c0f1a85219633ee2d4c390d2e60e0c2071ec17a2c5aeb42e57e","unit_candidate_sha256":"c957d136ad93e1cd1386d42cb15732b798400652952f56ea0746c80e927bbd01"},"diagnosis":{"classification":"FAILED_BEFORE_MUTATION","completion_forensic_command_id":"STABLE-LOCAL-RESULT-APPLY-FIX2-COMPLETION-FORENSIC-20260728T162843Z","evidence_sha256":"07358e9577c93d1efa8e42e745558b0fbd6631eb58d24dfe95907e458f8e6d0d","failed_apply_command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-APPLY-FIX2-20260728T160846Z","failure":"runner result contract missing","fix":"Normalize both supported runner schemas: prefer a nested result_contract object when present; otherwise require exactly one HOMELAB_RESULT_CONTRACT= line, parse and validate it, and cross-check every available flattened validation field.","root_cause":"The ledger writer required runner_document.result_contract as a nested object, but the production runner JSON schema stores the validated contract as a single HOMELAB_RESULT_CONTRACT= JSON line in output plus flattened validation fields. Therefore initial ledger backfill failed before any production mutation.","superseded_plan_command_id":"STABLE-LOCAL-RESULT-FEED-AND-FULL-LATEST-PLAN-FIX2-20260728T152616Z"},"edge_discovery_contract":{"batch_mode":true,"pvesh_forbidden":true,"qm_guest_exec_forbidden":true,"remote_argv":["/usr/bin/sudo","-n","/usr/bin/python3","-B","-c",""],"remote_command_transport":"single remote command string; each remote argv element is shell-quoted with shlex.quote","remote_probe":"hostname, exact config SHA, base64 config, Docker container identity/state/network mode and nginx -t","strict_host_key_checking":true,"sudo":"sudo -n","target":"debian@[PRIVATE_IP]","transport":"direct-ssh","unquoted_python_c_forbidden":true,"writes":false},"failure_code_contract":{"ADAPTER_CANDIDATE":47,"CURRENT_PUBLIC_SURFACE":46,"EDGE_CANDIDATE":52,"EDGE_DISCOVERY":50,"EDGE_SOURCE_LOCK":51,"LEDGER_PRECONDITION":45,"LOOKUP_CANDIDATE":48,"PRODUCTION_DRIFT":53,"ROOT_OR_HOST":41,"SERVICE_BASIC_HEALTH":43,"SERVICE_STABILITY":44,"SOURCE_LOCK":42,"TEMPORARY_CLEANUP":54,"UNEXPECTED":99,"UNIT_CANDIDATE":49},"objective":"Make the two already trusted permanent URLs result-feed.json and latest.json read only from the local immutable result ledger. latest.json must contain the complete sanitized output and PLAN_SHA256. Gitea, MinIO and Portal must not be in the readback critical path.","operation":"STABLE_LOCAL_RESULT_FEED_AND_FULL_LATEST_PLAN_FIX3_RUNNER_CONTRACT_COMPAT","read_only_plan":true,"rollback":{"container_restart_forbidden":true,"diagnostics_before_rollback":true,"nginx_test_before_reload":true,"remove_ledger_only_if_created_by_apply":true,"restore_exact_files":true,"verify_old_routes_after_restore":true},"schema":1,"service_health_contract":{"basic":"loaded, enabled, active, running, Result=success, ExecMainStatus=0, MainPID>1","historical_nonzero_nrestarts_allowed":true,"stability_window_seconds":20,"stable":"MainPID and cumulative NRestarts unchanged"},"source_locks":{"/etc/systemd/system/homelab-command-portal.service":"8453eab30f5c3ccd285fc9f70fff18f564809bb27f7bf84f51f2ba593aa85263","/etc/systemd/system/homelab-result-lookup.service":"4bcc607fd457313f75373ec3d8ec20e7020f13c7cb8a9523fd988a24b0f6609d","/usr/local/sbin/homelab-chat-run":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d","/usr/local/sbin/homelab-command-adapter":"a1a7a615c99568bf915d084cc476f0ebf54ab0eedf3ecd578c4b0e072f58c43d","/usr/local/sbin/homelab-command-portal":"97c69bd4fccf7272dadc911281c1503f411bae2dc11dac4b22b87f33d678ae52","/usr/local/sbin/homelab-result-lookup":"17f8d2a2ea219cdc02b0f8e821f8054b05c01de1253419b3d23349a2d383889c","edge":{"config":"/opt/npmplus/nginx/proxy_host/9.conf","container_id":"2f18b3d7f3865edf4bdb4ae658fbecc4f75145acab1ffac2fe57df1d889952c9","container_image":"docker.io/zoeyvid/npmplus:2026-06-17-b1","container_name":"npmplus","current_sha256":"bb8fff32953ac81b7c93a943308c939804262ea8db3c21a344a417adec45e8e8","node":"pve03","ssh_batch_mode":true,"ssh_host":"[PRIVATE_IP]","ssh_strict_host_key_checking":true,"ssh_target":"debian@[PRIVATE_IP]","ssh_user":"debian","sudo_noninteractive":true,"vm_name":"edge-vm","vmid":130}},"stable_urls":{"feed":"https://git.gram1.ru/.well-known/homelab-runtime/result-feed.json","latest":"https://git.gram1.ru/.well-known/homelab-runtime/latest.json","query_parameters_required":false},"target":"pve01-and-edge-vm"},"private_addresses_included":false,"rollback_started":false,"sanitized":true,"schema":1,"secrets_included":false,"status":"PLAN_READY"} OUTPUT_END CHAT_OUTPUT_END