feat(skills): claude-subagent-playbook — исполнитель не берёт ревью на веру
- Зачем:
- после разворота ролей (реализация Опусом, ревью Кодексом) ревьюер
продавливает исполнителя формальными решениями: за прогоны #39, #40 и
#50 около 28 находок и ноль отклонений.
- Что:
- в triage-header добавлен блок «ревью — свидетельство, а не приказ»:
отклонение равноправно починке, маршрут ревьюера — предложение.
- определение NEEDS_DECISION расширено случаем, когда выбор делает сама
починка, независимо от объёма правки.
- в recheck-header добавлен суд над лечением: перебор — тоже дефект, а
NOT_CLOSED требует существующего закрывающего состояния и цены
альтернативы.
- в lessons закрыт долг четырёх прогонов и сведена очередь на механизм.
- Проверка:
- следующий полный прогон плейбука: в триаже должны появиться
отклонения или закрытия своим маршрутом с доводом.
This commit is contained in:
1 parent
c18472e360
commit
36fc76ff90
3 files changed
+76
-9
No files matched your search
@@ -649,8 +649,7 @@ compose down`); отдельных событий эскалации в `--json`
|
|||||||
Штатная конфигурация: реализация — Опус-мастеровой, линия кода — Кодекс (high)
|
Штатная конфигурация: реализация — Опус-мастеровой, линия кода — Кодекс (high)
|
||||||
свежим тредом, линия задачи и вкуса — свежий Опус. Долг двух прошлых прогонов
|
свежим тредом, линия задачи и вкуса — свежий Опус. Долг двух прошлых прогонов
|
||||||
закрыт руками: в шапку триажа и в шапку перепроверки дописаны абзацы про
|
закрыт руками: в шапку триажа и в шапку перепроверки дописаны абзацы про
|
||||||
соразмерность лечения (заготовки прогона; кандидат — перенести в
|
соразмерность лечения (заготовки прогона; перенесены в шапки 2026-08-03).
|
||||||
`prompts/triage-header.md` и `prompts/recheck-header.md`).
|
|
||||||
|
|
||||||
- **Ручка сработала трижды за один прогон.** Перепроверка вкусовой линии
|
- **Ручка сработала трижды за один прогон.** Перепроверка вкусовой линии
|
||||||
сама оценила правку спеки на перебор (вышла за границу промпта — принята
|
сама оценила правку спеки на перебор (вышла за границу промпта — принята
|
||||||
@@ -722,9 +721,7 @@ compose down`); отдельных событий эскалации в `--json`
|
|||||||
ALL_CLOSED + 1 новый NIT (повтор фразы в спеке, внесённый починкой TASK-2) —
|
ALL_CLOSED + 1 новый NIT (повтор фразы в спеке, внесённый починкой TASK-2) —
|
||||||
поправил сам по месту. Тесты 353 → 383.
|
поправил сам по месту. Тесты 353 → 383.
|
||||||
- **Долг скилла остаётся тот же**: абзацы про соразмерность лечения третий
|
- **Долг скилла остаётся тот же**: абзацы про соразмерность лечения третий
|
||||||
прогон подряд пишутся руками. Кандидат прежний — перенести в
|
прогон подряд пишутся руками. Закрыт 2026-08-03.
|
||||||
`prompts/triage-header.md` и `prompts/recheck-header.md` (тексты этого
|
|
||||||
прогона годятся как есть).
|
|
||||||
|
|
||||||
## 2026-08-02: сломанный прибор доезжает до коммита (clickstream v2, тикет #50)
|
## 2026-08-02: сломанный прибор доезжает до коммита (clickstream v2, тикет #50)
|
||||||
|
|
||||||
@@ -778,6 +775,51 @@ compose down`); отдельных событий эскалации в `--json`
|
|||||||
~31 мин, саморевью 3/3; слепые ревью — Опус 28 инструментов / 7 находок,
|
~31 мин, саморевью 3/3; слепые ревью — Опус 28 инструментов / 7 находок,
|
||||||
Кодекс 120 команд / 1, пересечение **ноль**; триаж 8 FIXED + второй круг
|
Кодекс 120 команд / 1, пересечение **ноль**; триаж 8 FIXED + второй круг
|
||||||
на 1 новую находку, 0 отклонённых; перепроверки 15 и 18; тесты 383 → 394.
|
на 1 новую находку, 0 отклонённых; перепроверки 15 и 18; тесты 383 → 394.
|
||||||
- **Долг четвёртый прогон подряд тот же**: шапки соразмерности в
|
- **Долг четвёртый прогон подряд тот же**: шапки соразмерности так и не
|
||||||
`prompts/triage-header.md` и `prompts/recheck-header.md` так и не
|
перенесены. Закрыт 2026-08-03.
|
||||||
перенесены.
|
|
||||||
|
## 2026-08-03: долг соразмерности закрыт, и найдена его настоящая причина
|
||||||
|
|
||||||
|
Сессия без прогона: разбор `lessons.md` по `/writing-great-skills` и правка
|
||||||
|
шапок. Долг, висевший с #39, закрыт — правки лежат в
|
||||||
|
`prompts/triage-header.md` и `prompts/recheck-header.md`, содержание там,
|
||||||
|
здесь не дублирую.
|
||||||
|
|
||||||
|
- **Причина не в размере починки, а в весе слова** (диагноз пользователя).
|
||||||
|
Пока код писал Кодекс, а ревьюил Опус, послушный исполнитель был прав:
|
||||||
|
ревьюер сильнее как архитектор. После разворота ролей — вкусовая
|
||||||
|
реализация Опусом, ревью Кодексом — послушание стало вредным: Кодекс
|
||||||
|
очень сильный исполнитель, но слабее как мыслитель-архитектор, настойчив,
|
||||||
|
склонен к формализации без учёта высокоуровневой цели и продавливает
|
||||||
|
Опуса на свои решения. Перекос усиливает разница ступеней: Опус на medium
|
||||||
|
против Сола на high уступает ещё и по «званию».
|
||||||
|
- **Цифра под диагнозом**: #39, #40, #50 — около 28 находок, ноль
|
||||||
|
отклонений.
|
||||||
|
- **Два кандидата сняты сверкой с эмпирикой, а не по вкусу.** Требование
|
||||||
|
объявлять ослабление порога отдельной строкой — против него сам урок #50
|
||||||
|
(«объявление не заменяет проверку необходимости»), а оба случая (#40,
|
||||||
|
#50) поймала перепроверка. Пункт «оценивай довод исполнителя, а не факт
|
||||||
|
несогласия» — дубль строки, уже стоявшей в шапке.
|
||||||
|
- **Правило об арбитре в споре не писалось намеренно**: спора ни разу не
|
||||||
|
было (ноль отклонений), правило под несуществующую ситуацию есть
|
||||||
|
перерегулирование. Ждём первого отклонения — новые шапки как раз должны
|
||||||
|
его породить.
|
||||||
|
- **Разбор самого файла**: 783 строки, 22 записи; собственное правило
|
||||||
|
«поглощён урок — сожми до строки-факта» сработало один раз (07-12) и с
|
||||||
|
тех пор нет — записи после него по 30–80 строк, часть держит вторую копию
|
||||||
|
действующих правил SKILL.md. Дистилляция архива вынесена отдельным
|
||||||
|
заходом.
|
||||||
|
|
||||||
|
**Очередь на механизм** (сведена сюда, чтобы не искать по всему файлу):
|
||||||
|
блок открытых решений в промпте ревью — «какие решения ещё открыты и кем
|
||||||
|
владеются» (#36); абзац от линии Кодекса «что сделает эту правку
|
||||||
|
провальной, даже если все критерии зелёные» (#50); приёмы против сломанного
|
||||||
|
прибора оркестратора (#38 — `PYTHONDONTWRITEBYTECODE=1` и чистое дерево
|
||||||
|
крайними прогонами; #50 — арифметика чисел, попадающих в спеку, и явное
|
||||||
|
зерно; #39/#40 — тонкий лог перепроверки как повод проверить MAJOR своим
|
||||||
|
зондом; #40/#50 — один пример целиком на приёмке); мелочи по месту —
|
||||||
|
сведение вердиктов по совпадению явления, а не формулировки (этап 5), ревью
|
||||||
|
постановки не запускает команды тикета (этап 2), оговорка про `< /dev/null`
|
||||||
|
рядом с приёмом в `codex-exec.md`; старьё — ранжирование правил задачи
|
||||||
|
(07-07), эхо файла задачи (07-13), A/B на gpt-5.6-terra (07-13), пп. 1–2 и 4
|
||||||
|
одёргиваний (07-31).
|
||||||
@@ -5,6 +5,16 @@ their resolutions report is appended below. Check ONLY your own findings —
|
|||||||
no full second pass. Mandate unchanged: modify nothing; reading and
|
no full second pass. Mandate unchanged: modify nothing; reading and
|
||||||
running tests are allowed.
|
running tests are allowed.
|
||||||
|
|
||||||
|
Judge the repair, not only the closure:
|
||||||
|
|
||||||
|
- A fix that reaches further than your finding required is itself a
|
||||||
|
defect — and the likeliest source of it is your own prescription, so
|
||||||
|
put that on trial too.
|
||||||
|
- Before writing NOT_CLOSED, check that a closing state exists at all,
|
||||||
|
and price the alternative. A demand the platform cannot satisfy, or one
|
||||||
|
that trades away a real property to guard against deliberate misuse, is
|
||||||
|
not a valid NOT_CLOSED.
|
||||||
|
|
||||||
One line per your original ID: `ID | CLOSED | NOT_CLOSED (why) |
|
One line per your original ID: `ID | CLOSED | NOT_CLOSED (why) |
|
||||||
REJECTION_VALID | REJECTION_INVALID (why)`. Judge a rejection by its
|
REJECTION_VALID | REJECTION_INVALID (why)`. Judge a rejection by its
|
||||||
argument in the resolutions report — contract and test, not taste. If you
|
argument in the resolutions report — contract and test, not taste. If you
|
||||||
|
|||||||
@@ -10,11 +10,26 @@ disposition:
|
|||||||
"not important" is not accepted;
|
"not important" is not accepted;
|
||||||
- OUT_OF_SCOPE — needs a boundary decision; state which one;
|
- OUT_OF_SCOPE — needs a boundary decision; state which one;
|
||||||
- NEEDS_DECISION — a product, architecture, or risk choice a technical
|
- NEEDS_DECISION — a product, architecture, or risk choice a technical
|
||||||
argument cannot settle; state the open question.
|
argument cannot settle; state the open question. This includes the case
|
||||||
|
where your own fix would settle such a choice — the size of the edit is
|
||||||
|
irrelevant.
|
||||||
|
|
||||||
OUT_OF_SCOPE and NEEDS_DECISION belong to the coordinator — do not
|
OUT_OF_SCOPE and NEEDS_DECISION belong to the coordinator — do not
|
||||||
silently decide them yourself.
|
silently decide them yourself.
|
||||||
|
|
||||||
|
## The review is evidence, not orders
|
||||||
|
|
||||||
|
A review report is a set of claims, not a list of instructions. Verify
|
||||||
|
every finding yourself. You own the task; the review is there to help.
|
||||||
|
|
||||||
|
- **Rejection is a normal outcome, not a conflict.** A REJECTED with an
|
||||||
|
argument from contract and test is worth exactly as much as a FIXED. A
|
||||||
|
run with no rejection and no finding closed by your own route says
|
||||||
|
nothing about the quality of the review — it is a reason to re-read
|
||||||
|
what you took on trust.
|
||||||
|
- **The reviewer's route is a proposal.** Closing a finding another way
|
||||||
|
is fine when the argument is stronger; name the route you took and why.
|
||||||
|
|
||||||
No commits. Do NOT edit the task file: write detailed resolutions and
|
No commits. Do NOT edit the task file: write detailed resolutions and
|
||||||
rejection arguments to your assigned report file — re-checks and fresh
|
rejection arguments to your assigned report file — re-checks and fresh
|
||||||
threads will read that file by path; the task file is updated separately
|
threads will read that file by path; the task file is updated separately
|
||||||
|
|||||||
Reference in new issue
Block a user