fix(skills): имена вердиктов переименованы на ось этапа, не линии

- Зачем:
  - вчерашнее переименование `review-<task|code>-*` встало на неверную
    ось: `task` и `code` — это две линии этапа 4 (уместность и дефекты),
    а не этапы. Межэтапная коллизия, ради которой всё делалось, осталась
    открытой: у ревью постановки имени вердикта не было вовсе.
  - сборка триажа при этом называла оба вердикта «линия code», хотя один
    из них — вердикт линии уместности.
- Что:
  - вердикты и параметрический блок этапа 4 — `review-impl-*`, этапа 2 —
    `review-spec-*`; общий блок снова один на обе линии этапа.
  - логи ревьюера тоже несут этап (`review-impl-stdout.jsonl`) — раньше
    этап 4 молча затирал лог этапа 2, единственное доказательство для
    проверки «вердикт без находок: работа или отписка».
  - в prompt-templates.md названы имена файлов этапа 2 и добавлено
    предупреждение, что `task` — линия уместности, а не постановка.
  - SKILL.md этапа 5 показывал `вердикт-A.md вердикт-B.md`; заменено на
    реальные имена, комментарий в рецепте ревьюера исправлен.
- Проверка:
  - grep по обменным именам: старых не осталось вне уроков, новые
    согласованы между SKILL.md, prompt-templates.md и codex-exec.md.
  - все markdown-ссылки скилла резолвятся.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dmitry DementievandClaude Opus 5 committed 2026-08-03 23:52:49 +03:00
1 parent abc00a06be
commit 5fa98d4d0b
3 files changed
+31 -21

No files matched your search

@@ -214,8 +214,9 @@ description: >-
кода): перешли Codex индекс находок **дословно**, он чинит или
**аргументированно отклоняет** — через контракт и тест, не голословно;
промпт починки — «закрой перечисленное, больше ничего не меняй».
«Дословно» — это конкатенация: `cat triage-header.md вердикт-A.md
вердикт-B.md > fix-prompt.md` Bash'ем (шапка готова в
«Дословно» — это конкатенация: `cat triage-header.md
review-impl-codex.md review-impl-claude.md > fix-prompt.md` Bash'ем
(шапка готова в
`references/prompts/`); Write'ом ты бы переписал те же находки в
контекст ещё раз. Статус каждого ID — `FIXED / REJECTED / OUT_OF_SCOPE /
NEEDS_DECISION`; два последних — решения твоего уровня, исполнитель
@@ -142,14 +142,14 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \
## Ветка «ревьюер» (свежий тред, мандат промптом)
```bash
# линия кода; для постановки — тот же вызов, но
# review-prompt-task.md -> review-task-codex.md
# линия дефектов этапа 4; линия уместности и этап 2 — тот же вызов,
# другой промпт и другой вердикт (имена — prompt-templates.md)
cat "$D/review-prompt-code.md" | codex exec --json --strict-config \
-s workspace-write -m gpt-5.6-sol \
-c 'model_reasoning_effort="high"' \
-c 'approval_policy="on-request"' -c 'approvals_reviewer="auto_review"' \
-o "$D/review-code-codex.md" - \
> "$D/review-stdout.jsonl" 2> "$D/review-stderr.txt"
-o "$D/review-impl-codex.md" - \
> "$D/review-impl-stdout.jsonl" 2> "$D/review-impl-stderr.txt"
```
- **Свежим тредом**, не тем, что писал код. Вызов тот же, что у исполнителя:
@@ -165,10 +165,10 @@ cat "$D/review-prompt-code.md" | codex exec --json --strict-config \
`git status --porcelain` до ревью и сверка после — дерево должно остаться
нетронутым.
- **Вердикт без находок — проверь лог: работа или отписка.** Дёшево:
`grep -c '"command_execution"' "$D/review-stdout.jsonl"` (счётчик
`grep -c '"command_execution"' "$D/review-impl-stdout.jsonl"` (счётчик
выполненных команд) или промежуточные сообщения —
`jq -r 'select(.item.type=="agent_message") | .item.text'
"$D/review-stdout.jsonl"`. Одна строка APPROVED при пустом счётчике —
"$D/review-impl-stdout.jsonl"`. Одна строка APPROVED при пустом счётчике —
отписка, перезапускай.
- `-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в
fix-промпт конкатенацией, читай его один раз для синтеза и не пересказывай.
@@ -45,17 +45,17 @@
```bash
cat "$D/task-body.md" "$P/runtime-language.md" > "$D/task-prompt.md"
cat "$D/review-task-params.md" "$P/line-task.md" "$P/line-taste.md" \
cat "$D/review-impl-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-code-params.md" "$P/line-code.md" \
cat "$D/review-impl-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-code-codex.md" \
"$D/review-code-claude.md" "$D/notes.md" "$P/runtime-language.md" \
cat "$P/triage-header.md" "$D/review-impl-codex.md" \
"$D/review-impl-claude.md" "$D/notes.md" "$P/runtime-language.md" \
> "$D/fix-prompt.md"
# notes.md опционален — нет, так не включай
cat "$P/recheck-header.md" "$D/recheck-params.md" \
@@ -117,22 +117,26 @@ cat "$P/self-review.md" | codex exec resume <thread-id> ...
## 2. Ревью: общий блок + файл линии
Общий параметрический блок (`review-<этап>-params.md`) один на обе линии
Общий параметрический блок (`review-impl-params.md`) один на обе линии
этапа и не знает, кто его читает; линзу и префикс ID задаёт файл линии,
поэтому собранных промптов — по одному на линию, с разными путями. Куда
класть вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже
разные (иначе коллизия). **Имя несёт и этап** (`task`/`code`), не только
семейство: `$D` у задачи один на весь прогон, и с общим именем ревью кода
легло бы поверх ревью постановки — а упавшая линия этапа 4 оставила бы
файл этапа 2 на месте, и триаж молча ушёл бы чинить по чужому вердикту.
Разные имена делают такой отказ громким: сборка `fix-prompt.md` падает на
`cat`. Codex получает свой собранный файл через stdin (вердикт
= его `-o`-отчёт); Клод-субагенту в prompt — короткая английская обёртка:
разные (иначе коллизия). **Имя вердикта несёт этап, а не линию**:
`review-impl-<семейство>.md` на этапе 4, `review-spec-<семейство>.md` на
этапе 2. Линии внутри этапа различает семейство — их и назначают разным;
совпало семейство (замена молчащего) — путь задаёшь руками, правило ниже.
Этап в имени нужен потому, что `$D` у задачи один на весь прогон: под
общим именем вердикт этапа 4 лёг бы поверх вердикта этапа 2, а упавшая
линия этапа 4 оставила бы файл этапа 2 на месте — и триаж молча ушёл бы
чинить по чужому вердикту. Разные имена делают такой отказ громким:
сборка `fix-prompt.md` падает на `cat`. Codex получает свой собранный
файл через stdin (вердикт = его `-o`-отчёт); Клод-субагенту в prompt —
короткая английская обёртка:
```text
Read {{path to this line's review prompt}} and execute it. Working directory:
{{repo root}}. Write the findings index to
{{$D/review-<task|code>-claude.md}} — it is outside the repo, so the
{{$D/review-<spec|impl>-claude.md}} — it is outside the repo, so the
mandate allows 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
@@ -168,6 +172,9 @@ shared code}}
перепечатывает: `line-task.md` (уместность: постановка, критерии,
границы), `line-code.md` (дефекты: корректность, инварианты, регрессии),
одиночному ревьюеру — `line-rev.md` (обе линзы, префикс `REV`).
Осторожно с именем: `task` — это **линия уместности этапа 4** (префикс
`TASK`), а не ревью постановки; ревью постановки — этап 2 с префиксами
`SPEC-*` и своими именами файлов (ниже).
Вкусовая линза с базой запахов — `line-taste.md`; она едет с **линией
уместности** (её ведёт модель со вкусом — назначение линий в этапе 4
SKILL.md), поэтому разрез — выбором файла в `cat`, не пересказом
@@ -199,6 +206,8 @@ criteria checkable and gameable?, observability}}
Файл линии здесь — двухстрочный Write (`## Your line` +
`FINDING PREFIX: SPEC-A|SPEC-B|SPEC`): константного файла нет
намеренно — префикс варьируется, а линза уже задана рамкой блока.
Имена этапа: блок — `review-spec-params.md`, промпты —
`review-prompt-spec-<a|b>.md`, вердикты — `review-spec-<семейство>.md`.
## 3. Параметрические хвосты триажа и перепроверки