хвост задачи: отражение молча, новое — по слову человека
Синк документации делил правки по документам, а делить их надо по роду. Отражение сделанного (вливание дельт, миграция, компонент в обзоре) пишется молча: без правки документ станет ложным. Новая запись и новая норма — ADR, конвенция, записка разведки, инвариант, периметр, дефект в журнале — только предлагаются, а пишет их третий такт шага 6 после слова человека. Реплика при этом одна на весь хвост: вопрос про урожай ревью переехал с шага 5 на шаг 6 и слился с предложениями синка — решение одно, «что из найденного переживёт задачу». Плановых стопов в сценарии решения стало ровно два, и оба про решения человека. Сверка документов получила счётчик: doc-healthcheck оставляет след ключом [healthcheck] last в .av-dev.toml, синк считает по нему задачи с прошлого прогона и говорит строкой. Прежде признак «десяток задач» держался в памяти, то есть не срабатывал. Журнал — тема 78.
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# 78. Хвост задачи: отражение молча, новое — по слову (2026-08-23)
|
||||
|
||||
## Что было
|
||||
|
||||
Тема 77 привела ревью в соответствие с ролью агента: цикл проверяет корректность
|
||||
и механику, а суждение о замысле стоит там, где решает человек. **Хвост задачи
|
||||
остался прежним.**
|
||||
|
||||
Шаг 6 писал в документы сам. Синк шёл по чек-листу из десяти строк с
|
||||
принуждённым отрицанием и по сработавшему триггеру заводил ADR, промоутил находку
|
||||
в конвенцию, писал в `research/`, `security.md`, `CLAUDE.md`, журнал дефектов.
|
||||
Человек узнавал об этом **постфактум** — строками чек-листа в докладе, который
|
||||
читают последним и по диагонали. Задачи из урожая ревью к этому времени уже
|
||||
заводились по слову (Р307), а документы — нет: одна и та же работа, «что из
|
||||
найденного переживёт задачу», решалась в двух разных режимах.
|
||||
|
||||
Вопросов при этом выходило два — про урожай на шаге 5 и про документы на шаге 6,
|
||||
— то есть два переключения человека там, где решение одно.
|
||||
|
||||
Отдельно стояла **сверка документов**. `av-dev:doc-healthcheck` зовут по
|
||||
наблюдаемому признаку «с прошлой сверки сделан десяток задач», но следа сверка не
|
||||
оставляла и задачи с тех пор не считал никто. Это ровно тот прозаический триггер,
|
||||
измеренная цена которого записана в самом же синке: у ADR такой триггер дал **6
|
||||
записей на 43 изменения**.
|
||||
|
||||
## Решено
|
||||
|
||||
**Р311. Правки в документы разделены по роду, и спрашивается один род.** Признак
|
||||
проверяемый: **что станет с документом, если правку не сделать**. Станет ложным —
|
||||
это **отражение**, и оно пишется молча. Появится запись или норма, которой не
|
||||
было, — это **новое**, и оно пишется только по слову человека.
|
||||
|
||||
**Р312. Отражение — документы, описывающие состояние системы.** Это
|
||||
`openspec/specs/`, `database.md` и `architecture.md`. Остальной чек-лист — новое:
|
||||
`adr/`, `conventions/`, `research/`, `security.md`, `passport.md`, `CLAUDE.md` и
|
||||
журнал `review.md` задают норму или хранят память, и разойтись им не с чем, пока
|
||||
в них не написано новое.
|
||||
|
||||
**Р313. Реплика человеку одна на весь хвост.** В ней и предложения синка, и
|
||||
урожай ревью; вопрос про урожай перенесён с шага 5 на шаг 6. Нового нет —
|
||||
реплики нет, и у большинства задач так и выходит.
|
||||
|
||||
**Р314. Шаг 6 идёт в три такта, агент запускается в нём дважды.** Первый такт —
|
||||
`opsx:archive` и отражение; второй — реплика; третий — письмо одобренного и
|
||||
задачи из урожая. Вычитку `doc-wording` зовёт `av-dev:doc-sync` **последним
|
||||
тактом, в котором писал**: вернул непустой список предложений — вычитка ждёт
|
||||
третьего такта, список пуст — идёт в первом.
|
||||
|
||||
**Р315. Конвенция — самое дорогое из нового, и в хвосте она только
|
||||
предлагается.** Её строка становится входом каждого следующего прогона ревью.
|
||||
Механизация правила (шаг 2 промоута: конфиг, сканер, приведение кода к зелёному)
|
||||
в хвост чужой задачи не помещается вовсе — это задача `chore`, заводимая тем же
|
||||
словом, что и сама конвенция.
|
||||
|
||||
**Р316. Отвергнутое не пишется никуда.** Ни в один документ, ни отдельной
|
||||
записью «от такого-то отказались»: журнала отвергнутого канон не держит, и
|
||||
заведение его было бы ровно тем новым, которого человек только что не заказал.
|
||||
Отказ идёт строкой доклада.
|
||||
|
||||
**Р317. «По слову» — это по слову, а не вторым вопросом.** Сказанное человеком в
|
||||
этом же прогоне повторно не спрашивается: решение сузить проверки принимает он по
|
||||
определению, ответ разведки одобрен чекпоинтом вариантов, прямая просьба «заведи
|
||||
ADR» и есть слово. Предложение существует ради нового, которое заметил агент.
|
||||
|
||||
**Р318. Сверка документов оставляет след, а синк его считает.** След — ключ
|
||||
`[healthcheck] last` в `.av-dev.toml`, хеш коммита прошлого прогона; ставит его
|
||||
`av-dev:doc-healthcheck` последним шагом. Счёт — `git rev-list --count
|
||||
<last>..HEAD -- openspec/changes/archive`, то есть в задачах, доехавших до архива;
|
||||
без openspec считаются коммиты, и это говорится вслух. Строка доклада
|
||||
обязательна всегда, вариантов три: рано, пора, не сверялись ни разу. **Синк
|
||||
сверку не зовёт** — часы на неё тратит тот, кто их оплачивает.
|
||||
|
||||
## Следствия
|
||||
|
||||
**С275. Плановых стопов в сценарии решения два, и оба про решения человека.**
|
||||
Чекпоинт шага 3 решает форму решения до кода, реплика шага 6 — что из найденного
|
||||
переживёт задачу. Между ними прогон идёт сам: инлайн чинится молча, отражение
|
||||
пишется молча. Третий стоп заводить нельзя — прогон, останавливающийся чаще,
|
||||
теряет то время, ради которого выбраны короткие итерации.
|
||||
|
||||
**С276. Принуждённое отрицание сменило адресата, но не ослабло.** Каждый документ
|
||||
канона по-прежнему назван — правкой, предложением или отрицанием с причиной;
|
||||
изменилось то, что отрицание читает человек и читает его **до** того, как
|
||||
что-нибудь написано.
|
||||
|
||||
**С277. Сценарий обслуживания почти не спрашивает.** Он двигает факты — команды,
|
||||
шаги гейта, зависимости поимённо, пути, числа настроек, — а факт, разошедшийся с
|
||||
кодом, это отражение по определению. Поводов для реплики у него два: новый запрет
|
||||
в `CLAUDE.md` и сужение проверок в `review.*`, причём второе не спрашивается по
|
||||
Р317.
|
||||
|
||||
**С278. Признак «десяток задач» стал числом.** Ключ `.av-dev.toml`
|
||||
необязательный и заводится сам первым же прогоном сверки, поэтому версия
|
||||
раскладки не двигается и `upgrade` проектам не нужен. Отсутствие ключа читается
|
||||
однозначно: не сверялись ни разу.
|
||||
|
||||
**С279. Журнал дефектов теперь зависит от ответа человека.** Запись
|
||||
воспроизведённого дефекта — новое, и молчаливого «да» у неё больше нет. Правило
|
||||
«пишется сразу» сохранено в другом виде: предложение делается **этим** прогоном,
|
||||
отложить его до «когда починим» нельзя ни с чьего согласия. Но человек вправе
|
||||
отказать, и тогда калибровка конвейера по этому дефекту не состоится — цена
|
||||
названа здесь, а не подразумевается.
|
||||
|
||||
**С280. Отказ нигде не хранится, и похожее предложение придёт снова.** Это прямое
|
||||
следствие Р316 и сознательный размен: журнал отвергнутого сам стал бы каноном,
|
||||
который никто не заказывал. В `av-dev:code-deep-review` разбор устроен иначе —
|
||||
там отказ уезжает в `docs/review.md`, потому что прогон затевается ради разговора
|
||||
и его исход и есть артефакт.
|
||||
|
||||
**С281. Хвост подорожал только на задачах, где что-то заводится.** Второй запуск
|
||||
агента идёт лишь после непустой реплики; задача без нового кончается первым
|
||||
тактом, и по цене хвост у неё прежний.
|
||||
Reference in New Issue
Block a user