ревью: idiom упразднён, его класс переселён в ops и architecture

- эксперимент против поведения stdlib, драйвера и PRAGMA — обязательный
  вопрос 8 у ops, с прецедентом «-1 >= -1» и оговоркой про data_version
- «не изобретаем ли то, что уже есть в библиотеке» — вопрос 1 у architecture,
  с перечнем конструкций stdlib
- потеряна поимённая сверка с Effective Go и стайлгайдами: класс обратимый,
  но теперь не покрыт вовсе — записано в журнал ревью
- профили: quick 4, standard 6, deep 7–8, design 3
This commit is contained in:
av
2026-08-02 20:52:45 +03:00
parent 33cf1b7bae
commit 9ad1deeb01
6 changed files with 65 additions and 135 deletions
@@ -1,6 +1,6 @@
---
name: healthlog-review-pipeline
description: Конвейер ревью изменений healthlog — детерминированный гейт, сверка с дельта-спеками OpenSpec в обе стороны, враждебные постановки и эксплуатационный постмортем, generative-проходы (stdlib grounding, независимая реализация по триггеру), архитектура и обязательный триаж. Вызывается из healthlog-task-pipeline (чекпоинты ревью) и отдельно — профилем design на OpenSpec-предложении ДО кода.
description: Конвейер ревью изменений healthlog — детерминированный гейт, сверка с дельта-спеками OpenSpec в обе стороны, враждебные постановки и эксплуатационный постмортем, независимая реализация по триггеру, архитектура и обязательный триаж. Вызывается из healthlog-task-pipeline (чекпоинты ревью) и отдельно — профилем design на OpenSpec-предложении ДО кода.
---
# Конвейер ревью (healthlog)
@@ -57,16 +57,17 @@ description: Конвейер ревью изменений healthlog — дет
| Модель | Проходы | Почему |
|---|---|---|
| `sonnet` | gate, code, ops | вход структурный, критерий записан заранее |
| `opus` | specs, idiom, adversary, rubric, reimpl | суждение без опоры на инструмент |
| `opus` | specs, adversary, rubric, reimpl | суждение без опоры на инструмент |
| `fable` | triage, architecture | ошибка распространяется дальше самой находки |
**Fable — только двум проходам, и это калибровка, а не осторожность.** Первый
прогон конвейера (ревью дизайна `razbor-metrik-v-obekty`) показал, что самые
ценные находки дали **opus**-проходы: `idiom` поставил три эксперимента
ценные находки дали **opus**-проходы: `specs` дал 13 находок с оракулами, а
упразднённый впоследствии `idiom` — три эксперимента против драйвера
(`SQLITE_BUSY_SNAPSHOT` 517 против `_txlock=immediate`, куча `map[string]any`
против `json.RawMessage`, потери `json.Marshal` без `UseNumber`), `specs` дал
13 находок с оракулами. Разницы в пользу более дорогой модели на опиниативных
проходах не обнаружилось — значит платить за неё там не за что.
против `json.RawMessage`, потери `json.Marshal` без `UseNumber`). Разницы в
пользу более дорогой модели на опиниативных проходах не обнаружилось — значит
платить за неё там не за что.
Двое, у кого fable остаётся, отобраны по одному признаку: **их ошибка
распространяется дальше собственной находки.**
@@ -96,7 +97,7 @@ description: Конвейер ревью изменений healthlog — дет
дефектом. Ошибка триажа дороже ошибки любого отдельного прохода.
Экономия при этом достигается не понижением модели, а **непуском прохода**:
`quick` — четыре прохода, `deep`восемь. Правило выбора профиля ниже и есть
`quick` — четыре прохода, `deep` — семь. Правило выбора профиля ниже и есть
главный рычаг стоимости.
## Профили
@@ -105,10 +106,10 @@ description: Конвейер ревью изменений healthlog — дет
|---|---|---|---|
| `quick` | багфикс, локальная правка, доки | 0, 1, 5 | 4 |
| `standard` | новая функциональность в существующем пакете | 0, 1, 2, 5 | 6 |
| `deep` | новый пакет, изменение публичного контракта, миграция БД, трогает инварианты выше | 0, 1, 2, 3, 4, 5 | 89 |
| `design` | **до кода**, на OpenSpec-предложении | specs + rubric + idiom + architecture (см. ниже) | 4 |
| `deep` | новый пакет, изменение публичного контракта, миграция БД, трогает инварианты выше | 0, 1, 2, 3, 4, 5 | 78 |
| `design` | **до кода**, на OpenSpec-предложении | specs + rubric + architecture (см. ниже) | 3 |
**Состав сверяется по этой таблице до коммита.** Реестр из шести-девяти
**Состав сверяется по этой таблице до коммита.** Реестр из трёх-восьми
пунктов проверяется взглядом — и это единственная защита от промаха, который
уже случился: пропуск прохода **не отличим от прохода без находок** (гейт
зелёный, спеки сошлись, отчёт выглядит полным), а заметить его мог бы только
@@ -195,15 +196,8 @@ read-modify-write под конкурентными доставками, а т
**хватит ли сигналов владельцу, когда поток оборвётся ночью**: не «есть ли
лог», а увидит ли человек факт, не залезая в SQLite.
## Стадия 3 — Tacit layer (generative; `deep`)
## Стадия 3 — Independent reimplementation (`deep`, по триггеру)
- `healthlog-review-idiom` — заземляет «идиоматичность» на stdlib и поимённые
положения гайдов. Зарабатывает он не цитатами, а **экспериментами против
поведения stdlib и драйвера**, и это его настоящая форма: три эксперимента на
дизайне `razbor-metrik-v-obekty` (`SQLITE_BUSY_SNAPSHOT` против
`_txlock=immediate`, куча `map[string]any` против `json.RawMessage`, потери
`json.Marshal` без `UseNumber`) и находка на чекпойнте WAL, где `-1 >= -1`
читалось как «журнал разобран целиком» — воспроизведено, 1492 тика из 5502.
- `healthlog-review-reimpl` — пишет свою реализацию, не открывая существующую,
затем диффит по решениям. **Запускается по триггеру, а не всегда:** изменение
вводит новое правило слияния, идентичности или разбора. Это самый дорогой
@@ -253,11 +247,11 @@ task review:context > tmp/review-context.md
1. `healthlog-review-specs` в режиме «дизайн ДО кода»;
2. `healthlog-review-rubric`, фаза 1 без фазы 2: рубрика на задуманный узел
становится приёмочными критериями и уезжает в `tasks.md`;
3. `healthlog-review-idiom` по описанию решения (какие конструкции stdlib
закрывают задачу; не изобретаем ли то, что уже есть);
4. `healthlog-review-architecture` на предложении: вводит ли change новое
понятие, можно ли выразить существующими, не появляется ли второй способ;
5. вопрос автору дизайна: **«предложи три формы решения и назови компромисс
3. `healthlog-review-architecture` на предложении: вводит ли change новое
понятие, можно ли выразить существующими — **включая конструкции stdlib**, —
не появляется ли второй способ. Вопрос «не изобретаем ли то, что уже есть в
библиотеке» переехал сюда из упразднённого прохода про идиоматичность;
4. вопрос автору дизайна: **«предложи три формы решения и назови компромисс
каждой»** — если ответ показывает, что рассматривалась одна, это находка.
Смысл профиля: архитектурная находка на готовом коде стоит переписывания и
@@ -115,8 +115,7 @@ healthlog — хранилище данных о здоровье, у котор
Первый чекпоинт ревью-процесса. Вызови Skill **`healthlog-review-pipeline`** с профилем
`design` и ссылкой на change `<id>`. Он запустит `healthlog-review-specs` (режим
«дизайн/спеки ДО кода»), `healthlog-review-rubric` (фаза 1: приёмочные критерии
для задуманного узла), `healthlog-review-idiom` и `healthlog-review-architecture`
по предложению.
для задуманного узла) и `healthlog-review-architecture` по предложению.
Смысл профиля: архитектурная находка на готовом коде стоит переписывания и
потому игнорируется — та же находка здесь стоит абзаца обсуждения. Рубрику из
@@ -169,7 +168,7 @@ healthlog — хранилище данных о здоровье, у котор
отчёт выглядит полным. Единственный, кто мог бы заметить пропуск, — триаж, а он
заполняется тем, что ему подали. Отчёт обязан называть запущенные проходы
**поимённо и с исходом**; непущенный идёт строкой «не запускался» в границы
покрытия. Реестр короткий (69 проходов) — сверка стоит одного взгляда, а
покрытия. Реестр короткий (48 проходов) — сверка стоит одного взгляда, а
молчащий пропуск уже стоил семи находок и отдельной задачи на их дозакрытие.
Отработай так же, как шаг 5: помеченное `инлайн` чини сам и не логируй,