- Зачем:
- ретро прогона 2026-07-12 (задача 20, clickstream-demo): контекст
оркестратора съедали инлайн-диагнозы, переписывание boilerplate и
кириллица в обменных файлах.
- Что:
- SKILL.md: принцип «мастер решает — субагенты выясняют» со стоп-краном
«сам — максимум один заход», обменные файлы на английском, сквозная
проверка до ревьюеров, будильник одной строкой.
- references/prompts/: готовые английские boilerplate-файлы (мандат
ревью, триаж, перепроверка) — подшиваются cat'ом, контекст мастера
не проходят; prompt-templates перестроен под сборку.
- codex-exec: модель gpt-5.6-sol, лестница эффорта, ловушка «&»;
sandbox-справочник переименован в codex-sandbox-apparmor.md;
lessons дистиллирован, добавлена запись прогона 2026-07-12.
- закрыты 14 находок слепого Fable-ревью скилла (согласованность,
единый источник $SCRATCH, скелет ревью постановки).
- Проверка:
- все внутренние ссылки резолвятся; слепое ревью: APPROVED_WITH_MINORS,
восстановление структуры подтверждено без потерь.
144 lines
6.9 KiB
Markdown
144 lines
6.9 KiB
Markdown
# Сборка промптов конвейера
|
||
|
||
Постоянные блоки лежат готовыми файлами в
|
||
[prompts/](prompts/) — их не переписывают, а подшивают `cat`'ом прямо из
|
||
каталога скилла, через контекст оркестратора они не проходят вовсе:
|
||
|
||
- [prompts/review-boilerplate.md](prompts/review-boilerplate.md) — мандат
|
||
ревьюера + формат индекса находок (этапы 2 и 4).
|
||
- [prompts/triage-header.md](prompts/triage-header.md) — правила триажа
|
||
для исполнителя (этап 5).
|
||
- [prompts/recheck-header.md](prompts/recheck-header.md) — узкая
|
||
перепроверка (этап 5); может принести новую находку — это не нарушение
|
||
узости, отправь её исполнителю тем же порядком.
|
||
|
||
Правила:
|
||
|
||
- **Обменные файлы — на английском** (правило SKILL.md): скелеты ниже уже
|
||
английские. Русский — только формулировкам, попадающим в задачу-файл,
|
||
коммиты и доклады пользователю.
|
||
- **Каталог прогона** — `$SCRATCH/<NN-slug>/` на задачу: `$SCRATCH` —
|
||
временный каталог ОС (скретчпад сессии или `mktemp -d`), подпапка — чтобы
|
||
обмен нескольких задач не сваливался в кучу. В репо не мусорит, ребут не
|
||
переживает. Windows-кавеат из codex-exec.md в силе: путь —
|
||
forward-slash, не голый `/tmp` Git Bash.
|
||
- Через Write оркестратор пишет **только параметрические блоки** ниже;
|
||
плейсхолдеры `{{...}}` — значения задачи, секции «adapt» — по смыслу.
|
||
|
||
Сборка на прогон: `D="$SCRATCH/<NN-slug>"` — подпапка задачи; `P` —
|
||
`references/prompts` в базовом каталоге скилла (путь даётся в шапке
|
||
вызова скилла):
|
||
|
||
```bash
|
||
cat "$D/review-params.md" "$P/review-boilerplate.md" > "$D/review-prompt.md"
|
||
cat "$P/triage-header.md" "$D/review-codex.md" "$D/review-claude.md" \
|
||
"$D/notes.md" > "$D/fix-prompt.md" # notes.md опционален — нет, так не включай
|
||
cat "$P/recheck-header.md" "$D/recheck-params.md" > "$D/recheck-prompt.md"
|
||
```
|
||
|
||
## 1. Задача исполнителю (`codex exec`, workspace-write)
|
||
|
||
Сохрани как `$D/task-prompt.md` — под этим именем его ждут примеры
|
||
codex-exec.md.
|
||
|
||
```markdown
|
||
# Task: {{ticket/goal in one line}}
|
||
|
||
Working directory: repo root {{repo}}. Branch {{branch}} — stay on it.
|
||
|
||
## What to do
|
||
Implement {{ticket NN}} from {{path to task file}}. The task is
|
||
self-contained: follow it literally; checkboxes are the acceptance
|
||
criteria. If something seems wrong — implement as written and flag the
|
||
doubt in your report.
|
||
|
||
## Read first (mandatory, before any code)
|
||
{{numbered list: task file, spec, code samples, conventions}}
|
||
|
||
## Order and discipline
|
||
{{adapt: TDD, layer order, test command}}
|
||
|
||
## End-to-end check <-- опционально: только если в репо есть дешёвый сквозной прогон
|
||
Run {{command}} before finishing. If it is unavailable in your sandbox
|
||
(docker, live stand) — say so explicitly in the report: the orchestrator
|
||
will run it before the reviews start.
|
||
|
||
## Boundaries (do not touch)
|
||
- **No commits.** No `git commit` / `git add`.
|
||
{{adapt: stubs, foreign code, existing tests, files outside the repo}}
|
||
|
||
## Final report (return this)
|
||
1. Files changed, one-line "why" each.
|
||
2. Test command and result (counters, all green).
|
||
3. Checkboxes: which are closed, which are not and why.
|
||
4. Doubts, if any.
|
||
```
|
||
|
||
## 2. Ревью: параметрический блок (один на ОБОИХ ревьюеров)
|
||
|
||
Блок не знает, кто его читает; куда класть вердикт, задаёт обёртка вызова,
|
||
и пути у ревьюеров разные (иначе коллизия). Codex получает собранный файл
|
||
через stdin (вердикт = его `-o`-отчёт); Клод-субагенту в prompt — короткая
|
||
английская обёртка:
|
||
|
||
```text
|
||
Read {{path to review-prompt.md}} and execute it. Working directory:
|
||
{{repo root}}. Write the full 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). Final message:
|
||
ONLY the VERDICT line, severity counters and the file path.
|
||
```
|
||
|
||
```markdown
|
||
# Code review: {{ticket NN — essence}}
|
||
|
||
You are an independent adversarial reviewer. Working directory: repo root
|
||
{{repo}}, branch {{branch}}.
|
||
|
||
## What you review
|
||
{{task file + spec; what is already committed and NOT under review}}
|
||
Changes (uncommitted, see the working tree): {{file list}}
|
||
Test command (expect {{N}} passed): {{command}}
|
||
|
||
## Focus
|
||
{{adapt: 3–4 points — math/edge cases, criteria compliance, test honesty,
|
||
shared code/regressions, artifacts}}
|
||
```
|
||
|
||
Вариант для **этапа 2** (ревью постановки, кода изменений ещё нет) — тот же
|
||
boilerplate, другой параметрический блок:
|
||
|
||
```markdown
|
||
# Spec review: {{ticket NN — essence}}
|
||
|
||
You review a TASK STATEMENT, not an implementation. Go into implementation
|
||
details only where the statement silently pre-decides a solution. The task
|
||
goes to an implementer with no session context — they will do literally
|
||
what is written. Working directory: repo root {{repo}}, branch {{branch}}.
|
||
|
||
## What you review
|
||
Statement: {{path to task file}}. Related context (not under review):
|
||
{{parent PRD, sibling tickets}}.
|
||
Code to check the statement's facts against: {{file list with why}}
|
||
|
||
## Focus
|
||
{{adapt: facts vs code, hidden one-liner decisions/forks, acceptance
|
||
criteria checkable and gameable?, observability}}
|
||
```
|
||
|
||
## 3. Параметрические хвосты триажа и перепроверки
|
||
|
||
`notes.md` (опционально, коротко, по-английски): фактура, которой нет у
|
||
исполнителя, решения уровня задачи (вне скоупа / принять риск), приоритеты.
|
||
|
||
`recheck-params.md` — три строки:
|
||
|
||
```markdown
|
||
Implementer's report with resolutions: read {{$D/fix-result.md}}.
|
||
Test command (expect {{N}} passed): {{command}}
|
||
```
|
||
|
||
Кавеат: проверь, что Codex-ревьюер может читать `$SCRATCH` из песочницы
|
||
(temp-каталоги обычно читаемы в workspace-write). Если нет — резолюции по
|
||
его находкам передай текстом (только его находки, не весь отчёт).
|