Процесс: независимое ревью линии перед стабильным релизом, не блокирующее выпуск (#638)

PROCESS.md §11.5: перед стабильным релизом — одно ревью поверхностей всей
линии бет «с нуля», без ТЗ и документов раундов, по SCOPE и USER-GUIDE.

- scripts/release-review.mjs: вход линии — прошлый стабильный тег, issue по
  трейлерам в схеме RELEASE-MEMBERSHIP.json, продуктовые файлы; бриф промпта.
- .github/workflows/release-review.yml (workflow_dispatch, исполняется с dev):
  prepare → model_review (модель без прав на запись, github_token #556) →
  publish (docs/reviews/RELEASE-REVIEW-vX.Y.Z.md в dev токеном процесса,
  индекс тем же коммитом, review-doc-guard). Повтор на тот же тег не тратит
  модель, если документ уже в dev.
- release.yml: job independent-review ставит ревью в очередь сразу после
  candidate, continue-on-error; ни один job выпуска от него не зависит
  (решение владельца 2026-09-25).
- REVIEWER.md, AGENTS.md, DEVELOPMENT.md; тесты и четыре мутанта.

Issue: #638
User-Visible: no
This commit is contained in:
Claude
2026-09-25 12:53:14 +03:00
parent d35a52a3f1
commit 0ba81a994b
10 changed files with 743 additions and 2 deletions
+44
View File
@@ -1280,6 +1280,50 @@ Golden, браузерные смоки, performance и полный HA-харн
Это исключение из правила «код-ревью не пропускается никогда» (§5, §7.1) —
единственное, и относится только к окну между `S8-merged` и выпуском.
### 11.5 Независимое ревью линии перед стабильным релизом
Решение владельца 2026-09-25, issue #638.
**Зачем.** Инкрементальное ревью судит дифф задачи против её ТЗ, а не
поверхность против пользователя. Пять раундов по эпику #591 не нашли того, что
нашли четыре независимых ревью перед аудитом 22.09: невидимый после крестика HA
диалог (#607), кламп по символу (#608), маршруты робота при импорте (#611),
детерминированный отказ релизного гейта (#619). Ни ветка `ha-dialog`, ни
посимвольный ввод не входили ни в один AC.
**Шаг.** Перед каждым стабильным релизом — одно ревью поверхностей, изменённых
всей линией бет, «с нуля»:
- **вход** — issue линии, доказанные трейлерами `Issue: #NN` в диапазоне
«прошлый стабильный тег..кандидат» (тот же построитель и та же схема, что
`RELEASE-MEMBERSHIP.json` беты, #547; метка S8 доказательством не является),
и изменённые продуктовые файлы. Собирает их
`scripts/release-review.mjs prepare`;
- **без ТЗ и без документов раундов**: основа суждения — `docs/SCOPE.md` и
`docs/USER-GUIDE.ru.md`. Проверка исполнением: бандл, стенд и смоки, пиннутая
фикстура `ha-dialog` (#505) там, где есть диалоги, посимвольный ввод,
настоящие Escape и крестик; для каждой поверхности — обычный сценарий и самый
рискованный соседний (§2.6, шесть классов риска);
- **выход** — `docs/reviews/RELEASE-REVIEW-vX.Y.Z.md` в `dev`, находки
High/Medium/Low с воспроизведением.
**Исполнитель** — модель в CI, `.github/workflows/release-review.yml`: три job
(вход, модель, публикация), модель без единого права на запись, документ, его
машинный блок, индекс и коммит — детерминированный шаг. Независимость
обеспечена построением: сессия свежая, ТЗ и раунды ей не даются.
**Выпуск не блокирует.** `release.yml` ставит ревью в очередь job
`independent-review` сразу после закрепления SHA кандидата — параллельно
гейтам; ни один job выпуска от него не зависит, его отказ — предупреждение.
Документ — рекомендация: владелец берёт находки в работу (issue в очередь
следующей беты) либо оставляет без действий. Автоматически находки в issue
не превращаются.
Повторный запуск на тот же тег модель не тратит, если документ уже в `dev`
(`force=true` — переснять). Ручной запуск:
`gh workflow run release-review.yml --ref dev -f tag=vX.Y.Z [-f candidate=<sha>]`.
Беты шаг пропускают. Первый прогон — линия v1.78.0.
---
## 12. Запрещено