Files
dev-skills/decisions/78-tail-reflection-silent-new-by-word.md
T
av a4bc9191e7 хвост задачи: отражение молча, новое — по слову человека
Синк документации делил правки по документам, а делить их надо по роду.
Отражение сделанного (вливание дельт, миграция, компонент в обзоре) пишется
молча: без правки документ станет ложным. Новая запись и новая норма — ADR,
конвенция, записка разведки, инвариант, периметр, дефект в журнале — только
предлагаются, а пишет их третий такт шага 6 после слова человека.

Реплика при этом одна на весь хвост: вопрос про урожай ревью переехал с шага 5
на шаг 6 и слился с предложениями синка — решение одно, «что из найденного
переживёт задачу». Плановых стопов в сценарии решения стало ровно два, и оба
про решения человека.

Сверка документов получила счётчик: doc-healthcheck оставляет след ключом
[healthcheck] last в .av-dev.toml, синк считает по нему задачи с прошлого
прогона и говорит строкой. Прежде признак «десяток задач» держался в памяти,
то есть не срабатывал.

Журнал — тема 78.
2026-08-23 19:06:06 +03:00

10 KiB

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. Хвост подорожал только на задачах, где что-то заводится. Второй запуск агента идёт лишь после непустой реплики; задача без нового кончается первым тактом, и по цене хвост у неё прежний.