CHAT_OUTPUT_BEGIN
COMMAND_ID=RUNNER-MUTATION-CONTRACT-PLAN-20260726T204219Z
STATUS=OK
RC=0
HOST=pve01
MODE=verify
COMPONENT=runner
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=24934a2c7fa5c26f6e828583c4aefac7f143b40c0171736ed7571e617d55ab83
COMMAND_SHA256=18ca7f1fb586bea8de09771fb8a2620d7c1e624494878d745b07a897fb6cb780
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGES_MADE=false
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909
SANITIZED_OUTPUT_SHA256=65beaf599a688212c2299703e01dab946a652f2837f41a98f983eee7fadf9909
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"}

OUTPUT_END
CHAT_OUTPUT_END
