{
  "schema": 1,
  "product": "RAGRAF",
  "version": "0.4.0",
  "declared_at": "2026-10-27",
  "stage": "И30",
  "main": "README.md",
  "states": "docs/03_implementation/translations.json",
  "note": "Единственное место, где объявлено, ЧТО внутри блока команд считается командой, что комментарием и с какой строгостью текст команды требуется от перевода. До этапа И30 блоки команд перевода проверялись только СЧЁТОМ: функция `section_profile` в `tools/check_translations.py` (строка 193) считает блоки команд и строки таблиц на каждый заголовок `##`, поэтому перевод, где в команде `ragraf -p <config> query search \"reindex latency\"` строка запроса переведена, а подстановка `-p <config>` заменена на `-p <конфиг>`, проходил зелёным: число блоков и число строк совпало. Замер 27.10.2026 до правки: 11 блоков в каждом из шести файлов, 70 строк внутри, из них 13 строк-комментариев и 8 пустых, то есть 49 командных строк — и в них 15 расхождений в трёх переводах (русский 13, немецкий 1, испанский 1, хинди и китайский 0). Расхождения приведены к допуску правкой ТЕКСТА: подстановка в команде не переводится (`-p <конфиг>` → `-p <config>` в русском), переведённый аргумент поискового запроса возвращён к исходному тексту в трёх переводах. Допуск по всем языкам равен нулю и снят замером, а не назначен: разрешение «переводить аргумент запроса» было бы широким и спрятало бы подмену команды. Объявление вынесено в данные по той же причине, что состояния переводов (`translations.json`), терминология (`glossary.json`), допуски прозы (`prose.json`) и адреса (`addresses.json`): строгость и перечень языков меняются правкой этого файла, а не правкой проверки. Расширять допуск или вносить исключение можно только решением владельца, названным числом, а не для того, чтобы прогон позеленел.",
  "fence_languages": [
    {
      "name": "powershell",
      "about": "Блок установки и Windows-путей: команды запускаются копированием строки, поэтому подстановка и параметр обязаны совпадать с основным документом символ в символ."
    },
    {
      "name": "bash",
      "about": "Блок платформы без установленного пакета и блок первых шагов: те же требования. Именно здесь стоят подстановки `-p <config>` и аргументы поискового запроса — измеренные расхождения этапа И30."
    },
    {
      "name": "json",
      "about": "Блок подключения MCP-сервера: строки внутри — не команды, а поля примера конфигурации, но проверяются тем же правилом и по той же причине. Ключи и значения примера переводить нельзя: читатель копирует блок целиком в свой файл."
    }
  ],
  "parse_rule": {
    "name": "Строка до хвостового комментария",
    "about": "Строка, начинающаяся с `#` после ведущих пробелов, — КОММЕНТАРИЙ: она переводится свободно и в сравнение не входит. Всякая другая непустая строка — КОМАНДА, но сравнивается только её часть до первого `#`, которому предшествует пробел: хвостовой комментарий (`ragraf -p <config> status   # состояние: ревизия, покрытие`) переводится вместе с остальным текстом и находкой не считается. Пустые строки не сравниваются вовсе: они разделяют примеры, и их число уже сторожит профиль разделов в `tools/check_translations.py`.",
    "continuation": "Строка команды, оканчивающаяся обратным слешем, — продолжение: она склеивается со следующей командной строкой через один пробел и сравнивается как ОДНА команда, а находка называется по номеру первой строки. Иначе перенос `\\` в переводе разъехался бы на две «разные» команды и дал бы две находки на одно место.",
    "boundary": "Правило повторено по виду документов, а не выведено из разметки Markdown: обратные кавычки внутри строки командой не считаются, `#` без пробела перед ним (например `C:\\work\\my#project`) комментарием не считается, заголовок внутри блока не распознаётся. Ошибка правила опасна в одну сторону: ложная находка требует правки текста перевода, пропуск оставляет расхождение незамеченным. Замер 27.10.2026: все 13 строк-комментариев и все хвостовые комментарии шести файлов разобраны этим правилом, ложных находок нет — поэтому правило принято как рабочее."
  },
  "baseline": {
    "date": "2026-10-27",
    "stage": "И30",
    "tool": "tools/check_command_blocks.py",
    "blocks": 11,
    "lines": 70,
    "comments": 13,
    "blank": 8,
    "commands": 49,
    "commands_per_block": [3, 4, 6, 1, 1, 8, 7, 13, 1, 1, 4],
    "languages": ["bash", "json", "powershell"],
    "note": "Объявленный описной перечень основного документа: блок, его строки, разбивка строк на команды, комментарии и пустые. Проверка сверяет с ним ИЗМЕРЕННОЕ: команда, добавленная или пропавшая в README.md, — это решение, которое записывается здесь числом, а не молчаливое изменение замера. Числа сняты 27.10.2026 вызовом инструмента. Черновой замер, сделанный до работы, назвал 57 командных строк вместо 49: он считал командой каждую непустую не-комментарийную строку, но в этот счёт попали восемь ПУСТЫХ строк, разделяющих примеры, — 70 строк блока = 49 команд + 13 комментариев + 8 пустых. Разница названа здесь потому, что от неё зависит вывод «сколько расхождений из скольких»: при знаменателе 57 расхождение в подстановке выглядело как 13 из 57, при измеренном 49 — как 13 из 49, и первое число занижало долю дефекта."
  },
  "languages": {
    "ru": {
      "path": "community/README.ru.md",
      "command_tolerance": 0,
      "exceptions": [],
      "note": "замер 27.10.2026 до правки: 13 расхождений из 49 команд — 13 строк с подстановкой `-p <конфиг>` (в одной из них ещё и переведённый аргумент `query search \"задержка переиндексации\"`); после правки текста расхождений нет"
    },
    "de": {
      "path": "community/README.de.md",
      "command_tolerance": 0,
      "exceptions": [],
      "note": "замер 27.10.2026 до правки: 1 расхождение — переведённый аргумент `query search \"Verzögerung der Neuindizierung\"`; после правки текста расхождений нет"
    },
    "es": {
      "path": "community/README.es.md",
      "command_tolerance": 0,
      "exceptions": [],
      "note": "замер 27.10.2026 до правки: 1 расхождение — переведённый аргумент `query search \"latencia de reindexación\"`; после правки текста расхождений нет"
    },
    "hi": {
      "path": "community/README.hi.md",
      "command_tolerance": 0,
      "exceptions": [],
      "note": "замер 27.10.2026: расхождений нет ни одного — команды и аргументы совпадают с основным документом символ в символ"
    },
    "zh": {
      "path": "community/README.zh.md",
      "command_tolerance": 0,
      "exceptions": [],
      "note": "замер 27.10.2026: расхождений нет ни одного — команды и аргументы совпадают с основным документом символ в символ"
    }
  }
}
