docs(skills): плейбук — структурный рефакторинг: ось вкуса, брифы, два Опус-агента

Зачем.
Отдельный осознанный заход, закрывающий открытые вопросы 2026-07-26 и
2026-07-31: две ручки выбора (модель, эффорт) были про силу, вкус ими не
выражался; константы линий дрейфовали через перепечатку; правила
координации прогона #18 жили только в журнале; у Agent-тула нет ручки
effort — карта была нереализуема разовым вызовом.

Что.
- Третья ось выбора — вкус: references/model-matrix.md (матрица Тео с
  поправкой пользователя под gpt-5.6-sol/Opus 5); разрез по подзадачам
  на этапе 1, сначала вкусовая часть.
- «Родословная» разведена на семейство (классы находок) и свежесть
  (независимость); линия дефектов — по различию, уместности — по умению.
- Ступень эффорта выбирается выбором агента: определений столько,
  сколько пар (модель, ступень) — deep-reasoner (high), craftsman
  (medium, исполнение брифов: реализация/ревью/перепроверки; поглотил
  adversarial-reviewer), fast-worker; карта с обоснованиями — SSOT в
  claude-agents.md.
- Константы — файлами в prompts/: line-task/code/rev, self-review;
  line-taste — вкусовая линза с 12 запахами Фаулера из /code-review.
- Правила #18 — в механизм: инкрементальная запись индекса, глубина
  один и проверка среды в мандате, признак жизни / другой путь вердикта
  замене / среда своими глазами в «Сбоях», стенд одной линии, stdin фона.
- lessons дистиллирован (586→533), handoff захода — в handoffs/.

Проверка.
Слепое ревью Опусом по writing-great-skills: CHANGES_REQUIRED
(7 MAJOR, 17 MINOR, 3 NIT) — все закрыты или отклонены с доводом в
lessons; ссылки пакета проверены скриптом, битых нет. Боевой прогон
новой структуры — следующим заходом (чек-лист в handoff).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dmitry DementievandClaude Fable 5 committed 2026-07-31 17:03:23 +03:00
1 parent 6070810c2d
commit 3e0498e242
12 files changed
+466 -259

No files matched your search

@@ -6,6 +6,14 @@
- [prompts/review-boilerplate.md](prompts/review-boilerplate.md) — мандат
ревьюера + формат индекса находок (этапы 2 и 4).
- [prompts/line-task.md](prompts/line-task.md) /
[prompts/line-code.md](prompts/line-code.md) /
[prompts/line-rev.md](prompts/line-rev.md) — файлы линий ревью: линза и
префикс ID (две слепые линии / одиночный ревьюер).
- [prompts/line-taste.md](prompts/line-taste.md) — вкусовая линза с базой
запахов Фаулера; подшивается к линии уместности (этап 4 SKILL.md).
- [prompts/self-review.md](prompts/self-review.md) — саморевью
исполнителя (этап 3, resume тем же тредом).
- [prompts/triage-header.md](prompts/triage-header.md) — правила триажа
для исполнителя (этап 5).
- [prompts/recheck-header.md](prompts/recheck-header.md) — узкая
@@ -29,7 +37,7 @@
переживает. Windows-кавеат из codex-exec.md в силе: путь —
forward-slash, не голый `/tmp` Git Bash.
- Через Write оркестратор пишет **только параметрические блоки** ниже;
плейсхолдеры `{{...}}` — значения задачи, секции «adapt» — по смыслу.
секции «adapt» — по смыслу.
Сборка на прогон: `D="$SCRATCH/<NN-slug>"` — подпапка задачи; `P` —
`references/prompts` в базовом каталоге скилла (путь даётся в шапке
@@ -37,10 +45,15 @@
```bash
cat "$D/task-body.md" "$P/runtime-language.md" > "$D/task-prompt.md"
cat "$D/review-params.md" "$D/line-task.md" "$P/review-boilerplate.md" \
"$P/runtime-language.md" > "$D/review-prompt-task.md"
# вторая линия: line-code.md -> review-prompt-code.md;
# одиночный ревьюер: line-rev.md -> review-prompt.md
cat "$D/review-params.md" "$P/line-task.md" "$P/line-taste.md" \
"$P/review-boilerplate.md" "$P/runtime-language.md" \
> "$D/review-prompt-task.md"
cat "$D/review-params.md" "$P/line-code.md" \
"$P/review-boilerplate.md" "$P/runtime-language.md" \
> "$D/review-prompt-code.md"
# одиночный ревьюер: line-rev.md (+ line-taste.md) -> review-prompt.md
# line-taste.md едет с линией уместности — переставь, если её ведёт
# другая линия (назначение линий — этап 4 SKILL.md)
cat "$P/triage-header.md" "$D/review-codex.md" "$D/review-claude.md" \
"$D/notes.md" "$P/runtime-language.md" > "$D/fix-prompt.md"
# notes.md опционален — нет, так не включай
@@ -91,15 +104,16 @@ will run it before the reviews start.
Отдельным ходом после отчёта о реализации, до внешних ревью — смена рамки
«автор → критик» отдельным ходом ловит больше, чем финальный пункт
чек-листа в промпте задачи:
чек-листа в промпте задачи. Текст готов файлом:
```text
Now switch roles: you are a reviewer of your own diff. Walk it against the
task's acceptance criteria and boundaries. Fix what you find, stay inside
the task scope. Return one line: SELF-REVIEW: found N, fixed N — plus one
phrase per unfixed item, if any.
```bash
cat "$P/self-review.md" | codex exec resume <thread-id> ...
```
Опус-исполнителю (`craftsman`) — тот же файл продолжением его треда:
запускай его с `name` и шли SendMessage
«read and execute $P/self-review.md».
## 2. Ревью: общий блок + файл линии
Общий параметрический блок (`review-params.md`) один на обе линии и не
@@ -111,17 +125,20 @@ phrase per unfixed item, if any.
```text
Read {{path to this line's review prompt}} and execute it. Working directory:
{{repo root}}. Write the full findings index to
{{repo root}}. Write the findings index to
{{$D/review-claude.md}} — it is outside the repo, so the mandate allows
it (via Write or a Bash heredoc, whichever you have). Keep the index
strict: ONE line per finding and per confirmation, as the boilerplate
demands — no multi-line entries. Final message: ONLY the VERDICT line,
severity counters and the file path.
it (via Write or a Bash heredoc, whichever you have). Append each finding
to that file as you go — incremental writing keeps a partial index alive
if the session dies. Keep the index strict: ONE line per finding and per
confirmation, as the boilerplate demands — no multi-line entries. Final
message: ONLY the VERDICT line, severity counters and the file path.
```
(Однострочность продублирована в обёртке не случайно: boilerplate это уже
требует, но Клод-родословная держит формат хуже Codex — эмпирика
требует, но Клод-семейство держит формат хуже Codex — эмпирика
2026-07-12/13, многострочные находки и развёрнутые confirmations.)
Замене молчащего ревьюера давай **другой** путь вердикта — правило в
«Сбоях координации» SKILL.md.
```markdown
# Code review: {{ticket NN — essence}}
@@ -140,36 +157,16 @@ Test command (expect {{N}} passed): {{command}}
shared code}}
```
Файлы линий (`line-task.md` / `line-code.md`), по одному на слепую линию:
```markdown
## Your line
FINDING PREFIX: TASK
Lens: compliance with the statement, acceptance criteria, boundaries,
intended observable result.
Taste: formally correct but substantively wrong is a finding — work out of
proportion to the task, an added artifact that does not earn its
existence, a check that passes without proving its own claim. Grade a
taste finding by the cost of living with the code, not by whether it
breaks a test.
```
```markdown
## Your line
FINDING PREFIX: CODE
Lens: correctness, invariants, regressions, security, test honesty.
```
Одиночному ревьюеру (простая ступень шкалы этапа 4) — один `line-rev.md`
с обеими линзами и префиксом `REV`. По эмпирике прогонов естественное
распределение: Codex — CODE (дефекты нового кода), Клод — TASK (уровень
задачи и архитектуры).
Блок `Taste:` едет с **родословной**, а не с буквой линии: он адресован
Клоду (решение пользователя 2026-07-23, запись в
[lessons.md](lessons.md)). При обычном распределении и у одиночного
ревьюера он уже на месте — обоих ведёт Клод. Поменялись родословными —
переставь блок целиком туда, где Клод.
Файлы линий — готовые константы в `prompts/`, оркестратор их не
перепечатывает: `line-task.md` (уместность: постановка, критерии,
границы), `line-code.md` (дефекты: корректность, инварианты, регрессии),
одиночному ревьюеру — `line-rev.md` (обе линзы, префикс `REV`).
Вкусовая линза с базой запахов — `line-taste.md`; она едет с **линией
уместности** (её ведёт модель со вкусом — назначение линий в этапе 4
SKILL.md), поэтому разрез — выбором файла в `cat`, не пересказом
границы. Стенд делится между линиями? Явный запрет ломающих команд
второй линии — отдельным параметрическим файлом `$D/access-<line>.md`,
подшитым после файла линии (правило — этап 4 SKILL.md).
Вариант для **этапа 2** (ревью постановки, кода изменений ещё нет) — тот же
boilerplate, другой параметрический блок:
@@ -192,8 +189,9 @@ Code to check the statement's facts against: {{file list with why}}
criteria checkable and gameable?, observability}}
```
Файл линии — тем же механизмом: только префикс (`SPEC-A` / `SPEC-B`,
одиночному обзору — `SPEC`); линза уже задана рамкой блока.
Файл линии здесь — двухстрочный Write (`## Your line` +
`FINDING PREFIX: SPEC-A|SPEC-B|SPEC`): константного файла нет
намеренно — префикс варьируется, а линза уже задана рамкой блока.
## 3. Параметрические хвосты триажа и перепроверки