From 8ce2a29160ecc8973353828afaff348e7cb54cf8 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Tue, 4 Aug 2026 19:58:28 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D1=81=D1=82=D0=B0=D0=B2=D1=8B=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=87=D0=B8=D1=82=D0=BA=D0=B8:=20=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D1=80=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8F=20=D0=BC=D0=B5=D1=82=D1=8B=20=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=B2=D0=B0=20=D1=80=D0=BE=D0=B4=D0=B0=20=C2=AB=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=81=D0=B2=D0=BE=D0=B5=D0=B3=D0=BE=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обкатка обоих проходов на тестовом наборе нашла два расхождения в правилах, которые я же и написал. «Одна мысль — одно предложение» не распространяется на поля меты. doc-wording предложил разбить «зачем» надвое, а task-format.md требует от него одного предложения: оно повторяется строкой индекса, и второму там не поместиться. Агент честно выполнил тот документ, который читал; виновато правило без оговорки. Оговорка записана и в доме language.md, и в уставе: тесно — сокращай, но не дели. «Не своё» бывает двух родов. Чужому подрядчику — строкой в границах покрытия, чтобы находка не пропала. Машинной проверке — вообще ничего, даже строкой: это не потерянная находка, а уже проверенное. doc-wording отправил в «замечено не по моей части» открытый вопрос в задаче, который ловит tasks.py check, и строка получилась шумом, выглядящим как работа. Разделение прописано в обоих уставах. DECISIONS тема 24 (ХХХ, ЦЦЦ, следствия 94–95). Co-Authored-By: Claude Opus 5 (1M context) --- DECISIONS.md | 41 +++++++++++++++++++ av-dev-pm/agents/doc-wording.md | 24 +++++++---- av-dev-pm/agents/task-form.md | 21 ++++++---- av-dev-pm/skills/canon/references/language.md | 5 +++ 4 files changed, 77 insertions(+), 14 deletions(-) diff --git a/DECISIONS.md b/DECISIONS.md index 1eff8fd..7347dd0 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -1687,3 +1687,44 @@ ADR, запискам разведки и сообщениям коммитов впервые используется не для скелетов канона, а чтобы удержать одно правило в двух уставах подрядчиков. Случай тот же: текст обязан быть на месте, потому что подрядчик по ссылкам не ходит. + +## 24. Обкатка двух проходов: два дефекта в собственных правилах (2026-08-04) + +### Что было + +Оба прохода запущены на тестовом наборе из 13 записей. `task-form` дал три +находки и блок «строки Завершения», `doc-wording` — пять находок. Разделение +окупилось сразу: `task-form` поймал ровно тот класс, на котором слитый агент +промолчал (границы, названные будущим состоянием, — тема 22, РРР). + +Но два его правила разошлись с остальным каноном. + +### Решено + +**ХХХ. «Одна мысль — одно предложение» не распространяется на поля меты.** +`doc-wording` предложил разбить «зачем» надвое — а `task-format.md` требует от +«зачем» **одного предложения**: оно повторяется строкой индекса, и второму там не +поместиться. Агент честно выполнил тот документ, который читал; виноват не он, а +правило без оговорки. Оговорка записана и в доме (`language.md`), и в уставе: +тесно — сокращай, но не дели. + +**ЦЦЦ. «Не своё» бывает двух родов, и поступают с ними по-разному.** Чужому +подрядчику — строкой в границах покрытия, чтобы находка не пропала. **Машинной +проверке — вообще ничего, даже строкой**: это не потерянная находка, а уже +проверенное. `doc-wording` отправил в «замечено не по моей части» открытый +вопрос в задаче — а его ловит `tasks.py check`, и строка получилась шумом, +который выглядит как работа. + +### Что из этого следует + +94. **Шестое правило нашло то, чего не искали.** Три строки «Завершения» + оказались **закрыты критериями задач, но не заявлены** самими задачами, а + одна строка цели (`checks-one-command`, «названа в README и в описании + работы над проектом») — закрыта наполовину. Агент назвал оба толкования и + выбирать не стал, как и велено. Выбрано сужение цели: описания работы над + проектом у выдуманной игры нет вовсе, и строка обещала то, чего негде + исполнить. +95. **Спорные находки полезны тем, что показывают спор правил, а не вкуса.** + Из пяти языковых находок три приняты сразу, две отклонены — и обе отклонённые + указывали на одно и то же место канона (правило 4 без оговорки). Вкусовых + находок не было ни одной: порог держится. diff --git a/av-dev-pm/agents/doc-wording.md b/av-dev-pm/agents/doc-wording.md index 2afe578..2154287 100644 --- a/av-dev-pm/agents/doc-wording.md +++ b/av-dev-pm/agents/doc-wording.md @@ -66,6 +66,10 @@ color: green утверждениями делится. **Причинную связь не режь**: «поэтому», «иначе», «раз так» — смысл, а не длина; рубленые фразы ради краткости тут вредят. + **Поля меты не делятся.** «Зачем» в мете задачи по формату — одно + предложение: оно повторяется строкой индекса, и второму там не поместиться. + Тесно — сокращай, но не дели. То же с любым полем вида `- **Имя:** …`. + 5. **Англицизм, у которого есть живое русское слово, заменяется.** @@ -120,15 +124,21 @@ color: green ## Чего ты не проверяешь -**Форму записи задачи** — она у `task-form`, см. выше. +Не своё бывает двух разных родов, и поступают с ними по-разному. -Всё, что ловит `tasks.py check` и `docs.py check`: состав и написание секций, -наличие разделов, число критериев, теги, согласованность индексов, битые ссылки. -Повторять машинную проверку словами — заводить второй дом для одного правила; -если видишь такое, просто не пиши. +**Чужому подрядчику — строкой в границах покрытия.** Форма записи задачи у +`task-form`; увидел — назови в конце одной строкой, чтобы находка не пропала, но +находкой не оформляй. + +**Машинной проверке — вообще ничего.** Всё, что ловят `tasks.py check` и +`docs.py check` (состав и написание секций, наличие разделов, число критериев, +теги, тег `question` при непустом разделе «Вопросы», согласованность индексов, +битые ссылки), **не пиши даже строкой**: это не потерянная находка, а уже +проверенное. Повторять машинную проверку словами — заводить второй дом для +одного правила. **Содержание**: верно ли решение, нужна ли задача, полна ли архитектура. Это -разбор, а не вычитка. +разбор, а не вычитка, — и о нём тоже молчи. ## Порог вмешательства @@ -169,7 +179,7 @@ color: green смотрел и почему, и по чему проверялись термины (документы проекта названы или нет). Отчёт без этой строки читается как «всё вычитано», не сообщая, какая часть осталась нетронутой. Туда же — строка «замечено не по моей части», если бросилась -в глаза форма записи. +в глаза форма записи; машинно проверяемое в неё **не идёт**. Ничего не нашёл — так и скажи одной строкой. Пустой доклад с границами покрытия полезнее выдуманной находки. diff --git a/av-dev-pm/agents/task-form.md b/av-dev-pm/agents/task-form.md index d553e66..86875e5 100644 --- a/av-dev-pm/agents/task-form.md +++ b/av-dev-pm/agents/task-form.md @@ -99,16 +99,22 @@ color: yellow ## Чего ты не проверяешь -**Язык** — он у `doc-wording`, см. выше. +Не своё бывает двух разных родов, и поступают с ними по-разному. -Всё, что ловит `tasks.py check`: наличие разделов, число критериев, состав и -написание секций, теги, согласованность индексов, битые ссылки, форма заголовка -как строки. Повторять машинную проверку словами — заводить второй дом для одного -правила; если видишь такое, просто не пиши. +**Чужому подрядчику — строкой в границах покрытия.** Язык у `doc-wording`; +увидел — назови в конце одной строкой, чтобы находка не пропала, но находкой не +оформляй. + +**Машинной проверке — вообще ничего.** Всё, что ловит `tasks.py check` (наличие +разделов, число критериев, состав и написание секций, теги, тег `question` при +непустом разделе «Вопросы», согласованность индексов, битые ссылки, форма +заголовка как строки), **не пиши даже строкой**: это не потерянная находка, а +уже проверенное. Повторять машинную проверку словами — заводить второй дом для +одного правила. **Содержание работы**: нужна ли задача, верно ли выбрана цель, не крупна ли она, достаточна ли декомпозиция. Шестое правило подходит к этому близко и -останавливается там, где кончается сверка с текстом цели. +останавливается там, где кончается сверка с текстом цели. Об этом молчи. ## Порог вмешательства @@ -151,7 +157,8 @@ color: yellow В конце — **границы покрытия**: сколько записей просмотрено из скольких, какие цели открыты, какие не смотрел и почему. Отчёт без этой строки читается как «беклог проверен», не сообщая, какая его часть осталась нетронутой. Туда же — -строка «замечено не по моей части», если бросился в глаза язык. +строка «замечено не по моей части», если бросился в глаза язык; машинно +проверяемое в неё **не идёт**. Ничего не нашёл — так и скажи одной строкой. Пустой доклад с границами покрытия полезнее выдуманной находки. diff --git a/av-dev-pm/skills/canon/references/language.md b/av-dev-pm/skills/canon/references/language.md index 8ab438b..a35de1d 100644 --- a/av-dev-pm/skills/canon/references/language.md +++ b/av-dev-pm/skills/canon/references/language.md @@ -59,6 +59,11 @@ утверждения, делится. Придаточное, которое можно вынести в отдельную фразу, выносится. +Исключение — **поля, которым формат отвёл одно предложение**. «Зачем» в мете +задачи именно такое: оно повторяется строкой индекса, и второе предложение там +просто не поместится. Такое поле либо укладывается в одну фразу, либо +сокращается, но не делится. + **Параллельность.** Однородное пишется одинаково: пункты списка — одной грамматической формой, разделы одного вида — одним порядком, заголовки одного уровня — одним типом фразы. Разнобой читатель принимает за разницу по существу и