Синк документации делил правки по документам, а делить их надо по роду. Отражение сделанного (вливание дельт, миграция, компонент в обзоре) пишется молча: без правки документ станет ложным. Новая запись и новая норма — ADR, конвенция, записка разведки, инвариант, периметр, дефект в журнале — только предлагаются, а пишет их третий такт шага 6 после слова человека. Реплика при этом одна на весь хвост: вопрос про урожай ревью переехал с шага 5 на шаг 6 и слился с предложениями синка — решение одно, «что из найденного переживёт задачу». Плановых стопов в сценарии решения стало ровно два, и оба про решения человека. Сверка документов получила счётчик: doc-healthcheck оставляет след ключом [healthcheck] last в .av-dev.toml, синк считает по нему задачи с прошлого прогона и говорит строкой. Прежде признак «десяток задач» держался в памяти, то есть не срабатывал. Журнал — тема 78.
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. Хвост подорожал только на задачах, где что-то заводится. Второй запуск агента идёт лишь после непустой реплики; задача без нового кончается первым тактом, и по цене хвост у неё прежний.