diff --git a/agents/.agents/skills/claude-subagent-playbook/SKILL.md b/agents/.agents/skills/claude-subagent-playbook/SKILL.md index e084bf9..c73850d 100644 --- a/agents/.agents/skills/claude-subagent-playbook/SKILL.md +++ b/agents/.agents/skills/claude-subagent-playbook/SKILL.md @@ -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`; два последних — решения твоего уровня, исполнитель diff --git a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md index eb6fb57..c55ea28 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/codex-exec.md @@ -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-промпт конкатенацией, читай его один раз для синтеза и не пересказывай. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md index 6e6a55f..604b582 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md @@ -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 ... ## 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--claude.md}} — it is outside the repo, so the +{{$D/review--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-.md`, вердикты — `review-spec-<семейство>.md`. ## 3. Параметрические хвосты триажа и перепроверки