From 36fc76ff9040740184d656f79856e61fab27d205 Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Mon, 3 Aug 2026 21:38:37 +0300 Subject: [PATCH] =?UTF-8?q?feat(skills):=20claude-subagent-playbook=20?= =?UTF-8?q?=E2=80=94=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=20=D0=BD=D0=B5=20=D0=B1=D0=B5=D1=80=D1=91?= =?UTF-8?q?=D1=82=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - после разворота ролей (реализация Опусом, ревью Кодексом) ревьюер продавливает исполнителя формальными решениями: за прогоны #39, #40 и #50 около 28 находок и ноль отклонений. - Что: - в triage-header добавлен блок «ревью — свидетельство, а не приказ»: отклонение равноправно починке, маршрут ревьюера — предложение. - определение NEEDS_DECISION расширено случаем, когда выбор делает сама починка, независимо от объёма правки. - в recheck-header добавлен суд над лечением: перебор — тоже дефект, а NOT_CLOSED требует существующего закрывающего состояния и цены альтернативы. - в lessons закрыт долг четырёх прогонов и сведена очередь на механизм. - Проверка: - следующий полный прогон плейбука: в триаже должны появиться отклонения или закрытия своим маршрутом с доводом. --- .../references/lessons.md | 58 ++++++++++++++++--- .../references/prompts/recheck-header.md | 10 ++++ .../references/prompts/triage-header.md | 17 +++++- 3 files changed, 76 insertions(+), 9 deletions(-) diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index 57242bd..36e8604 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -649,8 +649,7 @@ compose down`); отдельных событий эскалации в `--json` Штатная конфигурация: реализация — Опус-мастеровой, линия кода — Кодекс (high) свежим тредом, линия задачи и вкуса — свежий Опус. Долг двух прошлых прогонов закрыт руками: в шапку триажа и в шапку перепроверки дописаны абзацы про -соразмерность лечения (заготовки прогона; кандидат — перенести в -`prompts/triage-header.md` и `prompts/recheck-header.md`). +соразмерность лечения (заготовки прогона; перенесены в шапки 2026-08-03). - **Ручка сработала трижды за один прогон.** Перепроверка вкусовой линии сама оценила правку спеки на перебор (вышла за границу промпта — принята @@ -722,9 +721,7 @@ compose down`); отдельных событий эскалации в `--json` ALL_CLOSED + 1 новый NIT (повтор фразы в спеке, внесённый починкой TASK-2) — поправил сам по месту. Тесты 353 → 383. - **Долг скилла остаётся тот же**: абзацы про соразмерность лечения третий - прогон подряд пишутся руками. Кандидат прежний — перенести в - `prompts/triage-header.md` и `prompts/recheck-header.md` (тексты этого - прогона годятся как есть). + прогон подряд пишутся руками. Закрыт 2026-08-03. ## 2026-08-02: сломанный прибор доезжает до коммита (clickstream v2, тикет #50) @@ -778,6 +775,51 @@ compose down`); отдельных событий эскалации в `--json` ~31 мин, саморевью 3/3; слепые ревью — Опус 28 инструментов / 7 находок, Кодекс 120 команд / 1, пересечение **ноль**; триаж 8 FIXED + второй круг на 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). 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 aa977ee..fe1e80f 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 @@ -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 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) | REJECTION_VALID | REJECTION_INVALID (why)`. Judge a rejection by its argument in the resolutions report — contract and test, not taste. If you 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 877f006..5aa8def 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 @@ -10,11 +10,26 @@ disposition: "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. + 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 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 rejection arguments to your assigned report file — re-checks and fresh threads will read that file by path; the task file is updated separately