diff --git a/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.json b/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.json new file mode 100644 index 0000000..6ea2387 --- /dev/null +++ b/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "change", + "component": "runner", + "started_at_utc": "2026-07-26T21:02:54Z", + "finished_at_utc": "2026-07-26T21:02:55Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", + "command_sha256": "83adb37ea842dc736fd0a58cdb67f768b204e01fb6b32c90775504c67958de16", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": true, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e", + "sanitized_output_sha256": "3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e", + "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\":true,\"command_id\":\"RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd\",\"backup_changed\":false,\"changes_made\":true,\"cluster_changed\":false,\"gitea_changed\":false,\"postconditions\":{\"adapter_healthy\":true,\"adapter_not_restarted\":true,\"adapter_self_test\":true,\"portal_health\":true,\"portal_healthy\":true,\"portal_identity_self_test\":true,\"portal_not_restarted\":true,\"preserved_source_lock\":true,\"rollback_copy_mode_0600\":true,\"rollback_copy_sha256\":true,\"runner_bash_syntax\":true,\"runner_mode_preserved\":true,\"runner_owner_preserved\":true,\"runner_regular_not_symlink\":true,\"runner_self_test\":true,\"target_sha256\":true},\"rollback_copy\":\"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/homelab-chat-run.rollback\",\"rollback_metadata\":\"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/metadata.json\",\"rollback_started\":false,\"service_restart\":false,\"source_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"status\":\"OK\",\"target_sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\"}\n" +} diff --git a/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.txt b/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.txt new file mode 100644 index 0000000..bad5689 --- /dev/null +++ b/runtime/history/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z.txt @@ -0,0 +1,26 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z +STATUS=OK +RC=0 +HOST=pve01 +MODE=change +COMPONENT=runner +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 +COMMAND_SHA256=83adb37ea842dc736fd0a58cdb67f768b204e01fb6b32c90775504c67958de16 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=true +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e +SANITIZED_OUTPUT_SHA256=3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e +OUTPUT_BEGIN +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"PLAN_SHA256":"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd","backup_changed":false,"changes_made":true,"cluster_changed":false,"gitea_changed":false,"postconditions":{"adapter_healthy":true,"adapter_not_restarted":true,"adapter_self_test":true,"portal_health":true,"portal_healthy":true,"portal_identity_self_test":true,"portal_not_restarted":true,"preserved_source_lock":true,"rollback_copy_mode_0600":true,"rollback_copy_sha256":true,"runner_bash_syntax":true,"runner_mode_preserved":true,"runner_owner_preserved":true,"runner_regular_not_symlink":true,"runner_self_test":true,"target_sha256":true},"rollback_copy":"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/homelab-chat-run.rollback","rollback_metadata":"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/metadata.json","rollback_started":false,"service_restart":false,"source_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","status":"OK","target_sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d"} + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index 38b20e8..6ea2387 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,30 +1,30 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "RUNNER-MUTATION-CONTRACT-PLAN-20260726T204219Z", + "command_id": "RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z", "status": "OK", "rc": 0, "host": "pve01", - "mode": "verify", + "mode": "change", "component": "runner", - "started_at_utc": "2026-07-26T20:50:10Z", - "finished_at_utc": "2026-07-26T20:50:10Z", + "started_at_utc": "2026-07-26T21:02:54Z", + "finished_at_utc": "2026-07-26T21:02:55Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83", - "command_sha256": "18ca7f1fb586bea8de09771fb8a2620d7c1e624494878d745b07a897fb6cb780", + "command_sha256": "83adb37ea842dc736fd0a58cdb67f768b204e01fb6b32c90775504c67958de16", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, - "changes_made": false, + "changes_made": true, "sanitized": true, "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909", - "sanitized_output_sha256": "65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909", + "raw_evidence_sha256": "3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e", + "sanitized_output_sha256": "3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "{\"PLAN_SHA256\":\"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd\",\"changes_made\":false,\"command_id\":\"RUNNER-MUTATION-CONTRACT-PLAN-20260726T204219Z\",\"diff\":{\"additions\":285,\"deletions\":8,\"diff_sha256\":\"6ce1b41ad8de334ca804bccee03cae25ca600364473eee1677afde818cfcc192\",\"hunks\":8},\"mutating_states\":{\"closed\":[\"RUNNER-LINKED-REMOVAL-APPLY-20260726T202107Z\",\"RUNNER-LINKED-REMOVAL-APPLY-FINAL-20260726T202825Z\"],\"unresolved\":[]},\"plan\":{\"anti_regression\":[\"mode=change больше не означает changes_made=true\",\"повтор заблокированной команды считается NO_MUTATION\",\"несовпадающий command_id контракта блокируется\",\"несколько контрактов блокируются\",\"отсутствующий контракт блокируется с UNKNOWN\"],\"file\":\"/usr/local/sbin/homelab-chat-run\",\"next\":\"после APPLY обновить Adapter META/state, затем закрыть старые precondition-only записи\",\"operation\":\"УСТАНОВИТЬ_КОНТРАКТ_ФАКТИЧЕСКОЙ_МУТАЦИИ_RUNNER\",\"postconditions\":[\"target SHA совпадает\",\"bash -n проходит\",\"--self-test проходит\",\"verify/read-only всегда changes_made=false\",\"BLOCKED change с контрактом даёт changes_made=false\",\"change без контракта даёт changes_made=null и FAIL\",\"успешная мутация даёт changes_made=true\",\"успешный rollback даёт mutation_outcome=ROLLED_BACK\",\"Adapter и Portal не перезапускаются\"],\"preconditions\":{\"adapter_self_test\":true,\"adapter_здоров\":true,\"portal_identity_self_test\":true,\"portal_здоров\":true,\"известные_старые_попытки_закрыты\":true,\"нет_других_mutating_failure\":true,\"текущая_capsule_корректна\":true,\"точный_source_lock\":true},\"risk\":\"REVERSIBLE\",\"rollback\":{\"atomic_restore\":true,\"copy_before_apply\":true,\"copy_mode\":\"0600\",\"diagnostics_before_rollback\":true,\"verify_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\"},\"schema\":1,\"scope\":{\"backup_changed\":false,\"cluster_changed\":false,\"gitea_changed\":false,\"modify\":[\"/usr/local/sbin/homelab-chat-run\"],\"preserve\":[\"/usr/local/sbin/homelab-command-adapter\",\"/usr/local/sbin/homelab-command-portal\",\"/usr/local/sbin/homelab-chat-run-linked\"],\"service_restart\":false},\"source_evidence\":[\"d33b0cb4f775fb6bfb57d7681273a2ae9b3e884088ae794f1c152797cd03f6dd\",\"98474ad0c0c5ab2b6507c2469ea804b3c771f8a8f71c23a8238fd64ae1fe989d\"],\"source_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"target\":\"pve01\",\"target_sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\"},\"rollback_started\":false,\"source_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"static_tests\":{\"bash_syntax\":true,\"marker_контракта\":true,\"preexecution_block_no_mutation\":true,\"runner_self_test\":true,\"target_sha_отличается\":true,\"unknown_fail_closed\":true,\"нет_mode_change_equals_changed\":true},\"status\":\"PASS\",\"target_sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\"}\n" + "output": "HOMELAB_RESULT_CONTRACT={\"changes_made\":true,\"command_id\":\"RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z\",\"rollback_restored\":null,\"rollback_started\":false,\"status\":\"OK\",\"version\":1}\n{\"PLAN_SHA256\":\"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd\",\"backup_changed\":false,\"changes_made\":true,\"cluster_changed\":false,\"gitea_changed\":false,\"postconditions\":{\"adapter_healthy\":true,\"adapter_not_restarted\":true,\"adapter_self_test\":true,\"portal_health\":true,\"portal_healthy\":true,\"portal_identity_self_test\":true,\"portal_not_restarted\":true,\"preserved_source_lock\":true,\"rollback_copy_mode_0600\":true,\"rollback_copy_sha256\":true,\"runner_bash_syntax\":true,\"runner_mode_preserved\":true,\"runner_owner_preserved\":true,\"runner_regular_not_symlink\":true,\"runner_self_test\":true,\"target_sha256\":true},\"rollback_copy\":\"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/homelab-chat-run.rollback\",\"rollback_metadata\":\"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/metadata.json\",\"rollback_started\":false,\"service_restart\":false,\"source_sha256\":\"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9\",\"status\":\"OK\",\"target_sha256\":\"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d\"}\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index fd52f0c..bad5689 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,25 +1,26 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=RUNNER-MUTATION-CONTRACT-PLAN-20260726T204219Z +COMMAND_ID=RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z STATUS=OK RC=0 HOST=pve01 -MODE=verify +MODE=change COMPONENT=runner REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83 -COMMAND_SHA256=18ca7f1fb586bea8de09771fb8a2620d7c1e624494878d745b07a897fb6cb780 +COMMAND_SHA256=83adb37ea842dc736fd0a58cdb67f768b204e01fb6b32c90775504c67958de16 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true -CHANGES_MADE=false +CHANGES_MADE=true SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909 -SANITIZED_OUTPUT_SHA256=65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909 +RAW_EVIDENCE_SHA256=3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e +SANITIZED_OUTPUT_SHA256=3c98acc82d21d62e7fdc2ef0207432fe1d3c10547761ceffaea3b1b4afcc971e OUTPUT_BEGIN -{"PLAN_SHA256":"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd","changes_made":false,"command_id":"RUNNER-MUTATION-CONTRACT-PLAN-20260726T204219Z","diff":{"additions":285,"deletions":8,"diff_sha256":"6ce1b41ad8de334ca804bccee03cae25ca600364473eee1677afde818cfcc192","hunks":8},"mutating_states":{"closed":["RUNNER-LINKED-REMOVAL-APPLY-20260726T202107Z","RUNNER-LINKED-REMOVAL-APPLY-FINAL-20260726T202825Z"],"unresolved":[]},"plan":{"anti_regression":["mode=change больше не означает changes_made=true","повтор заблокированной команды считается NO_MUTATION","несовпадающий command_id контракта блокируется","несколько контрактов блокируются","отсутствующий контракт блокируется с UNKNOWN"],"file":"/usr/local/sbin/homelab-chat-run","next":"после APPLY обновить Adapter META/state, затем закрыть старые precondition-only записи","operation":"УСТАНОВИТЬ_КОНТРАКТ_ФАКТИЧЕСКОЙ_МУТАЦИИ_RUNNER","postconditions":["target SHA совпадает","bash -n проходит","--self-test проходит","verify/read-only всегда changes_made=false","BLOCKED change с контрактом даёт changes_made=false","change без контракта даёт changes_made=null и FAIL","успешная мутация даёт changes_made=true","успешный rollback даёт mutation_outcome=ROLLED_BACK","Adapter и Portal не перезапускаются"],"preconditions":{"adapter_self_test":true,"adapter_здоров":true,"portal_identity_self_test":true,"portal_здоров":true,"известные_старые_попытки_закрыты":true,"нет_других_mutating_failure":true,"текущая_capsule_корректна":true,"точный_source_lock":true},"risk":"REVERSIBLE","rollback":{"atomic_restore":true,"copy_before_apply":true,"copy_mode":"0600","diagnostics_before_rollback":true,"verify_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9"},"schema":1,"scope":{"backup_changed":false,"cluster_changed":false,"gitea_changed":false,"modify":["/usr/local/sbin/homelab-chat-run"],"preserve":["/usr/local/sbin/homelab-command-adapter","/usr/local/sbin/homelab-command-portal","/usr/local/sbin/homelab-chat-run-linked"],"service_restart":false},"source_evidence":["d33b0cb4f775fb6bfb57d7681273a2ae9b3e884088ae794f1c152797cd03f6dd","98474ad0c0c5ab2b6507c2469ea804b3c771f8a8f71c23a8238fd64ae1fe989d"],"source_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","target":"pve01","target_sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d"},"rollback_started":false,"source_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","static_tests":{"bash_syntax":true,"marker_контракта":true,"preexecution_block_no_mutation":true,"runner_self_test":true,"target_sha_отличается":true,"unknown_fail_closed":true,"нет_mode_change_equals_changed":true},"status":"PASS","target_sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d"} +HOMELAB_RESULT_CONTRACT={"changes_made":true,"command_id":"RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z","rollback_restored":null,"rollback_started":false,"status":"OK","version":1} +{"PLAN_SHA256":"22eedf9b1090960a7f92cef992f481d8d6cc3f42e4f4ecd6e27bbda4ebf752bd","backup_changed":false,"changes_made":true,"cluster_changed":false,"gitea_changed":false,"postconditions":{"adapter_healthy":true,"adapter_not_restarted":true,"adapter_self_test":true,"portal_health":true,"portal_healthy":true,"portal_identity_self_test":true,"portal_not_restarted":true,"preserved_source_lock":true,"rollback_copy_mode_0600":true,"rollback_copy_sha256":true,"runner_bash_syntax":true,"runner_mode_preserved":true,"runner_owner_preserved":true,"runner_regular_not_symlink":true,"runner_self_test":true,"target_sha256":true},"rollback_copy":"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/homelab-chat-run.rollback","rollback_metadata":"/var/lib/homelab-change-rollback/RUNNER-MUTATION-CONTRACT-APPLY-20260726T205715Z/metadata.json","rollback_started":false,"service_restart":false,"source_sha256":"2a88defef9517f89bc60934dce82097f8e316b08af9417e95167ea5d759a10d9","status":"OK","target_sha256":"b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d"} OUTPUT_END CHAT_OUTPUT_END