resolve: письмо вынесено агентам, журнал — тема 72

Спеки, код и правки по находкам ревью пишет отдельный агент: оркестратору
оставлены задание, возврат, чекпоинт, сверка плана с исходом и доклад.
Заведён раздел «Кто пишет» в SKILL.md, переписаны шаги 2, 4, 6, 7 решения и
шаги 2, 4 обслуживания, у разведки названо, почему исполнителей нет.
This commit is contained in:
av
2026-08-23 07:56:15 +03:00
parent e5dc0a1a39
commit 813345192d
7 changed files with 268 additions and 30 deletions
+8 -1
View File
@@ -97,7 +97,14 @@
проходами: `doc-wording` по документам, `task-form` и `task-wording` по проходами: `doc-wording` по документам, `task-form` и `task-wording` по
записям. Выбранный способ реализуется **следующим прогоном**, и запускает его записям. Выбранный способ реализуется **следующим прогоном**, и запускает его
человек: смена сценария по ходу — событие с названным исходом, а не тихий человек: смена сценария по ходу — событие с названным исходом, а не тихий
поворот. Все три сценария лежат справочниками и одинаково — поворот.
**Письмо уходит агентам:** спеки, код и правки по находкам ревью пишет
отдельный агент по заданию, а оркестратор ставит задание и читает короткий
возврат. Контекст ему нужен под чекпоинт, сверку плана с исходом и доклад —
содержимое тронутых файлов и вывод гейта вытесняют оттуда постановку и
одобренное, и вытесняют молча. Разведка сюда не попадает: её записка и записи
задач и есть исход, из которого собирается доклад.
Все три сценария лежат справочниками и одинаково —
`references/solve.md`, `references/maintain.md` и `references/research.md`; в `references/solve.md`, `references/maintain.md` и `references/research.md`; в
самом скилле только вход, развилка и правила, не зависящие от сценария; самом скилле только вход, развилка и правила, не зависящие от сценария;
- `code-review` — конвейер ревью **по темам**: документ проекта либо заводит - `code-review` — конвейер ревью **по темам**: документ проекта либо заводит
+99
View File
@@ -276,6 +276,103 @@ flowchart TD
Схема — **сводка**: содержание сценариев в их справочниках, и при расхождении Схема — **сводка**: содержание сценариев в их справочниках, и при расхождении
прав справочник. прав справочник.
## Кто пишет: письмо уходит агентам
**Своими руками этот скилл не пишет ничего** — ни спек, ни кода, ни правок по
находкам ревью. Каждую такую работу выполняет **отдельный агент**: оркестратор
ставит задание и читает возврат. Дальше эта работа зовётся **письмом** — всё, что
скилл написал бы сам, если бы писал.
Причина про контекст, и она одна. Оркестратор ведёт задачу целиком: выбрал
сценарий, собирает чекпоинт, сверяет план прогона с исходом, пишет доклад, — а
для всего этого надо помнить постановку, критерии приёмки и то, что человек
одобрил. Письмо тянет в контекст ровно то, чего в докладе не будет ни строкой:
содержимое тронутых файлов, вывод линтеров и гейта, перебранные варианты правки.
Забитый этим контекст теряет одобренное и постановку — и теряет **молча**: доклад
остаётся связным, а сверять его уже не с чем.
**Разведённость тут ни при чём**, и путать два довода нельзя. Агент пишет по
заданию оркестратора и отвечает перед ним; разведён с автором тот, кто работу
**судит**, — разметчик и проходы ревью.
| Работа | Где шаг |
| --- | --- |
| предложение и дельта-спеки — `opsx:propose` | [solve](references/solve.md), шаг 2 |
| правки спек и дизайна по находкам ревью дизайна | [solve](references/solve.md), шаг 4 |
| код — `opsx:apply`, вместе с гейтом до зелёного и поведенческой верификацией | [solve](references/solve.md), шаг 6 |
| правки по находкам триажа, помеченным `инлайн` | [solve](references/solve.md), шаг 7; [maintain](references/maintain.md), шаг 4 |
| правка оснастки в сценарии обслуживания | [maintain](references/maintain.md), шаг 2 |
**Остальное остаётся оркестратору, и перечень закрыт:** выбор сценария и стопы,
чекпоинт, вызовы `av-dev:code-review`, `av-dev:doc-sync`, `av-dev-git:commit` и
`av-dev:task-track`, сверка плана с исходом, урожай и доклад. Ни одна из этих
работ не пишет файлов проекта — они и есть та работа, ради которой контекст
берегут.
**Разведка сюда не попадает вовсе.** Её письмо — записка в документы канона и
записи задач, то есть тот самый текст, из которого собираются чекпоинт вариантов
и доклад. Отдать его агенту значило бы получить обратно пересказом то, что
и так надо держать целиком.
### Устава у этих агентов нет
Проходы ревью ходят уставами (`av-dev/agents/`), потому что уставом задаётся
**суждение**: что искать и что считать находкой. Здесь суждения нет — работа
нормирована скиллами `opsx:*`, конвенциями проекта и находками триажа, а устав
стал бы вторым домом того же и разошёлся бы с ним молча. Зовётся агент общего
назначения, и всё, чем один его прогон отличается от другого, приходит заданием.
### Задание собирается адресами
**Агент не видел разговора.** Он не знает ни постановки, ни выбранного сценария,
ни того, что уже одобрено на чекпоинте. Поэтому задание самодостаточно, а вещи в
нём называются **адресами, а не пересказом** — по тому же правилу, по которому
проход ревью получает дом темы путём и разделом. В задании:
- корень проекта, текущая ветка и база диффа. Ветку агент не создаёт и не
переключает, не пушит — правило то же, что у скилла;
- **что делать**: файл задачи либо её текст дословно, критерии приёмки,
идентификатор change;
- **что читать**: `CLAUDE.md`, конвенции проекта, дельта-спеки change;
- **находки — дословно**, как их вернул триаж или ревью дизайна, вместе с
оракулом;
- **границы**: правится названное, соседнее не улучшается заодно; развилок агент
не решает, задач не заводит, ничего не коммитит и наружу не ходит — правило
необратимого действует и на него (раздел «Когда спрашивать вне чекпоинта»);
- **чем кончает**: гейт зелёный, а если задача меняет наблюдаемое поведение —
прогнана поведенческая верификация.
**Пересказ находки — самая дорогая экономия из возможных.** Находка триажа несёт
оракул, и пересказ теряет как раз его: агент чинит то, что понял, гейт зеленеет,
а в отчёт уезжает «исправлено».
### Возврат — не длиннее экрана
Агент возвращает: что сделано, **адресами** тронутого; исход гейта и чем он
прогнан; что не удалось и почему; вопросы, если по заданию их не разрешить.
Диффа, пересказа кода и логов в возврате нет — иначе экономия, ради которой шаг
и вынесен, отменяется в момент возврата.
**Возврату на слово не верят, и перечитывать за агентом дифф для этого не надо.**
Верят независимым артефактам: зелёному гейту, отчёту триажа, ревью следующего
шага. Своей прозе здесь верить нельзя ровно по той причине, по которой ей не
верит конвейер ревью, — её написал тот, кто мог и пропустить.
**Артефакты, написанные для человека, оркестратор читает сам**: `proposal.md` и
`design.md` нужны ему на чекпоинте. Это не переполнение контекста, а его работа.
### Один агент на шаг, а не на файл
Нарезка по файлам разводит одну правку по разным контекстам, и сходиться она
будет в гейте, то есть после. Повторный проход того же шага — **новое задание**,
а не продолжение прежнего: агент прежнего не помнит, и рассчитывать на его память
нельзя.
**Правило про контекст, а не про полномочия.** Агент упал, вернул не то или не
понял задания — повтори задание, дописав то, чего в нём не хватило. Не вышло и во
второй раз — делай сам и **скажи это строкой доклада**: прогон стоил дороже, чем
должен, и это факт для человека, а не стоп.
## Автономность и плановый стоп ## Автономность и плановый стоп
**У двух сценариев ровно один плановый стоп**, и стоят они в разных местах: **У двух сценариев ровно один плановый стоп**, и стоят они в разных местах:
@@ -395,6 +492,8 @@ change, у второго — сверенный состав гейта и си
- **постановка пришла текстом** — сказать это прямо: как она понята, что `ready` - **постановка пришла текстом** — сказать это прямо: как она понята, что `ready`
не гонялся и что закрывать было нечего; не гонялся и что закрывать было нечего;
- что сделано, какие вопросы записаны и куда; - что сделано, какие вопросы записаны и куда;
- **шаг письма, сделанный не агентом, а тобой** — с причиной: раздел «Кто пишет»
требует называть это строкой, а не молча;
- чего проверить или узнать **не удалось**. - чего проверить или узнать **не удалось**.
Сверх ядра каждый сценарий добавляет своё: [solve.md](references/solve.md) — Сверх ядра каждый сценарий добавляет своё: [solve.md](references/solve.md) —
@@ -170,7 +170,7 @@
flowchart TD flowchart TD
in["сценарий выбран: обслуживание"] in["сценарий выбран: обслуживание"]
s1["1. прочитать задачу<br/>критерии приёмки и границы"] s1["1. прочитать задачу<br/>критерии приёмки и границы"]
s2["2. сделать правку<br/>гейт тронут — сверить состав, не цвет"] s2["2. правка агентом<br/>гейт тронут — состав снять до правки"]
s3["3. гейт проекта до зелёного"] s3["3. гейт проекта до зелёного"]
s4["4. ревью фиксированным планом<br/>av-dev:code-review, без change"] s4["4. ревью фиксированным планом<br/>av-dev:code-review, без change"]
s5["5. синк документации — av-dev:doc-sync"] s5["5. синк документации — av-dev:doc-sync"]
@@ -259,8 +259,11 @@ ADR: список источников канон закрыл двумя — а
### 2. Сделать правку ### 2. Сделать правку
Код и конфиги — по конвенциям проекта. Правка по размеру задачи: чинится названное в записи, соседнее не улучшается **Правку делает агент** (SKILL.md, «Кто пишет: письмо уходит агентам»): задание
заодно. несёт постановку, конвенции проекта, границы правки и требование довести гейт до
зелёного; возврат — адреса тронутого и исход гейта. Код и конфиги — по конвенциям
проекта. Правка по размеру задачи: чинится названное в записи, соседнее не
улучшается заодно.
**Гейта ещё нет — сказать это, а не изображать сверку.** Первые шаги плана **Гейта ещё нет — сказать это, а не изображать сверку.** Первые шаги плана
стройки заводят гейт, сборку и хуки: у них нет ни «до», ни «прежнего», и стройки заводят гейт, сборку и хуки: у них нет ни «до», ни «прежнего», и
@@ -277,6 +280,11 @@ ADR: список источников канон закрыл двумя — а
их семантикой гейта в `CLAUDE.md`. Снимай исходное состояние **до** правки, по их семантикой гейта в `CLAUDE.md`. Снимай исходное состояние **до** правки, по
тому, как проект это описал. тому, как проект это описал.
**Исходный состав снимаешь ты, а не агент, и это не мелочь.** Сверка «до и
после» уезжает в твой доклад, а снятое тем же, кто правил, сверкой не является:
агент вернёт состав, который получился, и назовёт его исходным. Снимок делается
до того, как задание ушло.
**Проект состав не описал — скажи строкой доклада, что сверен только цвет.** **Проект состав не описал — скажи строкой доклада, что сверен только цвет.**
Обходного пути не выдумывай: угаданный состав хуже отсутствующего, потому что Обходного пути не выдумывай: угаданный состав хуже отсутствующего, потому что
читается как сверенный. Это же строка и повод — предложить проекту дописать слот читается как сверенный. Это же строка и повод — предложить проекту дописать слот
@@ -353,8 +361,9 @@ Change ты не передаёшь — его нет.
Отчёт, из которого исчезло «что не смотрел никто», сообщает «проверено», не Отчёт, из которого исчезло «что не смотрел никто», сообщает «проверено», не
сообщая, что именно. сообщая, что именно.
Отработка — как в решении: помеченное `инлайн` чини сам и не логируй, `развилка` Отработка — как в решении: помеченное `инлайн` чинит **агент** (SKILL.md, «Кто
— вопросом в запись. После правок снова гейт. Отложенные находки собери в секцию пишет»), находки уходят ему дословно с оракулом, гейт после правок гоняет он же,
логировать их не надо; `развилка` — вопросом в запись, и агенту она не отдаётся. Отложенные находки собери в секцию
доклада `Урожай`; задачи из него заводит `av-dev:task-track`, не ты. доклада `Урожай`; задачи из него заводит `av-dev:task-track`, не ты.
### 5. Синк документации — главный шаг этого сценария ### 5. Синк документации — главный шаг этого сценария
@@ -30,6 +30,13 @@
(задачи заводятся и уточняются), `av-dev-git:commit`. Правило обращения к соседям (задачи заводятся и уточняются), `av-dev-git:commit`. Правило обращения к соседям
и правило «чего может не быть» — общие, они в [SKILL.md](../SKILL.md). и правило «чего может не быть» — общие, они в [SKILL.md](../SKILL.md).
**Агентов-исполнителей у разведки нет** (SKILL.md, «Кто пишет: письмо уходит
агентам»), и это не пропуск. Её письмо — записка в документы канона и записи
задач, то есть тот самый текст, из которого собираются чекпоинт вариантов и
доклад: отданный агенту, он вернулся бы пересказом. Вычитку разведка всё же
отдаёт — `doc-wording`, `task-form`, `task-wording`: там судят написанное, а не
пишут.
**Отсутствие канона бьёт по разведке сильнее, чем по решению**, и сказать об этом **Отсутствие канона бьёт по разведке сильнее, чем по решению**, и сказать об этом
строкой мало: без документов у ответа нет дома, и знание осядет в переписке. строкой мало: без документов у ответа нет дома, и знание осядет в переписке.
Назови исход и предложи `av-dev:canon`; работу не останавливай, но адрес Назови исход и предложи `av-dev:canon`; работу не останавливай, но адрес
+50 -24
View File
@@ -15,7 +15,8 @@
дизайна. дизайна.
Тонкая обёртка над каноническими скиллами `opsx:propose` / `opsx:apply` / Тонкая обёртка над каноническими скиллами `opsx:propose` / `opsx:apply` /
`opsx:archive`зови их через Skill, не переизобретай их шаги. Ревью — скилл `opsx:archive`их шаги не переизобретаются, а **зовёт их агент**, не ты
(SKILL.md, «Кто пишет: письмо уходит агентам»). Ревью — скилл
`av-dev:code-review`; он же держит правило выбора метки, а называет её агент `av-dev:code-review`; он же держит правило выбора метки, а называет её агент
`review-scope` — один раз на задачу, для обеих стадий ревью. `review-scope` — один раз на задачу, для обеих стадий ревью.
@@ -25,12 +26,12 @@
flowchart TD flowchart TD
in["сценарий выбран: решение"] in["сценарий выбран: решение"]
s1["1. прочитать задачу<br/>критерии приёмки выписать сразу"] s1["1. прочитать задачу<br/>критерии приёмки выписать сразу"]
s2["2. opsx:propose — change, дельта-спеки, tasks.md"] s2["2. opsx:propose — change, дельта-спеки,<br/>tasks.md — агентом"]
s3["3. разметка — review-scope:<br/>размер, сложность, метка, план тем"] s3["3. разметка — review-scope:<br/>размер, сложность, метка, план тем"]
s4["4. ревью дизайна, состав по метке<br/>+ отработка замечаний"] s4["4. ревью дизайна, состав по метке<br/>+ отработка замечаний агентом"]
s5(["5. ЧЕКПОИНТ: объяснение<br/>в чём проблема, как решаем,<br/>чем рискуем"]) s5(["5. ЧЕКПОИНТ: объяснение<br/>в чём проблема, как решаем,<br/>чем рискуем"])
s6["6. opsx:apply — код, гейт,<br/>поведенческая верификация"] s6["6. opsx:apply — код, гейт,<br/>поведенческая верификация — агентом"]
s7["7. ревью кода, та же метка<br/>+ отработка замечаний"] s7["7. ревью кода, та же метка<br/>+ отработка замечаний агентом"]
s8["8. opsx:archive"] s8["8. opsx:archive"]
s9["9. синк документации — av-dev:doc-sync"] s9["9. синк документации — av-dev:doc-sync"]
s10["10. коммит работы — av-dev-git:commit"] s10["10. коммит работы — av-dev-git:commit"]
@@ -103,17 +104,28 @@ flowchart TD
### 2. Завести change — `opsx:propose` ### 2. Завести change — `opsx:propose`
Вызови Skill `opsx:propose`. Получаем `proposal.md`, дизайн, дельта-спеки **Скилл `opsx:propose` зовёт агент** (SKILL.md, «Кто пишет»). В задании:
(`ADDED`/`MODIFIED`/`REMOVED Requirements`), `tasks.md`. Каждое `### Requirement` постановка — файл задачи либо её текст дословно, — критерии приёмки, если они
содержит `SHALL`/`MUST`; структурные заголовки английские, сценарии были, и требование прогнать `openspec validate --strict <id>`. Возврат:
`GIVEN/WHEN/THEN`. Прогони `openspec validate --strict <id>`. идентификатор change, дельты адресами и исход валидации.
Критерии приёмки задачи, если они были, копируются в `tasks.md` отдельным блоком. Шаг оставляет `proposal.md`, дизайн, дельта-спеки
Задаче предшествовала разведка — её записка и отвергнутые варианты **уже (`ADDED`/`MODIFIED`/`REMOVED Requirements`) и `tasks.md`. Форму держит сам
записаны** в документах канона (`docs/research/`, `docs/adr/`): сошлись на них из `opsx:propose`, и требования к ней идут агенту заданием: каждое
`design.md`, а не переписывай второй раз. Варианты, разобранные без разведки `### Requirement` содержит `SHALL`/`MUST`, структурные заголовки английские,
(способ был очевиден, но у него оказались оттенки), — в `design.md`, с причиной сценарии — `GIVEN/WHEN/THEN`.
отказа по каждому отвергнутому.
**`proposal.md` и `design.md` после возврата читаешь сам** — из них собирается
чекпоинт шага 5, и держать их в контексте это твоя работа, а не переполнение.
Кода нет, читать нечего сверх них.
Ещё две вещи задание называет прямо, иначе их не сделает никто. **Критерии
приёмки задачи, если они были, копируются в `tasks.md` отдельным блоком.**
И **записанное разведкой не переписывается второй раз**: задаче предшествовала
разведка — её записка и отвергнутые варианты уже лежат в документах канона
(`docs/research/`, `docs/adr/`), и `design.md` на них ссылается. Варианты,
разобранные без разведки (способ был очевиден, но у него оказались оттенки), — в
`design.md`, с причиной отказа по каждому отвергнутому.
**`proposal.md` пишется так, чтобы его понял человек, не читавший спек.** Это не **`proposal.md` пишется так, чтобы его понял человек, не читавший спек.** Это не
стилистическое пожелание: из него собирается чекпоинт шага 5, и переписывать его стилистическое пожелание: из него собирается чекпоинт шага 5, и переписывать его
@@ -175,10 +187,15 @@ flowchart TD
**Отработка замечаний, и она идёт до чекпоинта, а не после:** **Отработка замечаний, и она идёт до чекпоинта, а не после:**
- мелочь и явные улучшения — правь сам в спеках и дизайне; - мелочь и явные улучшения — правкой спек и дизайна, и её делает **агент**
(SKILL.md, «Кто пишет»): находки уходят ему дословно, вместе с
идентификатором change и требованием перепрогнать
`openspec validate --strict <id>`;
- развилки (компромисс, scope, инвариант) — **не в запись, а в чекпоинт**: он - развилки (компромисс, scope, инвариант) — **не в запись, а в чекпоинт**: он
следующим шагом, и это ровно то, ради чего он поставлен здесь; следующим шагом, и это ровно то, ради чего он поставлен здесь. Агенту развилка
- после правок перепрогони `openspec validate --strict <id>`. не отдаётся вовсе: решает её человек, а не тот, кто правит спеку;
- возврат агента — адреса тронутых дельт и исход валидации; правленые спеки
перечитываешь по адресам, если чекпоинт опирается на изменившееся.
### 5. Чекпоинт: объяснение ### 5. Чекпоинт: объяснение
@@ -234,7 +251,12 @@ flowchart TD
### 6. Написать код — `opsx:apply` ### 6. Написать код — `opsx:apply`
Вызови Skill `opsx:apply` для реализации `tasks.md`. Код — по конвенциям проекта **Код пишет агент, и в его же задании лежит весь этот раздел** (SKILL.md, «Кто
пишет»): вызов `opsx:apply` для реализации `tasks.md`, гейт до зелёного,
поведенческая верификация. Возврат — адреса тронутого, исход гейта и строка
верификации; диффа в нём нет.
Код — по конвенциям проекта
(каталог `docs/conventions/`). Меняешь схему — обнови её описание в документации (каталог `docs/conventions/`). Меняешь схему — обнови её описание в документации
тем же change, если проект этого требует: гейт обычно это проверяет. тем же change, если проект этого требует: гейт обычно это проверяет.
@@ -245,8 +267,8 @@ flowchart TD
изменение вживую командой из раздела команд `CLAUDE.md` и прогони сценарий. изменение вживую командой из раздела команд `CLAUDE.md` и прогони сценарий.
Пропусти только для чисто внутренних правок без наблюдаемого рантайма. Пропусти только для чисто внутренних правок без наблюдаемого рантайма.
**Сервис не оставляем лежать.** Если запуск упал — почини или откати до конца **Сервис не оставляем лежать.** Если запуск упал — агент чинит или откатывает до
шага. конца шага; возврат с лежащим сервисом — незакрытый шаг, а не исход.
### 7. Ревью кода — та же метка ### 7. Ревью кода — та же метка
@@ -294,8 +316,11 @@ flowchart TD
#### Отработка, и здесь появляется одно новое правило #### Отработка, и здесь появляется одно новое правило
Помеченное `инлайн` чини сам и не логируй. `развилка` — вопросом в запись (он уже Помеченное `инлайн` чинит **агент** (SKILL.md, «Кто пишет»): находки уходят ему
сформулирован триажем, его остаётся перенести). После правок — снова гейт. **дословно, вместе с оракулом**, одним заданием на весь урожай инлайна, и гейт
после правок гоняет он же. Логировать их по-прежнему не надо. `развилка`
вопросом в запись (он уже сформулирован триажем, его остаётся перенести), и
агенту она не отдаётся.
**Находка, отменяющая одобренный дизайн, отменяет и одобрение.** Признак **Находка, отменяющая одобренный дизайн, отменяет и одобрение.** Признак
проверяемый: **меняются ли дельта-спеки**. проверяемый: **меняются ли дельта-спеки**.
@@ -303,7 +328,8 @@ flowchart TD
- не меняются — находка внутри дизайна, дожимай сам, это обычная отработка; - не меняются — находка внутри дизайна, дожимай сам, это обычная отработка;
- меняются — решение стало другим, а одобрено было прежнее. Повтори шаг 3 - меняются — решение стало другим, а одобрено было прежнее. Повтори шаг 3
(разметка выведена из дельта-спек) и **вернись на чекпоинт шага 5** с тем, что (разметка выведена из дельта-спек) и **вернись на чекпоинт шага 5** с тем, что
изменилось и почему. изменилось и почему. Такая находка агенту не отдаётся ни при каких условиях:
она отменяет одобрение, а это разговор с человеком.
**Это правило старше правила о развилке.** Находка класса `развилка`, чьё **Это правило старше правила о развилке.** Находка класса `развилка`, чьё
основание — «надо менять спеку», подпадает под оба; побеждает возврат на основание — «надо менять спеку», подпадает под оба; побеждает возврат на
@@ -0,0 +1,89 @@
# 72. Письмо уходит агентам: оркестратор ставит задание и читает возврат (2026-08-22)
## Что было
`code-resolve` вёл задачу и писал её сам. В одном контексте лежало всё: выбор
сценария, вызов `opsx:propose`, разметка, ревью дизайна, чекпоинт, `opsx:apply`,
правки по находкам триажа, сверка плана прогона с исходом и доклад. Конвейер
ревью своё письмо давно отдал — проходы ходят агентами по уставам, — а письмо
самого скилла не было вынесено никуда.
Цена оказалась не в токенах, а в том, что вытесняется. Написание тянет в контекст
содержимое тронутых файлов, вывод линтеров и гейта, перебранные варианты правки —
всё то, чего в докладе не будет ни строкой. Вытесняются оттуда постановка,
критерии приёмки и одобренное на чекпоинте, то есть ровно то, по чему оркестратор
и обязан сверять исход. Вытесняются **молча**: доклад остаётся связным, а сверять
его уже не с чем.
## Решено
**Р265. Спеки, код и правки по находкам ревью пишет отдельный агент.**
Оркестратор ставит задание и читает возврат. Перечень закрыт и перечислен в
`code-resolve/SKILL.md`: предложение и дельта-спеки (`opsx:propose`), правки спек
и дизайна по ревью дизайна, код (`opsx:apply` вместе с гейтом и поведенческой
верификацией), правки по находкам триажа, помеченным `инлайн`, и правка оснастки
в сценарии обслуживания.
**Р266. Довод — контекст, а не разведённость, и путать их нельзя.** Агент пишет
по заданию оркестратора и отвечает перед ним; разведён с автором тот, кто работу
**судит**, — разметчик и проходы ревью ([тема 41](41-task-sizing-once.md)).
Вынос письма не добавляет разведённости ни на грамм и не заменяет собой ни одну
проверку.
**Р267. Устава у этих агентов нет.** Уставом задаётся **суждение**: что искать и
что считать находкой. Здесь суждения нет — работа нормирована скиллами `opsx:*`,
конвенциями проекта и находками триажа, и устав стал бы вторым домом того же,
разошёлся бы с ним молча. Зовётся агент общего назначения, а всё, чем один прогон
отличается от другого, приходит заданием.
**Р268. Задание самодостаточно и собирается адресами.** Агент не видел разговора:
не знает ни постановки, ни сценария, ни того, что одобрено. Поэтому в задании
лежат корень проекта, ветка и база диффа, постановка или её текст дословно,
критерии приёмки, идентификатор change, что читать, границы правки и признак
готовности — зелёный гейт, а при наблюдаемом поведении ещё и верификация.
**Находки уходят дословно, вместе с оракулом**: пересказ теряет как раз оракул,
агент чинит то, что понял, гейт зеленеет, а в отчёт уезжает «исправлено».
**Р269. Возврат — не длиннее экрана, и диффа в нём нет.** Что сделано, адресами
тронутого; исход гейта и чем он прогнан; что не удалось; вопросы, если по заданию
их не разрешить. Возврат с диффом отменяет экономию в момент возврата — то есть
делает вынос бессмысленным.
**Р270. Возврату на слово не верят, и дифф за агентом для этого не перечитывают.**
Верят независимым артефактам: зелёному гейту, отчёту триажа, ревью следующего
шага. Основание то же, по которому конвейер не верит прозе прохода, — её написал
тот, кто мог и пропустить.
**Р271. Артефакты, написанные для человека, оркестратор читает сам.**
`proposal.md` и `design.md` нужны ему на чекпоинте, и это его работа, а не
переполнение контекста: они и написаны для того, кто спек не читал.
**Р272. Разведка в перечень не попадает вовсе.** Её письмо — записка в документы
канона и записи задач, то есть тот самый текст, из которого собираются чекпоинт
вариантов и доклад. Отданный агенту, он вернулся бы пересказом — и пересказ
пришлось бы держать в контексте вместо оригинала.
**Р273. Правило про контекст, а не про полномочия.** Агент упал, вернул не то или
не понял задания — задание повторяется с дописанным; не вышло и во второй раз,
оркестратор делает сам и **говорит это строкой доклада**. Стопом это не является:
прогон стоил дороже, чем должен, и это факт для человека.
## Следствия
**С250. Доклад получил обязательную строку** — шаг письма, сделанный не агентом,
с причиной. Иначе нарушение правила неотличимо от его соблюдения, а дороже всего
здесь стоит именно молчаливый возврат к старому порядку.
**С251. Нарезка — по шагу, а не по файлу.** Нарезка по файлам разводит одну правку
по разным контекстам, и сходиться она будет в гейте, то есть после. Повторный
проход того же шага — новое задание: агент прежнего не помнит.
**С252. Состав гейта в обслуживании снимает оркестратор, и снимает до правки.**
Сверка «до и после» уезжает в его доклад, а снятое тем же, кто правил, сверкой не
является: агент вернёт получившийся состав и назовёт его исходным.
**С253. Раскладка не повышалась.** Правило живёт в прозе плагина — в скилле
`code-resolve` и его справочниках — и в скелеты, уезжающие в репозитории проектов,
не попадает. Признак тот же, что у снятого «интейка»
([тема 71](71-language-model-popular-science.md)): версия нужна тогда, когда
меняется то, что уезжает в проект.
+1
View File
@@ -123,3 +123,4 @@
| 69 | [Счёт корпуса в прозе не пишется](69-corpus-count-not-written.md) | 2026-08-13 | | 69 | [Счёт корпуса в прозе не пишется](69-corpus-count-not-written.md) | 2026-08-13 |
| 70 | [«Провенанс» снят из словаря: одного синонима мало для проверки](70-provenance-word-removed.md) | 2026-08-13 | | 70 | [«Провенанс» снят из словаря: одного синонима мало для проверки](70-provenance-word-removed.md) | 2026-08-13 |
| 71 | [Образец языка назван прямо; «интейк» снят вслед за «провенансом»](71-language-model-popular-science.md) | 2026-08-13 | | 71 | [Образец языка назван прямо; «интейк» снят вслед за «провенансом»](71-language-model-popular-science.md) | 2026-08-13 |
| 72 | [Письмо уходит агентам: оркестратор ставит задание и читает возврат](72-writing-delegated-to-agents.md) | 2026-08-22 |