Merge branch 'skill/claude-playbook-context-retro': экономия контекста оркестратора
This commit is contained in:
commit
0d2fc9af65
5 files changed
+258
-22
No files matched your search
@@ -29,7 +29,17 @@ description: >-
|
|||||||
- **Оркестратор (ты)** — план, постановка, синтез, коммит. Работай по
|
- **Оркестратор (ты)** — план, постановка, синтез, коммит. Работай по
|
||||||
**индексу** (правило `/coordinator-loop`): в твой контекст входят вердикты
|
**индексу** (правило `/coordinator-loop`): в твой контекст входят вердикты
|
||||||
и находки `файл:строка`, а не diff, не полные логи и не нарратив. Шумные
|
и находки `файл:строка`, а не diff, не полные логи и не нарратив. Шумные
|
||||||
команды — через файл-лог, в контекст только сводку.
|
команды — через файл-лог, в контекст только сводку. **Индекс — у тебя,
|
||||||
|
полезная нагрузка — файлами между агентами**: вердикты, отчёты и промпты
|
||||||
|
живут в `$SCRATCH` (обменный temp-каталог прогона с полуслучайным
|
||||||
|
префиксом — скретчпад сессии или `mktemp -d`; детали — в
|
||||||
|
[references/prompt-templates.md](references/prompt-templates.md)), ты
|
||||||
|
читаешь их один раз и дальше передаёшь путями и конкатенацией (`cat`), а
|
||||||
|
не переписываешь Write'ом — каждое переписывание дублирует контент в
|
||||||
|
твоём контексте (ретро 2026-07-10: находки ревью проходили через
|
||||||
|
оркестратора до шести раз). SendMessage возвращает эхом
|
||||||
|
весь текст сообщения — teammate'у шли короткое (вердикт, путь, вопрос),
|
||||||
|
длинное — файлом, который он прочтёт сам.
|
||||||
- **Codex** — реализация кода. У пользователя лимиты Codex больше, код он
|
- **Codex** — реализация кода. У пользователя лимиты Codex больше, код он
|
||||||
пишет в целом лучше, но верхнеуровнево планирует хуже — поэтому
|
пишет в целом лучше, но верхнеуровнево планирует хуже — поэтому
|
||||||
декомпозиция и постановка остаются у тебя. Механика вызова —
|
декомпозиция и постановка остаются у тебя. Механика вызова —
|
||||||
@@ -94,25 +104,39 @@ description: >-
|
|||||||
Один писатель в дереве: пока Codex пишет — никто больше (казус с
|
Один писатель в дереве: пока Codex пишет — никто больше (казус с
|
||||||
форвардером — в [references/lessons.md](references/lessons.md)). Готово,
|
форвардером — в [references/lessons.md](references/lessons.md)). Готово,
|
||||||
когда Codex вернул отчёт, а в дереве нет правок, которых он не называл.
|
когда Codex вернул отчёт, а в дереве нет правок, которых он не называл.
|
||||||
4. **Два слепых ревью параллельно.** Каждому: путь к задаче-файлу + фокус
|
4. **Два слепых ревью параллельно.** Промпт — **один канонический файл в
|
||||||
(математика/краевые случаи, соответствие критериям, честность тестов,
|
`$SCRATCH` на оба ревью** (скелет и обёртки вызова —
|
||||||
артефакты). Друг про друга не знают, твои выводы им не пересказывай.
|
[references/prompt-templates.md](references/prompt-templates.md)): Codex
|
||||||
Обоим поощряй безопасные эмпирические проверки (воспроизвести краевой
|
получает его через stdin, Клод-субагенту в prompt — короткая обёртка
|
||||||
случай вне репо, сходить в документацию) — вердикт заметно твёрже;
|
«прочитай файл X и выполни; индекс — в файл Y» (не дублируй текст
|
||||||
менять исходники и окружение нельзя, после ревью сверь дерево
|
промпта в параметре — это второй полный экземпляр в твоём контексте).
|
||||||
(`git status`). Клод-ревьюеру можно поручить смотреть артефакты
|
Содержание: путь к задаче-файлу + фокус (математика/краевые случаи,
|
||||||
(картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя индексами
|
соответствие критериям, честность тестов, артефакты). Друг про друга не
|
||||||
и дерево нетронуто; вердикт без единой находки засчитывай только после
|
знают, твои выводы им не пересказывай. Обоим поощряй безопасные
|
||||||
проверки его лога — работа, не отписка
|
эмпирические проверки (воспроизвести краевой случай вне репо, сходить в
|
||||||
|
документацию) — вердикт заметно твёрже; менять исходники и окружение
|
||||||
|
нельзя. Вердикты — файлами с **разными путями**: у Codex это его
|
||||||
|
`-o`-отчёт, Клод-ревьюеру обёртка разрешает запись файла вердикта в
|
||||||
|
`$SCRATCH` (вне репо — мандату не противоречит), финальным актом —
|
||||||
|
SendMessage только со строкой VERDICT, счётчиками и путём: его
|
||||||
|
idle-уведомления не содержат результата, не жди из них ничего. После
|
||||||
|
ревью сверь дерево (`git status`). Клод-ревьюеру можно поручить смотреть
|
||||||
|
артефакты (картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя
|
||||||
|
индексами и дерево нетронуто; вердикт без единой находки засчитывай
|
||||||
|
только после проверки его лога — работа, не отписка
|
||||||
(приём — в [references/codex-exec.md](references/codex-exec.md)).
|
(приём — в [references/codex-exec.md](references/codex-exec.md)).
|
||||||
5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия.
|
5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия.
|
||||||
Пофиндинговый триаж — у **исполнителя**, не у тебя (правило
|
Пофиндинговый триаж — у **исполнителя**, не у тебя (правило
|
||||||
`/claude-team-review` и `/coordinator-loop`: судит тот, у кого контекст
|
`/claude-team-review` и `/coordinator-loop`: судит тот, у кого контекст
|
||||||
кода): перешли Codex индекс находок **дословно**, он чинит или
|
кода): перешли Codex индекс находок **дословно**, он чинит или
|
||||||
**аргументированно отклоняет** — через контракт и тест, не голословно;
|
**аргументированно отклоняет** — через контракт и тест, не голословно;
|
||||||
промпт починки — «закрой перечисленное, больше ничего не меняй». Ты судишь
|
промпт починки — «закрой перечисленное, больше ничего не меняй».
|
||||||
уровнем задачи: принять риск / вне скоупа. Повторная проверка — узкая
|
«Дословно» — это конкатенация: `cat шапка.md вердикт-A.md вердикт-B.md >
|
||||||
(см. «Свежесть»). Этап закрыт, когда по каждой находке обоих ревью есть
|
fix-prompt.md` Bash'ем; Write'ом ты бы переписал те же находки в контекст
|
||||||
|
ещё раз. Свои замечания к триажу — только шапкой. Ты судишь уровнем
|
||||||
|
задачи: принять риск / вне скоупа. Повторная проверка — узкая (см.
|
||||||
|
«Свежесть»); её промпт не пересказывает резолюции — ссылается на файл
|
||||||
|
отчёта исполнителя. Этап закрыт, когда по каждой находке обоих ревью есть
|
||||||
решение: починено и перепроверено — или отклонено с доводом.
|
решение: починено и перепроверено — или отклонено с доводом.
|
||||||
6. **Финал.** Артефакты проверь **своими глазами** (счётчик тестов, картинки,
|
6. **Финал.** Артефакты проверь **своими глазами** (счётчик тестов, картинки,
|
||||||
прогон CLI) — ревью не заменяет твою приёмку. Обнови чекбоксы и статус
|
прогон CLI) — ревью не заменяет твою приёмку. Обнови чекбоксы и статус
|
||||||
@@ -129,7 +153,9 @@ description: >-
|
|||||||
(механика — [references/codex-exec.md](references/codex-exec.md)).
|
(механика — [references/codex-exec.md](references/codex-exec.md)).
|
||||||
Подстраховка от молчаливой смерти агента — ScheduleWakeup сроком дольше
|
Подстраховка от молчаливой смерти агента — ScheduleWakeup сроком дольше
|
||||||
ожидаемой длительности: по пробуждению смотри логи сам, по приходу
|
ожидаемой длительности: по пробуждению смотри логи сам, по приходу
|
||||||
результата таймер снимай.
|
результата таймер снимай. Idle-уведомления teammate-субагентов — шум, а не
|
||||||
|
событие: не докладывай о них пользователю и не действуй по ним, если
|
||||||
|
результат уже получен (ретро 2026-07-10: ~7 пустых ходов на idle-пингах).
|
||||||
|
|
||||||
## Соседние скиллы
|
## Соседние скиллы
|
||||||
|
|
||||||
@@ -150,6 +176,9 @@ description: >-
|
|||||||
- [references/codex-exec.md](references/codex-exec.md) — прямой `codex exec`:
|
- [references/codex-exec.md](references/codex-exec.md) — прямой `codex exec`:
|
||||||
сквозные правила (шум в файлы, thread_id, resume по id, проверка отписки),
|
сквозные правила (шум в файлы, thread_id, resume по id, проверка отписки),
|
||||||
ветки исполнитель/ревьюер/триаж, раннер для переваривания шума.
|
ветки исполнитель/ревьюер/триаж, раннер для переваривания шума.
|
||||||
|
- [references/prompt-templates.md](references/prompt-templates.md) — скелеты
|
||||||
|
четырёх промптов конвейера (задача/ревью/триаж/перепроверка): пиши только
|
||||||
|
параметрический блок на задачу, boilerplate не переписывай.
|
||||||
- [references/lessons.md](references/lessons.md) — датированная эмпирика
|
- [references/lessons.md](references/lessons.md) — датированная эмпирика
|
||||||
прогонов: что поймал каждый этап, казусы, цифры.
|
прогонов: что поймал каждый этап, казусы, цифры.
|
||||||
- [references/claude-agents.md](references/claude-agents.md) — определения
|
- [references/claude-agents.md](references/claude-agents.md) — определения
|
||||||
|
|||||||
@@ -10,14 +10,24 @@
|
|||||||
|
|
||||||
## Сквозные правила (любая ветка)
|
## Сквозные правила (любая ветка)
|
||||||
|
|
||||||
- **Промпт — файлом, шум — в файлы.** Промпт пиши Write'ом в `$SCRATCH` и
|
- **Промпт — файлом, шум — в файлы.** Промпт подавай через stdin (`-`);
|
||||||
подавай через stdin (`-`); stdout/stderr — редиректами туда же. В контекст
|
stdout/stderr — редиректами в `$SCRATCH`. В контекст оркестратора
|
||||||
оркестратора читается ровно один файл — финальный отчёт из `-o`.
|
читается ровно один файл — финальный отчёт из `-o`. Промпт **собирай
|
||||||
|
конкатенацией, а не переписывай**: скелеты — в
|
||||||
|
[prompt-templates.md](prompt-templates.md), Write'ом пиши только
|
||||||
|
параметрический блок задачи; чужой контент (вердикты ревью, отчёты) в
|
||||||
|
промпт попадает через `cat a.md b.md > prompt.md` — дословно и без
|
||||||
|
повторного прохода через твой контекст (ретро 2026-07-10: переписывание
|
||||||
|
гоняло находки через оркестратора до шести раз).
|
||||||
- **Модель и глубину рассуждения задавай явно** (`-m`,
|
- **Модель и глубину рассуждения задавай явно** (`-m`,
|
||||||
`-c 'model_reasoning_effort="..."'`): дефолты берутся из
|
`-c 'model_reasoning_effort="..."'`): дефолты берутся из
|
||||||
`~/.codex/config.toml` и плавают за последней интерактивной сессией
|
`~/.codex/config.toml` и плавают за последней интерактивной сессией
|
||||||
пользователя. Для реализации и ревью — high; текущую боевую модель сверь
|
пользователя. Для реализации и ревью — high; боевая модель —
|
||||||
с конфигом (2026-07-10: `gpt-5.5`). Оверрайды проверены под
|
**`gpt-5.5`** (решение пользователя 2026-07-10). Модель из конфига НЕ
|
||||||
|
наследовать: «сверить с конфигом» ≠ «взять из конфига» — туда утекают
|
||||||
|
фронтирные модели интерактивных сессий (gpt-5.6-sol — фронтир уровня
|
||||||
|
Fable, лимиты дорогие; казус — прогон тикета 02, 2026-07-10). Конфиг
|
||||||
|
разошёлся с правилом — спроси пользователя. Оверрайды проверены под
|
||||||
`--strict-config`.
|
`--strict-config`.
|
||||||
- **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`):
|
- **Запуск — собственным фоновым Bash оркестратора** (`run_in_background`):
|
||||||
фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по
|
фоновый процесс детачится, живёт сквозь ходы и будит оркестратора по
|
||||||
@@ -94,6 +104,8 @@ cat "$SCRATCH/task-prompt.md" | codex exec --json --strict-config \
|
|||||||
как проверить), явная строка VERDICT и поощрение безопасных эмпирических
|
как проверить), явная строка VERDICT и поощрение безопасных эмпирических
|
||||||
проверок вне репо (воспроизвести краевой случай, свериться с
|
проверок вне репо (воспроизвести краевой случай, свериться с
|
||||||
первоисточником) — вердикт заметно твёрже (эмпирика 2026-07-09).
|
первоисточником) — вердикт заметно твёрже (эмпирика 2026-07-09).
|
||||||
|
`-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в
|
||||||
|
fix-промпт конкатенацией, читай его один раз для синтеза и не пересказывай.
|
||||||
|
|
||||||
## Ветка «триаж/починка» (тем же тредом, что писал код)
|
## Ветка «триаж/починка» (тем же тредом, что писал код)
|
||||||
|
|
||||||
|
|||||||
+23
-2
@@ -56,13 +56,30 @@ permission profiles requiring direct runtime enforcement are incompatible with -
|
|||||||
|
|
||||||
— workspace-write требует именно bwrap-backend. Полный фикс — ниже, нужен sudo.
|
— workspace-write требует именно bwrap-backend. Полный фикс — ниже, нужен sudo.
|
||||||
|
|
||||||
## Полный фикс (sudo; на исходной машине пока не применён)
|
## Полный фикс (sudo; применён и проверен 2026-07-10)
|
||||||
|
|
||||||
**Вариант A — рекомендуемый, точечный**: AppArmor-профиль только для bwrap Codex'а, системное ограничение userns остаётся. Создать `/etc/apparmor.d/codex-bwrap`:
|
**Ловушка, съевшая первую попытку**: профиль на путь vendored bwrap
|
||||||
|
(`**/codex-resources/bwrap`) НЕ работает — Codex ≥0.144 исполняет
|
||||||
|
**встроенный** bwrap из memfd (`linux-sandbox/src/bundled_bwrap.rs`,
|
||||||
|
`memfd_create` в бинаре), и путевой attachment не цепляется никогда: в audit
|
||||||
|
виден `profile="unconfined" comm="bwrap"` → transition в
|
||||||
|
`unprivileged_userns`. Прямой запуск vendored bwrap с диска при этом
|
||||||
|
проходит — ложное подтверждение, не верь ему.
|
||||||
|
|
||||||
|
**Рабочий вариант**: вешать профиль на **сам бинарь codex** (родителя) —
|
||||||
|
memfd-exec'нутый ребёнок наследует метку через exec, и правило `userns,`
|
||||||
|
разрешает namespace. Стандартный приём Ubuntu для браузеров/Electron.
|
||||||
|
`/etc/apparmor.d/codex-bwrap`:
|
||||||
|
|
||||||
```
|
```
|
||||||
abi <abi/4.0>,
|
abi <abi/4.0>,
|
||||||
include <tunables/global>
|
include <tunables/global>
|
||||||
|
|
||||||
|
profile codex-cli /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/bin/codex flags=(unconfined) {
|
||||||
|
userns,
|
||||||
|
include if exists <local/codex-cli>
|
||||||
|
}
|
||||||
|
|
||||||
profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/codex-resources/bwrap flags=(unconfined) {
|
profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/codex-resources/bwrap flags=(unconfined) {
|
||||||
userns,
|
userns,
|
||||||
include if exists <local/codex-bwrap>
|
include if exists <local/codex-bwrap>
|
||||||
@@ -73,8 +90,12 @@ profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/c
|
|||||||
|
|
||||||
```
|
```
|
||||||
codex sandbox -c 'sandbox_mode="workspace-write"' -- sh -c 'touch ./__p && rm ./__p && echo OK'
|
codex sandbox -c 'sandbox_mode="workspace-write"' -- sh -c 'touch ./__p && rm ./__p && echo OK'
|
||||||
|
codex sandbox -- sh -c 'touch ./__p 2>/dev/null && echo BROKEN || echo RO_OK'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Проверено 2026-07-10: WRITE_OK, read-only блокирует запись, workspace-write
|
||||||
|
не пускает в `/etc` — изоляция сохранена.
|
||||||
|
|
||||||
Переносимость: путь в профиле — под конкретную машину (`~/.npm-global/...`); glob `**` переживает обновления версий Codex, но если npm-global живёт в другом месте — путь поправить. Перезагружать профиль нужно только при смене самого расположения.
|
Переносимость: путь в профиле — под конкретную машину (`~/.npm-global/...`); glob `**` переживает обновления версий Codex, но если npm-global живёт в другом месте — путь поправить. Перезагружать профиль нужно только при смене самого расположения.
|
||||||
|
|
||||||
**Вариант B — грубый, не рекомендуется**: `sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0` (+ файл в `/etc/sysctl.d/`). Ослабляет защиту всей машины.
|
**Вариант B — грубый, не рекомендуется**: `sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0` (+ файл в `/etc/sysctl.d/`). Ослабляет защиту всей машины.
|
||||||
|
|||||||
@@ -193,3 +193,41 @@ Codex (8 находок) поймал уровень требований: па
|
|||||||
|
|
||||||
**Наблюдение пользователя (в память проекта тоже записано):** Codex хорошо
|
**Наблюдение пользователя (в память проекта тоже записано):** Codex хорошо
|
||||||
ревьюит планы/постановки, не только код — при явной рамке уровня.
|
ревьюит планы/постановки, не только код — при явной рамке уровня.
|
||||||
|
|
||||||
|
## Прогон 2026-07-10 (позже): AppArmor-фикс — ловушка memfd
|
||||||
|
|
||||||
|
Рецепт «профиль на путь vendored bwrap» из handover-файла оказался
|
||||||
|
недостаточным: Codex ≥0.144 исполняет встроенный bwrap **из memfd**
|
||||||
|
(`bundled_bwrap.rs`, `memfd_create` в бинаре) — путевой attachment не
|
||||||
|
цепляется никогда. Коварство: прямой запуск vendored bwrap с диска под
|
||||||
|
профилем проходит (BWRAP_OK) — ложное подтверждение фикса; истина — в audit:
|
||||||
|
`profile="unconfined" comm="bwrap"` → transition. Рабочий фикс — профиль на
|
||||||
|
**сам бинарь codex**: метка наследуется через memfd-exec, `userns,`
|
||||||
|
срабатывает у ребёнка (стандартный приём Ubuntu для браузеров). Применён и
|
||||||
|
проверен: оба режима работают, изоляция цела. Обновлённый рецепт — в
|
||||||
|
handover-файле.
|
||||||
|
|
||||||
|
## Ретро 2026-07-10: расход контекста оркестратора за 3 цикла (тикеты 01–03)
|
||||||
|
|
||||||
|
Конвейер отработал (3 цикла: реализация → двойное слепое ревью → триаж →
|
||||||
|
узкие перепроверки → коммит; пересечение находок ревьюеров — ноль во всех
|
||||||
|
трёх, подтверждая ценность двух родословных). Главные пожиратели контекста
|
||||||
|
оркестратора, по убыванию:
|
||||||
|
|
||||||
|
1. **Находки ревью проходили через оркестратора до шести раз**: вердикт →
|
||||||
|
Write fix-промпта с находками «дословно» → пересказ резолюций в двух
|
||||||
|
recheck-промптах → SendMessage-эхо (tool result возвращает весь текст
|
||||||
|
сообщения). Лечение — «индекс у оркестратора, нагрузка файлами»:
|
||||||
|
вердикты в файлы, fix-промпт cat'ом, recheck ссылкой на файл отчёта.
|
||||||
|
Внесено в SKILL.md (роль оркестратора, этапы 4–5) и codex-exec.md.
|
||||||
|
2. **Review-промпт уходил полным текстом дважды** (файл для Codex +
|
||||||
|
параметр prompt Клод-субагента, ~80 строк × 2 × 3 тикета). Лечение —
|
||||||
|
один канонический файл, оба читают сами; скелеты — prompt-templates.md.
|
||||||
|
3. **Idle-пинги teammate-ревьюера**: ~7 пустых ходов; вердикт не приходит
|
||||||
|
сам — нужен запрос. Лечение — мандат «финальный акт — SendMessage с
|
||||||
|
коротким вердиктом», idle-пинги игнорировать.
|
||||||
|
4. Сага починки санбокса — разовая, задокументирована отдельно.
|
||||||
|
|
||||||
|
Обменный каталог прогона — временный, с полуслучайным префиксом (скретчпад
|
||||||
|
сессии или mktemp -d): не мусорит в репо и не переживает ребут (решение
|
||||||
|
пользователя).
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
# Скелеты промптов конвейера
|
||||||
|
|
||||||
|
Отработали боевой прогон 2026-07-10 (3 цикла, тикеты FTP/CSV DQ). Правило
|
||||||
|
использования: заполни скелет в `$SCRATCH` **один раз за прогон** и дальше
|
||||||
|
не переписывай — на каждую следующую задачу пиши только параметрический
|
||||||
|
блок и собирай финальный промпт конкатенацией. Плейсхолдеры `{{...}}`
|
||||||
|
заполняются значениями задачи; секции, помеченные «адаптируй», меняются
|
||||||
|
по смыслу задачи, остальное — стабильный boilerplate.
|
||||||
|
|
||||||
|
`$SCRATCH` здесь — общий обменный каталог прогона во **временном каталоге
|
||||||
|
ОС с полуслучайным префиксом**: скретчпад сессии из системного промпта
|
||||||
|
(он уже такой) или `mktemp -d` на прогон. Это безопасный вариант
|
||||||
|
(решение пользователя 2026-07-10): не мусорит в репо, не сталкивается с
|
||||||
|
параллельными прогонами и не переживает ребут машины — устаревшие обменные
|
||||||
|
файлы не накапливаются. Windows-кавеат из codex-exec.md в силе: путь —
|
||||||
|
forward-slash, не голый `/tmp` Git Bash.
|
||||||
|
|
||||||
|
## 1. Задача исполнителю (`codex exec`, workspace-write)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Задача: {{тикет/цель одной строкой}}
|
||||||
|
|
||||||
|
Рабочий каталог — корень репозитория {{repo}}. Ветка {{branch}} — работай
|
||||||
|
в ней, ветку не менять.
|
||||||
|
|
||||||
|
## Что делать
|
||||||
|
Реализуй {{тикет NN}} из {{путь к задаче-файлу}}. Задача самодостаточна:
|
||||||
|
постановка — в тикете, следуй ей буквально; чекбоксы — критерии приёмки.
|
||||||
|
Кажется неправильным — реализуй как написано и отметь сомнение в отчёте.
|
||||||
|
|
||||||
|
## Сначала прочитать (обязательно, до кода)
|
||||||
|
{{нумерованный список: задача-файл, спека, образцы кода, конвенции}}
|
||||||
|
|
||||||
|
## Порядок и дисциплина
|
||||||
|
{{адаптируй: TDD, порядок слоёв, команда тестов}}
|
||||||
|
|
||||||
|
## Границы (что трогать нельзя)
|
||||||
|
- **Коммитов не делать.** Никаких `git commit`/`git add`.
|
||||||
|
{{адаптируй: стабы, чужой код, существующие тесты, файлы вне репо}}
|
||||||
|
|
||||||
|
## Финальный отчёт (что вернуть)
|
||||||
|
1. Файлы с одной строкой «зачем» на каждый.
|
||||||
|
2. Команда тестов и итог прогона (счётчик, все зелёные).
|
||||||
|
3. Чекбоксы: какие закрыты, какие нет и почему.
|
||||||
|
4. Сомнения, если были.
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Слепое ревью (один файл на ОБОИХ ревьюеров)
|
||||||
|
|
||||||
|
Канонический файл не знает, кто его читает — куда класть вердикт, задаёт
|
||||||
|
обёртка вызова, и пути у ревьюеров разные (иначе коллизия):
|
||||||
|
|
||||||
|
- **Codex**: файл через stdin; отдельный файл вердикта не нужен — вердикт
|
||||||
|
и есть его `-o`-отчёт (`$SCRATCH/NN-review-codex.md`).
|
||||||
|
- **Клод-субагент**: в prompt — только обёртка: «прочитай {{путь к
|
||||||
|
каноническому файлу}} и выполни, рабочий каталог {{корень репо}};
|
||||||
|
полный индекс запиши в {{$SCRATCH/NN-review-claude.md}} — это вне репо,
|
||||||
|
мандату не противоречит (Write у тебя нет — Bash heredoc'ом); финальным
|
||||||
|
сообщением пришли только строку VERDICT, счётчики по severity и путь
|
||||||
|
к файлу».
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Ревью кода: {{тикет NN — суть}}
|
||||||
|
|
||||||
|
Ты — независимый адверсарный ревьюер. Рабочий каталог — корень
|
||||||
|
репозитория {{repo}}, ветка {{branch}}.
|
||||||
|
|
||||||
|
## Мандат (жёсткий)
|
||||||
|
- Исходники и окружение НЕ менять. Правок не вносить — только находки.
|
||||||
|
- Запускать тесты, проверять гипотезы, читать документацию — можно и
|
||||||
|
нужно; безопасные эмпирические проверки во временных каталогах вне
|
||||||
|
репо поощряются: вердикт с проверкой твёрже вердикта по прочтению.
|
||||||
|
- Никаких `git add`/`git commit`/`git checkout`.
|
||||||
|
- Итог — только индекс находок и строка VERDICT, без пересказа кода и
|
||||||
|
нарратива; куда его положить — сказано в вызове.
|
||||||
|
|
||||||
|
## Что ревьюишь
|
||||||
|
{{задача-файл + спека; что уже закоммичено и не ревьюится}}
|
||||||
|
Изменения (незакоммичены, смотри рабочее дерево): {{список файлов}}
|
||||||
|
Команда тестов (ожидается {{N}} passed): {{команда}}
|
||||||
|
|
||||||
|
## Фокус
|
||||||
|
{{адаптируй: 3–4 пункта под задачу — математика/краевые, соответствие
|
||||||
|
критериям, честность тестов, общий код/регрессии}}
|
||||||
|
|
||||||
|
## Формат файла находок — только индекс
|
||||||
|
SEVERITY(BLOCKER|MAJOR|MINOR|NIT) | файл:строка | суть одной фразой | как проверить/воспроизвести
|
||||||
|
В конце — отдельная строка: VERDICT: APPROVED | APPROVED_WITH_MINORS | CHANGES_REQUIRED
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Триаж исполнителю (`codex exec resume <thread-id>`)
|
||||||
|
|
||||||
|
Собирается конкатенацией — находки НЕ переписывать:
|
||||||
|
`cat шапка.md review-A.md review-B.md замечания.md > fix-prompt.md`
|
||||||
|
|
||||||
|
Шапка (стабильная):
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Триаж находок двух независимых ревью твоей реализации
|
||||||
|
|
||||||
|
Ниже — находки двух слепых ревью **дословно**. Закрой перечисленное,
|
||||||
|
больше ничего не меняй. По каждой — починка по TDD (сначала тест,
|
||||||
|
воспроизводящий находку) или аргументированное отклонение через
|
||||||
|
контракт/спеку и тест — голословное «не важно» не принимается.
|
||||||
|
Коммитов не делать.
|
||||||
|
|
||||||
|
Финальный отчёт: по каждой находке одной строкой — починено (чем) /
|
||||||
|
отклонено (довод + где зафиксировано); команда тестов, счётчик прогона,
|
||||||
|
список изменённых файлов.
|
||||||
|
```
|
||||||
|
|
||||||
|
Замечания оркестратора (опционально, коротко): фактура, которой нет у
|
||||||
|
исполнителя (проверенные тобой данные), решения уровня задачи
|
||||||
|
(вне скоупа / принять риск), приоритеты.
|
||||||
|
|
||||||
|
## 4. Узкая перепроверка (тем же ревьюером)
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Узкая повторная проверка: закрывают ли правки твои находки
|
||||||
|
|
||||||
|
Исполнитель обработал находки. Проверь ТОЛЬКО свои — полный повторный
|
||||||
|
обход не нужен. Мандат прежний: ничего не менять, только чтение и прогон
|
||||||
|
тестов.
|
||||||
|
|
||||||
|
Отчёт исполнителя с резолюциями: прочитай {{$SCRATCH/NN-fix-result.md}}.
|
||||||
|
Команда тестов (ожидается {{N}} passed): {{команда}}
|
||||||
|
|
||||||
|
Ответ — по каждой твоей находке одной строкой: CLOSED / NOT_CLOSED
|
||||||
|
(почему) / REJECTION_VALID / REJECTION_INVALID (почему). Финальная
|
||||||
|
строка: RECHECK: ALL_CLOSED | ISSUES_REMAIN
|
||||||
|
```
|
||||||
|
|
||||||
|
Кавеат: проверь, что Codex-ревьюер может читать `$SCRATCH` из своей
|
||||||
|
песочницы (temp-каталоги обычно читаемы в workspace-write; в этом прогоне
|
||||||
|
`-o`-файлы под `/tmp` работали). Если нет — резолюции по его находкам
|
||||||
|
передай текстом (только его находки, не весь отчёт).
|
||||||
Reference in new issue
Block a user