модели субагентов: двое из девяти опущены на sonnet, критерий переписан
Сквозной проход по тринадцати уставам с одним вопросом: кого из девяти opus-агентов можно опустить без потери. Ответ — двоих, и оба не из конвейера. По дороге выяснилось, что критерий, которым модели раздавались до сих пор, отвечает не на тот вопрос. Деление applicative против generative смотрит, откуда проход берёт критерий, а платит проект за разбирательство с находкой. Рабочий признак другой: находка со ссылкой на записанный источник — строку спеки, цель в манифесте, значение в конфиге — опровергается открытием файла, и дешёвая модель ошибается здесь проверяемо; находка-суждение опровергается рассуждением, а рассуждение стоит триажа или человека. Признак объясняет и прежнюю раскладку лучше, чем она сама себя: gate, code и ops дёшевы не потому, что у них чек-лист, а потому что каждая их находка показывает пальцем на строку. doc-code-drift переведён на sonnet. Закрытый перечень из восьми правил, каждое — пара «факт в документе ↔ команда, которой он проверяется». Устав прямо запрещает суждение, требует формы «написано X, в коде Y, проверено командой Z» и правила «нечем проверить — не находка». Ложная находка опровергается той же командой, которая её породила. task-form переведён на sonnet, и решило не устройство, а потребитель. Его находка это готовая формулировка, которую человек читает и отклоняет командой edit, а не оркестратор, который молча реализует всё прочитанное. Довод, державший triage наверху, здесь не работает вовсе: ошибка стоит строки чтения. review-specs рассмотрен всерьёз и оставлен на opus — по причине, обратной общей. Он самый частый opus-проход, идёт и в design, и на коде. По устройству applicative: SKILL.md сам называл стадию 1 «два applicative-прохода, оба дешёвые», платя за одного sonnet, за другого opus. Расхождение закрыто текстом, а не переводом. Наверху его держит направление code → spec, где надо заметить отсутствие: тихий фолбэк, самодеятельный дефолт, проглоченную ошибку. Прочие держат opus из-за цены ложных находок, этот — из-за цены пропущенных, а пропуск не оставляет следа ни в отчёте, ни в границах покрытия. Остальные шестеро оставлены с причиной у каждого: adversary и rubric порождают критерий по построению, architecture — чистое суждение о структуре, triage — сток, doc-consistency путал бы «упомянуто в двух местах» с «оба утверждают», basics заведён этой же сессией и половина его вопросов суждение. Это разбор уставов, а не замер, и так и записано. calibration.md двигает модель инъекцией дефекта; инъекции не было. Двое переведены потому, что цена их ошибки ограничена сверху независимо от модели. Поправлена проза, ссылавшаяся на прежние модели: «оба судьи на opus» в cadence, canon/SKILL, canon.md и docs/SKILL — теперь дорог по-настоящему один doc-consistency, второй читает репозиторий целиком, но идёт на sonnet. В tasks/SKILL снято «отсюда и разные модели»: у task-form и doc-wording она теперь одна, а разрез по глубине остался. Тема 35 в DECISIONS.md, следствия 134-136. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2412,3 +2412,78 @@ JJJ): у профиля обязан быть один правильный от
|
||||
заодно отправляло трёхстрочную правку и переборку пяти узлов в один профиль.
|
||||
Признаков нужно два: класс отвечает за обратимость, объём — за цену
|
||||
разбирательства.
|
||||
|
||||
## 35. Ревизия моделей: переведены двое из девяти, и критерий оказался не тот (2026-08-06)
|
||||
|
||||
Сквозной проход по тринадцати уставам с одним вопросом: кого из девяти
|
||||
`opus`-агентов можно опустить на `sonnet` без потери. Ответ — двоих, и по дороге
|
||||
выяснилось, что критерий, которым конвейер до сих пор раздавал модели, отвечает
|
||||
не на тот вопрос.
|
||||
|
||||
**ААББЦЦ. Модель выбирается по цене ошибки, а не по роду прохода.** Прежнее
|
||||
деление — applicative против generative — раздаёт модели по тому, **откуда**
|
||||
проход берёт критерий. Но платит проект не за происхождение критерия, а за
|
||||
разбирательство с находкой. Рабочий признак:
|
||||
|
||||
- находка приходит **со ссылкой на записанный источник** (строка спеки, цель в
|
||||
манифесте, значение в конфиге, номер правила) — её опровержение стоит одного
|
||||
открытия файла. Дешёвая модель ошибается здесь **проверяемо**;
|
||||
- находка есть **суждение** («это второй способ», «этот оракул негоден», «эти два
|
||||
документа противоречат») — опровержение стоит рассуждения, а рассуждение стоит
|
||||
триажа или человека.
|
||||
|
||||
Признак объясняет прежнюю раскладку лучше, чем она сама себя: `gate`, `code` и
|
||||
`ops` не потому дёшевы, что применяют чек-лист, а потому, что каждая их находка
|
||||
показывает пальцем на строку.
|
||||
|
||||
**ААББЧЧ. `doc-code-drift` → `sonnet`.** У него закрытый перечень из восьми
|
||||
правил, и каждое — пара «факт в документе ↔ команда, которой он проверяется».
|
||||
Устав прямо запрещает суждение («верность и полноту не проверяешь»), требует
|
||||
формы «написано X, в коде Y, проверено командой Z» и правила «нечем проверить —
|
||||
не находка». Ложная находка опровергается **той же командой, которая её
|
||||
породила**. Это самый чистый случай признака за весь разбор.
|
||||
|
||||
**ААББШШ. `task-form` → `sonnet`.** Семь пронумерованных правил с таблицами форм
|
||||
и поимённым перечнем подмен. Но решило не это, а потребитель: его находка —
|
||||
готовая формулировка, которую человек читает и отклоняет командой, а не
|
||||
оркестратор, который **молча реализует**. Довод, державший `triage` на верхней
|
||||
модели, здесь не работает вовсе: ошибка стоит строки чтения.
|
||||
|
||||
**ААББЩЩ. `review-specs` рассмотрен и оставлен на `opus` — по причине, обратной
|
||||
общей.** Он самый частый `opus`-проход конвейера (идёт и в `design`, и на коде,
|
||||
то есть дважды за задачу), и по устройству он applicative: SKILL.md сам называет
|
||||
стадию 1 «два applicative-прохода, оба дешёвые», хотя платит за одного `sonnet`, а
|
||||
за другого `opus`. Расхождение разобрано и закрыто текстом: держит его наверху
|
||||
направление `code → spec`, где надо заметить **отсутствие** — тихий фолбэк,
|
||||
самодеятельный дефолт, проглоченную ошибку. Прочие держат `opus` из-за цены
|
||||
ложных находок, этот — из-за цены пропущенных, а пропуск не оставляет следа
|
||||
нигде: ни в отчёте, ни в границах покрытия.
|
||||
|
||||
**ААББЭЭ. Остальные шестеро оставлены, и у каждого своя причина.**
|
||||
`adversary` и `rubric` порождают критерий по построению (второй — с запретом
|
||||
открывать код в первой фазе). `architecture` — чистое суждение о структуре.
|
||||
`triage` — сток, его ошибка становится кодом. `doc-consistency` ошибается ровно в
|
||||
ту сторону, которую дороже всего опровергать: путает «упомянуто в двух местах» с
|
||||
«оба утверждают». `basics` заведён час назад, половина его вопросов — суждение, и
|
||||
модель у него выбрана решением оператора в этой же сессии.
|
||||
|
||||
**ААББЮЮ. Это разбор уставов, а не замер, и так и записано.** `calibration.md`
|
||||
двигает модель инъекцией дефекта; здесь инъекции не было. Двое переведены потому,
|
||||
что их ошибка **обнаруживается той же проверкой, что породила находку**, — то
|
||||
есть цена ошибки ограничена сверху независимо от модели. Для остальных такой
|
||||
границы нет, и трогать их без замера нельзя.
|
||||
|
||||
### Что из этого следует
|
||||
|
||||
134. **Дешёвая модель безопасна там, где её ошибку опровергает та же команда,
|
||||
что породила находку.** Не «где критерий записан» — записанный критерий
|
||||
бывает и у суждения, и у сверки, а разница между ними в том, чем кончается
|
||||
спор.
|
||||
135. **Ошибка бывает двух родов, и модель защищает от разных.** Ложная находка
|
||||
стоит триажа и видна; пропущенная не стоит ничего сегодня и не видна вовсе.
|
||||
Проход, у которого дороже второе, держится на верхней модели даже будучи
|
||||
applicative.
|
||||
136. **Потребитель находки — часть её цены.** Одна и та же ошибка стоит строки
|
||||
чтения, если её читает человек, и разросшегося кода, если её молча реализует
|
||||
оркестратор. Модель раздаётся с оглядкой на это, а не только на устройство
|
||||
прохода.
|
||||
|
||||
@@ -425,6 +425,15 @@ flowchart TD
|
||||
Recall обоих равен длине их источника — это и есть предел applicative-проходов,
|
||||
ради которого существуют стадии 2 и 3.
|
||||
|
||||
**`specs` дороже соседа по стадии, и это не недосмотр.** По устройству он тоже
|
||||
применяет записанный критерий, и по таблице моделей ему полагался бы `sonnet`.
|
||||
Держит его наверху **направление `code → spec`**: там надо заметить не нарушение
|
||||
записанного, а **поведение, которого в спеке нет вовсе** — тихий фолбэк,
|
||||
самодеятельный дефолт, проглоченную ошибку. Заметить отсутствие дороже, чем
|
||||
сверить наличие, а ошибка здесь молчит: пропущенное поведение не оставляет следа
|
||||
ни в отчёте, ни в границах покрытия. Прочие опиниативные проходы держат `opus`
|
||||
из-за цены **ложных** находок; этот — из-за цены пропущенных.
|
||||
|
||||
## Стадия 2 — Базовый проход (только `standard`)
|
||||
|
||||
Агент `review-basics`. Один проход, машину не держит, ничего не запускает и не
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name: doc-code-drift
|
||||
description: "Сверка документов канона с кодом по закрытому перечню проверяемых фактов: имя основной ветки и команды из CLAUDE.md, запреты с путями, testdata и временный каталог, путь миграций из .pm.json, внешние зависимости поимённо в architecture.md против манифеста, настройки с числовым значением в database.md против конфига и кода, единые точки проекта против реального числа реализаций, capability против существующих модулей. Отвечает на «этот факт ещё верен», а не «эта архитектура правильная». Читает весь репозиторий, гоняет только читающие команды. Отдаёт готовые формулировки и ничего не правит сам. Согласованность документов между собой смотрит агент doc-consistency. Использовать на сессии между спринтами, а также после приведения проекта к канону (adopt) и после повышения версии канона (upgrade). Только чтение."
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: opus
|
||||
color: yellow
|
||||
model: sonnet
|
||||
color: green
|
||||
---
|
||||
|
||||
Ты — **сверка документов канона с кодом**. Один вопрос: **этот факт ещё верен?**
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name: task-form
|
||||
description: "Проверка формы записи каталога задач по существу: тип, разошедшийся с содержанием записи, форма заголовка по типу (цель — что приложение будет уметь, задача — что нужно сделать, разведка — о чём она), «зачем», пересказывающее заголовок вместо состояния и боли, раздел «Затрагивает» с замыслом вместо границ, критерий приёмки с оракулом только на словах, предписание процесса в теле, и связь задачи со строкой «Завершения» её цели. Читает файл цели, на которую ссылается задача. Отдаёт готовые формулировки на замену и ничего не правит сам. Язык текста (залог, оценки, стоп-слова, англицизмы) смотрит отдельный агент doc-wording. Использовать после заведения или разбора пачки записей, до взятия в спринт и на переоценке. Только чтение."
|
||||
tools: Read, Grep, Glob
|
||||
model: opus
|
||||
color: yellow
|
||||
model: sonnet
|
||||
color: green
|
||||
---
|
||||
|
||||
Ты — **проверка формы записи** каталога задач. Форма это не оформление: она
|
||||
|
||||
@@ -84,9 +84,10 @@ capability: незаполненный канон это переходное с
|
||||
1. `docs.py check`, при наличии базы диффа — с `--base`.
|
||||
2. **Агентов на каждом `check` не зови.** Оба — `doc-consistency` и
|
||||
`doc-code-drift` — зовутся раз в спринт (шаг сессии), а также шагом 6 `adopt`
|
||||
и шагом 6 `upgrade`, на весь канон разом. Они дороги: оба на `opus`, второй
|
||||
ещё и читает репозиторий. Позвал `doc-code-drift` — передай ему раздел
|
||||
запретов `CLAUDE.md`.
|
||||
и шагом 6 `upgrade`, на весь канон разом. Они дороги: `doc-consistency` — тем,
|
||||
что на `opus` (сличение утверждений это суждение), `doc-code-drift` — тем, что
|
||||
читает репозиторий целиком, хотя сам идёт на `sonnet`. Позвал
|
||||
`doc-code-drift` — передай ему раздел запретов `CLAUDE.md`.
|
||||
3. Доклад: вывод скрипта строкой исхода, находки агентов поимённо, **граница
|
||||
покрытия** — что смотрели и чего не смотрели, и **кого из двоих позвал**:
|
||||
доклад, умолчавший об этом, читается как «сверено».
|
||||
|
||||
@@ -395,8 +395,8 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
разрез, что между `task-form` и `doc-wording`.
|
||||
|
||||
**Зовутся оба одинаково — раз в спринт на сессии, а также после `adopt` и после
|
||||
`upgrade`, на весь канон разом.** Не на синке документации: агент на `opus` по
|
||||
каждой сделанной задаче не окупается, а расхождение между двумя документами по
|
||||
`upgrade`, на весь канон разом.** Не на синке документации: `doc-consistency` на
|
||||
`opus` по каждой сделанной задаче не окупается, а расхождение между двумя документами по
|
||||
определению требует двух, и на большинстве задач синк правит один. Пачка,
|
||||
отбираемая работой, вдобавок не видит того, чего работа не касалась, — а именно
|
||||
там расхождение и живёт: правка отменяет решение в одном документе, парный статус
|
||||
|
||||
@@ -64,8 +64,9 @@ description: Вести содержимое документов канона
|
||||
|
||||
**Но синк его не зовёт.** Оба судьи документов — `doc-consistency` и
|
||||
`doc-code-drift` — зовутся раз в спринт, шагом сессии, на весь канон разом.
|
||||
Причина в цене: агент на `opus` по каждой сделанной задаче — самая дорогая
|
||||
церемония процесса. К тому же расхождение между двумя документами по определению
|
||||
Причина в цене: `doc-consistency` на `opus` по каждой сделанной задаче — самая
|
||||
дорогая церемония процесса, а `doc-code-drift` хоть и на `sonnet`, но читает
|
||||
репозиторий целиком. К тому же расхождение между двумя документами по определению
|
||||
требует двух документов, а на большинстве задач синк правит один.
|
||||
|
||||
Что теряется: привязка находки к задаче, которая её породила. Что выигрывается,
|
||||
|
||||
@@ -66,8 +66,11 @@
|
||||
ветки, команды, пути, внешние зависимости поимённо, настройки с числовым
|
||||
значением, единые точки проекта, capability.
|
||||
|
||||
Раз в спринт, а не чаще, и причина в цене: оба на `opus`, а второй ещё и читает
|
||||
репозиторий. Но и не реже — **спринт это ровно то, что двигает код и документы**:
|
||||
Раз в спринт, а не чаще. Дорог из них по-настоящему первый — `doc-consistency`
|
||||
на `opus`: он сличает утверждения двух документов, и это суждение. Второй с
|
||||
недавних пор на `sonnet` — у него закрытый перечень фактов и команда на каждый, —
|
||||
но он читает репозиторий целиком, и дешёвым от смены модели не стал. Но и не
|
||||
реже — **спринт это ровно то, что двигает код и документы**:
|
||||
переименованная цель сборки, ушедшая зависимость, второй способ делать то, что
|
||||
обзор объявил единственным; факт, дописанный в `architecture.md`, уже живущий в
|
||||
`CLAUDE.md`. Протухшее и раздвоившееся неотличимо от свежего, и по нему принимают
|
||||
|
||||
@@ -541,7 +541,13 @@ python3 $tk adopt scan --from … | apply --plan … # разовая адап
|
||||
Разделены они не по охвату, а **по глубине**. Язык проверяется по словам и
|
||||
фразам, поштучно; форма записи требует понять, что задача делает, и открыть
|
||||
цель, на которую она ссылается. Слитый проход одну половину делает дорогой, а
|
||||
вторую — поверхностной. Отсюда и разные модели.
|
||||
вторую — поверхностной.
|
||||
|
||||
Модель у обоих одна, `sonnet`, и это не отменяет разреза. Оба судят по
|
||||
**записанному правилу** — семь пунктов формы против правил языка, — а их находка
|
||||
приходит готовой формулировкой, которую читает и отклоняет человек, а не молча
|
||||
реализует оркестратор. Ошибка здесь стоит строки чтения, и платить за неё верхней
|
||||
моделью не за что.
|
||||
|
||||
Каждый устав отказывается от чужой половины прямо: увиденное не по своей части
|
||||
идёт **строкой в границах покрытия**, а не находкой. Две проверки одного места
|
||||
|
||||
Reference in New Issue
Block a user