mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 21:01:21 +00:00
Five places still described the pipeline as it was before code that is already in dev: - the S3 hint of the task packet told the author to push the branch, while the spec lives in the issue body (§2.3, #517) and nothing is pushed before S5 (§11.8); - process-gate printed «FAIL п.9 Gates: light» for a trailer nobody writes or reads, while §10.2 item 9 is the unimplemented release:prerelease verdict check. The check is removed; a contract test ties every RULES key to an implemented item of §10.2 and every finding number to a RULES key; - §10.4 item 4 demanded a heredoc in run:, while #723/#730 and their tests demand the opposite: commit messages echo line by line into a file, comment and summary texts come from code; - the ship merge comment, AUTHOR.md, REVIEWER.md and AGENTS.md named only the pre-beta document, though since #727 the night reads ship code first; - the nightly publication committed «docs: ship review for nightly … перед бетой» with the beta step's Issue: #696. It now has its own subject (the document name), body and Issue: #727; the beta message is unchanged. The browser-guard inventory note still said growth above 200 fails mutation-gate --check; since #699 it is a guideline and --check warns. Its counts now match the inventory: 205, lifecycle 90. Issue: #748 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
20 KiB
20 KiB
Конспект для ревьюера
Роли: ревьюер ТЗ и ревьюер кода (§6). Штатный
ревьюер конвейера получает этот файл из промпта .github/workflows/_process.yml;
ручное ревью по просьбе владельца идёт по нему же.
Это выжимка, а не канон. Канон процесса —
PROCESS.md; при расхождении побеждает он, а расхождение — issue с меткойprocess. Конспект правил не добавляет и не меняет: каждый пункт ссылается на раздел канона, где правило записано полностью, с причинами и прецедентами. Ссылки и ключевые формулировки сверяетtest/process-digests.test.mjs.
Позиция ревьюера
- Ревьюер ≠ исполнитель, свежая сессия без контекста реализации. Задача — не согласиться, а найти, где ТЗ не выполнимо или не проверяемо, где код не делает заявленного (§2.4, §2.7, §6).
- Ревьюер не правит ни ТЗ, ни продуктовый код; ревью своей работы запрещено (§6, §12).
- Первый вопрос к задаче — какую работу из
docs/SCOPE.mdона обслуживает; для видимого поведения терминология берётся изdocs/USER-GUIDE.ru.md(§7.1).
Ревью ТЗ
- Артефакт —
docs/reviews/SPEC-REVIEW-<NN>-r<N>.md. Ревью ТЗ проходит только трекask(§2.4). - ТЗ живёт в теле issue, раздел
## ТЗ;docs/specs/— архив до 2026-09-10 (§2.3). - Проверить обязательные разделы, однозначность каждого AC и способ его доказательства; догадка, записанная как факт, — находка (§7.1, §2.5).
- Владельцу задаются только продуктовые вопросы; технический вопрос, вынесенный владельцу, ревьюер снимает и решает по существу. Технический спор автора и ревьюера решается вердиктом, а не владельцем (§7.1).
- Черновик автора ревьюер ТЗ не читает и доводом не считает: судится тело issue (§2.4, §11.8).
Код-ревью
- Артефакт —
docs/reviews/CODE-REVIEW-<tag|NN>-r<N>.md: скоуп, как проверялось (таблица гейтов с результатами), находки High/Medium/Low с воспроизведением, что проверено и корректно, чего не проверял (§2.7). - Ревьюер отвечает за полноту доказательств AC, а не заменяет их исполнение. Каждый AC либо доказан автотестом, и ревьюер убедился, что тест умеет падать, либо разобран с записью «проверено чтением, не исполнением». Применимые классы риска §2.6 сверяются отдельно (§2.7, §2.6).
- Защитный AC доказывается таблицей «чем краснеет»: AC · чем доказан · чем краснеет — мутант в реестре или отрицательный случай в самом тесте. Пустой третий столбец — находка Medium, а не примечание. «Тест умеет падать» без названной мутации доказательством не является (§2.7).
- Вердикт привязан к SHA (#312): числа и факты сверяются с
git rev-parse HEADперед итогом; более новый коммит, которого нет в материале, — находка, а не повод его подтянуть (§2.7, §10.4). - Контракты по монолиту — исполнением, не regex по тексту: список тестов, читающих монолит как текст, заморожен, и новое имя в нём — находка ревью, а не запись в список (§2.7).
- Трейлеры
Issue: #NNиUser-Visible: yes|noна каждом коммите класса A и B; приyes— оба changelog в том же коммите (§3 п.10). - Одно число — один источник: ревьюер отвечает на вопрос прямо: какое число в этом диффе видно дважды и один ли у него источник (§8).
Объём гейтов
- Всегда:
typecheck,npm test,npm run build+bundle-policy --verify(копии сверяются только на кандидате, #657). Свежесть скриншотов документации — не гейт задачи: отпечаток обновляет коммит бота наdevперед бетой. Зелёный Validate на SHA материала подтверждает дешёвые гейты (§8). - По диффу и AC: смоки — названные в AC плюс вывод
node scripts/smoke-select.mjs --base <base> --head <head>с решением по каждой строке;golden:verifyпри меткеci:golden;pytest tests_backendпри правке Python; инварианты модели при правке геометрии; performance — если назван в AC. Полные наборы — предрелизный гейт, а не гейт ревью (§8). - Три ответа
smoke-selectразные: прямое совпадение и зарегистрированная связь — прогон; «НЕОПРЕДЕЛЁННОСТЬ» — связь не доказана, и это не разрешение ничего не прогонять; слабая связь — повод посмотреть, а не обязанность прогонять (docs/TESTING.md, §8). - Инварианты модели —
npm run invariants -- --config <экспорт>при правке геометрии или ссылок на неё (#254): задача меняет геометрию, а инварианты в отчёте не названы — это непрогнанный гейт, а не мелочь (§8). - Условие честности сужения: ревьюер обязан перечислить, какие гейты прогнал, какие нет и почему (§8).
- Зелёный
pytest tests_backendбез Home Assistanttest_ha_*.pyне собирает вовсе — их нет ни вpassed, ни вskipped(строкаHA harness NOT collected), и такой прогон про HA ничего не доказывает — это «чего не проверял» (docs/TESTING.md; §8).
Повторный раунд
- Предмет повторного раунда — дельта, а не задача целиком: найти вердикт и
материал предыдущего раунда (блок «Материал раунда»), объявить
git diff <тот SHA>..HEAD(для ТЗ — дифф тела issue или архивного файла ТЗ), по каждой находке показать, чем она закрыта — строкой кода или текста, а не заявлением автора, — заново проверить только AC, которые дельта задевает (§2.10). - Если SHA не резолвится — это не находка, а обычное дело: материал ищется по дереву и блобу. Находка — SHA, мёртвый уже в момент публикации отчёта (§2.10).
- Обязателен раздел «Унаследовано из r<N−1>»: что принято без повторной проверки, с документом и материалом того раунда (§2.10).
- Разбор остаётся полным, если дельта не локальна: ребейз на ушедший вперёд
dev, смена контракта, новая подсистема, объём сопоставим с задачей. Сомнение в локальности — полный разбор с названной причиной. Сокращается объём разбора, а не строгость (§2.10). - Перед разбором подсистемы — её строки в
docs/reviews/INDEX.md(§2.10).
Находки и вердикт
- High блокирует. Medium в скоупе чинится в текущем issue: без High это жёлтый вердикт и повторный цикл. Medium вне скоупа — отдельный issue со ссылкой. Low правится или снимается ревьюером с записью (§3 п.8, §2.7).
- Жёлтый вердикт допустим и при выполненных AC, если изменение не решает заявленный сценарий или ухудшает смежный; продуктовое рассуждение не отменяет AC и не меняет скоуп (§2.7).
- Строка вердикта, первой строкой комментария:
Вердикт: зелёный/жёлтый/красный · заход r<N> · блокирующих циклов K/<лимит> · High: N · Medium: N → в задаче | #… · Документ: docs/reviews/…(«→ #…» — только у Medium вне скоупа) (§7.2). - Вперёд двигает только зелёный вердикт; жёлтый и красный возвращают автору (§7.2).
- Зелёный вердикт цикла не образует; лимит — 4 цикла, на
track:show2; бюджет считается по этапу и один на все треки задачи; вердикт, исчерпавший бюджет, сразу ставитreview-4(§4, §10.4). - Запрещено: Medium-находки, оставленные как TODO в документе ревью; ревью-документы вне репозитория (§12).
Трек show
- Ревью
showсудит корректность и AC: Medium — дефект поведения, который увидит пользователь, или невыполненный AC; бухгалтерия — нет мутанта или записи в реестре, нечувствительный тест на побочный вызов — Low и цикла не открывает (§10.4, §5). - Мутанты в разработке не гоняются ни на каком треке — ревьюер их тоже не применяет; проверяет, что защита названа мутантом в реестре. Отсутствие прогона не находка: поимку проверяет ночь (#709, §2.7).
- Ветка
showс чистым слиянием кdevдо ревью не приводится: материал — ветка как есть, кандидат проверит Validate при слиянии (§10.4). - Промпт несёт риск по изменённым участкам: по каждому классу назови документ
или AC, где поведение уже зафиксировано; не нашёл — вердикт с
route: reclassifyи названным критерием.show, подтверждённый владельцем, конвейер не повышает —blockedи вопрос владельцу, вариант по умолчанию «повысить доask»; наask— сверить, что каждый класс покрыт AC ТЗ (§5). - Поле
routeвердикта (#726): на код-ревьюshow—reclassifyиcriterion(complexity,surfaces,migration,ux-contract,perf-touch,undocumented), если задача не проходит критерий §5; иначе и на прочих этапах и треках —fix.reclassify— только не зелёный вердикт; трек и метки меняет конвейер, не ревьюер (§5, §10.4). - Визуальный риск в пути отрисовки плана без
ci:golden: если задача меняет вид, нуженci:golden; иначе — запись в «чего не проверял» (§5.1).
Пакетное ревью ship
- Задачи
track:shipслиты без ревью модели; их код одной сессией читаетship-review.yml— ночью (SHIP-REVIEW-<база>-dev-<sha12>.md) и перед бетой то, что ночь не прочла (SHIP-REVIEW-<тег>.md): по строке ТЗ каждой задачи и её коммитам (§11.7). - Вопросы к задаче: делает ли код заявленное и только его, не ломает ли соседнее, не вышла ли правка из ship по смыслу (§11.7, §5).
- Строка «Риск по участкам» под задачей — рискованные участки ship, подтверждённого владельцем: конвейер их не повышал, пакетное ревью читает их первыми (§11.7).
- Документ
docs/reviews/SHIP-REVIEW-<тег>.mdпубликует детерминированный шаг; High не пускает бету, Medium и Low решает владелец (§11.7). - Ночной документ
docs/reviews/SHIP-REVIEW-<база>-dev-<sha12>.mdчитает только непокрытые задачи — без документа или изменившиеся после ревью; бета читает только то, что ночь не прочла: гейт беты принимает ночной документ при том же патч-наборе (§11.7).
Независимое ревью линии
- Перед стабильным релизом
release-review.ymlсудит поверхности всей линии бет против пользователя, а не дифф против ТЗ: ТЗ задач и документы раундов не читаются, основа —docs/SCOPE.mdиdocs/USER-GUIDE.ru.md(§11.5). - Проверка исполнением: посимвольный ввод, настоящие Escape и крестик,
фикстура
ha-dialog(#505) для диалогов; по каждой поверхности — обычный сценарий и самый рискованный соседний (§2.6, §11.5). - Документ
docs/reviews/RELEASE-REVIEW-vX.Y.Z.md— рекомендация: выпуск не блокируется, решение по находкам за владельцем; ревьюер ничего не публикует и issue не заводит (§11.5).