вычитку зовёт тот, кто правил, а не тот, кто синкал

Вычитка документов была привязана к синку, а разведка синком себя не считает —
и не доставалась ей вовсе. Условие вызова теперь правка: правил документы —
зови doc-wording, трогал записи — task-form и task-wording.

У разведки вычитка стала шагом 6, между записью и гейтом: пачка собирается из
шагов 4 и 5, раньше она не полна, после коммита правила бы уже историю. Гейт
с коммитом стал седьмым шагом, закрытие — восьмым.

Запрет остался, но только на судей канона: doc-consistency и doc-code-drift
идут на весь канон разом и зовутся через healthcheck.
This commit is contained in:
av
2026-08-11 13:37:33 +03:00
parent b3479776a4
commit f22e7ed829
6 changed files with 110 additions and 20 deletions
+41
View File
@@ -3779,3 +3779,44 @@ change по нему не будет никогда, — и такое реше
208. **Работа без своего исхода вырождается в пролог.** Разведка, кончавшаяся 208. **Работа без своего исхода вырождается в пролог.** Разведка, кончавшаяся
переходом к коду, не имела причины писать в документы: её ответ и так уезжал переходом к коду, не имела причины писать в документы: её ответ и так уезжал
в `design.md`. Дом для исхода — вот что делает работу работой. в `design.md`. Дом для исхода — вот что делает работу работой.
## 62. Вычитку зовёт тот, кто правил, а не тот, кто синкал (2026-08-11)
Вычитка документов агентом `doc-wording` была привязана к **синку**: «позови его
последним шагом синка», «ничего не правивший синк агента не зовёт». Сценарий
разведки о себе говорит обратное — «правило принуждённого отрицания здесь не
действует, это не синк», — и при буквальном чтении вычитка не доставалась ему
вовсе: документы правились, а звать было некому. Гейт перед коммитом машинный, он
смотрит раскладку и битые ссылки, а не залог и неизвестный термин.
**Условие вызова теперь — правка, а не обряд, внутри которого она случилась.**
Признак читается буквально: документы правились — зови, ничего не правил — не
зови. Синк остался самым частым вызывающим, но перестал быть единственным.
**У разведки вычитка стала своим шагом, а не оговоркой внутри чужого.** Она стоит
между записью и гейтом, потому что раньше пачка не полна: разведка правит две
вещи сразу — документы канона и записи каталога задач, — и собирается пачка
только к концу пятого шага. После коммита вычитка правила бы уже закоммиченное.
**Обе пачки судятся своими проходами.** Документы — `doc-wording`, записи задач —
`task-form`, затем `task-wording`; владеет каждым проходом его плагин, и разведка
их не зовёт напрямую, а просит владеющий скилл.
**Запрет остался, но только на судей канона.** `doc-consistency` и
`doc-code-drift` идут на весь канон разом и стоят дорого — их момент выбирает
человек через `av-dev-docs:healthcheck`. Смешение этого запрета с вычиткой и было
второй половиной поломки: «агентов по документам на отдельной работе не зовут»
читалось как правило про всех троих.
### Что из этого следует
209. **Правило, привязанное к названию обряда, не срабатывает у того, кто себя
этим обрядом не считает.** Условие вызова формулируется через наблюдаемое
действие — «правил текст», — а не через имя фазы, внутри которой оно обычно
происходит.
210. **Дорогая проверка и дешёвая проверка не живут под одним запретом.** Довод
«не зови агентов сам» верен для судей на весь канон и обратен для вычитки
названной пачки; общая формулировка отменяет вторую вместе с первой.
211. **Шаг, собирающий пачку, стоит после последнего, кто в неё кладёт.** Вычитка
на шаге записи проверила бы половину написанного, а после коммита — уже
историю.
+3 -1
View File
@@ -53,7 +53,9 @@
**Разведка** (тип `research`, сырая идея, мутная постановка) кода не пишет **Разведка** (тип `research`, сырая идея, мутная постановка) кода не пишет
вовсе: её чекпоинт — варианты, 2–4 способа решить с ценой каждого, — стоит до вовсе: её чекпоинт — варианты, 2–4 способа решить с ценой каждого, — стоит до
первого написанного требования, а исход уезжает в документы канона и в первого написанного требования, а исход уезжает в документы канона и в
задачи. Выбранный способ реализуется **следующим прогоном**, и запускает его задачи. Обе пачки — документы и записи — **вычитываются перед коммитом**
своими проходами: `doc-wording` по документам, `task-form` и `task-wording`
по записям. Выбранный способ реализуется **следующим прогоном**, и запускает его
человек: смена сценария по ходу — событие с названным исходом, а не тихий человек: смена сценария по ходу — событие с названным исходом, а не тихий
поворот. Оба сценария лежат справочниками и одинаково — `references/solve.md` поворот. Оба сценария лежат справочниками и одинаково — `references/solve.md`
и `references/research.md`; в самом скилле только вход, развилка и правила, и `references/research.md`; в самом скилле только вход, развилка и правила,
+1 -1
View File
@@ -1,6 +1,6 @@
--- ---
name: resolve name: resolve
description: "Взять одну задачу и довести её до закрытия. Одна точка входа, два сценария, и выбирает сценарий сам скилл, прочитав постановку. Способ решения известен — сценарий решения: цикл Spec Driven Development (opsx propose → разметка → ревью дизайна → чекпоинт с объяснением человеческим языком → opsx apply → ревью кода → archive → синк документации → коммит → закрытие). Способа нет, постановка мутная, тип research — сценарий разведки: вопрос и рамки → чтение документов, кода и внешних источников (можно opsx:explore) → чекпоинт вариантов: 2–4 способа решить, цена каждого, что становится невозможным, рекомендация → ответ уезжает в документы канона, исход — в задачи → коммит → закрытие. Разведка кода не пишет и change не заводит, а выбранный способ реализуется следующим прогоном. На входе путь к файлу задачи, её слаг или просто текст. Использовать, когда просят взять, сделать или решить задачу, разобраться, изучить, сравнить подходы, проработать сырую идею, ответить на вопрос из беклога." description: "Взять одну задачу и довести её до закрытия. Одна точка входа, два сценария, и выбирает сценарий сам скилл, прочитав постановку. Способ решения известен — сценарий решения: цикл Spec Driven Development (opsx propose → разметка → ревью дизайна → чекпоинт с объяснением человеческим языком → opsx apply → ревью кода → archive → синк документации → коммит → закрытие). Способа нет, постановка мутная, тип research — сценарий разведки: вопрос и рамки → чтение документов, кода и внешних источников (можно opsx:explore) → чекпоинт вариантов: 2–4 способа решить, цена каждого, что становится невозможным, рекомендация → ответ уезжает в документы канона, исход — в задачи → вычитка написанного → коммит → закрытие. Разведка кода не пишет и change не заводит, а выбранный способ реализуется следующим прогоном. На входе путь к файлу задачи, её слаг или просто текст. Использовать, когда просят взять, сделать или решить задачу, разобраться, изучить, сравнить подходы, проработать сырую идею, ответить на вопрос из беклога."
--- ---
# Работа над одной задачей # Работа над одной задачей
@@ -63,14 +63,15 @@ flowchart TD
s3(["3. ЧЕКПОИНТ: варианты<br/>2–4 способа, цена каждого,<br/>что становится невозможным"]) s3(["3. ЧЕКПОИНТ: варианты<br/>2–4 способа, цена каждого,<br/>что становится невозможным"])
s4["4. ответ в документы канона<br/>av-dev-docs:docs"] s4["4. ответ в документы канона<br/>av-dev-docs:docs"]
s5["5. задачи: завести и уточнить<br/>av-dev-tasks:tasks"] s5["5. задачи: завести и уточнить<br/>av-dev-tasks:tasks"]
s6["6. гейт проекта, затем коммит<br/>av-dev-git:commit"] s6["6. вычитка написанного:<br/>документы и записи задач"]
s7["7. закрыть разведку — av-dev-tasks:tasks,<br/>вторым коммитом учёта"] s7["7. гейт проекта, затем коммит<br/>av-dev-git:commit"]
s8["8. закрыть разведку — av-dev-tasks:tasks,<br/>вторым коммитом учёта"]
out["исход назван: знание, задачи,<br/>отказ или «не доведена»"] out["исход назван: знание, задачи,<br/>отказ или «не доведена»"]
in --> s1 --> s2 --> s3 in --> s1 --> s2 --> s3
s3 -->|"выбран способ,<br/>отказ или знание"| s4 s3 -->|"выбран способ,<br/>отказ или знание"| s4
s3 -.->|"вопрос не тот"| s1 s3 -.->|"вопрос не тот"| s1
s4 --> s5 --> s6 --> s7 --> out s4 --> s5 --> s6 --> s7 --> s8 --> out
``` ```
Схема — **сводка**: содержание каждого шага в его разделе ниже, и при расхождении Схема — **сводка**: содержание каждого шага в его разделе ниже, и при расхождении
@@ -146,7 +147,9 @@ git и читается диффом, а второй стоп на каждой
3. **отвергнутые варианты названы с причиной**. Отвергнутое без причины 3. **отвергнутые варианты названы с причиной**. Отвергнутое без причины
возвращается на следующей разведке как новая идея; возвращается на следующей разведке как новая идея;
4. задачи, которые исход породил, заведены — или явно сказано, что не породил; 4. задачи, которые исход породил, заведены — или явно сказано, что не породил;
5. написанное закоммичено, разведка закрыта. 5. **написанное вычитано** — документы агентом `doc-wording`, записи задач
проходами `task-form` и `task-wording`, каждый по своей пачке;
6. написанное закоммичено, разведка закрыта.
## Шаги ## Шаги
@@ -242,7 +245,9 @@ git и читается диффом, а второй стоп на каждой
**Вызови Skill `av-dev-docs:docs`**: он владеет содержимым документов канона. **Вызови Skill `av-dev-docs:docs`**: он владеет содержимым документов канона.
Передай ему ответ, адрес из шага 1 и провенанс каждого числа — писать содержание Передай ему ответ, адрес из шага 1 и провенанс каждого числа — писать содержание
за тебя он не будет, но дом, форму и вычитку держит он. за тебя он не будет, но дом и форму держит он. Вычитка языка — тоже его агент, но
момент её назван отдельно, шагом 6: пачка собирается из шагов 4 и 5 и до конца
пятого не полна.
**Что именно уезжает:** **Что именно уезжает:**
@@ -290,7 +295,41 @@ git и читается диффом, а второй стоп на каждой
Плагина нет — задачи остаются **списком формулировок в докладе**, и это говорится Плагина нет — задачи остаются **списком формулировок в докладе**, и это говорится
строкой: учёт работ остаётся за владельцем. строкой: учёт работ остаётся за владельцем.
### 6. Гейт и коммит ### 6. Вычитка написанного — до гейта, не после
Разведка правит **две вещи сразу**: документы канона (шаг 4) и записи каталога
задач (шаг 5). Обе — текст, и портится он в момент письма, а машина этого не
видит: `docs.py check` и `tasks.py check` смотрят форму раскладки, а не залог,
оценку без факта, жаргон и термин, которого нет в паспорте проекта.
Пачка **собирается только сейчас**, и поэтому шаг стоит здесь: раньше пятого шага
она не полна, а после коммита вычитка уже правит закоммиченное.
- **Документы** — агент `doc-wording`, владеет им `av-dev-docs:docs` (раздел
«Вычитка»). Пачка — адреса, названные на шаге 4, включая `docs/adr/` и
`docs/research/`.
- **Записи задач** — два прохода, сперва `task-form`, затем `task-wording`;
владеет ими `av-dev-tasks:tasks` (раздел «Вычитка: два прохода»). Пачка —
заведённые и уточнённые на шаге 5 записи. Заголовок и «зачем» правятся **не
молча**: покажи предложенное вместе с тем, что было.
**Что не правилось, то не вычитывается.** Разведка, кончившаяся одним документом
и ни одной задачей, зовёт один проход, и это не пропуск — это названная строкой
пачка. Скилл-владелец уже прогнал свою пачку по ходу шага — назови это и второй
раз тот же файл не гоняй.
**Судей канона — `doc-consistency` и `doc-code-drift` — здесь не зови.** Они
идут на весь канон разом, стоят дорого, и владеет ими `av-dev-docs:healthcheck`,
момент вызова которого выбирает человек. Нужно суждение о согласованности — скажи
строкой и предложи `healthcheck`, а не зови агентов сам.
Ни один проход ничего не правит: они возвращают готовые формулировки,
подставляешь их ты — и уже с подставленными идёшь на гейт.
Плагина нет — вызов не разрешится: скажи строкой, что написанное не вычитывал
никто, и обходного пути не выдумывай.
### 7. Гейт и коммит
**Сперва гейт проекта** — тот же, что гоняет сценарий решения, и по той же **Сперва гейт проекта** — тот же, что гоняет сценарий решения, и по той же
причине: разведка только что правила документы канона и индексы задач, а это причине: разведка только что правила документы канона и индексы задач, а это
@@ -310,14 +349,14 @@ git и читается диффом, а второй стоп на каждой
Одна разведка — один осмысленный коммит: записанный ответ и заведённые задачи Одна разведка — один осмысленный коммит: записанный ответ и заведённые задачи
уезжают вместе, потому что порознь они полуправда. уезжают вместе, потому что порознь они полуправда.
### 7. Закрыть разведку — после коммита, не раньше ### 8. Закрыть разведку — после коммита, не раньше
**Вызови Skill `av-dev-tasks:tasks`** и попроси закрыть запись: ответ записан — **Вызови Skill `av-dev-tasks:tasks`** и попроси закрыть запись: ответ записан —
`close --implemented`, ушла без ответа — `close --reason`, и строка уезжает в `close --implemented`, ушла без ответа — `close --reason`, и строка уезжает в
кладбище. кладбище.
**Порядок обязателен.** Закрытие удаляет файл задачи; сделанное до коммита оно **Порядок обязателен.** Закрытие удаляет файл задачи; сделанное до коммита оно
оставило бы разведку закрытой без единого следа работы, если шаг 6 упадёт. У оставило бы разведку закрытой без единого следа работы, если шаг 7 упадёт. У
разведки это опаснее, чем у решения: следом работы там служит код, а здесь — разведки это опаснее, чем у решения: следом работы там служит код, а здесь —
только записанный ответ. Закрытая разведка без него не оставляет следа вообще — только записанный ответ. Закрытая разведка без него не оставляет следа вообще —
файл задачи удалён, ответ был в переписке. файл задачи удалён, ответ был в переписке.
@@ -340,6 +379,8 @@ git и читается диффом, а второй стоп на каждой
фразу, — признак того, что разведка отвечала не на один вопрос; фразу, — признак того, что разведка отвечала не на один вопрос;
- **куда записано** — перечнем адресов, а не «документация обновлена»; - **куда записано** — перечнем адресов, а не «документация обновлена»;
- **какие задачи заведены и уточнены** — слагами; - **какие задачи заведены и уточнены** — слагами;
- **что вычитано и чем** — пачка документов и пачка записей, каждая со своими
проходами; не вычитанное называется прямо, вместе с причиной;
- **что осталось неизвестным** и чего это стоит: разведка без этой строки - **что осталось неизвестным** и чего это стоит: разведка без этой строки
сообщает «выяснено», не сообщая, что именно осталось не выяснено; сообщает «выяснено», не сообщая, что именно осталось не выяснено;
- **рамки**, если они ограничили работу: докуда копали и почему остановились. - **рамки**, если они ограничили работу: докуда копали и почему остановились.
+14 -9
View File
@@ -77,16 +77,21 @@ description: Вести содержимое документов канона
## Вычитка — наоборот, здесь ## Вычитка — наоборот, здесь
**Язык правленого вычитывается на синке, и зовёшь агента `doc-wording` ты.** **Язык правленого вычитывается тем же прогоном, который его написал, и зовёшь
Довод обратный доводу про судей: он читает **только названную пачку**, стоит агента `doc-wording` ты.** Довод обратный доводу про судей: он читает **только
дёшево и ищет ровно то, что портится в момент письма, — залог, оценку без факта, названную пачку**, стоит дёшево и ищет ровно то, что портится в момент письма, —
жаргон, термин без ввода. Ждать `healthcheck` здесь нечего: через месяц никто уже залог, оценку без факта, жаргон, термин без ввода. Ждать `healthcheck` здесь
не помнит, какую фразу имел в виду автор. нечего: через месяц никто уже не помнит, какую фразу имел в виду автор.
Позови его **последним шагом синка**, отдав список файлов, которых чек-лист Позови его **последним шагом правки, до коммита**, отдав список файлов, которых
коснулся, — и назови этот список в промпте: по нему же он судит, известен ли она коснулась, — и назови этот список в промпте: по нему же он судит, известен ли
термин. Ничего не правивший синк агента не зовёт. Находки он отдаёт готовыми термин. Находки он отдаёт готовыми формулировками, подставляешь их ты.
формулировками, подставляешь их ты.
**Условие вызова — правка, а не синк.** Синк самый частый вызывающий, но не
единственный: разведка (`av-dev-code:resolve`, сценарий разведки) пишет ответ по
одному адресу и синком себя не считает намеренно — вычитка ей нужна ровно та же.
Признак один и читается буквально: **документы правились — зови, ничего не правил
— не зови**.
## ADR — промоут, а не второе сочинение ## ADR — промоут, а не второе сочинение
+2 -1
View File
@@ -617,7 +617,8 @@ python3 $tk adopt scan --from … | apply --plan … # разовая адап
вычитывать до того, как он переписан. вычитывать до того, как он переписан.
Зовутся они **пачкой, а не на каждую запись**: после заведения нескольких задач, Зовутся они **пачкой, а не на каждую запись**: после заведения нескольких задач,
после разбора находок ревью и на переоценке. Передаётся список файлов и — если после разбора находок ревью, после того как чужая работа уточнила записи (так
делает разведка в `av-dev-code:resolve`), и на переоценке. Передаётся список файлов и — если
есть — паспорт, архитектура и конвенции проекта: по ним отличается неизвестный есть — паспорт, архитектура и конвенции проекта: по ним отличается неизвестный
термин от известного. термин от известного.