Files
jellybit/.claude/skills/review-pipeline/references/migration-2026-07.md
T
avandClaude Opus 4.8 2fb533e0e6 ревью: скилл review-pipeline — стадии, профили, контракт находок, храповик
Конвейер собран по типу проходов, а не по ролям: гейт (детерминированный,
блокирующий) → сверка с дельта-спеками в обе стороны → generative-проходы →
архитектура → враждебные постановки → обязательный триаж. Профили quick /
standard / deep / design с правилом выбора по факту изменения.

Контракт находок: заголовок через последствие, обязательное поле «Последствие»,
critical без оракула или построенного пути не существует, потолок 7 пунктов и
разметка «инлайн | развилка» — отчёт читает оркестратор и молча реализует
прочитанное, поэтому потолок защищает код от незаказанных правок.

Храповик находка → конвенция → правило → удаление из прозы и промптов; журнал
проскочивших дефектов и калибровка инъекцией с вердиктами keep/retune/drop.
Секция границ покрытия обязательна: отчёт без неё потребляет ощущение
проверенности, ничего не гарантируя.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 18:17:52 +03:00

8.6 KiB

Отчёт о переработке конвейера ревью (2026-07-23)

Что было, что стало и на основании чего. Обоснование «почему» — ADR-2026-07-23-review-pipeline-generative.

Было

Отдельного скилла ревью не существовало. Ревью — это два сабагента (jellybit-review-specs, jellybit-review-code), вызываемые из шагов 4 и 7 task-pipeline, плюс дубль в финальной сверке task-batch. Детерминированные проверки жили отдельно и после опиниативных: lefthook срабатывал на коммите, task test/task lint — внутри apply.

Диагностика показала: все проходы applicative, generative нет ни одного; ни один проход не запускает инструменты (обоим это было прямо запрещено); сверка со спекой односторонняя; архитектурный угол судит по диффу; триажа нет; границ покрытия нет; измерения качества нет. Плюс два мелких долга: ссылка на несуществующий скилл verify и дублирующие проходы в task-batch.

Стало

Было Стало На основании чего
task test/task lint внутри apply, lefthook на коммите Stage 0 jellybit-review-gate + task gate: build, vet, lint, gofmt, тесты, повтор на флаки, -race, покрытие изменённых строк, миграции, ER-схема, gitleaks, govulncheck. Блокирует опиниативные проходы детерминированный оракул надёжнее мнения; проверка, идущая после ревью, не защищает ревью
jellybit-review-specs: spec → code Stage 1 он же + code → spec (тихие ветки, самодеятельные дефолты, проглоченные ошибки, незаказанные ретраи), границы спеки, право сказать «требование неверно» системная болезнь агентского кода — тихо добавленное поведение; односторонняя сверка его не видит
Stage 2 jellybit-review-rubric, jellybit-review-reimpl, jellybit-review-idiom, jellybit-review-negative recall чек-листа равен его длине; неявный слой достаётся только порождением критерия
архитектура как один из 9 буллетов review-code, вход = дифф Stage 3 jellybit-review-architecture, вход = task review:context (пакеты, граф зависимостей, публичная поверхность, инвентарь концепций) + дифф. Потолок 3 находки агент, видящий только дифф, не знает словаря проекта и потому не может судить о втором способе делать то же самое
Stage 4 jellybit-review-adversary (находка = построенный путь), jellybit-review-ops (условный постмортем) враждебная постановка находит то, чего не находит перечисление свойств
разгребал оркестратор вручную Stage 5 jellybit-review-triage: дедуп по причине, оракул для critical/major, понижение неподтверждённого, отсев вкусовщины, потолок 7, разметка инлайн/развилка отчёт читает оркестратор и молча реализует прочитанное: без потолка узкое место переезжает в незаказанные правки кода
review-code: 9 углов, включая механизируемое review-code сжат до конвенций, не выраженных правилом всё, что проверяет линтер, в промпте только отвлекает внимание
ревью-проходы дублировались в task-batch в task-batch осталось только то, что появилось от слияния: рассинхроны на стыках + вопрос о втором способе те же проходы на тех же файлах дают те же находки и удорожают триаж
ссылка на несуществующий скилл verify Skill run скилла verify нет ни в проекте, ни у пользователя — шаг молча не выполнялся

Что слито и что удалено

  • Слито: архитектурный угол и стиль/дублирование выведены из jellybit-review-code в отдельные проходы с разными классами дефектов; per-capability прогон в task-batch сужен до стыков вместо повторного полного ревью.
  • Удалено: ничего. Существующий проход не удаляется без замера — сначала калибровка (calibration.md), потом решение. jellybit-review-code оставлен как дешёвый проход профиля quick.

Конвенции → правила

Механизировано и вычеркнуто из прозы (docs/conventions/*) и из openspec/config.yaml:

Правило Инструмент Откуда убрано
msg — константа, без интерполяции; стиль ключ-значение; ошибка полем sloglint logging.md
slog вместо fmt.Print* forbidigo logging.md
конфиг не из env forbidigo (os.Getenv) config.md
время только через store.Now() forbidigo (time.Now) database.md
err == ErrX, приведение типа ошибки errorlint errors.md
сторонние пакеты ошибок depguard errors.md
матчинг ошибки по тексту сообщения internal/archrules errors.md
AUTOINCREMENT, DEFAULT (datetime('now')) в новых миграциях internal/archrules database.md
транспорты не знают друг о друге, ядро не знает о транспортах internal/archrules CLAUDE.md (осталась одна строка принципа)
ER-схема обновлена вместе с миграцией scripts/gate.sh (по диффу)

Правки кода под новые правила: logging.StartCall как единая точка отсчёта длительности внешних вызовов, store.Now вместо time.Now в httpapi и часах воркера, slog.DiscardHandler в тестах.

Что осталось непокрытым намеренно

  • Ревьювер наименований по словарю единого языка — глоссария нет, проверять не по чему. Заводится после задачи «Словарь единого языка».
  • Дробление review-code на узкие оптики — отклонено: декорреляция внимания без декорреляции суждения почти не добавляет recall, но линейно удорожает триаж.
  • Профиль нагрузки, история инцидентов, завязка внешних потребителей — недоступны ни одному проходу и остаются человеку. Перечислены в разделе «Честный предел» скилла.
  • Калибровка проходов не проведена: процедура заведена, первые прогоны — за пользователем (журнал проскочивших дефектов пока пуст).