diff --git a/README.md b/README.md
index 2325b35..52e54e3 100644
--- a/README.md
+++ b/README.md
@@ -108,7 +108,7 @@
дизайна (`small` — только сверка спек; `medium` — плюс рубрика; `large` — плюс
архитектурный проход) и кода (`small` — гейт, спеки, код, триаж; `medium` —
плюс приёмник тем; `large` — плюс доказательство: запуск, замер, построенный
- путь, 5–10% задач). Десять агентов-проходов.
+ путь, 5–10% задач). Каждый проход — свой агент, перечень держит сам скилл.
### av-dev-git
@@ -121,10 +121,10 @@
```mermaid
flowchart TB
- subgraph avdev["av-dev — один плагин, девять скиллов"]
+ subgraph avdev["av-dev — один плагин, весь процесс"]
subgraph pipe["работа по задачам; сценарий решения требует OpenSpec"]
direction LR
- tp["code-resolve
3 сценария: разведка,
решение, обслуживание"] --> rp["code-review
10 агентов-проходов"]
+ tp["code-resolve
3 сценария: разведка,
решение, обслуживание"] --> rp["code-review
агенты-проходы"]
osp["code-openspec
заводит и проверяет openspec/"]
end
canon["canon
форма раскладки всего проекта"]
diff --git a/av-dev/agents/doc-wording.md b/av-dev/agents/doc-wording.md
index b9d4912..281c63c 100644
--- a/av-dev/agents/doc-wording.md
+++ b/av-dev/agents/doc-wording.md
@@ -1,6 +1,6 @@
---
name: doc-wording
-description: "Вычитка языка документов проекта по информационному стилю — паспорт, архитектура, конвенции, безопасность, решения ADR, записки разведки, CLAUDE.md. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в имени файла. Отдаёт готовые формулировки на замену и ничего не правит сам. Записи каталога задач вычитывает отдельный агент task-wording, их форму — task-form. Зовётся по названной пачке правленных документов, а не на весь канон: последним шагом синка документации (av-dev:doc-sync), шагом заведения проекта (av-dev:doc-init), сценарием разведки (av-dev:code-resolve), шагами adopt и upgrade скилла av-dev:canon. Скилл healthcheck его не зовёт — там сверка утверждений, а не языка. Только чтение."
+description: "Вычитка языка документов проекта по информационному стилю — паспорт, архитектура, конвенции, безопасность, решения ADR, записки разведки, CLAUDE.md. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в имени файла, счёт корпуса числом вместо ссылки («пять ревью», «три capability»). Отдаёт готовые формулировки на замену и ничего не правит сам. Записи каталога задач вычитывает отдельный агент task-wording, их форму — task-form. Зовётся по названной пачке правленных документов, а не на весь канон: последним шагом синка документации (av-dev:doc-sync), шагом заведения проекта (av-dev:doc-init), сценарием разведки (av-dev:code-resolve), шагами adopt и upgrade скилла av-dev:canon. Скилл healthcheck его не зовёт — там сверка утверждений, а не языка. Только чтение."
tools: Read, Grep, Glob
model: sonnet
color: green
@@ -153,6 +153,34 @@ color: green
коммитах и путях, которые набирают руками. Переименование — **перенос ссылок
одним проходом**, а не правка одного файла.
+10. **Счёт корпуса не пишется словами.** «Пять ревью», «три capability»,
+ «десять проходов», «четыре документа канона» — это факт о корпусе, а дом у
+ такого факта сам корпус. Переписанный в прозу, он расходится с ним на первом
+ же пополнении, и расходится **молча**: фраза остаётся грамматически исправной
+ и правдоподобной, а проверить её можно только пересчётом, которого никто не
+ делает.
+
+ Сослаться можно двумя способами, и ни один не стареет:
+
+ | Как | Пример |
+ | --- | --- |
+ | на конкретную запись — именем, слагом, датой | «ревью от 3 августа», `adr/0007-queue-as-table.md`, capability `recognition` |
+ | на корпус целиком | «ревью проекта», «capability, объявленные в `openspec/specs/`» |
+
+ Величина нужна читателю редко, а когда нужна — её называет сам корпус в
+ момент чтения: каталог, индекс, команда. Абзац её только запоминает.
+
+ **Замер с провенансом — не счёт корпуса.** «Прозаический триггер дал 6
+ записей ADR на 43 изменения» описывает прошлое, а прошлое не пополняется: это
+ факт по правилу 2, и трогать его нельзя. Разница проверяется вопросом
+ «изменится ли число само, без правки текста».
+
+ **Число, стоящее заголовком к перечню, приведённому тут же, правилом не
+ задето.** «Три исхода:» с тремя пунктами под ним — не ссылка на корпус, и
+ расходится оно не втихую, а вместе со списком, который правят в той же
+ строке. Уехал перечень в другой файл — число уезжает с ним, а на его месте
+ остаётся ссылка.
+
### Что из этих правил докладывается особым образом
@@ -170,6 +198,14 @@ color: green
ходу. Находка — готовое английское имя на замену плюс напоминание про перенос
ссылок одним проходом.
+**Правило 10, счёт корпуса.** Пересчитывать корпус не надо: находка — в самом
+числе, а не в том, что оно разошлось. Число, совпадающее с действительностью
+сегодня, — та же находка: завтра оно разойдётся, и молча. Предложение — готовая
+замена: ссылка на конкретную запись или называние корпуса целиком. Перечень,
+приведённый тут же под числом, не трогай. Чаще всего счёт заводится в
+`architecture.md` («три источника», «пять единых точек») и в `review.md`, где
+пересказывают журнал.
+
## Чего ты не проверяешь
Не своё бывает двух разных родов, и поступают с ними по-разному.
diff --git a/av-dev/agents/task-wording.md b/av-dev/agents/task-wording.md
index 61ca8d4..9d55e57 100644
--- a/av-dev/agents/task-wording.md
+++ b/av-dev/agents/task-wording.md
@@ -1,6 +1,6 @@
---
name: task-wording
-description: "Вычитка языка записей каталога задач по информационному стилю — задачи, строки индекса и причины отказа. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в слаге. Отдаёт готовые формулировки на замену и ничего не правит сам. Форму записи (заголовок по типу, «зачем», границы, оракулы) смотрит отдельный агент task-form, документы проекта вычитывает doc-wording. Использовать после заведения или разбора пачки записей, до взятия в работу и на переоценке беклога. Только чтение."
+description: "Вычитка языка записей каталога задач по информационному стилю — задачи, строки индекса и причины отказа. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в слаге, счёт корпуса числом вместо ссылки («три эндпоинта», «четыре миграции»). Отдаёт готовые формулировки на замену и ничего не правит сам. Форму записи (заголовок по типу, «зачем», границы, оракулы) смотрит отдельный агент task-form, документы проекта вычитывает doc-wording. Использовать после заведения или разбора пачки записей, до взятия в работу и на переоценке беклога. Только чтение."
tools: Read, Grep, Glob
model: sonnet
color: green
@@ -160,6 +160,34 @@ color: green
коммитах и путях, которые набирают руками. Переименование — **перенос ссылок
одним проходом**, а не правка одного файла.
+10. **Счёт корпуса не пишется словами.** «Пять ревью», «три capability»,
+ «десять проходов», «четыре документа канона» — это факт о корпусе, а дом у
+ такого факта сам корпус. Переписанный в прозу, он расходится с ним на первом
+ же пополнении, и расходится **молча**: фраза остаётся грамматически исправной
+ и правдоподобной, а проверить её можно только пересчётом, которого никто не
+ делает.
+
+ Сослаться можно двумя способами, и ни один не стареет:
+
+ | Как | Пример |
+ | --- | --- |
+ | на конкретную запись — именем, слагом, датой | «ревью от 3 августа», `adr/0007-queue-as-table.md`, capability `recognition` |
+ | на корпус целиком | «ревью проекта», «capability, объявленные в `openspec/specs/`» |
+
+ Величина нужна читателю редко, а когда нужна — её называет сам корпус в
+ момент чтения: каталог, индекс, команда. Абзац её только запоминает.
+
+ **Замер с провенансом — не счёт корпуса.** «Прозаический триггер дал 6
+ записей ADR на 43 изменения» описывает прошлое, а прошлое не пополняется: это
+ факт по правилу 2, и трогать его нельзя. Разница проверяется вопросом
+ «изменится ли число само, без правки текста».
+
+ **Число, стоящее заголовком к перечню, приведённому тут же, правилом не
+ задето.** «Три исхода:» с тремя пунктами под ним — не ссылка на корпус, и
+ расходится оно не втихую, а вместе со списком, который правят в той же
+ строке. Уехал перечень в другой файл — число уезжает с ним, а на его месте
+ остаётся ссылка.
+
### Что из этих правил докладывается особым образом
@@ -180,6 +208,14 @@ color: green
английский слаг на замену плюс напоминание, что переименование это перенос
ссылок одним проходом, а не правка одного файла.
+**Правило 10, счёт корпуса.** Пересчитывать корпус не надо: находка — в самом
+числе, а не в том, что оно разошлось. Число, верное сегодня, — та же находка. В
+записях счёт заводится в «Затрагивает» («три эндпоинта», «четыре миграции») и в
+критериях приёмки, и там он опаснее прочего: критерий, сверяемый по числу,
+пройдёт на другом составе работ. Предложение — готовая замена: перечислить
+поимённо или назвать корпус целиком. Перечень, приведённый тут же под числом, не
+трогай.
+
## Чего ты не проверяешь
Не своё бывает двух разных родов, и поступают с ними по-разному.
diff --git a/av-dev/shared/axes.md b/av-dev/shared/axes.md
index a7d483d..fa1ab97 100644
--- a/av-dev/shared/axes.md
+++ b/av-dev/shared/axes.md
@@ -28,8 +28,8 @@
| коды выхода | 0 1 2 3 4 | здесь, ниже |
Две оси стоят домом **здесь**, и обе по одной причине: владельца у них нет.
-Коды выхода делят восемь скриптов и три скилла, режим прогона — конвейер, сценарий
-обслуживания и два устава.
+Коды выхода делят все скрипты плагина и зовущие их скиллы, режим прогона —
+конвейер, сценарий обслуживания и уставы вычитки.
## Что на что влияет
diff --git a/av-dev/shared/language.md b/av-dev/shared/language.md
index fa6b379..3259054 100644
--- a/av-dev/shared/language.md
+++ b/av-dev/shared/language.md
@@ -14,7 +14,7 @@
| Блок | Что в нём | Кто копирует |
| --- | --- | --- |
-| `язык-правила` | девять правил, по которым судят текст | уставы вычитки |
+| `язык-правила` | правила, по которым судят текст | уставы вычитки |
| `порог-правки` | когда находка не заводится | уставы вычитки, `task-form` |
`порог-правки` вынесен из правил намеренно: он нужен и тому, кто правил языка не
@@ -211,6 +211,34 @@
коммитах и путях, которые набирают руками. Переименование — **перенос ссылок
одним проходом**, а не правка одного файла.
+10. **Счёт корпуса не пишется словами.** «Пять ревью», «три capability»,
+ «десять проходов», «четыре документа канона» — это факт о корпусе, а дом у
+ такого факта сам корпус. Переписанный в прозу, он расходится с ним на первом
+ же пополнении, и расходится **молча**: фраза остаётся грамматически исправной
+ и правдоподобной, а проверить её можно только пересчётом, которого никто не
+ делает.
+
+ Сослаться можно двумя способами, и ни один не стареет:
+
+ | Как | Пример |
+ | --- | --- |
+ | на конкретную запись — именем, слагом, датой | «ревью от 3 августа», `adr/0007-queue-as-table.md`, capability `recognition` |
+ | на корпус целиком | «ревью проекта», «capability, объявленные в `openspec/specs/`» |
+
+ Величина нужна читателю редко, а когда нужна — её называет сам корпус в
+ момент чтения: каталог, индекс, команда. Абзац её только запоминает.
+
+ **Замер с провенансом — не счёт корпуса.** «Прозаический триггер дал 6
+ записей ADR на 43 изменения» описывает прошлое, а прошлое не пополняется: это
+ факт по правилу 2, и трогать его нельзя. Разница проверяется вопросом
+ «изменится ли число само, без правки текста».
+
+ **Число, стоящее заголовком к перечню, приведённому тут же, правилом не
+ задето.** «Три исхода:» с тремя пунктами под ним — не ссылка на корпус, и
+ расходится оно не втихую, а вместе со списком, который правят в той же
+ строке. Уехал перечень в другой файл — число уезжает с ним, а на его месте
+ остаётся ссылка.
+
## Порог правки
diff --git a/av-dev/skills/canon/references/canon.md b/av-dev/skills/canon/references/canon.md
index d2a961d..03dc6b8 100644
--- a/av-dev/skills/canon/references/canon.md
+++ b/av-dev/skills/canon/references/canon.md
@@ -464,6 +464,12 @@ kebab-case.** Причина не эстетическая: имя файла с
| что уже механизировано правилом | `conventions.*`, раздел «Механизировано» |
+**Сколько чего в корпусе — тоже факт, и дом у него сам корпус.** «Пять ревью»,
+«три capability», «четыре документа» в прозе — второй дом, расходящийся с первым
+на ближайшем пополнении и молча. Правило и оба законных способа сослаться —
+`av-dev/shared/language.md`, правило 10; здесь оно названо потому, что счёт
+корпуса выглядит не копией, а собственным наблюдением документа.
+
## Пустое называется пустым
Скелет канона заводится **целиком** с первого дня. Незаполненный документ держит
diff --git a/av-dev/skills/code-resolve/references/solve.md b/av-dev/skills/code-resolve/references/solve.md
index 44bf3a3..18d3ffc 100644
--- a/av-dev/skills/code-resolve/references/solve.md
+++ b/av-dev/skills/code-resolve/references/solve.md
@@ -289,7 +289,7 @@ flowchart TD
**Сверь план прогона с исходом, прежде чем коммитить.** Отчёт начинается планом
разметчика — таблицей «тема → дом → глубина → кто закрывает», — и против каждой
темы обязан стоять исход. Тема без отчёта и тема без дома — разные вещи, и обе
-должны быть названы. Реестр короткий (шесть тем ядра плюс свои) — сверка стоит
+должны быть названы. Реестр короткий — темы ядра плюс свои проекта, — и сверка стоит
одного взгляда.
#### Отработка, и здесь появляется одно новое правило
diff --git a/av-dev/skills/code-review/SKILL.md b/av-dev/skills/code-review/SKILL.md
index b24831c..362372d 100644
--- a/av-dev/skills/code-review/SKILL.md
+++ b/av-dev/skills/code-review/SKILL.md
@@ -337,8 +337,8 @@ charter'а, а модель потом двигает калибровка, и
изменения нет двух разных «глубин проверки»: величина, из которой выводится
состав, — одна и та же пара «размер × сложность», посчитанная один раз.
-**Метка не меняет список тем — она меняет их дом и глубину.** Все шесть тем
-ядра названы при любой метке; разница в том, против чего их смотрят (дом темы
+**Метка не меняет список тем — она меняет их дом и глубину.** Все темы ядра
+названы при любой метке; разница в том, против чего их смотрят (дом темы
или только инварианты) и как (чтением, рассуждением или запуском).
Ревью кода:
diff --git a/av-dev/skills/task-track/references/split.md b/av-dev/skills/task-track/references/split.md
index c28065d..37591ee 100644
--- a/av-dev/skills/task-track/references/split.md
+++ b/av-dev/skills/task-track/references/split.md
@@ -33,8 +33,8 @@
**Шов — там, где падает метка ревью.** Раздел «Затрагивает» перечисляет
границы; если одна строка перечня поднимает метку выше остальных, эта часть и
режется отдельно. Пример: задача перекладывает несколько узлов разом и заодно
-добавляет два поля в существующий ответ. Целиком это `large` — семь проходов по
-всему диффу, включая два, что держат машину и идут цепочкой. Разрезанная по шву,
+добавляет два поля в существующий ответ. Целиком это `large` — полный состав проходов по
+всему диффу, включая те, что держат машину и идут цепочкой. Разрезанная по шву,
она даёт `large` на маленькой переложенной части и `medium` на остатке.
**Считай костяк, а не файлы.** У каждой задачи есть несокращаемые четыре прохода