diff --git a/agents/.agents/skills/claude-subagent-playbook/SKILL.md b/agents/.agents/skills/claude-subagent-playbook/SKILL.md index 5225eeb..b27f293 100644 --- a/agents/.agents/skills/claude-subagent-playbook/SKILL.md +++ b/agents/.agents/skills/claude-subagent-playbook/SKILL.md @@ -3,14 +3,17 @@ name: claude-subagent-playbook disable-model-invocation: true description: >- Конвейер одной задачи со стороны Claude Code: постановка → свежий взгляд → - реализация Кодексом → слепое двойное ревью → синтез. Знания, не каркас. + реализация Кодексом → ревью по шкале риска (до слепого двойного) → + синтез. Знания, не каркас. --- -# Плейбук: одна задача через Кодекса и слепое двойное ревью +# Плейбук: одна задача через Кодекса и слепое ревью Ты — **оркестратор** в сессии Claude Code: планируешь, ставишь задачу, -раздаёшь работу, синтезируешь. Реализацию не пишешь. Это плейбук — знания и -приёмы; порядок этапов разумен, но подстраивай под задачу, а не наоборот. +раздаёшь работу, синтезируешь. Реализацию не пишешь. Это оптика, а не +обязательный конвейер: своё внимание держи для цели, ограничений, решений, +рисков и приёмки — субагенты выясняют и выполняют, решаешь ты. Порядок +этапов разумен, но подстраивай его под задачу, а не наоборот. ## Когда применять — и когда нет @@ -33,7 +36,10 @@ description: >- чтение логов) отдавай субагенту **до её начала**: изнутри она всегда выглядит «ещё на один шаг». Стоп-кран: **сам — максимум один заход** (одна команда с коротким выводом по единственной гипотезе); не - подтвердилось — делегируй. Механику (правки файлов по готовым решениям, + подтвердилось — делегируй. Перед запуском любого субагента назови его + вклад: защита контекста, свежий взгляд, специализация, параллельность + или отдельная среда; не можешь назвать — делай сам или продолжай + существующий тред. Механику (правки файлов по готовым решениям, скрипты, вёрстку) — `fast-worker`'у: твоё в них только короткий список решений. **Индекс — у тебя, полезная нагрузка — файлами между агентами**: вердикты, отчёты и промпты живут в `$SCRATCH` (обменный @@ -50,7 +56,8 @@ description: >- пишет в целом лучше, но верхнеуровнево планирует хуже — поэтому декомпозиция и постановка остаются у тебя. Механика вызова — [references/codex-exec.md](references/codex-exec.md). -- **Ревьюеры** — два, **разных родословных**, слепые друг к другу: +- **Ревьюеры** — до двух (шкала — этап 4), **разных родословных**, слепые + друг к другу: Claude-субагент (`adversarial-reviewer`; нет в среде — `deep-reasoner` или скептический `general-purpose`) и Codex **свежим тредом**, не тем, что писал код. @@ -70,7 +77,10 @@ description: >- - **Модель Claude-субагентов задавай явно**: Опус — рассуждения и ревью, Sonnet — механика. Без явной модели субагент наследует Fable, чьи лимиты самые дорогие — держи их для оркестрации (у `deep-reasoner`/`fast-worker` - модели пришиты в определениях). + модели пришиты в определениях). Две ручки эскалации: не хватило + глубины — повышай effort; не хватает качества суждения — повышай модель; + после двух слабых результатов подряд — свежий более сильный агент вместо + переноса неудачного контекста. ## Конвейер @@ -108,29 +118,46 @@ description: >- файл отчёта, харнесс будит по завершении; рецепты, ветки и ловушки — [references/codex-exec.md](references/codex-exec.md). Один писатель в дереве: пока Codex пишет — никто больше (казус с - форвардером — в [references/lessons.md](references/lessons.md)). Готово, - когда Codex вернул отчёт, в дереве нет правок, которых он не называл, + форвардером — в [references/lessons.md](references/lessons.md)). + После отчёта — **саморевью тем же тредом** (resume, effort medium; + заготовка — [references/prompt-templates.md](references/prompt-templates.md)): + исполнитель проходит свой diff против критериев как ревьюер и сам чинит + найденное, тебе — одна строка «found N, fixed N». Дёшево и снимает часть + находок до внешних глаз. Готово, когда Codex вернул отчёт, саморевью + пройдено, в дереве нет правок, которых он не называл, и дешёвая сквозная проверка (если она есть в репо) зелёная: гонял её исполнитель по промпту, а если ему она недоступна (docker, стенд) — ты, **до запуска ревьюеров**: иначе ревью уйдёт на код, который сквозной прогон ещё поменяет. -4. **Два слепых ревью параллельно.** Промпт — **один канонический файл в - `$SCRATCH` на оба ревью** (скелет и обёртки вызова — +4. **Ревью реализации — по шкале риска.** Саморевью уже пройдено (этап 3); + дальше по цене ошибки: **тривиальное** изменение (до-правка по готовому + диагнозу, механика, целиком накрытое детерминированной проверкой) — + внешних линий не гоняй, причину пропуска назови одной фразой; + **простое, но с заметной ценой ошибки** — один ревьюер другой + родословной, чем исполнитель (у нас — Клод при Codex-исполнителе; + одиночную линию выбирай по родословной, не по цене); **обычное и + сложнее** — два слепых ревью параллельно с разведёнными фокусами: одна + линия «по задаче» (соответствие постановке, критериям, границам), другая + «по коду» (корректность, инварианты, регрессии, честность тестов) — + разность семейств даёт разные находки, разность фокусов страхует от + дублирования, когда семейства сходятся. Промпт — **общий блок один на + обе линии** плюс крошечный файл линии (линза и префикс ID); собираются + два файла с разными путями (скелет и обёртки вызова — [references/prompt-templates.md](references/prompt-templates.md)): Codex - получает его через stdin, Клод-субагенту в prompt — короткая обёртка + получает свой через stdin, Клод-субагенту в prompt — короткая обёртка «прочитай файл X и выполни; индекс — в файл Y» (не дублируй текст промпта в параметре — это второй полный экземпляр в твоём контексте). - Содержание: путь к задаче-файлу + фокус (математика/краевые случаи, - соответствие критериям, честность тестов, артефакты); мандат и - поощрение эмпирических проверок уже в готовом boilerplate. Друг про + Содержание: путь к задаче-файлу + фокус и префикс ID линии; мандат, + формат индекса с устойчивыми ID и поощрение эмпирических проверок уже + в готовом boilerplate. Друг про друга не знают, твои выводы им не пересказывай. Вердикты — файлами с **разными путями**: у Codex это его `-o`-отчёт, Клод-ревьюеру путь и финальный акт (SendMessage только со строкой VERDICT, счётчиками и путём) задаёт готовая обёртка из шаблонов; его idle-уведомления результата не содержат, не жди из них ничего. После ревью сверь дерево (`git status`). Клод-ревьюеру можно поручить смотреть - артефакты (картинки из ноутбука). Этап закрыт, когда оба вердикта у тебя - индексами и дерево нетронуто; вердикт без единой находки засчитывай + артефакты (картинки из ноутбука). Этап закрыт, когда вердикты всех + выбранных линий у тебя индексами и дерево нетронуто; вердикт без единой находки засчитывай только после проверки его лога — работа, не отписка (приём — в [references/codex-exec.md](references/codex-exec.md)). 5. **Синтез и триаж.** Сведи вердикты по индексам: пересечения, противоречия. @@ -142,16 +169,36 @@ description: >- «Дословно» — это конкатенация: `cat triage-header.md вердикт-A.md вердикт-B.md > fix-prompt.md` Bash'ем (шапка готова в `references/prompts/`); Write'ом ты бы переписал те же находки в - контекст ещё раз. Свои замечания к триажу — только шапкой. Ты судишь уровнем - задачи: принять риск / вне скоупа. Повторная проверка — узкая (см. - «Свежесть»); её промпт не пересказывает резолюции — ссылается на файл - отчёта исполнителя. Этап закрыт, когда по каждой находке обоих ревью есть - решение: починено и перепроверено — или отклонено с доводом. -6. **Финал.** Артефакты проверь **своими глазами** (счётчик тестов, картинки, - прогон CLI) — ревью не заменяет твою приёмку. Обнови чекбоксы и статус - задачи-файла, коммит — по `/conventional-commits`, пользователю — выжимку: - вердикты, что принято/отклонено, что осталось. Готово, когда чекбоксы - проставлены, дерево чистое после коммита и пользователь получил отчёт. + контекст ещё раз. Статус каждого ID — `FIXED / REJECTED / OUT_OF_SCOPE / + NEEDS_DECISION`; два последних — решения твоего уровня, исполнитель + возвращает их тебе, а не решает молча. Резолюции и доводы он пишет в + свой файл отчёта, **тикет в триаже не правится**: правка тикета эхом + вкатывает весь его текст в твой контекст (пожиратель №1 прогона задачи + 13), выжимку в тикет перенесёт fast-worker на финале. Свои замечания к + триажу — только шапкой. Ты судишь уровнем задачи: принять риск / вне + скоупа. Повторная проверка — узкая (см. «Свежесть»); её промпт не + пересказывает резолюции — ссылается на файл отчёта исполнителя. + Третий круг триажа — точка вмешательства: доложи пользователю, почему + процесс не сходится и что меняешь (постановку, модель/effort, + исполнителя, границы); пятый не начинай без явного решения. Повторно + поднятая уже отклонённая находка — спор: отдельная узкая проверка + усиленным уровнем, не новый общий круг. Этап закрыт, когда у каждого ID + обоих ревью есть статус: FIXED и перепроверен, REJECTED с доводом, либо + OUT_OF_SCOPE / NEEDS_DECISION закрыт твоим решением. +6. **Финал.** В доказательства углубляйся постепенно: состав изменений и + сводки ревью → отдельные спорные фрагменты → полный diff, только когда + он ограничен и нужен для решения; зелёный журнал не читай, красный + отдай исполнителю или разборщику; проверку, доступную только агенту в + спецсреде, называй косвенным свидетельством. Ключевые артефакты проверь + **своими глазами** (счётчик тестов, картинки, прогон CLI) — ревью не + заменяет твою приёмку. Чекбоксы, статус и выжимку резолюций в тикет + переносит fast-worker из файла отчёта исполнителя (не твой Write). + Коммит — по `/conventional-commits`, пользователю — выжимка: вердикты, + что принято/отклонено, что осталось — плюс короткая саморефлексия: что + больше всего потратило контекст и что в следующий раз направить файлом + или субагентом (метрика: каждый полный артефакт проходит через твой + контекст не более одного раза). Готово, когда чекбоксы проставлены, + дерево чистое после коммита и пользователь получил отчёт. ## Пользователь в петле @@ -167,6 +214,18 @@ description: >- teammate-субагентов — шум, а не событие: не докладывай о них пользователю и не действуй по ним, если результат уже получен. +## Сбои координации + +- Нет ожидаемого файла или отчёта: один запрос короткого итога в тот же + тред; повторная тишина — свежий агент от сохранённых артефактов. +- Длинный рассказ пришёл сообщением: попроси сводку с путём к файлу, + рассказ дальше не переноси. +- Два писателя пересеклись в дереве: стоп обоим, назначь одного владельца, + продолжай от проверенного состояния; чужие правки не откатывай не + разобравшись. +- После финала удали обменный каталог прогона: долговечно только то, что + предусмотрено проектом (тикет, коммит, lessons). + ## Соседние скиллы - `/coordinator-loop` — автономный цикл очереди issue на стороне Codex diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index d89f344..ac61cff 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -5,6 +5,8 @@ скилл существует. Журнал накопительный, поэтому дистиллируй: когда урок поглощён SKILL.md или references, сжимай его запись здесь до строки-факта (дата, что случилось, куда поглощено) — иначе файл растёт бесконечно. +Новые факты прогона дописывай свободно; дистилляцию и правку старых +записей согласуй с пользователем — это долговечная эмпирика. ## 2026-07-06 — t2-ml-forecast, задача 05 (первый прогон; дистиллировано 2026-07-12) @@ -27,7 +29,9 @@ («Пользователь в петле»), codex-exec (фоновый запуск, раннер). - Безадресный resume подхватывает чужой тред. Поглощено: codex-exec. - Доводы отклонений — в файл задачи (свежий тред продолжает без контекста - предшественника). Поглощено: prompts/triage-header.md. + предшественника). Отменено 2026-07-19: доводы — в файл отчёта триажа, + свежий тред получает его путём; тикет в триаже не правится (эхо файла + задачи, прогон 13). Поглощено: prompts/triage-header.md, SKILL.md 5–6. - Не поглощено (держать в уме при постановке): правила задачи ранжировать явно («правило A главнее буквы E») — внутренние противоречия всплывают после починки. 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 0a03830..ab95adc 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompt-templates.md @@ -11,6 +11,12 @@ - [prompts/recheck-header.md](prompts/recheck-header.md) — узкая перепроверка (этап 5); может принести новую находку — это не нарушение узости, отправь её исполнителю тем же порядком. +- [prompts/result-contract.md](prompts/result-contract.md) — формат + результата вспомогательных агентов (исследователь, fast-worker, раннер); + исполнителю формат задаёт сам шаблон задачи. +- [prompts/runtime-language.md](prompts/runtime-language.md) — язык + обмена (английский); подшивается в конец каждого собранного промпта, + чтобы правило доехало до самих агентов. Правила: @@ -30,16 +36,23 @@ вызова скилла): ```bash -cat "$D/review-params.md" "$P/review-boilerplate.md" > "$D/review-prompt.md" +cat "$D/task-body.md" "$P/runtime-language.md" > "$D/task-prompt.md" +cat "$D/review-params.md" "$D/line-task.md" "$P/review-boilerplate.md" \ + "$P/runtime-language.md" > "$D/review-prompt-task.md" + # вторая линия: line-code.md -> review-prompt-code.md; + # одиночный ревьюер: line-rev.md -> 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" + "$D/notes.md" "$P/runtime-language.md" > "$D/fix-prompt.md" + # notes.md опционален — нет, так не включай +cat "$P/recheck-header.md" "$D/recheck-params.md" \ + "$P/runtime-language.md" > "$D/recheck-prompt.md" ``` ## 1. Задача исполнителю (`codex exec`, workspace-write) -Сохрани как `$D/task-prompt.md` — под этим именем его ждут примеры -codex-exec.md. +Напиши параметрический текст в `$D/task-body.md`; финальный +`$D/task-prompt.md` собирается `cat`'ом с хвостом языка (сборка выше) — +под этим именем его ждут примеры codex-exec.md. ```markdown # Task: {{ticket/goal in one line}} @@ -74,15 +87,30 @@ will run it before the reviews start. 4. Doubts, if any. ``` -## 2. Ревью: параметрический блок (один на ОБОИХ ревьюеров) +## 1а. Саморевью исполнителя (resume тем же тредом, effort medium) -Блок не знает, кто его читает; куда класть вердикт, задаёт обёртка вызова, -и пути у ревьюеров разные (иначе коллизия). Codex получает собранный файл -через stdin (вердикт = его `-o`-отчёт); Клод-субагенту в prompt — короткая -английская обёртка: +Отдельным ходом после отчёта о реализации, до внешних ревью — смена рамки +«автор → критик» отдельным ходом ловит больше, чем финальный пункт +чек-листа в промпте задачи: ```text -Read {{path to review-prompt.md}} and execute it. Working directory: +Now switch roles: you are a reviewer of your own diff. Walk it against the +task's acceptance criteria and boundaries. Fix what you find, stay inside +the task scope. Return one line: SELF-REVIEW: found N, fixed N — plus one +phrase per unfixed item, if any. +``` + +## 2. Ревью: общий блок + файл линии + +Общий параметрический блок (`review-params.md`) один на обе линии и не +знает, кто его читает; линзу и префикс ID задаёт файл линии, поэтому +собранных промптов — по одному на линию, с разными путями. Куда класть +вердикт, задаёт обёртка вызова, и пути вердиктов у ревьюеров тоже разные +(иначе коллизия). Codex получает свой собранный файл через stdin (вердикт += его `-o`-отчёт); Клод-субагенту в prompt — короткая английская обёртка: + +```text +Read {{path to this line's review prompt}} 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). Keep the index @@ -103,14 +131,35 @@ You are an independent adversarial reviewer. Working directory: repo root ## What you review {{task file + spec; what is already committed and NOT under review}} -Changes (uncommitted, see the working tree): {{file list}} +Changes under review: {{exact paths, prepared diff path, or diff command — +must let the reviewer tell reviewed work from unrelated tree noise}} Test command (expect {{N}} passed): {{command}} ## Focus -{{adapt: 3–4 points — math/edge cases, criteria compliance, test honesty, -shared code/regressions, artifacts}} +{{adapt: 2–3 extra points for this task — math/edge cases, artifacts, +shared code}} ``` +Файлы линий (`line-task.md` / `line-code.md`), по одному на слепую линию: + +```markdown +## Your line +FINDING PREFIX: TASK +Lens: compliance with the statement, acceptance criteria, boundaries, +intended observable result. +``` + +```markdown +## Your line +FINDING PREFIX: CODE +Lens: correctness, invariants, regressions, security, test honesty. +``` + +Одиночному ревьюеру (простая ступень шкалы этапа 4) — один `line-rev.md` +с обеими линзами и префиксом `REV`. По эмпирике прогонов естественное +распределение: Codex — CODE (дефекты нового кода), Клод — TASK (уровень +задачи и архитектуры). + Вариант для **этапа 2** (ревью постановки, кода изменений ещё нет) — тот же boilerplate, другой параметрический блок: @@ -132,6 +181,9 @@ Code to check the statement's facts against: {{file list with why}} criteria checkable and gameable?, observability}} ``` +Файл линии — тем же механизмом: только префикс (`SPEC-A` / `SPEC-B`, +одиночному обзору — `SPEC`); линза уже задана рамкой блока. + ## 3. Параметрические хвосты триажа и перепроверки `notes.md` (опционально, коротко, по-английски): фактура, которой нет у @@ -144,6 +196,11 @@ Implementer's report with resolutions: read {{$D/fix-result.md}}. Test command (expect {{N}} passed): {{command}} ``` +Вердикт узкой перепроверки Клода бери прямо из строки task-notification — +обёртка требует финальным актом только VERDICT-строку; файл перепроверки +читай лишь при `ISSUES_REMAIN` или споре (эмпирика 2026-07-13: экономит +чтение без потерь). + Кавеат: проверь, что Codex-ревьюер может читать `$SCRATCH` из песочницы (temp-каталоги обычно читаемы в workspace-write). Если нет — резолюции по его находкам передай текстом (только его находки, не весь отчёт). diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompts/recheck-header.md b/agents/.agents/skills/claude-subagent-playbook/references/prompts/recheck-header.md index 1e2ef88..aa977ee 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompts/recheck-header.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompts/recheck-header.md @@ -1,13 +1,17 @@ # Narrow re-check: do the fixes close your findings? -The implementer has processed the findings of your review. Check ONLY your -own findings — no full second pass. Mandate unchanged: modify nothing; -reading and running tests are allowed. +The implementer has processed the findings of your review; the path to +their resolutions report is appended below. Check ONLY your own findings — +no full second pass. Mandate unchanged: modify nothing; reading and +running tests are allowed. -Answer one line per your finding: CLOSED / NOT_CLOSED (why) / -REJECTION_VALID / REJECTION_INVALID (why). If you spot a NEW defect while -re-checking, report it in the same index format — narrowness limits scope, -not honesty. Final line: RECHECK: ALL_CLOSED | ISSUES_REMAIN +One line per your original ID: `ID | CLOSED | NOT_CLOSED (why) | +REJECTION_VALID | REJECTION_INVALID (why)`. Judge a rejection by its +argument in the resolutions report — contract and test, not taste. If you +spot a NEW defect while re-checking, report it with a new ID in the same +index format — narrowness limits scope, not honesty. -The implementer's report path, test command and expected counters are -appended below. +Final line: RECHECK: ALL_CLOSED | ISSUES_REMAIN + +The implementer's resolutions report path, test command and expected +counters are appended below. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompts/result-contract.md b/agents/.agents/skills/claude-subagent-playbook/references/prompts/result-contract.md new file mode 100644 index 0000000..4101280 --- /dev/null +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompts/result-contract.md @@ -0,0 +1,14 @@ +## Result contract + +Report through the channel your call wrapper assigns: + +- STATUS: complete | questions | blocked +- EVIDENCE: changed files, executed commands, final counters +- DECISIONS: only questions the coordinator must answer +- FINDINGS: severity, location, essence, how to verify +- NEXT: one concrete action or "none" + +Omit empty sections. No raw output, no reasoning narrative. If a report +file is assigned, put the full result there and return only STATUS, +counters and `REPORT: `; otherwise return one concise +message. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompts/review-boilerplate.md b/agents/.agents/skills/claude-subagent-playbook/references/prompts/review-boilerplate.md index bc52a65..f0b61c4 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompts/review-boilerplate.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompts/review-boilerplate.md @@ -11,7 +11,24 @@ ## Findings file format — index only -SEVERITY(BLOCKER|MAJOR|MINOR|NIT) | file:line (or spec/task-file section) | one-phrase essence | how to verify/reproduce +One line per finding, with a stable ID (FINDING PREFIX comes from your +parameter block): + +PREFIX-N | BLOCKER|MAJOR|MINOR|NIT | file:line (or spec/task-file section) | one-phrase essence | how to verify/reproduce + +- IDs are permanent: triage and re-checks refer to findings by ID only. +- Confirmations of correctness — one line per item, no elaboration. +- A NON-GATING CONSIDERATION is a material risk of a decision safely + deferred to a later owner: one line, no ID, no severity, not counted, + does not change the verdict. Do not prescribe the downstream + implementation. +- ZERO findings: the report must list the reviewed scope and every check + or hypothesis you actually ran, with outcomes. A bare approval line is + invalid and will be discarded. -Confirmations of correctness — one line per item, no elaboration. Final line: VERDICT: APPROVED | APPROVED_WITH_MINORS | CHANGES_REQUIRED + +For a statement/plan review: judge the document at its own level. +Open implementation details do not make it incomplete — APPROVED means no +defect the document itself must fix; record deferred-decision risks as +non-gating considerations. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompts/runtime-language.md b/agents/.agents/skills/claude-subagent-playbook/references/prompts/runtime-language.md new file mode 100644 index 0000000..648621a --- /dev/null +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompts/runtime-language.md @@ -0,0 +1,7 @@ +## Runtime language + +Write every exchange file — reports, findings indexes, resolutions, +prompts — in English. Do not infer the output language from the repository +or the conversation. Content that ships into the repository (code +comments, docs, commits, task files) follows the repository's own +conventions instead. diff --git a/agents/.agents/skills/claude-subagent-playbook/references/prompts/triage-header.md b/agents/.agents/skills/claude-subagent-playbook/references/prompts/triage-header.md index de45dbf..877f006 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/prompts/triage-header.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/prompts/triage-header.md @@ -1,17 +1,28 @@ # Triage of findings from independent blind reviews of your implementation -Below are the findings of the blind reviews, **verbatim**. Close what is -listed, change nothing else. For each finding, either: +Below are the findings of the blind reviews, **verbatim**. Process every +finding ID; change nothing outside their scope. Assign each ID exactly one +disposition: -- a TDD fix — first a test reproducing the finding, then the fix; or -- a reasoned rejection via contract/spec and test — a bare "not important" - is not accepted. +- FIXED — a TDD fix: first a test reproducing the finding, then the fix; + name the check that proves closure; +- REJECTED — a reasoned rejection via contract/spec and test; a bare + "not important" is not accepted; +- OUT_OF_SCOPE — needs a boundary decision; state which one; +- NEEDS_DECISION — a product, architecture, or risk choice a technical + argument cannot settle; state the open question. -No commits. Record rejection arguments in the task file so a fresh thread -can continue without this thread's context. +OUT_OF_SCOPE and NEEDS_DECISION belong to the coordinator — do not +silently decide them yourself. -Final report: one line per finding — fixed (how) / rejected (argument + -where recorded); test command, run counters, list of changed files. +No commits. Do NOT edit the task file: write detailed resolutions and +rejection arguments to your assigned report file — re-checks and fresh +threads will read that file by path; the task file is updated separately +at the end of the run. + +Final report: one line per ID — `ID | disposition | one-phrase essence`; +then disposition counters, test command with counters, list of changed +files, and open questions for the coordinator, if any. Orchestrator notes, if present below, carry task-level decisions (out of scope / risk accepted) and verified facts you don't have — they are not