feat(skills): линия уместности начата shape-проходом до чтения диффа

- Зачем:
  - на прогоне #158 (clickstream v2) три линии ревью дали ноль находок
    на реальной ошибке формы: агрегация ключевого зерна в Python,
    57 567 ключей через границу ClickHouse -> Airflow. Линза из одних
    запахов читает исполнение и не видит решений, а ревью от диффа
    принимает раскладку исполнителя как оглавление.
- Что:
  - в line-taste.md добавлен блок Shape: набросок ожидаемой формы из
    одной постановки до открытия диффа, список недиктованных решений,
    вердикт каждому; набросок и список предъявляются как checks run
    даже при нуле находок.
  - правило оценки распространено на shape-находки; указатели в
    prompt-templates.md называют линзу формой и вкусом.
  - в lessons.md записана эмпирика прогона #158.
- Проверка:
  - вычитка diff линзой writing-for-agents; боевая — следующий прогон
    конвейера: shape-артефакты видны в отчете линии уместности.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Fable 5 committed 2026-08-27 15:47:41 -04:00
1 parent 586f02c30b
commit 3780ae0293
3 files changed
+61 -10

No files matched your search

@@ -389,3 +389,34 @@ codex-cli 0.146.0 и была неверна. Развели две провер
- Цифры: два захода контрольных прогонов, промпт односложный («выполни
`pwd`»), `model_reasoning_effort="low"`; отчёт `-o` — 46 байт в каждом,
лог через канал — семь строк.
## 2026-08-27: три линии по нулям на ошибке формы (clickstream v2, #158)
Прогон DQ-контура: реализация Codex, линия уместности Fable, две слепые
резервные линии. Все три дали ноль находок; ошибку увидел пользователь
одним вопросом «почему DQ на Python, а не SQL».
- **Находка жила выше диффа.** Агрегация ключевого зерна шла в Python:
57 567 ключей сессий ехали из ClickHouse в процесс Airflow ради
суммирования. Код опрятный, ни один из двенадцати запахов не задет —
линза, читающая код, пройти мимо была обязана.
- **Промах не был бесплатным.** Та же граница была причиной саги с
памятью: OOM планировщика в 640 МиБ, восемь ресурсных ручек в трех
дагах. Ревью объяснило сагу теснотой коробки — гипотезой из
постановки — и не спросило, почему задача, пишущая три десятка строк
сводки, ест сотни мегабайт.
- **Механизм промаха — порядок чтения.** Ревью от диффа принимает
раскладку исполнителя как оглавление; внутри чужой рамки видно кривое
имя, но не то, что раскладка не та. Фронтирный исполнитель пишет
чистый код вокруг неверных решений: ошибки живут в форме, не в
отделке — то же наблюдение, что в прогоне #18.
- **Лечение — механизм, не правило в прозе** (класс отказа записан
2026-07-31): в `line-taste.md` добавлен shape-проход шагами до чтения
диффа — набросок ожидаемой формы из одной постановки, список
недиктованных решений, вердикт каждому. Артефакты предъявляются как
checks run даже при нуле находок — слот уже был в
`review-boilerplate.md`. Запрет «не читай дифф первым» не
произносится: его исполняет порядок шагов.
- Проверить следующим прогоном: ловит ли shape-проход ошибку класса
#158 и не сжигает ли ревьюер бюджет до диффа (граница «a few lines
suffice»).