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:
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. Параметрические хвосты триажа и перепроверки
|
||||
|
||||
|
||||
Reference in new issue
Block a user