14 KiB
SPEC-REVIEW-668-r2
Issue: #668 — «EN user guide отстаёт от RU» (перевод/синхронизация docs/USER-GUIDE.md с docs/USER-GUIDE.ru.md, выделено из #667 п.8)
Этап: spec (S4-spec-review) · трек: полный (метки P2, docs, S4-spec-review; ни small, ни trivial не выставлены)
Заход: r2 · блокирующих циклов израсходовано 1 из 4
Материал: тело issue #668, раздел ## ТЗ (получено gh issue view 668 --json body на момент этого захода). Ветка issue/668-user-guide, HEAD 0d15200b39e1ed40c755540cdb442f9f05485044 — этот коммит добавляет только docs/reviews/SPEC-REVIEW-668-r1.md; git diff origin/dev...HEAD --stat кроме этого файла ничего не показывает, спек-стадия кода не касалась.
Роль: ревьюер ТЗ, независимая сессия, без контекста автора.
Скоуп проверки
Дельта раунда — правка тела issue после жёлтого вердикта r1: комментарий автора
от 2026-09-27T08:44:07Z («Замечание r1 исправлено: AC4 теперь явно разделяет
два доказательства, а план автотестов требует извлекать и сравнивать строки
версии EN/RU. Заодно зафиксировано, что реализация расширяет уже существующий
структурный гейт check-docs, а не создаёт независимый дублирующий контракт»)
описывает точечную правку одной строки таблицы AC и одного пункта «Плана
автотестов». Дельта локальна: ни скоуп, ни остальные AC, ни контракт
документации не тронуты. По §2.10 разбор в r2 сокращён до дельты — единственной
находки r1 (Medium на AC4) — и повторной проверки того, что она не породила
новых противоречий; остальное наследуется из r1 без повторного прохода (раздел
ниже).
Как проверялось
- Получено текущее тело issue #668 (
gh issue view 668 --json body) и полный список комментариев (gh issue view 668 --json comments), включая вердикт пайплайна r1 и последующий комментарий автора о правке. - Сверена таблица AC построчно с r1: изменилась только строка AC4; строки
AC1–AC3, AC5–AC7 побайтово совпадают с цитатами в
docs/reviews/SPEC-REVIEW-668-r1.md. - Раздел «План автотестов» сверен построчно: добавлен один пункт («Явно
тестировать извлечение строки
Current for/Актуально дляи красный результат при разных версиях»); остальные четыре пункта не изменились. - Посчитан
sha256нормализованного тела issue текущего раунда (scripts/review-doc-guard.mjs→issueBodyDigest, нормализация CRLF/ хвостовых пробелов — та же функция, что использует конвейер):aeef91d8b412d0d7dddc4e4c9179746e50a716ed6a80a3078c645cdd925fd5b2. Он не совпадает с якорем r1 (6f92c0a35cb43dd19a414618b4d1f9c48394a8107b95c61bacbe7fbf03d8bef9— 64-символьный хеш, свёрнутая проверка подтверждает несовпадение), что подтверждает: тело действительно правилось после r1, а не переиздано без изменений. - Проверено, что ветка задачи не продвинулась дальше документа предыдущего
ревью:
git diff origin/dev...origin/issue/668-user-guide --statпоказывает только добавлениеdocs/reviews/SPEC-REVIEW-668-r1.md. DoR не нарушено преждевременной реализацией; спек-ревью и дальше имеет дело только с текстом issue. - Обязательные разделы §7.1 и их порядок повторно не пересчитывались построчно (это не тронуто дельтой) — унаследовано из r1 с явной пометкой ниже.
Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| Medium — AC4 объединяла под одним методом два разных утверждения («unit» отсылало к тесту, которого не было в плане автотестов) | Таблица AC переписана: AC4 теперь явно разносит методы — unit: структурный гейт извлекает и сравнивает отметки версии для равенства версии, проверка diff подтверждает неизменность RU/продукта для второго утверждения. План автотестов дополнен пунктом, прямо называющим тест на извлечение строк Current for / Актуально для и красный результат при их несовпадении — то есть тест, на который теперь ссылается «unit» в AC4, в документе назван и специфицирован (что именно он читает и когда краснеет). |
Тело issue #668, таблица ### Acceptance criteria, строка AC4; раздел ### План автотестов, четвёртый пункт («Явно тестировать извлечение строки…»). Подтверждено также прямым комментарием автора 2026-09-27T08:44:07Z. |
Low (снято ревьюером r1, для протокола) — ТЗ не говорит, заменяет ли новый AC6-тест частичный docs-section-гейт check-docs.mjs:172-185 или сосуществует с ним |
Не требовало правки ТЗ (снято как заметка для код-ревью, не блокировало). Комментарий автора добавляет: «реализация расширяет уже существующий структурный гейт check-docs, а не создаёт независимый дублирующий контракт» — технический выбор объявлен, само ТЗ по-прежнему оставляет точную раскладку реализации на усмотрение автора, что и было приемлемо в r1. |
Комментарий автора 2026-09-27T08:44:07Z; формулировка Scope в теле issue («Точное выделение helper-модуля остаётся техническим решением реализации») не менялась. |
Обе строки таблицы предыдущего раунда закрыты текстом, а не заявлением: правка видна в самом теле issue, а не только декларируется в комментарии.
Унаследовано из r1
Без повторной проверки в r2, поскольку дельта их не касается — материал:
docs/reviews/SPEC-REVIEW-668-r1.md, тело issue на момент r1 (sha256
6f92c0a35cb43dd19a414618b4d1f9c48394a8107b95c61bacbe7fbf03d8bef9), ветка
issue/668-user-guide (дерево материала 1ccf52c4df9d7dfc33d3e5cbb63baf142eab53a2):
- Все обязательные разделы §7.1 присутствуют и идут в правильном порядке (таблица «Обязательные разделы» в r1).
- Численная база ТЗ (57 vs 98 заголовков, 23 нумерованных раздела + памятка
безопасности, список отсутствующих тем) сверена с реальным
devпострочно и подтверждена, догадок, выданных за факт, не найдено. - AC1 сверен с обоими файлами руководства дословно; AC6 — защитный AC, метод доказательства и «чем краснеет» названы уже на этапе ТЗ (негативная проба на временных фикстурах).
- Contract-раздел закрывает риски ссылок, i18n-сверки и протокол расхождения RU с продуктом до того, как они стали открытыми вопросами.
- Не-scope корректно исключает переписывание RU, побуквенный перевод, новые скриншоты/changelog.
User-Visible: noсоответствует правилу AGENTS.md для документационного изменения, не прячет пользовательское изменение.- Ветка создана от актуального
dev; на момент r1 код/документ не были тронуты — DoR не нарушалось. В r2 это утверждение проверено заново (см. «Как проверялось», п.5) и подтверждено на новом SHA0d15200b. - Открытых продуктовых вопросов к владельцу в ТЗ нет; две технические развилки («принято предположительно») по-прежнему корректно помечены и не эскалированы искусственно.
Что проверено и корректно (в этом раунде)
- AC4 больше не смешивает под одной пометкой «unit» два разных утверждения:
теперь у равенства версии есть названный тест (извлечение и сравнение строк
Current for/Актуально для, красный результат при расхождении версий), а у «RU/продукт не менялись» — метод «проверка diff», что для утверждения такого рода (по сути повторение Non-scope) остаётся приемлемым способом доказательства, не требующим отдельного автотеста. - Правка не задела ни одну другую строку ТЗ: Scope, Non-scope, Contract, модель данных/i18n, AC1–AC3 и AC5–AC7, риски, откат и release-артефакты текстуально идентичны версии r1 — новых противоречий делта не вносит.
- Дельта учтена и в «Плане автотестов» (не только в таблице AC): формулировка теста на строку версии присутствует именно там, где ревью r1 требовало её найти, а не только в самой AC-таблице — расхождения между двумя разделами того же ТЗ, которое было сутью находки r1, больше нет.
- Материал не продвинулся дальше документа r1 в код — спек-ревью по-прежнему имеет дело только с текстом, преждевременной реализации нет.
Чего не проверял
- Не пересчитывал заново заголовки RU/EN (
grep -n '^#') и не перечитывал весь текст ТЗ построчно за пределами делты — дельта локальна и это сделано в r1; см. раздел «Унаследовано из r1». - Не запускал
npm test/npx tsc --noEmit/npm run build/npm run gate:small/node scripts/check-docs.mjs— на этапе ТЗ кода по-прежнему нет (ветка несёт только предыдущий документ ревью), эти гейты неприменимы к спек-ревью. - Не оценивал качество будущего перевода/содержания разделов — их всё ещё не существует; AC2/AC3 остаются предметом код-ревью по договорённости ТЗ.
- Не проверял
scripts/check-docs.mjs:172-185повторно (номера строк, факт частичного гейта) — это не менялось дельтой и было подтверждено в r1.
Вердикт
Вердикт: зелёный · заход r2 · блокирующих циклов 1/4 · High: 0 · Medium: 0 → в задаче
Материал раунда
- Ветка:
issue/668-user-guide, коммит0d15200b39e1— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
cc0afe245a53befaf9c5e823dde9409f2f9a1331git log --all --format='%H %T' | grep cc0afe245a53 - Тело issue:
aeef91d8b412d0d7dddc4e4c9179746e50a716ed6a80a3078c645cdd925fd5b2 - Вердикт конвейера:
green· High 0