{
  "schema_version": 1,
  "channel": "homelab-runtime",
  "command_id": "ERRORS-INDEX-001",
  "status": "OK",
  "rc": 0,
  "host": "pve01",
  "mode": "read-only",
  "component": "error-ledger",
  "started_at_utc": "2026-07-21T07:10:17Z",
  "finished_at_utc": "2026-07-21T07:10:17Z",
  "reference_register_checked": true,
  "reference_sha256": "f6f7749fda946015116cdbbd754c7e7f20356b4a6cf4df330a1b0b8fdf59cbb2",
  "error_register_checked": true,
  "error_register_sha256": "ab8308549db90d235b591af0581580c3c7ba1b287b129cc6111c2eef0a0f9ecc",
  "command_sha256": "280cb3910a51e34e4cd97ad077f10a28b2b911f5bc672977c54efa8325b01468",
  "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": "1a8a3b39313470910499ff5f400ab65de37d07de55347ff7bd7fafb4c8235afd",
  "sanitized_output_sha256": "1a8a3b39313470910499ff5f400ab65de37d07de55347ff7bd7fafb4c8235afd",
  "output_truncated_in_json": false,
  "full_sanitized_output_url": "https://git.gram1.ru/.well-known/homelab-runtime/latest.txt",
  "output": "{\n  \"schema_version\": 1,\n  \"status\": \"READY\",\n  \"generated_at_utc\": \"2026-07-21T07:10:17Z\",\n  \"source\": {\n    \"path\": \"/etc/pve/HOMELAB_ASSISTANT_ERROR_REGISTER.md\",\n    \"sha256\": \"ab8308549db90d235b591af0581580c3c7ba1b287b129cc6111c2eef0a0f9ecc\",\n    \"immutable_context_command_id\": \"CONTEXT-SOURCES-FULL-002\"\n  },\n  \"entry_count\": 146,\n  \"rule_count\": 10,\n  \"duplicate_ids\": [],\n  \"entries\": [\n    {\n      \"id\": \"ERR-N-1\",\n      \"kind\": \"numbered\",\n      \"source_line\": 6,\n      \"title\": \"Повторно дал слишком большой интерактивный paste в shell.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-2\",\n      \"kind\": \"numbered\",\n      \"source_line\": 7,\n      \"title\": \"Повторно использовал here-doc/Markdown/backticks там, где нужен короткий безопасный файл или отдельный скрипт.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-3\",\n      \"kind\": \"numbered\",\n      \"source_line\": 8,\n      \"title\": \"Дал генератор справочника прямо в терминал вместо безопасного маленького шага.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-4\",\n      \"kind\": \"numbered\",\n      \"source_line\": 9,\n      \"title\": \"Нарушил своё же правило: не давать длинные вложенные команды с кавычками.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-11\",\n      \"kind\": \"numbered\",\n      \"source_line\": 35,\n      \"title\": \"Ошибка: считать offhost OK после failed rsync.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-12\",\n      \"kind\": \"numbered\",\n      \"source_line\": 40,\n      \"title\": \"Ошибка: широкий secret-поиск по /opt/stacks дал шум.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-13\",\n      \"kind\": \"numbered\",\n      \"source_line\": 45,\n      \"title\": \"Ошибка: SQL с одинарными кавычками внутри одинарной SSH-команды ломается.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-14\",\n      \"kind\": \"numbered\",\n      \"source_line\": 50,\n      \"title\": \"Ошибка: путать контекст входа и узел выполнения.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-15\",\n      \"kind\": \"numbered\",\n      \"source_line\": 57,\n      \"title\": \"Ошибка: повторно нарушено правило №13 после его добавления.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-16\",\n      \"kind\": \"numbered\",\n      \"source_line\": 63,\n      \"title\": \"Основополагающее правило: перед каждой командой ассистент обязан явно написать: Сверка с файлом ошибок: CHECK пройден.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-19\",\n      \"kind\": \"numbered\",\n      \"source_line\": 68,\n      \"title\": \"Уточнение формата: не писать отдельную строку сверки перед каждой командой в пакете.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-20\",\n      \"kind\": \"numbered\",\n      \"source_line\": 73,\n      \"title\": \"Ошибка: широкий XenForo SMTP-поиск по src дал шум исходников.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-21\",\n      \"kind\": \"numbered\",\n      \"source_line\": 77,\n      \"title\": \"Ошибка: nested PHP php -r дал Parse error на forum-prod.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-22\",\n      \"kind\": \"numbered\",\n      \"source_line\": 82,\n      \"title\": \"Ошибка: самодельный base64 PHP для SMTP auth сломан.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-23\",\n      \"kind\": \"numbered\",\n      \"source_line\": 87,\n      \"title\": \"Ошибка: MariaDB не поддержала cast('true' as json) в JSON_SET.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-24\",\n      \"kind\": \"numbered\",\n      \"source_line\": 92,\n      \"title\": \"Ошибка: exit 1 в interactive-check закрыл SSH-сессию.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-25\",\n      \"kind\": \"numbered\",\n      \"source_line\": 97,\n      \"title\": \"Ошибка анализа: не надо слепо включать smtpSsl=true при smtpPort=587.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-26\",\n      \"kind\": \"numbered\",\n      \"source_line\": 102,\n      \"title\": \"Ошибка: openssl -crlf вместе с ручным CRLF ломает SMTP AUTH checker.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-27\",\n      \"kind\": \"numbered\",\n      \"source_line\": 108,\n      \"title\": \"Ошибка: Python heredoc внутри ssh сломал not_ok диагностику.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-28\",\n      \"kind\": \"numbered\",\n      \"source_line\": 112,\n      \"title\": \"Ошибка: docker compose ls --format json | wc -l дал ложный COMPOSE_PROJECT_COUNT=1.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-29\",\n      \"kind\": \"numbered\",\n      \"source_line\": 116,\n      \"title\": \"Ошибка: monitoring compact status искал неверные имена health-файлов.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-30\",\n      \"kind\": \"numbered\",\n      \"source_line\": 121,\n      \"title\": \"Ошибка/инцидент: Prometheus API HTTP_CODE=000 после monitoring reference.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-31\",\n      \"kind\": \"numbered\",\n      \"source_line\": 125,\n      \"title\": \"Строгое правило: перед каждой командой сверяться с файлом ошибок и справочником.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-32\",\n      \"kind\": \"numbered\",\n      \"source_line\": 130,\n      \"title\": \"Ошибка: 153_PROMETHEUS_TARGETS_SETTLED_PROOF содержит SyntaxError из-за вложенного Python внутри SSH.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-34\",\n      \"kind\": \"numbered\",\n      \"source_line\": 135,\n      \"title\": \"Ошибка операционного ввода: полный терминальный лог MobaXterm попал в shell.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-33\",\n      \"kind\": \"numbered\",\n      \"source_line\": 140,\n      \"title\": \"Security finding: root authorized_keys на PVE-нодах имел права 777.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-35\",\n      \"kind\": \"numbered\",\n      \"source_line\": 144,\n      \"title\": \"Ошибка проверки: 160_PVE_ROOT_AUTHORIZED_KEYS_PERMISSIONS_FIXED не доказал исправление прав.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-36\",\n      \"kind\": \"numbered\",\n      \"source_line\": 149,\n      \"title\": \"Quality check: Storage block needs integrity and pve03 capacity coverage review.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-37\",\n      \"kind\": \"numbered\",\n      \"source_line\": 154,\n      \"title\": \"Coverage gap: pve03_staging missing from disk-space health coverage.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-38\",\n      \"kind\": \"numbered\",\n      \"source_line\": 158,\n      \"title\": \"Quality check: Service Dependency Map block needs integrity review.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-39\",\n      \"kind\": \"numbered\",\n      \"source_line\": 162,\n      \"title\": \"Ошибка проверки: post deep audit BAD_MARKER scan caught prose false positive.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-40\",\n      \"kind\": \"numbered\",\n      \"source_line\": 166,\n      \"title\": \"Ошибка/вывод: VM150 Mail cloud single-file upload failed with 413.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-N-41\",\n      \"kind\": \"numbered\",\n      \"source_line\": 170,\n      \"title\": \"Ошибка: post-backup-pass-slo-reconciliation checked pve01 router health on edge-vm.\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L174\",\n      \"kind\": \"heading\",\n      \"source_line\": 174,\n      \"title\": \"ASSISTANT_COMMAND_BATCHING_RULE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L180\",\n      \"kind\": \"heading\",\n      \"source_line\": 180,\n      \"title\": \"HOME_PORTAL_BASE64_APPLY_FAILURE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L184\",\n      \"kind\": \"heading\",\n      \"source_line\": 184,\n      \"title\": \"HOMELAB_COMMAND_SAFETY_HARDENING_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L193\",\n      \"kind\": \"heading\",\n      \"source_line\": 193,\n      \"title\": \"HOME_PORTAL_API_ERROR_CLOSURE_RULE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L198\",\n      \"kind\": \"heading\",\n      \"source_line\": 198,\n      \"title\": \"HOME_PORTAL_COMPLEX_QUOTING_FAILURE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L203\",\n      \"kind\": \"heading\",\n      \"source_line\": 203,\n      \"title\": \"HOME_PORTAL_ACTIVE_CONFIG_SCOPE_RULE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L208\",\n      \"kind\": \"heading\",\n      \"source_line\": 208,\n      \"title\": \"HOME_PORTAL_LINK_VALIDATION_NPMPLUS_DEFAULT_RULE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L213\",\n      \"kind\": \"heading\",\n      \"source_line\": 213,\n      \"title\": \"ROUTER_CLI_STDIN_APPLY_FAILURE_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L219\",\n      \"kind\": \"heading\",\n      \"source_line\": 219,\n      \"title\": \"ROUTER_CLI_PROBE_STDIN_CONSUMPTION_ERROR_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L224\",\n      \"kind\": \"heading\",\n      \"source_line\": 224,\n      \"title\": \"ROUTERBACKUP_READONLY_CLI_PERMISSION_LIMIT_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L230\",\n      \"kind\": \"heading\",\n      \"source_line\": 230,\n      \"title\": \"PROOF_SUMMARY_EXTRACTION_BLANK_20260630\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L235\",\n      \"kind\": \"heading\",\n      \"source_line\": 235,\n      \"title\": \"ROUTER_ACL_UI_RULE_DELETE_AND_RESTORE_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L241\",\n      \"kind\": \"heading\",\n      \"source_line\": 241,\n      \"title\": \"ROUTER_MONITOR_NODE_LOOKUP_PROBE_BUG_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L247\",\n      \"kind\": \"heading\",\n      \"source_line\": 247,\n      \"title\": \"ROUTER_HTTP_SERVICE_FORBIDDEN_FROM_EDGE_VM_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L254\",\n      \"kind\": \"heading\",\n      \"source_line\": 254,\n      \"title\": \"PY_COMPILE_PYC_PERMISSION_ERROR_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L261\",\n      \"kind\": \"heading\",\n      \"source_line\": 261,\n      \"title\": \"ROUTER_HOME_IP_DOCKER_ROUTE_CONFLICT_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L267\",\n      \"kind\": \"heading\",\n      \"source_line\": 267,\n      \"title\": \"HOMEPAGE_ROUTER_MOSCOW_YAML_TITLE_SHAPE_MISMATCH_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L273\",\n      \"kind\": \"heading\",\n      \"source_line\": 273,\n      \"title\": \"HOMEPAGE_ROUTER_MOSCOW_APPLY_SCRIPT_SYNTAX_ERROR_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L281\",\n      \"kind\": \"heading\",\n      \"source_line\": 281,\n      \"title\": \"FORUM_PROD_VM160_FIRST_BOOT_SSH255_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L286\",\n      \"kind\": \"heading\",\n      \"source_line\": 286,\n      \"title\": \"FORUM_PROD_VM160_NESTED_HOSTNAME_PROOF_QUOTING_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L292\",\n      \"kind\": \"heading\",\n      \"source_line\": 292,\n      \"title\": \"FORUM_PROD_VM160_SWAP_PROOF_QUOTING_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L298\",\n      \"kind\": \"heading\",\n      \"source_line\": 298,\n      \"title\": \"FORUM_UPLOAD_ARCHIVES_VM_VERIFY_QUOTING_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L304\",\n      \"kind\": \"heading\",\n      \"source_line\": 304,\n      \"title\": \"FORUM_PROD_BULK_IMPORT_PHP85_EMPTY_FRONTEND_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L311\",\n      \"kind\": \"heading\",\n      \"source_line\": 311,\n      \"title\": \"XENFORO_REQUIREMENTS_DIRECT_DOWNLOAD_403_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L318\",\n      \"kind\": \"heading\",\n      \"source_line\": 318,\n      \"title\": \"PVE01_UNZIP_MISSING_FOR_XF_REQUIREMENTS_VERIFY_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L324\",\n      \"kind\": \"heading\",\n      \"source_line\": 324,\n      \"title\": \"FRESH5_DEPLOY_SUCCESS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L330\",\n      \"kind\": \"heading\",\n      \"source_line\": 330,\n      \"title\": \"NPMPLUS_SQLITE_PASTE_FAILURE_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L336\",\n      \"kind\": \"heading\",\n      \"source_line\": 336,\n      \"title\": \"NPMPLUS_PUBLISH_SCRIPT_WRONG_ENV_SOURCE_525_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L342\",\n      \"kind\": \"heading\",\n      \"source_line\": 342,\n      \"title\": \"NPMPLUS_API_LOGIN_MISSED_HTTPS81_AND_JSON_ESCAPE_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L348\",\n      \"kind\": \"heading\",\n      \"source_line\": 348,\n      \"title\": \"NPMPLUS_API_AUTH_UNAVAILABLE_MANUAL_ROUTES_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L354\",\n      \"kind\": \"heading\",\n      \"source_line\": 354,\n      \"title\": \"EDGE_CERTBOT_TOKEN_FILE_PERMISSION_535_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L360\",\n      \"kind\": \"heading\",\n      \"source_line\": 360,\n      \"title\": \"EDGE_CERTBOT_FAILED_DNS_CUTOVER_ABORTED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L366\",\n      \"kind\": \"heading\",\n      \"source_line\": 366,\n      \"title\": \"CLOUDFLARE_TOKEN_NO_ZONE_ACCESS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L372\",\n      \"kind\": \"heading\",\n      \"source_line\": 372,\n      \"title\": \"FORUM_PUBLICATION_FINAL_SUCCESS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L377\",\n      \"kind\": \"heading\",\n      \"source_line\": 377,\n      \"title\": \"FINAL_SNAPSHOT_NAME_TOO_LONG_556_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L384\",\n      \"kind\": \"heading\",\n      \"source_line\": 384,\n      \"title\": \"CLOUDFLARE_DNS_AUDIT_TXT_SUBSTRING_GAP_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L391\",\n      \"kind\": \"heading\",\n      \"source_line\": 391,\n      \"title\": \"CLOUDFLARE_DNS_CLEANUP_DRYRUN_QUOTE_563_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L396\",\n      \"kind\": \"heading\",\n      \"source_line\": 396,\n      \"title\": \"SPF_DUPLICATE_AFTER_565_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L402\",\n      \"kind\": \"heading\",\n      \"source_line\": 402,\n      \"title\": \"MSMTP_SECRET_SOURCE_PARSE_ERROR_576_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L408\",\n      \"kind\": \"heading\",\n      \"source_line\": 408,\n      \"title\": \"FORUM_MSMTP_MAIL_TRANSPORT_STILL_FAILING_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L414\",\n      \"kind\": \"heading\",\n      \"source_line\": 414,\n      \"title\": \"SMTP_PASSWORD_EXPOSED_ROTATE_REQUIRED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L421\",\n      \"kind\": \"heading\",\n      \"source_line\": 421,\n      \"title\": \"NETBIRD_MAILCOW_REPORTED_DOWN_AFTER_SMTP_INCIDENT_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L426\",\n      \"kind\": \"heading\",\n      \"source_line\": 426,\n      \"title\": \"FORUM_SMTP_FAILED_CONFIG_DISABLED_AFTER_MAILCOW_BAN_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L432\",\n      \"kind\": \"heading\",\n      \"source_line\": 432,\n      \"title\": \"FORUM_OLD_CODEVIPE_CLOUD_BACKUP_STALE_AFTER_FRESH5_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L439\",\n      \"kind\": \"heading\",\n      \"source_line\": 439,\n      \"title\": \"FORUM_RESTORE_DRILL_610_STATUS_FLAG_BUG_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L445\",\n      \"kind\": \"heading\",\n      \"source_line\": 445,\n      \"title\": \"FORUM_XENFORO_MAIL_SMOKE_TEST_FAILED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L449\",\n      \"kind\": \"heading\",\n      \"source_line\": 449,\n      \"title\": \"XENFORO_MAIL_SMOKE_623_INVALID_ROOT_PATH_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L456\",\n      \"kind\": \"heading\",\n      \"source_line\": 456,\n      \"title\": \"FORUM_NEXT_CHAT_KNOWN_ERRORS_AND_CLOSED_INCIDENTS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L509\",\n      \"kind\": \"heading\",\n      \"source_line\": 509,\n      \"title\": \"PARKED_DOMAINS_STAGE4_DNS01_PREFLIGHT_FAILED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L516\",\n      \"kind\": \"heading\",\n      \"source_line\": 516,\n      \"title\": \"PARKED_DOMAINS_STAGE5_BASH_LOCAL_SETU_BUG_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L523\",\n      \"kind\": \"heading\",\n      \"source_line\": 523,\n      \"title\": \"PARKED_DOMAINS_STAGE6_TEMP_HTTP_ROOT_VALIDATION_BUG_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L530\",\n      \"kind\": \"heading\",\n      \"source_line\": 530,\n      \"title\": \"PARKED_DOMAINS_STAGE7_NEWFI_ROOT_ACME_REDIRECT_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L535\",\n      \"kind\": \"heading\",\n      \"source_line\": 535,\n      \"title\": \"PARKED_DOMAINS_STAGE8_DEFAULT_HTTP_TO_HTTPS_REDIRECT_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L541\",\n      \"kind\": \"heading\",\n      \"source_line\": 541,\n      \"title\": \"PARKED_DOMAINS_STAGE9_NEWFI_EXACT_PROBE_NEEDED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L547\",\n      \"kind\": \"heading\",\n      \"source_line\": 547,\n      \"title\": \"PARKED_DOMAINS_STAGE10_EXACT_NEWFI_PROBE_OK_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L553\",\n      \"kind\": \"heading\",\n      \"source_line\": 553,\n      \"title\": \"PARKED_DOMAINS_STAGE11_LOW_ID_EXACT_ROUTE_FAILED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L560\",\n      \"kind\": \"heading\",\n      \"source_line\": 560,\n      \"title\": \"PARKED_DOMAINS_SWITCH_TO_DNS01_AFTER_HTTP01_FAILURES_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L566\",\n      \"kind\": \"heading\",\n      \"source_line\": 566,\n      \"title\": \"PARKED_DOMAINS_STAGE15_FALSE_LOCAL_VALIDATE_ROLLBACK_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L571\",\n      \"kind\": \"heading\",\n      \"source_line\": 571,\n      \"title\": \"DOMAIN_ACTIONS_STAGE18_PLACEHOLDER_AND_RENEWAL_PROOF_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L575\",\n      \"kind\": \"heading\",\n      \"source_line\": 575,\n      \"title\": \"GRAM1_ROOT_WWW_PLACEHOLDER_CLOSE_STAGE19_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L581\",\n      \"kind\": \"heading\",\n      \"source_line\": 581,\n      \"title\": \"PVEPRO_EDGE_LANDING_STAGE21_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L587\",\n      \"kind\": \"heading\",\n      \"source_line\": 587,\n      \"title\": \"PVEPRO_STAGE21_LANDING_SERVICE_FAILED_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L592\",\n      \"kind\": \"heading\",\n      \"source_line\": 592,\n      \"title\": \"PVEPRO_STAGE22_VALIDATION_AND_COPY_GUARD_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L597\",\n      \"kind\": \"heading\",\n      \"source_line\": 597,\n      \"title\": \"TAFTAUTO_CERT_AUTORENEW_BLOCKED_NO_PRIVATE_ACCESS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L603\",\n      \"kind\": \"heading\",\n      \"source_line\": 603,\n      \"title\": \"TAFTAUTO_CERT_AUTORENEW_BLOCKED_NO_PRIVATE_ACCESS_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L609\",\n      \"kind\": \"heading\",\n      \"source_line\": 609,\n      \"title\": \"TAFTAUTO_WG_STAGE24_SECRET_AND_IMPORT_RULE_20260701\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L615\",\n      \"kind\": \"heading\",\n      \"source_line\": 615,\n      \"title\": \"TAFTAUTO_WG_PSK_ROTATION_SCRIPT_BROKE_DATAPLANE_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L620\",\n      \"kind\": \"heading\",\n      \"source_line\": 620,\n      \"title\": \"TAFTAUTO_CERTBOT_CLOUDFLARE_PLUGIN_MISSING_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L624\",\n      \"kind\": \"heading\",\n      \"source_line\": 624,\n      \"title\": \"HOMEPAGE_SERVICES_YAML_BAD_INDENT_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L628\",\n      \"kind\": \"heading\",\n      \"source_line\": 628,\n      \"title\": \"HOMEPAGE_SERVICES_YAML_BAD_INDENT_REPAIR_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L632\",\n      \"kind\": \"heading\",\n      \"source_line\": 632,\n      \"title\": \"TAFTAUTO_CERTBOT_DRYRUN_BAD_FLAG_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L636\",\n      \"kind\": \"heading\",\n      \"source_line\": 636,\n      \"title\": \"TAFTAUTO_CERT_RENEW_DRYRUN_RATE_LIMITED_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L643\",\n      \"kind\": \"heading\",\n      \"source_line\": 643,\n      \"title\": \"HOMEPAGE_XENFORO_INFO_INLINE_PYTHON_SYNTAX_ERROR_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L647\",\n      \"kind\": \"heading\",\n      \"source_line\": 647,\n      \"title\": \"HOMEPAGE_USEFUL_ROUTER_NAME_MISMATCH_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L651\",\n      \"kind\": \"heading\",\n      \"source_line\": 651,\n      \"title\": \"HOMEPAGE_USEFUL_ROUTER_CARD_NOT_FOUND_20260702\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L655\",\n      \"kind\": \"heading\",\n      \"source_line\": 655,\n      \"title\": \"20260702_CF_TOKEN_AUDIT_BROKEN_COMMAND\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L661\",\n      \"kind\": \"heading\",\n      \"source_line\": 661,\n      \"title\": \"LESSON_20260702_CROWDSEC_NETBIRD_EXIT_ROUTE\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L668\",\n      \"kind\": \"heading\",\n      \"source_line\": 668,\n      \"title\": \"LESSON_20260702_HOMEPAGE_MONITORS_REPAIR_NOT_DELETE\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L674\",\n      \"kind\": \"heading\",\n      \"source_line\": 674,\n      \"title\": \"LESSON_20260702_KUMA_ADD_ONE_MONITOR_ONLY\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L680\",\n      \"kind\": \"heading\",\n      \"source_line\": 680,\n      \"title\": \"LESSON_20260702_DOCKGE_STALE_STACKS_NOT_CONTAINERS\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L686\",\n      \"kind\": \"heading\",\n      \"source_line\": 686,\n      \"title\": \"STAGE4B_MASKED_SQL_QUERY_FAILURE_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L691\",\n      \"kind\": \"heading\",\n      \"source_line\": 691,\n      \"title\": \"STAGE4C_SCHEMA_MIGRATIONS_ID_ASSUMPTION_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L696\",\n      \"kind\": \"heading\",\n      \"source_line\": 696,\n      \"title\": \"STAGE4C_PGDUMP_DEV_NULL_FSYNC_INVALID_PROBE_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L702\",\n      \"kind\": \"heading\",\n      \"source_line\": 702,\n      \"title\": \"STAGE4C_REMOTE_PREP_THIRD_SUBSTEP_FAILED_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L708\",\n      \"kind\": \"heading\",\n      \"source_line\": 708,\n      \"title\": \"STAGE4C_REMOTE_PREP_GLOB_AFTER_CHMOD_ROOT_CAUSE_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L713\",\n      \"kind\": \"heading\",\n      \"source_line\": 713,\n      \"title\": \"STAGE4C_MIGRATION003_FINGERPRINT_DOLLAR_QUOTE_FAILURE_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L718\",\n      \"kind\": \"heading\",\n      \"source_line\": 718,\n      \"title\": \"STAGE4C_SEAL_OUTER_RC_MASKING_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L724\",\n      \"kind\": \"heading\",\n      \"source_line\": 724,\n      \"title\": \"STAGE4C_DIAGNOSIS_EXPECTED_DERIVED_FILE_ON_VM180_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L729\",\n      \"kind\": \"heading\",\n      \"source_line\": 729,\n      \"title\": \"STAGE4C_NO_JOBS_RUNNING_TEXT_COUNTED_AS_JOB_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L735\",\n      \"kind\": \"heading\",\n      \"source_line\": 735,\n      \"title\": \"STAGE4D_ADAPTER_SOURCE_AUDIT_ABORTED_BEFORE_FINAL_MARKERS_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L741\",\n      \"kind\": \"heading\",\n      \"source_line\": 741,\n      \"title\": \"STAGE4D_LOCAL_EXPANSION_OF_REMOTE_Q_UNDER_NOUNSET_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L747\",\n      \"kind\": \"heading\",\n      \"source_line\": 747,\n      \"title\": \"STAGE4D_REMOTE_PYTHON311_ADAPTER_SELFTEST_RC1_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L752\",\n      \"kind\": \"heading\",\n      \"source_line\": 752,\n      \"title\": \"STAGE4D_PYTHON311_FSTRING_COMPATIBILITY_AND_REPRO_VALIDATOR_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L759\",\n      \"kind\": \"heading\",\n      \"source_line\": 759,\n      \"title\": \"STAGE4E_DESIGN_VALIDATOR_ABORTED_BEFORE_LOCAL_VALIDATION_MARKER_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L765\",\n      \"kind\": \"heading\",\n      \"source_line\": 765,\n      \"title\": \"STAGE4E_VALIDATOR_SCANNED_PYC_AND_OWN_FORBIDDEN_LITERALS_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L772\",\n      \"kind\": \"heading\",\n      \"source_line\": 772,\n      \"title\": \"STAGE4E_V2_VALIDATOR_FAILED_STATIC_COMPILE_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L778\",\n      \"kind\": \"heading\",\n      \"source_line\": 778,\n      \"title\": \"STAGE4E_PIPESTATUS_LOST_AFTER_FIRST_ASSIGNMENT_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L784\",\n      \"kind\": \"heading\",\n      \"source_line\": 784,\n      \"title\": \"STAGE4F_VALIDATOR_EXPECTED_HEALTH_REFRESH_FROM_NONWRITING_BACKUP_SCRIPT_20260714\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L791\",\n      \"kind\": \"heading\",\n      \"source_line\": 791,\n      \"title\": \"STRICT_RULE_20260714_CLOSE_TAILS_IMMEDIATELY\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L798\",\n      \"kind\": \"heading\",\n      \"source_line\": 798,\n      \"title\": \"ERROR_20260714_DEPENDENCY_FACT_QUERY_GLOBAL_LIMIT\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L806\",\n      \"kind\": \"heading\",\n      \"source_line\": 806,\n      \"title\": \"ERROR_20260714_COLLECTOR_PATCH_REQUIREMENT_PATTERN_MISMATCH\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L814\",\n      \"kind\": \"heading\",\n      \"source_line\": 814,\n      \"title\": \"ERROR_20260714_PRIVILEGED_FILE_REDIRECTION_BEFORE_SUDO\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L822\",\n      \"kind\": \"heading\",\n      \"source_line\": 822,\n      \"title\": \"ERROR_20260714_COLLECTOR_RUN_COLUMN_ASSUMPTION\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L830\",\n      \"kind\": \"heading\",\n      \"source_line\": 830,\n      \"title\": \"ERROR_20260714_REMOTE_STDIN_ARGUMENT_SHIFT\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L838\",\n      \"kind\": \"heading\",\n      \"source_line\": 838,\n      \"title\": \"ERROR_20260714_OVERSIZED_COMMAND_PARSE_FAILURE\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L847\",\n      \"kind\": \"heading\",\n      \"source_line\": 847,\n      \"title\": \"ERROR_20260714_HOMELAB_ADMIN_HELP_RC_ASSUMPTION\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L856\",\n      \"kind\": \"heading\",\n      \"source_line\": 856,\n      \"title\": \"ERROR_20260715_EXPECTED_NEGATIVE_RC_TRAP_CLASSIFICATION\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L864\",\n      \"kind\": \"heading\",\n      \"source_line\": 864,\n      \"title\": \"ERROR_20260715_DUPLICATE_MACHINE_MARKER_COUNT\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L875\",\n      \"kind\": \"heading\",\n      \"source_line\": 875,\n      \"title\": \"ERROR_20260715_OUTER_WRAPPER_SHELL_SYNTAX\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L888\",\n      \"kind\": \"heading\",\n      \"source_line\": 888,\n      \"title\": \"ERROR_20260715_INLINE_REMOTE_SHELL_IN_APPLY_PHASE\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L902\",\n      \"kind\": \"heading\",\n      \"source_line\": 902,\n      \"title\": \"ERROR_20260715_OPTIONAL_RUN_DIRECTORY_FIND_UNDER_PIPEFAIL\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L912\",\n      \"kind\": \"heading\",\n      \"source_line\": 912,\n      \"title\": \"ERROR_20260715_PG_CONSTRAINT_CONTYPE_CHAR_CONCAT\",\n      \"status\": \"known\"\n    },\n    {\n      \"id\": \"ERR-H-L925\",\n      \"kind\": \"heading\",\n      \"source_line\": 925,\n      \"title\": \"ERROR_20260715_LIVE_COLLECTOR_VERIFIER_WRONG_PATH\",\n      \"status\": \"known\"\n    }\n  ],\n  \"rules\": [\n    {\n      \"id\": \"CHECK-1\",\n      \"source_line\": 12,\n      \"text\": \"команда не должна быть большим paste.\"\n    },\n    {\n      \"id\": \"CHECK-2\",\n      \"source_line\": 13,\n      \"text\": \"команда не должна содержать большой here-doc.\"\n    },\n    {\n      \"id\": \"CHECK-3\",\n      \"source_line\": 14,\n      \"text\": \"команда не должна смешивать Markdown, backticks и shell-логику.\"\n    },\n    {\n      \"id\": \"CHECK-4\",\n      \"source_line\": 15,\n      \"text\": \"команда не должна иметь вложенный ssh с несколькими уровнями кавычек.\"\n    },\n    {\n      \"id\": \"CHECK-5\",\n      \"source_line\": 16,\n      \"text\": \"команда не должна печатать секреты.\"\n    },\n    {\n      \"id\": \"CHECK-6\",\n      \"source_line\": 17,\n      \"text\": \"если создаётся файл, сначала маленький безопасный шаг, потом проверка.\"\n    },\n    {\n      \"id\": \"CHECK-7\",\n      \"source_line\": 18,\n      \"text\": \"если команда длиннее 8 строк, её нельзя давать в интерактивный shell.\"\n    },\n    {\n      \"id\": \"CHECK-8\",\n      \"source_line\": 19,\n      \"text\": \"для edge-vm использовать debian@[PRIVATE_IP] и sudo.\"\n    },\n    {\n      \"id\": \"CHECK-9\",\n      \"source_line\": 20,\n      \"text\": \"для forum-prod использовать pve02 и ключ [SENSITIVE_PATH]\"\n    },\n    {\n      \"id\": \"CHECK-10\",\n      \"source_line\": 21,\n      \"text\": \"Corosync не трогать без отдельного плана и rollback.\"\n    }\n  ]\n}\n"
}
