Files
houseplan-card/docs/LESSONS.md
Claudeandclaude[bot] a50cbd8f91 docs(reviews): индекс документов ревью, уроки, пересборка индекса конвейером (#635)
scripts/reviews-index.mjs собирает docs/reviews/INDEX.md: одна строка на
документ — issue, этап, раунд, вердикт (явная строка, раздел «Вердикт»,
свободная форма хвоста; 936 из 986 распознаны), High/Medium по строке вердикта
или заголовкам находок, до шести заголовков находок. Индекс детерминирован,
не индексирует сам себя, перечисляет файлы вне схемы имён; `--check` — гейт
свежести. process.yml публикует INDEX.md тем же коммитом, что документ ревью.

docs/LESSONS.md — датированные уроки со ссылками на источники (12 записей из
аудитов и разборов недели). PROCESS.md §2.10 — где искать решения.

Тесты: разбор имён, вердиктов, счётчиков, находок; фикстурный каталог;
живой каталог (100 % покрытие, >90 % вердиктов); контракт шага конвейера.
Мутанты reviews-index-skips-self-check, reviews-index-verdict-substring.

Issue: #635
User-Visible: no
2026-09-23 13:52:23 +00:00

3.7 KiB

Уроки

Датированные выводы, пережившие свою задачу (#635). Каждый — одной мыслью, со ссылкой на источник: документ ревью, issue, аудит. Полный след решений — в docs/reviews/INDEX.md и комментариях issue; здесь только то, что меняет поведение на следующей задаче. Конспекты ролей (#634) и промпт ревьюера ссылаются сюда.

Дата Урок Источник
2026-08-23 Одно число, видимое пользователю дважды (превью/факт, подпись/запись), обязано иметь один источник. аудит 23.08, #233/#234, тест single-source-numbers
2026-09-06 Число смоков/тестов не живёт в тексте: считается командой (npm run inventory). #472, PROCESS.md
2026-09-09 Мутанты по диффу — на кандидате, не на каждом push: 48 из 56 часов job-минут за два дня ушли в отменённые прогоны. #510
2026-09-13 Ненулевой exit гарда ≠ «мутант пойман»: setup-failure, invalid-mutation и survived различаются; засчитывается только assertion-killed. #558, #568
2026-09-18 Ревью на не принятых эталонах — потерянный цикл: golden:verify ревьюер гоняет лично, эталоны принимаются до S7. CODE-REVIEW-598-r1 H1
2026-09-20 Стенд ≠ Home Assistant: нативный <dialog> и ha-dialog — разные ветки; свидетель для реального HA — фикстура #505, а не golden стенда. аудит 22.09 A/H1, #607, #609
2026-09-20 Контролируемое поле без live() показывает не то число, что в состоянии; клампить на коммите (change), не на каждом символе. аудит 22.09 A/H2, #608
2026-09-21 Лог без итоговой строки — обрыв, а не «ok»: отчёт судит по маркеру завершения и исходу шага, не по отсутствию FAIL. #604
2026-09-21 На main после fast-forward merge-base(dev, HEAD) = HEAD: пустой дифф пропускает тяжёлые job, а гейт, судящий только самый свежий прогон, объявляет релиз красным. аудит 22.09 D, #619
2026-09-22 Обвязка процесса тоже рождает P1: дефекты #595/#596 нашлись в бою, а не тестами обвязки — тесты по тексту YAML и регэкспам исходников не заменяют фикстурного прогона. аудит 22.09
2026-09-23 Смена события коммита в общем контроле (input → change) краснит смоки, которые набор контролов не называют: связь символ → смок должна быть явной в smoke-links, иначе краснота доживает до ночи. #639
2026-09-23 Ожидание другого workflow внутри job — занятый раннер и потолок бюджета стадии; ждать должно событие (workflow_run) с маркером ожидания, а будить без маркера нельзя — это второй вызов модели. #636