refactor(skill): coordinator-loop вокруг «индекс, не полный текст»
Переписан SKILL.md (194→159): user-invoked, ведущее правило «работай по индексу», per-finding триаж делегирован claude-team-review, режимы ревью по риску (два лена разными субагентами на риске), коммит-гейт берёт только сводку тестов, финал = ревью на соответствие замыслу + handoff под ручную кросс-линию. README, rationale и июньский context-economy handoff подровнены; добавлен handoff по сессии. Прошёл /claude-team-review — 2 раунда, APPROVED. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
9ceeb0ca4e
commit
b0998780d3
5 files changed
+194
-159
No files matched your search
+7
-1
@@ -154,6 +154,11 @@ Implementer возвращает компактный статус `DONE / DONE_
|
||||
читаемы менти, реальное решение живёт в петле, нет огромного плана.
|
||||
- Их **спек-стадия ревью** у нас по большей части избыточна: «выполнили ли спеку» уже проверяет
|
||||
петля `/goal`. Берём только качественную линзу.
|
||||
> **Поправка 2026-07-02 (по опыту эксплуатации).** Отменено. На практике два лена ревью
|
||||
> **разными субагентами** (task-lens «сделал ли то, что в issue/спеке» + code-lens «качество
|
||||
> и межмодульное») находят **непересекающиеся** множества — и не так редко. Держим оба, но
|
||||
> как **полный режим** (по порогу риска), а task-lens можно на дешёвой модели. См. раздел
|
||||
> «Режимы ревью» в `SKILL.md`.
|
||||
|
||||
Вывод: `coordinator-loop` остаётся отдельным навыком (своя идентичность — цепочка issue из
|
||||
`/to-issues`, гейт-классификация находок, владение коммитом). Заимствуем механику делегирования,
|
||||
@@ -205,7 +210,8 @@ Implementer возвращает компактный статус `DONE / DONE_
|
||||
через контекст). Куда: см. observability-handoff (`coordinator-runs/`).
|
||||
- **Модель по роли.** Куда: «Облегчённый и полный режим» / «Контракт задания worker-у».
|
||||
- **Только качественная стадия ревью** (спек несёт `/goal`). Куда: «Роли» (ревьюер) + «Когда
|
||||
звать независимого ревьюера».
|
||||
звать независимого ревьюера». **(Отменено — см. поправку 2026-07-02 выше в разделе «Prior
|
||||
art»: два лена ревью держим, спек-линза не избыточна.)**
|
||||
|
||||
## Связь с handoff про наблюдаемость
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# Handoff: рефрейм coordinator-loop вокруг «индекс, не полный текст»
|
||||
|
||||
Дата: 2026-07-02 MSK
|
||||
Статус: сделано и принято независимым ревью (`/claude-team-review`, 2 раунда, APPROVED). Не закоммичено на момент написания записки — коммит идёт следом.
|
||||
|
||||
## Зачем этот handoff
|
||||
|
||||
Зафиксировать, что и почему сделано в сессии переписывания навыка, пока свежо. Сам дизайн живёт в `SKILL.md` — сюда его **не** дублирую, только решения, их обоснование и что осталось. Продолжает линию июньских handoff'ов (`2026-06-14-*`): те диагностировали болезнь, эта — лечение.
|
||||
|
||||
## Что сделано
|
||||
|
||||
`SKILL.md` переписан целиком (194 → 159 строк). Ядро — одно ведущее правило: **координатор работает по индексу, а не по полному тексту** (полный diff / вывод тестов / нарратив ревью в его контекст не входят). Это прямое лекарство от главной болезни из июньского handoff'а «context-economy»: контекст координатора пух от вычитывания сырья, компактился, дальше косяки.
|
||||
|
||||
Подробности — в `../SKILL.md`. README и `references/rationale.md` подровнены под новый дизайн; в июньский `2026-06-14-…-context-economy.md` вписана датированная поправка (см. ниже).
|
||||
|
||||
## Ключевые решения (и чем обоснованы)
|
||||
|
||||
- **User-invoked** (`disable-model-invocation: true`). Навык всегда зовут руками — авто-инвокация была no-op'ом, платившим context load за фразу «не включай меня».
|
||||
- **Per-finding триаж делегирован `claude-team-review`** (single source of truth). У координатора только chain-level корзины (риск / вне скоупа). Проверено на опыте: у team-review триаж встроен, «не применять слепо» — тоже.
|
||||
- **Ревьюера запускает сам worker** внутри `/goal`, не координатор → нарративы ревью не доходят до координатора. Чистота контекста «по построению».
|
||||
- **Режимы ревью по риску/стоимости**: тривиальный → `/goal` + отдельное саморевью свежим взглядом; обычный → один прогон team-review по коду; риск/гейт → два прогона **разными субагентами** (по задаче + по коду), проверку по задаче можно на дешёвой модели. Два лена ловят непересекающиеся находки — **опровергает** прежний наклон июньского handoff'а выкинуть спек-линзу (там вписана поправка).
|
||||
- **Коммит у координатора**; полный тест-сет на гейте, но в контекст координатора идёт **только сводка** (код возврата + имена упавших), не вывод. Эту дыру (полный тест-лог возвращал Пожар A в координатора) поймал ревьюер — не я.
|
||||
- **Финал цепочки**: (1) рекомендованное ревью на соответствие замыслу **сильной моделью** — целое против исходной спеки, ловит дрейф, который per-issue срезы не видят; это Codex (одна линия), берёт охват, не кросс-линию; (2) **handoff**, который готовит опциональный ручной кросс-линия проход Клодом и фиксирует непокрытую родословную как видимый риск.
|
||||
- **Родословная**: внутри Кодекса только модели Codex → team-review из-под Codex = ревьюер той же линии. Кросс-линия — это отдельный рабочий процесс пользователя (Клод пишет проектные документы, Кодекс выполняет), взаимодействие агентов **намеренно не автоматизировано**. Поэтому кросс-линия остаётся ручным опциональным проходом вне скилла.
|
||||
|
||||
## Процесс проверки (сам по себе — рабочий приём)
|
||||
|
||||
Дешёвый self-проход «проверь свежим взглядом» до дорогого ревью — сокращает список находок; сохранён в память `feedback_fresh_eyes_first_pass.md`. Полное ревью — через `/claude-team-review` (Codex-эквивалент `/adversarial-review` для опинейтед-скиллов не годится — «улучшит» намеренный дизайн). Ревью нашло 3 important + 4 minor, все закрыты, вердикт APPROVED.
|
||||
|
||||
## Что не сделано / открытые вопросы
|
||||
|
||||
- **Не замерено на реальной цепочке.** Числа-ориентиры из июньского handoff'а (пик контекста 77 %, 413 КБ diff-чтений, 103 полных тест-прогона) — baseline; рефрейм под них ещё не гонялся. Кандидат-носитель рядом: `.scratch/training-feedback-loop/issues/` в проекте pole-equipment-detector.
|
||||
- **Кандидаты-фиксы намеренно не внесены в SKILL.md** (непроверены): файловый канал `coordinator-runs/`, демоушн закрытых issue в `summary.md`, точечные тесты в петле vs полный сет на гейте как метрика, live-log наблюдаемости. Живут в июньских handoff'ах — вносить по факту замера, не вслепую.
|
||||
- Развилка «автор-воркер vs свежий ревьюер как верификатор нериск-находок» решена в пользу воркера с богатым контрактом — но это выбор, не доказанная истина.
|
||||
|
||||
## Где что лежит
|
||||
|
||||
- Источник-правды: `~/dotfiles/agents/.agents/skills/coordinator-loop/` (git, ветка master, remote gitverse). `~/.claude/skills` — симлинк на `~/dotfiles/agents/.agents/skills` (тот же инод), правка одной точки меняет обе.
|
||||
- Память сессии: `~/.claude/projects/-home-ddmitry-sources-pole-equipment-detector/memory/feedback_fresh_eyes_first_pass.md`.
|
||||
|
||||
## Рекомендуемые следующие шаги
|
||||
|
||||
1. Прогнать реальную цепочку (`.scratch/training-feedback-loop/issues/`) под новым `coordinator-loop`, замерить числа против baseline.
|
||||
2. По факту замера решить судьбу кандидатов (файловый канал / демоушн / метрика тестов).
|
||||
3. Если понадобится развести наблюдаемость и файловый канал — свести два июньских handoff'а в один дизайн (их «Связь» это предусматривала).
|
||||
|
||||
## Suggested skills
|
||||
|
||||
- `coordinator-loop` — при реальном прогоне цепочки для замера.
|
||||
- `writing-great-skills` — если по итогам замера править `SKILL.md` (держать от разрастания).
|
||||
- `claude-team-review` — ревью правок навыка (не `adversarial-review`).
|
||||
- `conventional-commits` — для коммитов изменений навыка.
|
||||
Reference in new issue
Block a user