diff --git a/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.json b/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.json new file mode 100644 index 0000000..f3f477c --- /dev/null +++ b/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "channel": "homelab-runtime", + "command_id": "HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448", + "status": "OK", + "rc": 0, + "host": "pve01", + "mode": "read-only", + "component": "cluster-audit", + "started_at_utc": "2026-07-24T11:13:21Z", + "finished_at_utc": "2026-07-24T11:13:21Z", + "reference_register_checked": true, + "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", + "error_register_checked": true, + "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", + "command_sha256": "b07eaabf87dd148ae53e0628058252a1074e71463fbacb489e5389d195f37180", + "duplicate_failed_command_blocked": false, + "block_reason": null, + "execution_started": true, + "changes_made": false, + "sanitized": true, + "secrets_included": false, + "private_addresses_included": false, + "raw_evidence_retained_locally": true, + "raw_evidence_sha256": "673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f", + "sanitized_output_sha256": "673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f", + "output_truncated_in_json": false, + "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", + "output": "DETAIL=ERROR_REGISTER_META_BEGIN\nDETAIL=ERROR_REGISTER_PATH=/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\nDETAIL=ERROR_REGISTER_BYTES=79246\nDETAIL=ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752\nDETAIL=ERROR_REGISTER_META_END\nDETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-EXISTING-DRAIN-WAIT-444|REGISTERED=NO\nDETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446|REGISTERED=NO\nDETAIL=ERROR_REGISTER_TAIL_BEGIN\nDETAIL=ERROR_REGISTER_TAIL=- The reported validation count is cascading missing-marker evidence, not twenty-five independent design defects.\nDETAIL=ERROR_REGISTER_TAIL=- The generated validator must be inspected at the exact SyntaxError line before another candidate is created.\nDETAIL=ERROR_REGISTER_TAIL=- Production, database, application, services, timers, health and desired-state were unchanged; active external probes were not executed.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STAGE4E_PIPESTATUS_LOST_AFTER_FIRST_ASSIGNMENT_20260714\nDETAIL=ERROR_REGISTER_TAIL=- VM180 validation copy used a pipeline and read PIPESTATUS in two separate assignments.\nDETAIL=ERROR_REGISTER_TAIL=- The first assignment reset PIPESTATUS, leaving COPY_RC empty and preventing remote validation and cleanup.\nDETAIL=ERROR_REGISTER_TAIL=- Retry must use explicit SCP operations without pipeline status parsing.\nDETAIL=ERROR_REGISTER_TAIL=- Production remained unchanged and active external probes were not executed.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STAGE4F_VALIDATOR_EXPECTED_HEALTH_REFRESH_FROM_NONWRITING_BACKUP_SCRIPT_20260714\nDETAIL=ERROR_REGISTER_TAIL=- The controlled backup service completed with Result=success and ExecMainStatus=0.\nDETAIL=ERROR_REGISTER_TAIL=- Validation incorrectly required cluster-admin-incident-engine-backup.txt to receive a fresh timestamp.\nDETAIL=ERROR_REGISTER_TAIL=- The executed backup script does not write that health file; therefore the stale health timestamp was not evidence of backup failure.\nDETAIL=ERROR_REGISTER_TAIL=- Stage4F backup proof must use the service result, fresh latest JSON, produced artifacts and off-host/restore evidence instead.\nDETAIL=ERROR_REGISTER_TAIL=- The backup must not be rerun merely to satisfy the invalid health-file freshness assertion.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STRICT_RULE_20260714_CLOSE_TAILS_IMMEDIATELY\nDETAIL=ERROR_REGISTER_TAIL=- Failure class: переход к следующей задаче при наличии незакрытого хвоста.\nDETAIL=ERROR_REGISTER_TAIL=- Mandatory anti-regression: после ошибки запрещено продолжать другой scope до точной root cause, исправления, повторной проверки, очистки, proof и seal.\nDETAIL=ERROR_REGISTER_TAIL=- Closure gate: UNRESOLVED_TAIL_COUNT=0; BLOCKER_COUNT=0; TEMPORARY_ARTIFACT_COUNT=0; ROLLBACK_VERIFIED=YES; HEALTH=OK; PROOF_UPDATED=YES; REFERENCE_UPDATED=YES.\nDETAIL=ERROR_REGISTER_TAIL=- Если закрытие невозможно из-за внешней зависимости, опасной неоднозначности или обязательного решения пользователя, фиксировать BLOCKED/OPEN и не заявлять CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=- Proof: /var/lib/homelab-change-sets/operator-rule-close-tails-immediately-v1/20260714T171631Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_DEPENDENCY_FACT_QUERY_GLOBAL_LIMIT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: dependency audit вернул только latest_collector_status.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: ORDER BY 1 LIMIT 1 в конце UNION ALL применился ко всему набору фактов.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: latest collector status извлекается скалярным подзапросом внутри CTE facts; глобальный LIMIT отсутствует.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: multi-fact SQL audit обязан проверять точное ожидаемое число строк до извлечения значений.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_PATCH_REQUIREMENT_PATTERN_MISMATCH\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: MIGRATION_PLAN_COLLECTOR_PATCH_REQUIRED_COUNT=1 при ожидаемых двух подтверждениях.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: узкий шаблон учитывал collector_patch_required, но не collector_patch_required_after_stage4c.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: оба поля проверяются отдельно, затем складываются как semantic requirement count.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: связанные JSON-контракты проверяются по собственным точным именам полей, а не одним унифицированным grep-шаблоном.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; PRIOR_TAIL_UNRESOLVED_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_PRIVILEGED_FILE_REDIRECTION_BEFORE_SUDO\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: bash reported Permission denied while counting collector.py lines.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: `< collector.py` was opened by the unprivileged caller shell before sudo executed wc.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: run sudo wc -l collector.py without caller-side input redirection.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: never combine sudo with `< protected-file`; pass the protected path as an argument to the privileged command.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_RUN_COLUMN_ASSUMPTION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: SQL failed because completed_at did not exist.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: collector_runs columns were assumed instead of read from information_schema; actual names are finished_at and error_text.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: assert required and forbidden column counts before querying recent runs.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: every schema-sensitive audit must discover and validate exact column names before the main query.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_REMOTE_STDIN_ARGUMENT_SHIFT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: remote harness выполнил chmod для пути bash.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: дополнительный positional token bash был передан после SSH command и стал первым аргументом stdin-скрипта.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: remote command вызывает bash -s -- с ровно тремя явно встроенными аргументами: candidate path, SHA256 и byte count.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: stdin-скрипт обязан валидировать $1 по разрешённому path pattern и затем подтверждать точные SHA256 и byte count; запрещено добавлять отдельный bash-token после remote command.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/stage4h-collector-provenance-patch-candidate-v1/20260714T174131Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_OVERSIZED_COMMAND_PARSE_FAILURE\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: Bash получил одиночный фрагмент и сообщил syntax error near unexpected token `(`.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: чрезмерно длинная интерактивная команда была обрезана или повреждена при передаче до полного разбора Bash.\nDETAIL=ERROR_REGISTER_TAIL=- Impact: side-effect audit подтвердил production state 0|0|OK, неизменный collector, активный timer и отсутствие временных БД, каталогов и процессов.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: монолитные команды запрещены; сложные действия выполняются через отдельный проверяемый task-скрипт и короткий launcher.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: interactive payload target <= 8000 bytes; syntax-check перед запуском; remote output сохраняется независимо от RC.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/operator-command-size-guard-v1/20260714T182653Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_HOMELAB_ADMIN_HELP_RC_ASSUMPTION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: template audit завершился HOMELAB_ADMIN_HELP_FAILED.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: был ошибочно ожидаем RC=0 от неподдерживаемого аргумента --help.\nDETAIL=ERROR_REGISTER_TAIL=- Actual contract: неизвестный аргумент печатает usage и возвращает RC=64.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: проверять version либо считать точную usage-строку вместе с RC=64 штатным результатом.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: перед проверкой CLI сначала фиксировать поддерживаемые команды; не предполагать GNU-style --help.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v1/20260714T183338Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_EXPECTED_NEGATIVE_RC_TRAP_CLASSIFICATION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: schema-v2 task v3 build stopped while intentionally testing the --invalid argument path.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: an expected RC64 was executed while the generic ERR trap remained active.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: expected failures are evaluated only through an explicit if/else branch with immediate RC capture.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=EXPECTED_RC64_INTERCEPTED_ERR_TRAP\nDETAIL=ERROR_REGISTER_TAIL=- Required pattern: if command; then rc=0; else rc=$?; fi, followed by a separate exact expected-RC assertion.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_DUPLICATE_MACHINE_MARKER_COUNT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: error-register candidate construction stopped with RC1 before applying the candidate.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: the same marker text appeared in both a heading and a descriptive line, while the guard expected one substring occurrence.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: headings and prose do not contain machine-token values; validation counts only complete exact token lines.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=DUPLICATE_MACHINE_TOKEN_IN_HEADING_AND_BODY\nDETAIL=ERROR_REGISTER_TAIL=- Required pattern: grep -Fxc against a complete machine line, never grep -Foc against an unrestricted substring.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: removed and verified.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T02:56:19Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OUTER_WRAPPER_SHELL_SYNTAX\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: the operator shell rejected the generated one-line wrapper with syntax error near the final subshell parenthesis.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: the outer wrapper contained an unbalanced compound shell construct before the closing subshell delimiter.\nDETAIL=ERROR_REGISTER_TAIL=- Impact: parsing failed before the start marker, guards and homelab-admin invocation; no task phase or infrastructure action executed.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: use a linear wrapper with explicitly closed if/case blocks and avoid nested brace groups in conditional expressions.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=OUTER_WRAPPER_UNBALANCED_SUBSHELL_SYNTAX\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: after any parser-level failure, treat the attempted phase as not executed and verify package and run-state before retrying.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Task package impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T03:24:05Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_INLINE_REMOTE_SHELL_IN_APPLY_PHASE\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: homelab-admin lint rejected Stage4H task v6 with ERR-002-INLINE-REMOTE-SHELL.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: apply.sh invoked bash -s through an inline quoted SSH program and streamed the remote script through stdin.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: copy the declared remote script to an isolated fixed path on VM180 and invoke that file directly with positional arguments.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=INLINE_REMOTE_SHELL_REPLACED_BY_STAGED_REMOTE_SCRIPT_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: phase scripts may perform transport orchestration, but remote shell program bodies must exist as separately declared, syntax-checked remote script files.\nDETAIL=ERROR_REGISTER_TAIL=- Remote stdout and stderr must be preserved before evaluating the remote return code.\nDETAIL=ERROR_REGISTER_TAIL=- Task v6 status: REJECTED_BY_LINT; never executed and never mutated.\nDETAIL=ERROR_REGISTER_TAIL=- Production database impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Live collector impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary database and remote root count after rejection: zero.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:13:46Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OPTIONAL_RUN_DIRECTORY_FIND_UNDER_PIPEFAIL\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: task-v7 builder stopped while counting formal runs for rejected task v6.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: find was executed against an optional directory that did not exist; under pipefail the assignment returned RC1.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: test directory existence first and assign zero without invoking find when it is absent.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=MISSING_OPTIONAL_RUN_DIRECTORY_TREATED_AS_ZERO\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: optional paths must have an explicit existence branch before find under pipefail.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:44:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_PG_CONSTRAINT_CONTYPE_CHAR_CONCAT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: isolated Stage4H acceptance failed during schema baseline capture.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: pg_constraint.contype uses the internal PostgreSQL char type and was concatenated without an explicit text cast.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: use contype::text or CAST(contype AS text).\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=PG_CATALOG_CHAR_CONCAT_REQUIRES_EXPLICIT_TEXT_CAST\nDETAIL=ERROR_REGISTER_TAIL=- Machine rule: ERR-014-PG-CATALOG-CHAR-CONCAT.\nDETAIL=ERROR_REGISTER_TAIL=- Negative self-test: uncast expression rejected with RC64.\nDETAIL=ERROR_REGISTER_TAIL=- Positive self-test: explicit text cast accepted with RC0.\nDETAIL=ERROR_REGISTER_TAIL=- Task v7 mutated: no.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_LIVE_COLLECTOR_VERIFIER_WRONG_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: verified linter installation was rolled back after the final collector integrity guard returned UNKNOWN.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: verifier queried a nonexistent path instead of the canonical live collector path declared by the task acceptance script.\nDETAIL=ERROR_REGISTER_TAIL=- Canonical path: /opt/cluster-admin-incident-engine/collector.py.\nDETAIL=ERROR_REGISTER_TAIL=- Incorrect path: /opt/homelab-cluster-admin/cluster-admin-collector.py.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=LIVE_COLLECTOR_VERIFIER_PATH_MUST_MATCH_TASK_CANONICAL_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Correction: derive and guard the live collector path from the immutable task contract before executing the hash query.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none; the canonical collector hash remained unchanged.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_INLINE_FAILURE_20260721\nDETAIL=ERROR_REGISTER_TAIL=Attempts 048 and 049 did not appear in immutable history.\nDETAIL=ERROR_REGISTER_TAIL=Rule: use validated local helper scripts and a simple scheduler entry; never embed the full collector in cron or nested SSH quoting.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_WRAPPER_PUBLICATION_FAILURE_20260721\nDETAIL=ERROR_REGISTER_TAIL=Commands 044-051 did not reach immutable history through homelab-chat-run.\nDETAIL=ERROR_REGISTER_TAIL=Resolution: hourly snapshots use direct scp plus homelab-runtime-receive publication.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_052_NOT_PUBLISHED_20260721\nDETAIL=ERROR_REGISTER_TAIL=CONTEXT-AUTOREFRESH-ACTIVATE-052 did not appear in immutable history; direct publisher retry requires sanitization before transmission.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=IMMUTABLE_HISTORY_FALSE_NEGATIVE_20260721\nDETAIL=ERROR_REGISTER_TAIL=BACKUP-AUDIT-CONTROLPLANE-054 was successfully published at commit 2b966acfe553b4d9f8d4a62bf9533478bdd1a073, but was incorrectly reported missing because a stale directory listing was treated as authoritative.\nDETAIL=ERROR_REGISTER_TAIL=Rule: verify the exact COMMAND_ID result, wrapper publication status and commit SHA; never infer absence from a cached directory listing.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=BACKUP_UNSAFE_SOURCE_CAPTURE_071_PARSE_ERROR_20260721\nDETAIL=ERROR_REGISTER_TAIL=BACKUP-UNSAFE-SOURCE-CAPTURE-071 failed before execution: shell syntax error near unexpected token (.\nDETAIL=ERROR_REGISTER_TAIL=Resolution: avoid nested quote layers; parse targets first and pass file paths as simple SSH arguments.\nDETAIL=ERROR_REGISTER_TAIL_END\nDETAIL=MANAGER_REFERENCES_BEGIN\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-admin\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-chat-run\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-collect\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T110932Z\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T111219Z\nDETAIL=MANAGER_REFERENCES_END\nDETAIL=COMMAND_ACTION=OBSERVATION_ONLY\nCHANGES_MADE=NO\n" +} diff --git a/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.txt b/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.txt new file mode 100644 index 0000000..9478f50 --- /dev/null +++ b/runtime/history/HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448.txt @@ -0,0 +1,223 @@ +CHAT_OUTPUT_BEGIN +COMMAND_ID=HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448 +STATUS=OK +RC=0 +HOST=pve01 +MODE=read-only +COMPONENT=cluster-audit +REFERENCE_REGISTER_CHECK=OK +REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e +ERROR_REGISTER_CHECK=OK +ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +COMMAND_SHA256=b07eaabf87dd148ae53e0628058252a1074e71463fbacb489e5389d195f37180 +DUPLICATE_FAILED_COMMAND_BLOCKED=false +EXECUTION_STARTED=true +CHANGES_MADE=false +SANITIZED=yes +SECRETS_INCLUDED=no +PRIVATE_ADDRESSES_INCLUDED=no +RAW_EVIDENCE_SHA256=673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f +SANITIZED_OUTPUT_SHA256=673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f +OUTPUT_BEGIN +DETAIL=ERROR_REGISTER_META_BEGIN +DETAIL=ERROR_REGISTER_PATH=/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md +DETAIL=ERROR_REGISTER_BYTES=79246 +DETAIL=ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +DETAIL=ERROR_REGISTER_META_END +DETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-EXISTING-DRAIN-WAIT-444|REGISTERED=NO +DETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446|REGISTERED=NO +DETAIL=ERROR_REGISTER_TAIL_BEGIN +DETAIL=ERROR_REGISTER_TAIL=- The reported validation count is cascading missing-marker evidence, not twenty-five independent design defects. +DETAIL=ERROR_REGISTER_TAIL=- The generated validator must be inspected at the exact SyntaxError line before another candidate is created. +DETAIL=ERROR_REGISTER_TAIL=- Production, database, application, services, timers, health and desired-state were unchanged; active external probes were not executed. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STAGE4E_PIPESTATUS_LOST_AFTER_FIRST_ASSIGNMENT_20260714 +DETAIL=ERROR_REGISTER_TAIL=- VM180 validation copy used a pipeline and read PIPESTATUS in two separate assignments. +DETAIL=ERROR_REGISTER_TAIL=- The first assignment reset PIPESTATUS, leaving COPY_RC empty and preventing remote validation and cleanup. +DETAIL=ERROR_REGISTER_TAIL=- Retry must use explicit SCP operations without pipeline status parsing. +DETAIL=ERROR_REGISTER_TAIL=- Production remained unchanged and active external probes were not executed. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STAGE4F_VALIDATOR_EXPECTED_HEALTH_REFRESH_FROM_NONWRITING_BACKUP_SCRIPT_20260714 +DETAIL=ERROR_REGISTER_TAIL=- The controlled backup service completed with Result=success and ExecMainStatus=0. +DETAIL=ERROR_REGISTER_TAIL=- Validation incorrectly required cluster-admin-incident-engine-backup.txt to receive a fresh timestamp. +DETAIL=ERROR_REGISTER_TAIL=- The executed backup script does not write that health file; therefore the stale health timestamp was not evidence of backup failure. +DETAIL=ERROR_REGISTER_TAIL=- Stage4F backup proof must use the service result, fresh latest JSON, produced artifacts and off-host/restore evidence instead. +DETAIL=ERROR_REGISTER_TAIL=- The backup must not be rerun merely to satisfy the invalid health-file freshness assertion. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STRICT_RULE_20260714_CLOSE_TAILS_IMMEDIATELY +DETAIL=ERROR_REGISTER_TAIL=- Failure class: переход к следующей задаче при наличии незакрытого хвоста. +DETAIL=ERROR_REGISTER_TAIL=- Mandatory anti-regression: после ошибки запрещено продолжать другой scope до точной root cause, исправления, повторной проверки, очистки, proof и seal. +DETAIL=ERROR_REGISTER_TAIL=- Closure gate: UNRESOLVED_TAIL_COUNT=0; BLOCKER_COUNT=0; TEMPORARY_ARTIFACT_COUNT=0; ROLLBACK_VERIFIED=YES; HEALTH=OK; PROOF_UPDATED=YES; REFERENCE_UPDATED=YES. +DETAIL=ERROR_REGISTER_TAIL=- Если закрытие невозможно из-за внешней зависимости, опасной неоднозначности или обязательного решения пользователя, фиксировать BLOCKED/OPEN и не заявлять CLOSED. +DETAIL=ERROR_REGISTER_TAIL=- Proof: /var/lib/homelab-change-sets/operator-rule-close-tails-immediately-v1/20260714T171631Z/report.txt +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_DEPENDENCY_FACT_QUERY_GLOBAL_LIMIT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: dependency audit вернул только latest_collector_status. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: ORDER BY 1 LIMIT 1 в конце UNION ALL применился ко всему набору фактов. +DETAIL=ERROR_REGISTER_TAIL=- Correction: latest collector status извлекается скалярным подзапросом внутри CTE facts; глобальный LIMIT отсутствует. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: multi-fact SQL audit обязан проверять точное ожидаемое число строк до извлечения значений. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_PATCH_REQUIREMENT_PATTERN_MISMATCH +DETAIL=ERROR_REGISTER_TAIL=- Symptom: MIGRATION_PLAN_COLLECTOR_PATCH_REQUIRED_COUNT=1 при ожидаемых двух подтверждениях. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: узкий шаблон учитывал collector_patch_required, но не collector_patch_required_after_stage4c. +DETAIL=ERROR_REGISTER_TAIL=- Correction: оба поля проверяются отдельно, затем складываются как semantic requirement count. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: связанные JSON-контракты проверяются по собственным точным именам полей, а не одним унифицированным grep-шаблоном. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; PRIOR_TAIL_UNRESOLVED_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_PRIVILEGED_FILE_REDIRECTION_BEFORE_SUDO +DETAIL=ERROR_REGISTER_TAIL=- Symptom: bash reported Permission denied while counting collector.py lines. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: `< collector.py` was opened by the unprivileged caller shell before sudo executed wc. +DETAIL=ERROR_REGISTER_TAIL=- Correction: run sudo wc -l collector.py without caller-side input redirection. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: never combine sudo with `< protected-file`; pass the protected path as an argument to the privileged command. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_RUN_COLUMN_ASSUMPTION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: SQL failed because completed_at did not exist. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: collector_runs columns were assumed instead of read from information_schema; actual names are finished_at and error_text. +DETAIL=ERROR_REGISTER_TAIL=- Correction: assert required and forbidden column counts before querying recent runs. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: every schema-sensitive audit must discover and validate exact column names before the main query. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_REMOTE_STDIN_ARGUMENT_SHIFT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: remote harness выполнил chmod для пути bash. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: дополнительный positional token bash был передан после SSH command и стал первым аргументом stdin-скрипта. +DETAIL=ERROR_REGISTER_TAIL=- Correction: remote command вызывает bash -s -- с ровно тремя явно встроенными аргументами: candidate path, SHA256 и byte count. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: stdin-скрипт обязан валидировать $1 по разрешённому path pattern и затем подтверждать точные SHA256 и byte count; запрещено добавлять отдельный bash-token после remote command. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/stage4h-collector-provenance-patch-candidate-v1/20260714T174131Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_OVERSIZED_COMMAND_PARSE_FAILURE +DETAIL=ERROR_REGISTER_TAIL=- Symptom: Bash получил одиночный фрагмент и сообщил syntax error near unexpected token `(`. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: чрезмерно длинная интерактивная команда была обрезана или повреждена при передаче до полного разбора Bash. +DETAIL=ERROR_REGISTER_TAIL=- Impact: side-effect audit подтвердил production state 0|0|OK, неизменный collector, активный timer и отсутствие временных БД, каталогов и процессов. +DETAIL=ERROR_REGISTER_TAIL=- Correction: монолитные команды запрещены; сложные действия выполняются через отдельный проверяемый task-скрипт и короткий launcher. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: interactive payload target <= 8000 bytes; syntax-check перед запуском; remote output сохраняется независимо от RC. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/operator-command-size-guard-v1/20260714T182653Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_HOMELAB_ADMIN_HELP_RC_ASSUMPTION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: template audit завершился HOMELAB_ADMIN_HELP_FAILED. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: был ошибочно ожидаем RC=0 от неподдерживаемого аргумента --help. +DETAIL=ERROR_REGISTER_TAIL=- Actual contract: неизвестный аргумент печатает usage и возвращает RC=64. +DETAIL=ERROR_REGISTER_TAIL=- Correction: проверять version либо считать точную usage-строку вместе с RC=64 штатным результатом. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: перед проверкой CLI сначала фиксировать поддерживаемые команды; не предполагать GNU-style --help. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v1/20260714T183338Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_EXPECTED_NEGATIVE_RC_TRAP_CLASSIFICATION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: schema-v2 task v3 build stopped while intentionally testing the --invalid argument path. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: an expected RC64 was executed while the generic ERR trap remained active. +DETAIL=ERROR_REGISTER_TAIL=- Correction: expected failures are evaluated only through an explicit if/else branch with immediate RC capture. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=EXPECTED_RC64_INTERCEPTED_ERR_TRAP +DETAIL=ERROR_REGISTER_TAIL=- Required pattern: if command; then rc=0; else rc=$?; fi, followed by a separate exact expected-RC assertion. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_DUPLICATE_MACHINE_MARKER_COUNT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: error-register candidate construction stopped with RC1 before applying the candidate. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: the same marker text appeared in both a heading and a descriptive line, while the guard expected one substring occurrence. +DETAIL=ERROR_REGISTER_TAIL=- Correction: headings and prose do not contain machine-token values; validation counts only complete exact token lines. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=DUPLICATE_MACHINE_TOKEN_IN_HEADING_AND_BODY +DETAIL=ERROR_REGISTER_TAIL=- Required pattern: grep -Fxc against a complete machine line, never grep -Foc against an unrestricted substring. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: removed and verified. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T02:56:19Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OUTER_WRAPPER_SHELL_SYNTAX +DETAIL=ERROR_REGISTER_TAIL=- Symptom: the operator shell rejected the generated one-line wrapper with syntax error near the final subshell parenthesis. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: the outer wrapper contained an unbalanced compound shell construct before the closing subshell delimiter. +DETAIL=ERROR_REGISTER_TAIL=- Impact: parsing failed before the start marker, guards and homelab-admin invocation; no task phase or infrastructure action executed. +DETAIL=ERROR_REGISTER_TAIL=- Correction: use a linear wrapper with explicitly closed if/case blocks and avoid nested brace groups in conditional expressions. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=OUTER_WRAPPER_UNBALANCED_SUBSHELL_SYNTAX +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: after any parser-level failure, treat the attempted phase as not executed and verify package and run-state before retrying. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Task package impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T03:24:05Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_INLINE_REMOTE_SHELL_IN_APPLY_PHASE +DETAIL=ERROR_REGISTER_TAIL=- Symptom: homelab-admin lint rejected Stage4H task v6 with ERR-002-INLINE-REMOTE-SHELL. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: apply.sh invoked bash -s through an inline quoted SSH program and streamed the remote script through stdin. +DETAIL=ERROR_REGISTER_TAIL=- Correction: copy the declared remote script to an isolated fixed path on VM180 and invoke that file directly with positional arguments. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=INLINE_REMOTE_SHELL_REPLACED_BY_STAGED_REMOTE_SCRIPT_PATH +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: phase scripts may perform transport orchestration, but remote shell program bodies must exist as separately declared, syntax-checked remote script files. +DETAIL=ERROR_REGISTER_TAIL=- Remote stdout and stderr must be preserved before evaluating the remote return code. +DETAIL=ERROR_REGISTER_TAIL=- Task v6 status: REJECTED_BY_LINT; never executed and never mutated. +DETAIL=ERROR_REGISTER_TAIL=- Production database impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Live collector impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary database and remote root count after rejection: zero. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:13:46Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OPTIONAL_RUN_DIRECTORY_FIND_UNDER_PIPEFAIL +DETAIL=ERROR_REGISTER_TAIL=- Symptom: task-v7 builder stopped while counting formal runs for rejected task v6. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: find was executed against an optional directory that did not exist; under pipefail the assignment returned RC1. +DETAIL=ERROR_REGISTER_TAIL=- Correction: test directory existence first and assign zero without invoking find when it is absent. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=MISSING_OPTIONAL_RUN_DIRECTORY_TREATED_AS_ZERO +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: optional paths must have an explicit existence branch before find under pipefail. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:44:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_PG_CONSTRAINT_CONTYPE_CHAR_CONCAT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: isolated Stage4H acceptance failed during schema baseline capture. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: pg_constraint.contype uses the internal PostgreSQL char type and was concatenated without an explicit text cast. +DETAIL=ERROR_REGISTER_TAIL=- Correction: use contype::text or CAST(contype AS text). +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=PG_CATALOG_CHAR_CONCAT_REQUIRES_EXPLICIT_TEXT_CAST +DETAIL=ERROR_REGISTER_TAIL=- Machine rule: ERR-014-PG-CATALOG-CHAR-CONCAT. +DETAIL=ERROR_REGISTER_TAIL=- Negative self-test: uncast expression rejected with RC64. +DETAIL=ERROR_REGISTER_TAIL=- Positive self-test: explicit text cast accepted with RC0. +DETAIL=ERROR_REGISTER_TAIL=- Task v7 mutated: no. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_LIVE_COLLECTOR_VERIFIER_WRONG_PATH +DETAIL=ERROR_REGISTER_TAIL=- Symptom: verified linter installation was rolled back after the final collector integrity guard returned UNKNOWN. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: verifier queried a nonexistent path instead of the canonical live collector path declared by the task acceptance script. +DETAIL=ERROR_REGISTER_TAIL=- Canonical path: /opt/cluster-admin-incident-engine/collector.py. +DETAIL=ERROR_REGISTER_TAIL=- Incorrect path: /opt/homelab-cluster-admin/cluster-admin-collector.py. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=LIVE_COLLECTOR_VERIFIER_PATH_MUST_MATCH_TASK_CANONICAL_PATH +DETAIL=ERROR_REGISTER_TAIL=- Correction: derive and guard the live collector path from the immutable task contract before executing the hash query. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none; the canonical collector hash remained unchanged. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_INLINE_FAILURE_20260721 +DETAIL=ERROR_REGISTER_TAIL=Attempts 048 and 049 did not appear in immutable history. +DETAIL=ERROR_REGISTER_TAIL=Rule: use validated local helper scripts and a simple scheduler entry; never embed the full collector in cron or nested SSH quoting. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_WRAPPER_PUBLICATION_FAILURE_20260721 +DETAIL=ERROR_REGISTER_TAIL=Commands 044-051 did not reach immutable history through homelab-chat-run. +DETAIL=ERROR_REGISTER_TAIL=Resolution: hourly snapshots use direct scp plus homelab-runtime-receive publication. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_052_NOT_PUBLISHED_20260721 +DETAIL=ERROR_REGISTER_TAIL=CONTEXT-AUTOREFRESH-ACTIVATE-052 did not appear in immutable history; direct publisher retry requires sanitization before transmission. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=IMMUTABLE_HISTORY_FALSE_NEGATIVE_20260721 +DETAIL=ERROR_REGISTER_TAIL=BACKUP-AUDIT-CONTROLPLANE-054 was successfully published at commit 2b966acfe553b4d9f8d4a62bf9533478bdd1a073, but was incorrectly reported missing because a stale directory listing was treated as authoritative. +DETAIL=ERROR_REGISTER_TAIL=Rule: verify the exact COMMAND_ID result, wrapper publication status and commit SHA; never infer absence from a cached directory listing. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=BACKUP_UNSAFE_SOURCE_CAPTURE_071_PARSE_ERROR_20260721 +DETAIL=ERROR_REGISTER_TAIL=BACKUP-UNSAFE-SOURCE-CAPTURE-071 failed before execution: shell syntax error near unexpected token (. +DETAIL=ERROR_REGISTER_TAIL=Resolution: avoid nested quote layers; parse targets first and pass file paths as simple SSH arguments. +DETAIL=ERROR_REGISTER_TAIL_END +DETAIL=MANAGER_REFERENCES_BEGIN +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-admin +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-chat-run +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-collect +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T110932Z +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T111219Z +DETAIL=MANAGER_REFERENCES_END +DETAIL=COMMAND_ACTION=OBSERVATION_ONLY +CHANGES_MADE=NO + +OUTPUT_END +CHAT_OUTPUT_END diff --git a/runtime/latest.json b/runtime/latest.json index da7bbb4..f3f477c 100644 --- a/runtime/latest.json +++ b/runtime/latest.json @@ -1,19 +1,19 @@ { "schema_version": 1, "channel": "homelab-runtime", - "command_id": "HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-447", + "command_id": "HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448", "status": "OK", "rc": 0, "host": "pve01", "mode": "read-only", "component": "cluster-audit", - "started_at_utc": "2026-07-24T11:09:27Z", - "finished_at_utc": "2026-07-24T11:09:27Z", + "started_at_utc": "2026-07-24T11:13:21Z", + "finished_at_utc": "2026-07-24T11:13:21Z", "reference_register_checked": true, "reference_sha256": "5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e", "error_register_checked": true, "error_register_sha256": "08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752", - "command_sha256": "b336237a7deb34e3671a8a066295fb7d721cab0d706ab55118fde89e87392827", + "command_sha256": "b07eaabf87dd148ae53e0628058252a1074e71463fbacb489e5389d195f37180", "duplicate_failed_command_blocked": false, "block_reason": null, "execution_started": true, @@ -22,9 +22,9 @@ "secrets_included": false, "private_addresses_included": false, "raw_evidence_retained_locally": true, - "raw_evidence_sha256": "2d831ad3d49a12146c5b01bb93f961e4f143d758dcc0c66284dabda25b679a13", - "sanitized_output_sha256": "2d831ad3d49a12146c5b01bb93f961e4f143d758dcc0c66284dabda25b679a13", + "raw_evidence_sha256": "673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f", + "sanitized_output_sha256": "673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f", "output_truncated_in_json": false, "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt", - "output": "DETAIL=ERROR_444_REGISTERED=NO\nDETAIL=ERROR_446_REGISTERED=NO\nDETAIL=SERVICE_STATE_BEGIN\nResult=success\nExecMainCode=1\nExecMainStatus=0\nLoadState=loaded\nActiveState=inactive\nSubState=dead\nDETAIL=SERVICE_STATE_END\nDETAIL=TIMER_STATE_BEGIN\nNextElapseUSecRealtime=Fri 2026-07-24 15:04:10 MSK\nLastTriggerUSec=Fri 2026-07-24 14:04:11 MSK\nLoadState=loaded\nActiveState=active\nSubState=waiting\nDETAIL=TIMER_STATE_END\nDETAIL=LOCAL_QUEUE_COUNT=0\nDETAIL=LOCAL_QUEUE_BEGIN\nDETAIL=LOCAL_QUEUE_END\nDETAIL=RECENT_SERVICE_EVENTS_BEGIN\n2026-07-24T13:45:26+03:00 pve01 systemd[1]: Starting homelab-vm-local-dumps-2cloud.service - Homelab VM/CT existing local dumps two-cloud verifier...\n2026-07-24T13:53:05+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[173652]: STATUS=OK TS=2026-07-24T10:45:32Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7583219433 JOB=homelab-pve01-vm-local-dumps-20260724T104532Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T104532Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T104532Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7583219433 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log\n2026-07-24T14:00:45+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[211547]: STATUS=OK TS=2026-07-24T10:53:10Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7607921537 JOB=homelab-pve01-vm-local-dumps-20260724T105310Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T105310Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T105310Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7607921537 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log\n2026-07-24T14:08:28+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[229881]: STATUS=OK TS=2026-07-24T11:00:50Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7574271967 JOB=homelab-pve01-vm-local-dumps-20260724T110050Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T110050Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T110050Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7574271967 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log\n2026-07-24T14:08:28+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[229919]: STATUS=OK STARTED=2026-07-24T10:45:26Z FINISHED=2026-07-24T11:08:28Z INITIAL_COUNT=9 BATCHES=3 DELETED_COUNT=9 REMAINING_COUNT=0\n2026-07-24T14:08:28+03:00 pve01 systemd[1]: homelab-vm-local-dumps-2cloud.service: Deactivated successfully.\n2026-07-24T14:08:28+03:00 pve01 systemd[1]: Finished homelab-vm-local-dumps-2cloud.service - Homelab VM/CT existing local dumps two-cloud verifier.\n2026-07-24T14:08:28+03:00 pve01 systemd[1]: homelab-vm-local-dumps-2cloud.service: Consumed 5min 47.116s CPU time, 8.3G memory peak.\nDETAIL=RECENT_SERVICE_EVENTS_END\nDETAIL=COMMAND_ACTION=OBSERVATION_ONLY\nDETAIL=BACKUP_PAYLOAD_CHANGED=NO\nCHANGES_MADE=NO\n" + "output": "DETAIL=ERROR_REGISTER_META_BEGIN\nDETAIL=ERROR_REGISTER_PATH=/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\nDETAIL=ERROR_REGISTER_BYTES=79246\nDETAIL=ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752\nDETAIL=ERROR_REGISTER_META_END\nDETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-EXISTING-DRAIN-WAIT-444|REGISTERED=NO\nDETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446|REGISTERED=NO\nDETAIL=ERROR_REGISTER_TAIL_BEGIN\nDETAIL=ERROR_REGISTER_TAIL=- The reported validation count is cascading missing-marker evidence, not twenty-five independent design defects.\nDETAIL=ERROR_REGISTER_TAIL=- The generated validator must be inspected at the exact SyntaxError line before another candidate is created.\nDETAIL=ERROR_REGISTER_TAIL=- Production, database, application, services, timers, health and desired-state were unchanged; active external probes were not executed.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STAGE4E_PIPESTATUS_LOST_AFTER_FIRST_ASSIGNMENT_20260714\nDETAIL=ERROR_REGISTER_TAIL=- VM180 validation copy used a pipeline and read PIPESTATUS in two separate assignments.\nDETAIL=ERROR_REGISTER_TAIL=- The first assignment reset PIPESTATUS, leaving COPY_RC empty and preventing remote validation and cleanup.\nDETAIL=ERROR_REGISTER_TAIL=- Retry must use explicit SCP operations without pipeline status parsing.\nDETAIL=ERROR_REGISTER_TAIL=- Production remained unchanged and active external probes were not executed.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STAGE4F_VALIDATOR_EXPECTED_HEALTH_REFRESH_FROM_NONWRITING_BACKUP_SCRIPT_20260714\nDETAIL=ERROR_REGISTER_TAIL=- The controlled backup service completed with Result=success and ExecMainStatus=0.\nDETAIL=ERROR_REGISTER_TAIL=- Validation incorrectly required cluster-admin-incident-engine-backup.txt to receive a fresh timestamp.\nDETAIL=ERROR_REGISTER_TAIL=- The executed backup script does not write that health file; therefore the stale health timestamp was not evidence of backup failure.\nDETAIL=ERROR_REGISTER_TAIL=- Stage4F backup proof must use the service result, fresh latest JSON, produced artifacts and off-host/restore evidence instead.\nDETAIL=ERROR_REGISTER_TAIL=- The backup must not be rerun merely to satisfy the invalid health-file freshness assertion.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## STRICT_RULE_20260714_CLOSE_TAILS_IMMEDIATELY\nDETAIL=ERROR_REGISTER_TAIL=- Failure class: переход к следующей задаче при наличии незакрытого хвоста.\nDETAIL=ERROR_REGISTER_TAIL=- Mandatory anti-regression: после ошибки запрещено продолжать другой scope до точной root cause, исправления, повторной проверки, очистки, proof и seal.\nDETAIL=ERROR_REGISTER_TAIL=- Closure gate: UNRESOLVED_TAIL_COUNT=0; BLOCKER_COUNT=0; TEMPORARY_ARTIFACT_COUNT=0; ROLLBACK_VERIFIED=YES; HEALTH=OK; PROOF_UPDATED=YES; REFERENCE_UPDATED=YES.\nDETAIL=ERROR_REGISTER_TAIL=- Если закрытие невозможно из-за внешней зависимости, опасной неоднозначности или обязательного решения пользователя, фиксировать BLOCKED/OPEN и не заявлять CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=- Proof: /var/lib/homelab-change-sets/operator-rule-close-tails-immediately-v1/20260714T171631Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_DEPENDENCY_FACT_QUERY_GLOBAL_LIMIT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: dependency audit вернул только latest_collector_status.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: ORDER BY 1 LIMIT 1 в конце UNION ALL применился ко всему набору фактов.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: latest collector status извлекается скалярным подзапросом внутри CTE facts; глобальный LIMIT отсутствует.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: multi-fact SQL audit обязан проверять точное ожидаемое число строк до извлечения значений.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_PATCH_REQUIREMENT_PATTERN_MISMATCH\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: MIGRATION_PLAN_COLLECTOR_PATCH_REQUIRED_COUNT=1 при ожидаемых двух подтверждениях.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: узкий шаблон учитывал collector_patch_required, но не collector_patch_required_after_stage4c.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: оба поля проверяются отдельно, затем складываются как semantic requirement count.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: связанные JSON-контракты проверяются по собственным точным именам полей, а не одним унифицированным grep-шаблоном.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; PRIOR_TAIL_UNRESOLVED_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_PRIVILEGED_FILE_REDIRECTION_BEFORE_SUDO\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: bash reported Permission denied while counting collector.py lines.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: `< collector.py` was opened by the unprivileged caller shell before sudo executed wc.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: run sudo wc -l collector.py without caller-side input redirection.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: never combine sudo with `< protected-file`; pass the protected path as an argument to the privileged command.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_RUN_COLUMN_ASSUMPTION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: SQL failed because completed_at did not exist.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: collector_runs columns were assumed instead of read from information_schema; actual names are finished_at and error_text.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: assert required and forbidden column counts before querying recent runs.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: every schema-sensitive audit must discover and validate exact column names before the main query.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_REMOTE_STDIN_ARGUMENT_SHIFT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: remote harness выполнил chmod для пути bash.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: дополнительный positional token bash был передан после SSH command и стал первым аргументом stdin-скрипта.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: remote command вызывает bash -s -- с ровно тремя явно встроенными аргументами: candidate path, SHA256 и byte count.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: stdin-скрипт обязан валидировать $1 по разрешённому path pattern и затем подтверждать точные SHA256 и byte count; запрещено добавлять отдельный bash-token после remote command.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/stage4h-collector-provenance-patch-candidate-v1/20260714T174131Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_OVERSIZED_COMMAND_PARSE_FAILURE\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: Bash получил одиночный фрагмент и сообщил syntax error near unexpected token `(`.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: чрезмерно длинная интерактивная команда была обрезана или повреждена при передаче до полного разбора Bash.\nDETAIL=ERROR_REGISTER_TAIL=- Impact: side-effect audit подтвердил production state 0|0|OK, неизменный collector, активный timer и отсутствие временных БД, каталогов и процессов.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: монолитные команды запрещены; сложные действия выполняются через отдельный проверяемый task-скрипт и короткий launcher.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: interactive payload target <= 8000 bytes; syntax-check перед запуском; remote output сохраняется независимо от RC.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/operator-command-size-guard-v1/20260714T182653Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_HOMELAB_ADMIN_HELP_RC_ASSUMPTION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: template audit завершился HOMELAB_ADMIN_HELP_FAILED.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: был ошибочно ожидаем RC=0 от неподдерживаемого аргумента --help.\nDETAIL=ERROR_REGISTER_TAIL=- Actual contract: неизвестный аргумент печатает usage и возвращает RC=64.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: проверять version либо считать точную usage-строку вместе с RC=64 штатным результатом.\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: перед проверкой CLI сначала фиксировать поддерживаемые команды; не предполагать GNU-style --help.\nDETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v1/20260714T183338Z/report.txt\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_EXPECTED_NEGATIVE_RC_TRAP_CLASSIFICATION\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: schema-v2 task v3 build stopped while intentionally testing the --invalid argument path.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: an expected RC64 was executed while the generic ERR trap remained active.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: expected failures are evaluated only through an explicit if/else branch with immediate RC capture.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=EXPECTED_RC64_INTERCEPTED_ERR_TRAP\nDETAIL=ERROR_REGISTER_TAIL=- Required pattern: if command; then rc=0; else rc=$?; fi, followed by a separate exact expected-RC assertion.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_DUPLICATE_MACHINE_MARKER_COUNT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: error-register candidate construction stopped with RC1 before applying the candidate.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: the same marker text appeared in both a heading and a descriptive line, while the guard expected one substring occurrence.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: headings and prose do not contain machine-token values; validation counts only complete exact token lines.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=DUPLICATE_MACHINE_TOKEN_IN_HEADING_AND_BODY\nDETAIL=ERROR_REGISTER_TAIL=- Required pattern: grep -Fxc against a complete machine line, never grep -Foc against an unrestricted substring.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: removed and verified.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T02:56:19Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OUTER_WRAPPER_SHELL_SYNTAX\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: the operator shell rejected the generated one-line wrapper with syntax error near the final subshell parenthesis.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: the outer wrapper contained an unbalanced compound shell construct before the closing subshell delimiter.\nDETAIL=ERROR_REGISTER_TAIL=- Impact: parsing failed before the start marker, guards and homelab-admin invocation; no task phase or infrastructure action executed.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: use a linear wrapper with explicitly closed if/case blocks and avoid nested brace groups in conditional expressions.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=OUTER_WRAPPER_UNBALANCED_SUBSHELL_SYNTAX\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: after any parser-level failure, treat the attempted phase as not executed and verify package and run-state before retrying.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Task package impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T03:24:05Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_INLINE_REMOTE_SHELL_IN_APPLY_PHASE\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: homelab-admin lint rejected Stage4H task v6 with ERR-002-INLINE-REMOTE-SHELL.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: apply.sh invoked bash -s through an inline quoted SSH program and streamed the remote script through stdin.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: copy the declared remote script to an isolated fixed path on VM180 and invoke that file directly with positional arguments.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=INLINE_REMOTE_SHELL_REPLACED_BY_STAGED_REMOTE_SCRIPT_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: phase scripts may perform transport orchestration, but remote shell program bodies must exist as separately declared, syntax-checked remote script files.\nDETAIL=ERROR_REGISTER_TAIL=- Remote stdout and stderr must be preserved before evaluating the remote return code.\nDETAIL=ERROR_REGISTER_TAIL=- Task v6 status: REJECTED_BY_LINT; never executed and never mutated.\nDETAIL=ERROR_REGISTER_TAIL=- Production database impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Live collector impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Temporary database and remote root count after rejection: zero.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:13:46Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OPTIONAL_RUN_DIRECTORY_FIND_UNDER_PIPEFAIL\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: task-v7 builder stopped while counting formal runs for rejected task v6.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: find was executed against an optional directory that did not exist; under pipefail the assignment returned RC1.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: test directory existence first and assign zero without invoking find when it is absent.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=MISSING_OPTIONAL_RUN_DIRECTORY_TREATED_AS_ZERO\nDETAIL=ERROR_REGISTER_TAIL=- Anti-regression: optional paths must have an explicit existence branch before find under pipefail.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:44:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_PG_CONSTRAINT_CONTYPE_CHAR_CONCAT\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: isolated Stage4H acceptance failed during schema baseline capture.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: pg_constraint.contype uses the internal PostgreSQL char type and was concatenated without an explicit text cast.\nDETAIL=ERROR_REGISTER_TAIL=- Correction: use contype::text or CAST(contype AS text).\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=PG_CATALOG_CHAR_CONCAT_REQUIRES_EXPLICIT_TEXT_CAST\nDETAIL=ERROR_REGISTER_TAIL=- Machine rule: ERR-014-PG-CATALOG-CHAR-CONCAT.\nDETAIL=ERROR_REGISTER_TAIL=- Negative self-test: uncast expression rejected with RC64.\nDETAIL=ERROR_REGISTER_TAIL=- Positive self-test: explicit text cast accepted with RC0.\nDETAIL=ERROR_REGISTER_TAIL=- Task v7 mutated: no.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_LIVE_COLLECTOR_VERIFIER_WRONG_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Symptom: verified linter installation was rolled back after the final collector integrity guard returned UNKNOWN.\nDETAIL=ERROR_REGISTER_TAIL=- Root cause: verifier queried a nonexistent path instead of the canonical live collector path declared by the task acceptance script.\nDETAIL=ERROR_REGISTER_TAIL=- Canonical path: /opt/cluster-admin-incident-engine/collector.py.\nDETAIL=ERROR_REGISTER_TAIL=- Incorrect path: /opt/homelab-cluster-admin/cluster-admin-collector.py.\nDETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=LIVE_COLLECTOR_VERIFIER_PATH_MUST_MATCH_TASK_CANONICAL_PATH\nDETAIL=ERROR_REGISTER_TAIL=- Correction: derive and guard the live collector path from the immutable task contract before executing the hash query.\nDETAIL=ERROR_REGISTER_TAIL=- Production impact: none; the canonical collector hash remained unchanged.\nDETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0.\nDETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_INLINE_FAILURE_20260721\nDETAIL=ERROR_REGISTER_TAIL=Attempts 048 and 049 did not appear in immutable history.\nDETAIL=ERROR_REGISTER_TAIL=Rule: use validated local helper scripts and a simple scheduler entry; never embed the full collector in cron or nested SSH quoting.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_WRAPPER_PUBLICATION_FAILURE_20260721\nDETAIL=ERROR_REGISTER_TAIL=Commands 044-051 did not reach immutable history through homelab-chat-run.\nDETAIL=ERROR_REGISTER_TAIL=Resolution: hourly snapshots use direct scp plus homelab-runtime-receive publication.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_052_NOT_PUBLISHED_20260721\nDETAIL=ERROR_REGISTER_TAIL=CONTEXT-AUTOREFRESH-ACTIVATE-052 did not appear in immutable history; direct publisher retry requires sanitization before transmission.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=IMMUTABLE_HISTORY_FALSE_NEGATIVE_20260721\nDETAIL=ERROR_REGISTER_TAIL=BACKUP-AUDIT-CONTROLPLANE-054 was successfully published at commit 2b966acfe553b4d9f8d4a62bf9533478bdd1a073, but was incorrectly reported missing because a stale directory listing was treated as authoritative.\nDETAIL=ERROR_REGISTER_TAIL=Rule: verify the exact COMMAND_ID result, wrapper publication status and commit SHA; never infer absence from a cached directory listing.\nDETAIL=ERROR_REGISTER_TAIL=\nDETAIL=ERROR_REGISTER_TAIL=BACKUP_UNSAFE_SOURCE_CAPTURE_071_PARSE_ERROR_20260721\nDETAIL=ERROR_REGISTER_TAIL=BACKUP-UNSAFE-SOURCE-CAPTURE-071 failed before execution: shell syntax error near unexpected token (.\nDETAIL=ERROR_REGISTER_TAIL=Resolution: avoid nested quote layers; parse targets first and pass file paths as simple SSH arguments.\nDETAIL=ERROR_REGISTER_TAIL_END\nDETAIL=MANAGER_REFERENCES_BEGIN\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-admin\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-chat-run\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-collect\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T110932Z\nDETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T111219Z\nDETAIL=MANAGER_REFERENCES_END\nDETAIL=COMMAND_ACTION=OBSERVATION_ONLY\nCHANGES_MADE=NO\n" } diff --git a/runtime/latest.txt b/runtime/latest.txt index 9eb3b73..9478f50 100644 --- a/runtime/latest.txt +++ b/runtime/latest.txt @@ -1,5 +1,5 @@ CHAT_OUTPUT_BEGIN -COMMAND_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-447 +COMMAND_ID=HOMELAB-ERROR-REGISTER-FORMAT-AUDIT-448 STATUS=OK RC=0 HOST=pve01 @@ -9,48 +9,214 @@ REFERENCE_REGISTER_CHECK=OK REFERENCE_SHA256=5763f2f8edc75fcf6f3951f8c95896d1cc112ceccb6cf5b64a383f540a4deb8e ERROR_REGISTER_CHECK=OK ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 -COMMAND_SHA256=b336237a7deb34e3671a8a066295fb7d721cab0d706ab55118fde89e87392827 +COMMAND_SHA256=b07eaabf87dd148ae53e0628058252a1074e71463fbacb489e5389d195f37180 DUPLICATE_FAILED_COMMAND_BLOCKED=false EXECUTION_STARTED=true CHANGES_MADE=false SANITIZED=yes SECRETS_INCLUDED=no PRIVATE_ADDRESSES_INCLUDED=no -RAW_EVIDENCE_SHA256=2d831ad3d49a12146c5b01bb93f961e4f143d758dcc0c66284dabda25b679a13 -SANITIZED_OUTPUT_SHA256=2d831ad3d49a12146c5b01bb93f961e4f143d758dcc0c66284dabda25b679a13 +RAW_EVIDENCE_SHA256=673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f +SANITIZED_OUTPUT_SHA256=673f6f11cd0875980e440a581c77c73937651655c02d2f182a51d33fa4111c1f OUTPUT_BEGIN -DETAIL=ERROR_444_REGISTERED=NO -DETAIL=ERROR_446_REGISTERED=NO -DETAIL=SERVICE_STATE_BEGIN -Result=success -ExecMainCode=1 -ExecMainStatus=0 -LoadState=loaded -ActiveState=inactive -SubState=dead -DETAIL=SERVICE_STATE_END -DETAIL=TIMER_STATE_BEGIN -NextElapseUSecRealtime=Fri 2026-07-24 15:04:10 MSK -LastTriggerUSec=Fri 2026-07-24 14:04:11 MSK -LoadState=loaded -ActiveState=active -SubState=waiting -DETAIL=TIMER_STATE_END -DETAIL=LOCAL_QUEUE_COUNT=0 -DETAIL=LOCAL_QUEUE_BEGIN -DETAIL=LOCAL_QUEUE_END -DETAIL=RECENT_SERVICE_EVENTS_BEGIN -2026-07-24T13:45:26+03:00 pve01 systemd[1]: Starting homelab-vm-local-dumps-2cloud.service - Homelab VM/CT existing local dumps two-cloud verifier... -2026-07-24T13:53:05+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[173652]: STATUS=OK TS=2026-07-24T10:45:32Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7583219433 JOB=homelab-pve01-vm-local-dumps-20260724T104532Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T104532Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T104532Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7583219433 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log -2026-07-24T14:00:45+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[211547]: STATUS=OK TS=2026-07-24T10:53:10Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7607921537 JOB=homelab-pve01-vm-local-dumps-20260724T105310Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T105310Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T105310Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7607921537 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log -2026-07-24T14:08:28+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[229881]: STATUS=OK TS=2026-07-24T11:00:50Z TYPE=vm-local-dumps-cloud BAD=0 COUNT=3 CHUNKED=1 TOTAL_BYTES=7574271967 JOB=homelab-pve01-vm-local-dumps-20260724T110050Z REMOTE_A=pve01-mail-01-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T110050Z REMOTE_B=pve01-mail-02-crypt:homelab-backups/pve01/vm-local-dumps/homelab-pve01-vm-local-dumps-20260724T110050Z LOCAL_DUMPS_DELETED=true DELETED_COUNT=3 DELETED_BYTES=7574271967 LOG=/var/lib/homelab-vm-backup/vm-local-dumps-2cloud-latest.log -2026-07-24T14:08:28+03:00 pve01 homelab-vm-local-dumps-2cloud-drain[229919]: STATUS=OK STARTED=2026-07-24T10:45:26Z FINISHED=2026-07-24T11:08:28Z INITIAL_COUNT=9 BATCHES=3 DELETED_COUNT=9 REMAINING_COUNT=0 -2026-07-24T14:08:28+03:00 pve01 systemd[1]: homelab-vm-local-dumps-2cloud.service: Deactivated successfully. -2026-07-24T14:08:28+03:00 pve01 systemd[1]: Finished homelab-vm-local-dumps-2cloud.service - Homelab VM/CT existing local dumps two-cloud verifier. -2026-07-24T14:08:28+03:00 pve01 systemd[1]: homelab-vm-local-dumps-2cloud.service: Consumed 5min 47.116s CPU time, 8.3G memory peak. -DETAIL=RECENT_SERVICE_EVENTS_END +DETAIL=ERROR_REGISTER_META_BEGIN +DETAIL=ERROR_REGISTER_PATH=/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md +DETAIL=ERROR_REGISTER_BYTES=79246 +DETAIL=ERROR_REGISTER_SHA256=08b3a769b8e38eaa1acec915352fb328180d70caa7ff6cd9d1ec0da426262752 +DETAIL=ERROR_REGISTER_META_END +DETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-EXISTING-DRAIN-WAIT-444|REGISTERED=NO +DETAIL=ERROR_ID=HOMELAB-VM-2CLOUD-DRAIN-CLOSURE-PREFLIGHT-446|REGISTERED=NO +DETAIL=ERROR_REGISTER_TAIL_BEGIN +DETAIL=ERROR_REGISTER_TAIL=- The reported validation count is cascading missing-marker evidence, not twenty-five independent design defects. +DETAIL=ERROR_REGISTER_TAIL=- The generated validator must be inspected at the exact SyntaxError line before another candidate is created. +DETAIL=ERROR_REGISTER_TAIL=- Production, database, application, services, timers, health and desired-state were unchanged; active external probes were not executed. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STAGE4E_PIPESTATUS_LOST_AFTER_FIRST_ASSIGNMENT_20260714 +DETAIL=ERROR_REGISTER_TAIL=- VM180 validation copy used a pipeline and read PIPESTATUS in two separate assignments. +DETAIL=ERROR_REGISTER_TAIL=- The first assignment reset PIPESTATUS, leaving COPY_RC empty and preventing remote validation and cleanup. +DETAIL=ERROR_REGISTER_TAIL=- Retry must use explicit SCP operations without pipeline status parsing. +DETAIL=ERROR_REGISTER_TAIL=- Production remained unchanged and active external probes were not executed. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STAGE4F_VALIDATOR_EXPECTED_HEALTH_REFRESH_FROM_NONWRITING_BACKUP_SCRIPT_20260714 +DETAIL=ERROR_REGISTER_TAIL=- The controlled backup service completed with Result=success and ExecMainStatus=0. +DETAIL=ERROR_REGISTER_TAIL=- Validation incorrectly required cluster-admin-incident-engine-backup.txt to receive a fresh timestamp. +DETAIL=ERROR_REGISTER_TAIL=- The executed backup script does not write that health file; therefore the stale health timestamp was not evidence of backup failure. +DETAIL=ERROR_REGISTER_TAIL=- Stage4F backup proof must use the service result, fresh latest JSON, produced artifacts and off-host/restore evidence instead. +DETAIL=ERROR_REGISTER_TAIL=- The backup must not be rerun merely to satisfy the invalid health-file freshness assertion. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## STRICT_RULE_20260714_CLOSE_TAILS_IMMEDIATELY +DETAIL=ERROR_REGISTER_TAIL=- Failure class: переход к следующей задаче при наличии незакрытого хвоста. +DETAIL=ERROR_REGISTER_TAIL=- Mandatory anti-regression: после ошибки запрещено продолжать другой scope до точной root cause, исправления, повторной проверки, очистки, proof и seal. +DETAIL=ERROR_REGISTER_TAIL=- Closure gate: UNRESOLVED_TAIL_COUNT=0; BLOCKER_COUNT=0; TEMPORARY_ARTIFACT_COUNT=0; ROLLBACK_VERIFIED=YES; HEALTH=OK; PROOF_UPDATED=YES; REFERENCE_UPDATED=YES. +DETAIL=ERROR_REGISTER_TAIL=- Если закрытие невозможно из-за внешней зависимости, опасной неоднозначности или обязательного решения пользователя, фиксировать BLOCKED/OPEN и не заявлять CLOSED. +DETAIL=ERROR_REGISTER_TAIL=- Proof: /var/lib/homelab-change-sets/operator-rule-close-tails-immediately-v1/20260714T171631Z/report.txt +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_DEPENDENCY_FACT_QUERY_GLOBAL_LIMIT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: dependency audit вернул только latest_collector_status. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: ORDER BY 1 LIMIT 1 в конце UNION ALL применился ко всему набору фактов. +DETAIL=ERROR_REGISTER_TAIL=- Correction: latest collector status извлекается скалярным подзапросом внутри CTE facts; глобальный LIMIT отсутствует. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: multi-fact SQL audit обязан проверять точное ожидаемое число строк до извлечения значений. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_PATCH_REQUIREMENT_PATTERN_MISMATCH +DETAIL=ERROR_REGISTER_TAIL=- Symptom: MIGRATION_PLAN_COLLECTOR_PATCH_REQUIRED_COUNT=1 при ожидаемых двух подтверждениях. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: узкий шаблон учитывал collector_patch_required, но не collector_patch_required_after_stage4c. +DETAIL=ERROR_REGISTER_TAIL=- Correction: оба поля проверяются отдельно, затем складываются как semantic requirement count. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: связанные JSON-контракты проверяются по собственным точным именам полей, а не одним унифицированным grep-шаблоном. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-provenance-readiness-scope-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; PRIOR_TAIL_UNRESOLVED_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_PRIVILEGED_FILE_REDIRECTION_BEFORE_SUDO +DETAIL=ERROR_REGISTER_TAIL=- Symptom: bash reported Permission denied while counting collector.py lines. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: `< collector.py` was opened by the unprivileged caller shell before sudo executed wc. +DETAIL=ERROR_REGISTER_TAIL=- Correction: run sudo wc -l collector.py without caller-side input redirection. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: never combine sudo with `< protected-file`; pass the protected path as an argument to the privileged command. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_COLLECTOR_RUN_COLUMN_ASSUMPTION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: SQL failed because completed_at did not exist. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: collector_runs columns were assumed instead of read from information_schema; actual names are finished_at and error_text. +DETAIL=ERROR_REGISTER_TAIL=- Correction: assert required and forbidden column counts before querying recent runs. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: every schema-sensitive audit must discover and validate exact column names before the main query. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-cluster-admin-stage4/stage4h-collector-baseline-audit-final-v1/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_REMOTE_STDIN_ARGUMENT_SHIFT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: remote harness выполнил chmod для пути bash. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: дополнительный positional token bash был передан после SSH command и стал первым аргументом stdin-скрипта. +DETAIL=ERROR_REGISTER_TAIL=- Correction: remote command вызывает bash -s -- с ровно тремя явно встроенными аргументами: candidate path, SHA256 и byte count. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: stdin-скрипт обязан валидировать $1 по разрешённому path pattern и затем подтверждать точные SHA256 и byte count; запрещено добавлять отдельный bash-token после remote command. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/stage4h-collector-provenance-patch-candidate-v1/20260714T174131Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_OVERSIZED_COMMAND_PARSE_FAILURE +DETAIL=ERROR_REGISTER_TAIL=- Symptom: Bash получил одиночный фрагмент и сообщил syntax error near unexpected token `(`. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: чрезмерно длинная интерактивная команда была обрезана или повреждена при передаче до полного разбора Bash. +DETAIL=ERROR_REGISTER_TAIL=- Impact: side-effect audit подтвердил production state 0|0|OK, неизменный collector, активный timer и отсутствие временных БД, каталогов и процессов. +DETAIL=ERROR_REGISTER_TAIL=- Correction: монолитные команды запрещены; сложные действия выполняются через отдельный проверяемый task-скрипт и короткий launcher. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: interactive payload target <= 8000 bytes; syntax-check перед запуском; remote output сохраняется независимо от RC. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/operator-command-size-guard-v1/20260714T182653Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260714_HOMELAB_ADMIN_HELP_RC_ASSUMPTION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: template audit завершился HOMELAB_ADMIN_HELP_FAILED. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: был ошибочно ожидаем RC=0 от неподдерживаемого аргумента --help. +DETAIL=ERROR_REGISTER_TAIL=- Actual contract: неизвестный аргумент печатает usage и возвращает RC=64. +DETAIL=ERROR_REGISTER_TAIL=- Correction: проверять version либо считать точную usage-строку вместе с RC=64 штатным результатом. +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: перед проверкой CLI сначала фиксировать поддерживаемые команды; не предполагать GNU-style --help. +DETAIL=ERROR_REGISTER_TAIL=- Closure proof: /var/lib/homelab-change-sets/homelab-admin-cli-contract-fix-v1/20260714T183338Z/report.txt +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_EXPECTED_NEGATIVE_RC_TRAP_CLASSIFICATION +DETAIL=ERROR_REGISTER_TAIL=- Symptom: schema-v2 task v3 build stopped while intentionally testing the --invalid argument path. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: an expected RC64 was executed while the generic ERR trap remained active. +DETAIL=ERROR_REGISTER_TAIL=- Correction: expected failures are evaluated only through an explicit if/else branch with immediate RC capture. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=EXPECTED_RC64_INTERCEPTED_ERR_TRAP +DETAIL=ERROR_REGISTER_TAIL=- Required pattern: if command; then rc=0; else rc=$?; fi, followed by a separate exact expected-RC assertion. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_DUPLICATE_MACHINE_MARKER_COUNT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: error-register candidate construction stopped with RC1 before applying the candidate. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: the same marker text appeared in both a heading and a descriptive line, while the guard expected one substring occurrence. +DETAIL=ERROR_REGISTER_TAIL=- Correction: headings and prose do not contain machine-token values; validation counts only complete exact token lines. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=DUPLICATE_MACHINE_TOKEN_IN_HEADING_AND_BODY +DETAIL=ERROR_REGISTER_TAIL=- Required pattern: grep -Fxc against a complete machine line, never grep -Foc against an unrestricted substring. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: removed and verified. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T02:56:19Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OUTER_WRAPPER_SHELL_SYNTAX +DETAIL=ERROR_REGISTER_TAIL=- Symptom: the operator shell rejected the generated one-line wrapper with syntax error near the final subshell parenthesis. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: the outer wrapper contained an unbalanced compound shell construct before the closing subshell delimiter. +DETAIL=ERROR_REGISTER_TAIL=- Impact: parsing failed before the start marker, guards and homelab-admin invocation; no task phase or infrastructure action executed. +DETAIL=ERROR_REGISTER_TAIL=- Correction: use a linear wrapper with explicitly closed if/case blocks and avoid nested brace groups in conditional expressions. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=OUTER_WRAPPER_UNBALANCED_SUBSHELL_SYNTAX +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: after any parser-level failure, treat the attempted phase as not executed and verify package and run-state before retrying. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Task package impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary artifacts: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T03:24:05Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_INLINE_REMOTE_SHELL_IN_APPLY_PHASE +DETAIL=ERROR_REGISTER_TAIL=- Symptom: homelab-admin lint rejected Stage4H task v6 with ERR-002-INLINE-REMOTE-SHELL. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: apply.sh invoked bash -s through an inline quoted SSH program and streamed the remote script through stdin. +DETAIL=ERROR_REGISTER_TAIL=- Correction: copy the declared remote script to an isolated fixed path on VM180 and invoke that file directly with positional arguments. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=INLINE_REMOTE_SHELL_REPLACED_BY_STAGED_REMOTE_SCRIPT_PATH +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: phase scripts may perform transport orchestration, but remote shell program bodies must exist as separately declared, syntax-checked remote script files. +DETAIL=ERROR_REGISTER_TAIL=- Remote stdout and stderr must be preserved before evaluating the remote return code. +DETAIL=ERROR_REGISTER_TAIL=- Task v6 status: REJECTED_BY_LINT; never executed and never mutated. +DETAIL=ERROR_REGISTER_TAIL=- Production database impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Live collector impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Temporary database and remote root count after rejection: zero. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:13:46Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_OPTIONAL_RUN_DIRECTORY_FIND_UNDER_PIPEFAIL +DETAIL=ERROR_REGISTER_TAIL=- Symptom: task-v7 builder stopped while counting formal runs for rejected task v6. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: find was executed against an optional directory that did not exist; under pipefail the assignment returned RC1. +DETAIL=ERROR_REGISTER_TAIL=- Correction: test directory existence first and assign zero without invoking find when it is absent. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=MISSING_OPTIONAL_RUN_DIRECTORY_TREATED_AS_ZERO +DETAIL=ERROR_REGISTER_TAIL=- Anti-regression: optional paths must have an explicit existence branch before find under pipefail. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T04:44:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_PG_CONSTRAINT_CONTYPE_CHAR_CONCAT +DETAIL=ERROR_REGISTER_TAIL=- Symptom: isolated Stage4H acceptance failed during schema baseline capture. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: pg_constraint.contype uses the internal PostgreSQL char type and was concatenated without an explicit text cast. +DETAIL=ERROR_REGISTER_TAIL=- Correction: use contype::text or CAST(contype AS text). +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=PG_CATALOG_CHAR_CONCAT_REQUIRES_EXPLICIT_TEXT_CAST +DETAIL=ERROR_REGISTER_TAIL=- Machine rule: ERR-014-PG-CATALOG-CHAR-CONCAT. +DETAIL=ERROR_REGISTER_TAIL=- Negative self-test: uncast expression rejected with RC64. +DETAIL=ERROR_REGISTER_TAIL=- Positive self-test: explicit text cast accepted with RC0. +DETAIL=ERROR_REGISTER_TAIL=- Task v7 mutated: no. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=## ERROR_20260715_LIVE_COLLECTOR_VERIFIER_WRONG_PATH +DETAIL=ERROR_REGISTER_TAIL=- Symptom: verified linter installation was rolled back after the final collector integrity guard returned UNKNOWN. +DETAIL=ERROR_REGISTER_TAIL=- Root cause: verifier queried a nonexistent path instead of the canonical live collector path declared by the task acceptance script. +DETAIL=ERROR_REGISTER_TAIL=- Canonical path: /opt/cluster-admin-incident-engine/collector.py. +DETAIL=ERROR_REGISTER_TAIL=- Incorrect path: /opt/homelab-cluster-admin/cluster-admin-collector.py. +DETAIL=ERROR_REGISTER_TAIL=ANTI_REGRESSION_TOKEN=LIVE_COLLECTOR_VERIFIER_PATH_MUST_MATCH_TASK_CANONICAL_PATH +DETAIL=ERROR_REGISTER_TAIL=- Correction: derive and guard the live collector path from the immutable task contract before executing the hash query. +DETAIL=ERROR_REGISTER_TAIL=- Production impact: none; the canonical collector hash remained unchanged. +DETAIL=ERROR_REGISTER_TAIL=- Status: CLOSED; UNRESOLVED_TAIL_COUNT=0. +DETAIL=ERROR_REGISTER_TAIL=- Registered at: 2026-07-15T06:27:06Z +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_INLINE_FAILURE_20260721 +DETAIL=ERROR_REGISTER_TAIL=Attempts 048 and 049 did not appear in immutable history. +DETAIL=ERROR_REGISTER_TAIL=Rule: use validated local helper scripts and a simple scheduler entry; never embed the full collector in cron or nested SSH quoting. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_WRAPPER_PUBLICATION_FAILURE_20260721 +DETAIL=ERROR_REGISTER_TAIL=Commands 044-051 did not reach immutable history through homelab-chat-run. +DETAIL=ERROR_REGISTER_TAIL=Resolution: hourly snapshots use direct scp plus homelab-runtime-receive publication. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=AUTOREFRESH_052_NOT_PUBLISHED_20260721 +DETAIL=ERROR_REGISTER_TAIL=CONTEXT-AUTOREFRESH-ACTIVATE-052 did not appear in immutable history; direct publisher retry requires sanitization before transmission. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=IMMUTABLE_HISTORY_FALSE_NEGATIVE_20260721 +DETAIL=ERROR_REGISTER_TAIL=BACKUP-AUDIT-CONTROLPLANE-054 was successfully published at commit 2b966acfe553b4d9f8d4a62bf9533478bdd1a073, but was incorrectly reported missing because a stale directory listing was treated as authoritative. +DETAIL=ERROR_REGISTER_TAIL=Rule: verify the exact COMMAND_ID result, wrapper publication status and commit SHA; never infer absence from a cached directory listing. +DETAIL=ERROR_REGISTER_TAIL= +DETAIL=ERROR_REGISTER_TAIL=BACKUP_UNSAFE_SOURCE_CAPTURE_071_PARSE_ERROR_20260721 +DETAIL=ERROR_REGISTER_TAIL=BACKUP-UNSAFE-SOURCE-CAPTURE-071 failed before execution: shell syntax error near unexpected token (. +DETAIL=ERROR_REGISTER_TAIL=Resolution: avoid nested quote layers; parse targets first and pass file paths as simple SSH arguments. +DETAIL=ERROR_REGISTER_TAIL_END +DETAIL=MANAGER_REFERENCES_BEGIN +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-admin +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-chat-run +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-collect +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T110932Z +DETAIL=MANAGER_REFERENCE=/usr/local/sbin/homelab-context-refresh-direct.bak.20260721T111219Z +DETAIL=MANAGER_REFERENCES_END DETAIL=COMMAND_ACTION=OBSERVATION_ONLY -DETAIL=BACKUP_PAYLOAD_CHANGED=NO CHANGES_MADE=NO OUTPUT_END