хвост: учёт зовёт оркестратор, третий такт идёт и на отказе
Ревью трансформации нашло, что тема 78 спорит сама с собой в четырёх местах. Учёт был отдан агенту, хотя перечень оркестратора объявлен закрытым, а границы задания прямо говорят «задач не заводит»: вызов av-dev:task-track вернулся оркестратору, агенту третьего такта осталось письмо в документы. Ветка отказа не была покрыта — на ответе «ничего» правка первого такта уезжала в коммит невычитанной и с непрогнанным гейтом. Теперь третий такт идёт всякий раз, когда была реплика; не идёт он только тогда, когда реплики не было вовсе. Дом правила вычитки в doc-sync знает про два захода. Барьер карты кластеров из сценария «задачи из ревью и аудита» снимается там, где его уже прошли: список показан человеку и получил ответ. При прямом вызове и вызове из code-deep-review карта по-прежнему вопрос. Счёт стопов сведён в таблицу по сценариям; у обслуживания появился второй заход и одна реплика с поводом «новый запрет или инвариант». Сигнал сверки считается по архиву change и каталогу задач разом — иначе chore и research не считались вовсе — и вошёл в возврат агента и в доклады трёх сценариев. Ось «род правки документа» внесена в перечень осей. Журнал — тема 80; отложенный старший долг назван в С287.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
| форма постановки | запись каталога · текст | `code-resolve/SKILL.md`, «Вход» |
|
||||
| сценарий | решение · обслуживание · разведка | `code-resolve/SKILL.md`, «Развилка» |
|
||||
| режим прогона | по change · без change | здесь, ниже |
|
||||
| род правки документа | отражение · новое | `doc-sync/SKILL.md`, «Два рода правок» |
|
||||
| категория документа | тема · источник темы · процессный | `canon/references/canon.md` |
|
||||
| severity находки | `critical` `major` `minor` `nit` | `code-review/references/finding-contract.md` |
|
||||
| коды выхода | 0 1 2 3 4 | здесь, ниже |
|
||||
@@ -55,6 +56,8 @@
|
||||
| режим прогона | состав проходов и саму возможность запуска прохода | `code-review/SKILL.md`, «Прогон без change» |
|
||||
| категория документа | заводит ли документ направление проверки | `canon.md`, «Три категории» |
|
||||
| severity | что с находкой делают дальше | `code-review/SKILL.md`, «Что происходит с находками» |
|
||||
| род правки | спрашивают ли человека перед письмом в документ | `doc-sync/SKILL.md`, «Два рода правок» |
|
||||
| сценарий | какова доля отражения в синке: обслуживание двигает факты и потому спрашивает редко | `code-resolve/references/maintain.md`, шаг 5 |
|
||||
|
||||
**Четыре клетки пусты, и это сказано намеренно, а не забыто.**
|
||||
|
||||
@@ -65,6 +68,11 @@
|
||||
нет. Значит, документ, заведённый проектом как тема, на обслуживании не смотрит
|
||||
никто, и строкой это нигде не называется.
|
||||
|
||||
**Род правки × severity и × режим прогона.** Не влияет ни туда, ни обратно: род
|
||||
правки — свойство того, что пишется в документ, и с находкой ревью он не
|
||||
встречается. Находка, доехавшая до конвенции, меняет род не сама по себе, а тем,
|
||||
что становится новой нормой, — и спрашивается тогда как всякое новое.
|
||||
|
||||
**Стадия проекта × режим прогона.** Не влияет: режим выбирает сценарий. Прогон
|
||||
обслуживания на стройке — обычное дело (первые шаги плана заводят гейт и сборку),
|
||||
и идёт он там так же, как на доработке.
|
||||
|
||||
@@ -202,6 +202,12 @@ capability — одним адресом или несколькими. Скил
|
||||
владеет этим документом. В следе: область, состав проходов, что взято задачами,
|
||||
что отвергнуто и почему, что проверить было невозможно.
|
||||
|
||||
**Второго вопроса здесь не задают, хотя `review.md` — документ рода «новое»**
|
||||
(`av-dev:doc-sync`, «Два рода правок»): слово по каждой находке человек уже сказал
|
||||
в разборе, и след цитирует ровно его решения. Правило то же, что у сужения
|
||||
проверок: спрашивается новое, которое заметил ты, а не то, что человек только что
|
||||
решил вслух.
|
||||
|
||||
Без этого следа второй прогон по той же области начнётся с нуля и предложит те же
|
||||
находки, от которых человек уже отказался, — а отказ, не оставивший записи,
|
||||
неотличим от непойманного.
|
||||
|
||||
@@ -303,7 +303,7 @@ flowchart TD
|
||||
| правки по находкам триажа, помеченным `инлайн` | [solve](references/solve.md), шаг 5; [maintain](references/maintain.md), шаг 4 |
|
||||
| правка оснастки в сценарии обслуживания | [maintain](references/maintain.md), шаг 2 |
|
||||
| архивация change и отражение в документах — `opsx:archive` и `av-dev:doc-sync` | [solve](references/solve.md), шаг 6, такт 1; [maintain](references/maintain.md), шаг 5 |
|
||||
| письмо одобренного нового и задачи из урожая | [solve](references/solve.md), шаг 6, такт 3 |
|
||||
| письмо одобренного нового в документы канона | [solve](references/solve.md), шаг 6, такт 3; [maintain](references/maintain.md), шаг 5 |
|
||||
|
||||
**Остальное остаётся оркестратору, и перечень закрыт:** выбор сценария и стопы,
|
||||
чекпоинт, вызовы `av-dev:code-review`, `av-dev-git:commit` и `av-dev:task-track`,
|
||||
@@ -393,11 +393,21 @@ flowchart TD
|
||||
второй раз — делай сам и **скажи это строкой доклада**: прогон стоил дороже, чем
|
||||
должен, и это факт для человека, а не стоп.
|
||||
|
||||
## Автономность и плановый стоп
|
||||
## Автономность и плановые стопы
|
||||
|
||||
**У двух сценариев ровно один плановый стоп**, и стоят они в разных местах:
|
||||
у решения — объяснение сразу после предложения и до кода, у разведки — варианты
|
||||
до первого написанного требования. Правило вокруг них общее.
|
||||
**Стопов у сценария не больше двух, и каждый — про решение человека, а не про
|
||||
ход работ.**
|
||||
|
||||
| Сценарий | Стоп до письма | Стоп после письма |
|
||||
| --- | --- | --- |
|
||||
| решение | чекпоинт: объяснение после предложения и до кода | реплика шага 6: что из найденного заводится |
|
||||
| разведка | чекпоинт вариантов до первого написанного требования | — исход и так уезжает в документы по выбранному варианту |
|
||||
| обслуживание | — планового нет | реплика шага 5, и только если появилось новое |
|
||||
|
||||
**Второй стоп короче первого и часто не случается вовсе.** Первый решает форму
|
||||
решения, и без ответа работа не идёт дальше; второй решает, что из найденного
|
||||
переживёт задачу, и при пустом списке нового его просто нет. Правило вокруг обоих
|
||||
общее.
|
||||
|
||||
**У обслуживания планового стопа нет вовсе, и это следствие, а не поблажка.**
|
||||
Один стоп с ожиданием ответа у него всё же есть — по найденной дельта-спеке, — но
|
||||
@@ -529,12 +539,14 @@ change, у второго — сверенный состав гейта и си
|
||||
текущем worktree и на текущей ветке: не делай `git checkout`/`switch`, не
|
||||
создавай веток, не пушь.
|
||||
- Прогон проходит **не больше одного** чекпоинта, и это норма, а не упрощение.
|
||||
Два стопа за одну задачу — цена незнания способа, и платится она двумя
|
||||
Два чекпоинта за одну задачу — цена незнания способа, и платится она двумя
|
||||
прогонами, а не одним длинным. У обслуживания чекпоинта нет ни одного, и это
|
||||
тоже норма: там нечего решать.
|
||||
тоже норма: там нечего решать. Реплика о новом чекпоинтом не является и этого
|
||||
счёта не касается — она решает не форму решения, а судьбу находок.
|
||||
- Держи вызывающего в цикле короткими репликами на переходах фаз, но не проси
|
||||
подтверждать механику: чекпоинт — единственное место, где ждут ответа, а в
|
||||
обслуживании такого места нет вовсе.
|
||||
подтверждать механику. Мест, где **ждут ответа**, ровно два, и оба названы в
|
||||
«Автономности»: чекпоинт до кода и реплика о новом после него. Третьего нет ни
|
||||
в одном сценарии, и заводить его нельзя.
|
||||
- **Сценарий назван вслух — значит, его можно оспорить.** Человек, увидевший в
|
||||
первой реплике «иду разведкой, потому что способа не видно», поправит выбор
|
||||
одной фразой; молча выбранный сценарий он поправит через полчаса работы.
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
## Дельта нашлась по ходу — стоп, и у него свой порядок
|
||||
|
||||
Признак тот же, что на шаге 7 сценария решения: **меняется ли то, что записано в
|
||||
Признак тот же, что у отработки ревью в решении (шаг 5): **меняется ли то, что записано в
|
||||
`openspec/specs/`**. Обнаружилось, что меняется, — работа перестала быть
|
||||
обслуживанием в ту же секунду, и продолжать её нельзя: коммит обслуживания
|
||||
заявляет «поведение не менялось», а оно меняется.
|
||||
@@ -153,9 +153,12 @@
|
||||
решать, вырождается в обряд одобрения и обесценивает те стопы, где решать есть
|
||||
что.
|
||||
|
||||
**Место, где ответа всё же ждут, одно, и плановым оно не является** — стоп по
|
||||
найденной дельте (раздел «Дельта нашлась по ходу»). Через него проходят не все
|
||||
прогоны, а только те, где задача оказалась не тем, чем объявлена.
|
||||
**Мест, где ответа всё же ждут, два, и через оба проходят не все прогоны.**
|
||||
Первое — стоп по найденной дельте (раздел «Дельта нашлась по ходу»), и плановым
|
||||
он не является: через него идут те прогоны, где задача оказалась не тем, чем
|
||||
объявлена. Второе — **реплика о новом на шаге 5**, и она случается, только если
|
||||
обслуживание завело в документах что-то, чего не было: запрет или инвариант.
|
||||
Обычный прогон обслуживания не проходит ни через одно из двух.
|
||||
|
||||
**Правило необратимого при этом действует полностью** (SKILL.md, «Когда
|
||||
спрашивать вне чекпоинта»), и здесь оно опаснее, чем кажется. Единственный
|
||||
@@ -365,8 +368,14 @@ ADR: список источников канон закрыл двумя — а
|
||||
|
||||
Отработка — как в решении: помеченное `инлайн` чинит **агент** (SKILL.md, «Кто
|
||||
пишет»), находки уходят ему дословно с оракулом, гейт после правок гоняет он же,
|
||||
логировать их не надо; `развилка` — вопросом в запись, и агенту она не отдаётся. Отложенные находки собери в секцию
|
||||
доклада `Урожай`; задачи из него заводит `av-dev:task-track`, не ты.
|
||||
логировать их не надо; `развилка` — вопросом в запись, и агенту она не отдаётся.
|
||||
Отложенные находки собери в секцию доклада `Урожай`.
|
||||
|
||||
**Задачи из урожая — по слову человека, и спрашивается это репликой шага 5**,
|
||||
вместе с новым в документах: правило общее для всех прогонов конвейера
|
||||
(`av-dev:code-review`, «Что происходит с находками дальше»), и обслуживание не
|
||||
исключение. Сказал «заводим» — зовёшь `av-dev:task-track` сам, сценарий «задачи
|
||||
из ревью и аудита»; не сказал — урожай остаётся строками доклада.
|
||||
|
||||
### 5. Синк документации — главный шаг этого сценария, и делает его агент
|
||||
|
||||
@@ -385,11 +394,24 @@ ADR: список источников канон закрыл двумя — а
|
||||
предлагается** (дом — раздел «Два рода правок» скилла `av-dev:doc-sync`). Здесь
|
||||
оно почти ничего не стоит: обслуживание двигает **факты** — команды, шаги гейта,
|
||||
зависимости поимённо, пути, имя ветки, числа настроек, — а факт в документе,
|
||||
разошедшийся с кодом, это отражение по определению. Реплика человеку на этом
|
||||
сценарии редка, и поводов у неё два: **новый запрет или инвариант в `CLAUDE.md`**
|
||||
и **сужение проверок в `review.*`**. Второе спрашивать не надо — проверки сузил
|
||||
человек, слово по ним сказано; первое надо, потому что запрет свяжет все будущие
|
||||
задачи. Нового нет — реплики нет, и шаг кончается возвратом агента.
|
||||
разошедшийся с кодом, это отражение по определению.
|
||||
|
||||
**Повод для реплики у этого сценария один — новый запрет или инвариант в
|
||||
`CLAUDE.md`**: он свяжет все будущие задачи, и заводить его молча нельзя.
|
||||
Сужение проверок в `review.*` поводом не является, хотя тоже новое: проверки
|
||||
сузил человек, и слово по ним уже сказано (`av-dev:doc-sync`, «Два рода правок»).
|
||||
К этому же поводу примыкает урожай ревью с шага 4 — спрашиваются они одной
|
||||
репликой, а не двумя.
|
||||
|
||||
**Нового нет — реплики нет**, и шаг кончается возвратом агента; так идёт
|
||||
большинство прогонов обслуживания.
|
||||
|
||||
**Реплика была — идёт второй заход тем же агентом**, и на нём висит то же, что в
|
||||
решении: письмо одобренного, вычитка `doc-wording` по всей пачке и гейт до
|
||||
зелёного. Первый заход снимает их с себя ровно тогда, когда вернул непустой
|
||||
список предложений, — порядок и его довод описаны в [solve.md](solve.md), шаг 6.
|
||||
Задачи из урожая при этом заводишь **ты сам** вызовом `av-dev:task-track`, а не
|
||||
агент: индексы учёта правит тот, кто коммитит.
|
||||
|
||||
**Здесь этот шаг весит больше, чем в решении, и вот почему.** Обслуживание не
|
||||
меняет поведения — значит, почти всё, что оно меняет, это документация: команды,
|
||||
@@ -471,7 +493,11 @@ ADR: список источников канон закрыл двумя — а
|
||||
выдуманному пользователю;
|
||||
- **состав гейта до и после**, если правка его трогала; не сверялся — почему;
|
||||
- по каждому критерию приёмки: **оракул и наблюдаемый исход**;
|
||||
- **`Урожай`** — отложенные находки списком;
|
||||
- **`Урожай`** — отложенные находки списком и **что человек по нему решил**;
|
||||
- **что заведено нового в документах** и что предложено и отвергнуто — по именам
|
||||
записей; отказ виден только здесь;
|
||||
- **сигнал сверки** — строка синка о том, сколько задач сделано с прошлого
|
||||
прогона `av-dev:doc-healthcheck`, либо что сверки не было ни разу;
|
||||
- **строка границ покрытия**: план сценария фиксирован; темы `requirements` в нём
|
||||
нет — её не смотрел никто, а `security` и `architecture` смотрелись только
|
||||
против записанных инвариантов, и то если шёл проход `code`.
|
||||
|
||||
@@ -398,8 +398,8 @@ git и читается диффом, а второй стоп на каждой
|
||||
## Доклад разведки
|
||||
|
||||
Общая форма доклада — в SKILL.md; у разведки он свой, потому что докладывать
|
||||
нечего из того, о чём спрашивают решение (ни метки ревью, ни критериев приёмки,
|
||||
ни архивного change). Коротко, и в нём обязательно:
|
||||
нечего из того, о чём спрашивают решение: ни критериев приёмки, ни архивного
|
||||
change, ни исхода ревью — кода она не писала. Коротко, и в нём обязательно:
|
||||
|
||||
- **исход** одним из четырёх слов;
|
||||
- **вопрос и ответ** — по фразе на каждое. Ответ, который не сворачивается во
|
||||
@@ -408,6 +408,8 @@ git и читается диффом, а второй стоп на каждой
|
||||
- **какие задачи заведены и уточнены** — слагами;
|
||||
- **что вычитано и чем** — пачка документов и пачка записей, каждая со своими
|
||||
проходами; не вычитанное называется прямо, вместе с причиной;
|
||||
- **сигнал сверки** — строка синка о том, сколько задач сделано с прошлого
|
||||
прогона `av-dev:doc-healthcheck`, либо что сверки не было ни разу;
|
||||
- **что осталось неизвестным** и чего это стоит: разведка без этой строки
|
||||
сообщает «выяснено», не сообщая, что именно осталось не выяснено;
|
||||
- **рамки**, если они ограничили работу: докуда копали и почему остановились.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Сценарий «решение»
|
||||
|
||||
Способ решения известен, спорно только как. Проводит задачу от постановки до
|
||||
закрытия и **пишет код**: цикл Spec Driven Development с одним плановым стопом —
|
||||
объяснением сразу после предложения.
|
||||
закрытия и **пишет код**: цикл Spec Driven Development с двумя плановыми стопами —
|
||||
объяснением сразу после предложения и репликой о новом после ревью.
|
||||
|
||||
Сценарий выбирается развилкой на входе скилла ([SKILL.md](../SKILL.md), раздел
|
||||
«Развилка: какой сценарий») и называется вслух первой репликой. Здесь только его
|
||||
@@ -30,7 +30,7 @@ flowchart TD
|
||||
s5["5. ревью кода — постоянный состав<br/>+ отработка замечаний агентом"]
|
||||
s6["6. opsx:archive + отражение в документах —<br/>одним агентом"]
|
||||
s6q(["РЕПЛИКА: что заводим из нового —<br/>ADR, конвенция, задачи из урожая"])
|
||||
s6b["6b. письмо одобренного и задачи —<br/>тем же агентом"]
|
||||
s6b["такт 3: задачи — оркестратором,<br/>документы, вычитка и гейт — агентом"]
|
||||
s7["7. коммит работы — av-dev-git:commit"]
|
||||
s8["8. закрыть задачу — av-dev:task-track,<br/>вторым коммитом учёта"]
|
||||
|
||||
@@ -133,8 +133,9 @@ flowchart TD
|
||||
|
||||
### 3. Чекпоинт: объяснение
|
||||
|
||||
**Остановись и объясни человеку, что происходит.** Единственный плановый стоп
|
||||
этого сценария, и он обязателен для всякой задачи.
|
||||
**Остановись и объясни человеку, что происходит.** Первый из двух плановых стопов
|
||||
сценария, и в отличие от второго он обязателен для всякой задачи: реплика шага 6
|
||||
случается только тогда, когда есть что заводить, а чекпоинт — всегда.
|
||||
|
||||
Он стоит **сразу после предложения и до кода** — намеренно. Раньше между
|
||||
`propose` и чекпоинтом стояла стадия ревью дизайна, и человек читал объяснение,
|
||||
@@ -287,10 +288,10 @@ flowchart TD
|
||||
найденного заводим») стоили бы человеку двух переключений вместо одного. Сюда
|
||||
урожай складывается, а не выносится.
|
||||
|
||||
Сказал «заводим» — зовёт `av-dev:task-track` агент шага 6, у него на этот вход
|
||||
отдельный сценарий «задачи из ревью и аудита»: своя нарезка, свой формат, свои
|
||||
правила дублей, и передавать находку туда надо дословно. Не сказал — урожай
|
||||
остаётся строками доклада, и это исход, а не потеря.
|
||||
Сказал «заводим» — зовёшь `av-dev:task-track` **ты сам**, тактом третьим шага 6:
|
||||
у него на этот вход отдельный сценарий «задачи из ревью и аудита» — своя нарезка,
|
||||
свой формат, свои правила дублей, и находка передаётся дословно. Не сказал —
|
||||
урожай остаётся строками доклада, и это исход, а не потеря.
|
||||
|
||||
**Молча беклог не наполняется.** Очередь работ ведёт человек, и задача, заведённая
|
||||
за него по ходу чужого прогона, отнимает у него ровно то решение, ради которого
|
||||
@@ -360,8 +361,13 @@ flowchart TD
|
||||
том скилле; гейт до зелёного доводит агент, потому что красный гейт остановил бы
|
||||
коммит следующим шагом — документы у многих проектов он проверяет.
|
||||
|
||||
**Возврат — чек-лист, адреса тронутого, исход валидации и исход гейта, если он
|
||||
гонялся.**
|
||||
**Отложенное этим тактом обязано вернуться.** Оттого такт третий идёт **всякий
|
||||
раз, когда была реплика** — в том числе когда человек не одобрил ничего: на нём
|
||||
висят вычитка и гейт, которые первый такт с себя снял. Пропустить его на отказе
|
||||
значило бы уехать в коммит с невычитанной правкой и непрогнанным гейтом.
|
||||
|
||||
**Возврат — чек-лист, адреса тронутого, исход валидации, строка сигнала сверки и
|
||||
исход гейта, если он гонялся.**
|
||||
Чек-лист уезжает в доклад целиком, и переписывать его своими словами нельзя —
|
||||
это единственный след того, что каждый документ был назван.
|
||||
|
||||
@@ -405,17 +411,30 @@ flowchart TD
|
||||
и второй абзац уговоров превращает реплику в чтение. Человек вправе ответить
|
||||
«ничего» — это исход, а не потеря: находки остаются строками доклада.
|
||||
|
||||
#### Такт третий — тот же агент: письмо одобренного
|
||||
#### Такт третий — задачи оркестратором, документы агентом
|
||||
|
||||
Запускается **только если человек что-то одобрил**. В задании:
|
||||
**Идёт всякий раз, когда была реплика**, и порядок в нём жёсткий.
|
||||
|
||||
**Сначала задачи — их заводишь ты, а не агент.** Человек сказал «заводим» — зови
|
||||
Skill `av-dev:task-track`, у него на этот вход отдельный сценарий «задачи из ревью
|
||||
и аудита»: своя нарезка, свой формат, свои правила дублей. Находка передаётся
|
||||
**дословно, вместе с оракулом**. Согласован промоут находки в конвенцию — тем же
|
||||
вызовом заводится **задача `chore` на механизацию правила**: шаг 2 промоута
|
||||
(конфиг линтера, сканер, приведение кода к зелёному) в хвост чужой задачи не
|
||||
помещается (`av-dev:code-review`, `references/promote.md`).
|
||||
|
||||
**Заведение задач агенту не отдаётся ни в одном сценарии** — по той же причине,
|
||||
по какой ему не отдаются коммит и закрытие: оно правит индексы учёта, а перечень
|
||||
работ ведёт человек. Правило и его дом — SKILL.md, «Кто пишет».
|
||||
|
||||
**Потом документы — их пишет тот же агент, что шёл тактом первым.** В задании:
|
||||
|
||||
- **одобренные записи дословно** — формулировка, источник, основание; сочинять
|
||||
заново нельзя, ADR цитирует решение из архивного `design.md`, а не пересказывает
|
||||
его;
|
||||
- **задачи из урожая** — вызовом `av-dev:task-track`, сценарий «задачи из ревью и
|
||||
аудита», находка передаётся дословно вместе с оракулом;
|
||||
его. Человек не одобрил ничего — писать нечего, и это законный вход;
|
||||
- **вычитка** `doc-wording` по всей пачке правленого — и первого такта, и этого;
|
||||
- **гейт проекта до зелёного** после правок.
|
||||
- **гейт проекта до зелёного** после правок — он же увидит заведённые задачи,
|
||||
потому они и заводятся раньше.
|
||||
|
||||
**Отвергнутое не пишется никуда.** Ни в один документ, ни отдельной записью «от
|
||||
такого-то отказались»: журнала отвергнутого канон не держит, и заведение его
|
||||
@@ -493,11 +512,12 @@ change. Заводить запись задним числом, чтобы её
|
||||
тебя нет: состав прогона постоянный и сокращению не подлежит, перечень тем
|
||||
сверяется по исходу, непокрытое называется строкой, а расхождение с одобренным
|
||||
— отдельным пунктом доклада.
|
||||
- **Заведение задач из урожая ревью — не твоя работа и не работа этого прогона по
|
||||
умолчанию.** Отложенные находки отдаются **списком**, и в задачи их превращает
|
||||
`av-dev:task-track` — по слову человека, у него на этот вход отдельный сценарий
|
||||
«задачи из ревью и аудита». Каталога задач в
|
||||
проекте нет — урожай остаётся списком в докладе, и это говорится строкой.
|
||||
- **Заведение задач из урожая ревью не идёт по умолчанию.** Отложенные находки
|
||||
отдаются **списком**, и в задачи их превращает `av-dev:task-track` — по слову
|
||||
человека и вызовом от тебя, а не от агента: перечень работ ведёт человек, а
|
||||
индексы учёта правит тот же, кто коммитит. У скилла на этот вход отдельный
|
||||
сценарий «задачи из ревью и аудита». Каталога задач в проекте нет — урожай
|
||||
остаётся списком в докладе, и это говорится строкой.
|
||||
- **Стопов у сценария два, и оба про решения человека, а не про ход работ.**
|
||||
Чекпоинт шага 3 решает форму решения **до** кода; реплика шага 6 решает, что из
|
||||
найденного переживёт задачу. Между ними прогон идёт сам: правки инлайном чинятся
|
||||
|
||||
@@ -170,9 +170,10 @@ check` и его скрипт; здесь начинается там, где к
|
||||
- **Не проверяет раскладку, версию и ссылки** — это `canon check`, там машина.
|
||||
- **Не судит язык** документов: залог, англицизмы, жаргон, термин без дома — это
|
||||
агент `doc-wording`, и зовут его отдельно, по пачке правленных документов.
|
||||
Звонящие у него названные — последний шаг синка в `av-dev:doc-sync`, шаг 9
|
||||
`av-dev:doc-init` и шаг вычитки в обоих режимах `canon`, — просто ни один из
|
||||
них не здесь. У него другой ритм: он нужен там, где текст только что писали, а
|
||||
Звонящие у него названные — последний заход синка в `av-dev:doc-sync`, шаг
|
||||
вычитки сценария разведки (`av-dev:code-resolve`), шаг 9 `av-dev:doc-init` и
|
||||
шаг вычитки в обоих режимах `canon`, — просто ни один из них не здесь. У него
|
||||
другой ритм: он нужен там, где текст только что писали, а
|
||||
не там, где он год лежал. Оркестровать его нечем — он один и работает по
|
||||
названному списку.
|
||||
- **Не правит документы за агентов** — они возвращают формулировки, решение
|
||||
|
||||
@@ -139,6 +139,14 @@ description: "Вести содержимое документов канона
|
||||
она коснулась, — и назови этот список в промпте: по нему же он судит, известен ли
|
||||
термин. Находки он отдаёт готовыми формулировками, подставляешь их ты.
|
||||
|
||||
**Синк бывает в два захода, и вычитка идёт последним из них.** Вернул непустой
|
||||
список предложений — правка ещё не кончилась: человек ответит, и второй заход
|
||||
допишет одобренное. Вычитывать пачку, которая сейчас пополнится, значит платить
|
||||
за неё дважды. Значит: **предложения есть — вычитку откладываешь до второго
|
||||
захода; предложений нет — этот заход последний, и вычитка идёт в нём.** Отказ
|
||||
человека второго захода не отменяет: письма в нём не будет, а вычитка и гейт
|
||||
будут — иначе правка первого захода уедет в коммит невычитанной.
|
||||
|
||||
**Условие вызова — правка, а не синк.** Синк самый частый вызывающий, но не
|
||||
единственный: разведка (`av-dev:code-resolve`, сценарий разведки) пишет ответ по
|
||||
одному адресу и синком себя не считает намеренно — вычитка ей нужна ровно та же.
|
||||
@@ -308,13 +316,21 @@ av-dev:code-review`, его `references/review-journal.md`.
|
||||
раздел `.av-dev.toml`). **Считает синк**, и вот чем:
|
||||
|
||||
```sh
|
||||
git rev-list --count <last>..HEAD -- openspec/changes/archive
|
||||
git rev-list --count <last>..HEAD -- openspec/changes/archive <каталог задач>
|
||||
```
|
||||
|
||||
Коммит, тронувший архив, — это доехавшая до конца задача, так что счёт идёт в
|
||||
задачах, а не в правках. `openspec` в проекте нет — считай коммиты
|
||||
Считаются коммиты, тронувшие **архив change или каталог задач** (его путь — ключ
|
||||
`[tasks] dir`). Оба пути выбраны потому, что доведённая до конца задача оставляет
|
||||
след хотя бы в одном: решение архивирует change, а обслуживание и разведка change
|
||||
не заводят вовсе и видны только закрытием — правкой индексов учёта. Считать один
|
||||
архив значило бы не считать `chore` и `research`, то есть на проекте с их
|
||||
перевесом говорить «звать рано» вечно.
|
||||
|
||||
Ни `openspec`, ни каталога задач в проекте нет — считай коммиты
|
||||
(`git rev-list --count <last>..HEAD`) и **скажи, что считал коммиты**: число
|
||||
другого рода, и молчаливая подмена сделала бы признак вдвое чувствительнее.
|
||||
Постановка, пришедшая текстом, следа не оставляет ни там ни там — такие задачи в
|
||||
счёт не входят, и это тоже говорится строкой, когда прогон шёл текстом.
|
||||
|
||||
Строка доклада обязательна всегда, и вариантов у неё три:
|
||||
|
||||
|
||||
@@ -15,11 +15,13 @@
|
||||
не файл-на-находку.** Если у ревью был триаж — половина работы уже сделана, бери
|
||||
его выход. Если нет — триажируй сам, прежде чем заводить.
|
||||
|
||||
**Штатный отправитель — `av-dev:code-review`** (и `av-dev:code-resolve`, который
|
||||
его вызывает): задач он не заводит сам, а отдаёт отложенные находки **списком
|
||||
урожая** — формулировка, оракул, откуда взялась — и хранит отчёт триажа вместе с
|
||||
изменением. Приходит и любой другой разбор, вплоть до пересказа человеком; тогда
|
||||
триажа нет и шаг 1 порядка делается руками.
|
||||
**Штатных отправителя два.** Первый — `av-dev:code-review` (и зовущий его
|
||||
`av-dev:code-resolve`): задач он не заводит сам, а отдаёт отложенные находки
|
||||
**списком урожая** — формулировка, оракул, откуда взялась — и хранит отчёт триажа
|
||||
вместе с изменением. Второй — `av-dev:code-deep-review`, и он зовёт этот сценарий
|
||||
напрямую, передавая согласованные с человеком находки дословно. Приходит и любой
|
||||
другой разбор, вплоть до пересказа человеком; тогда триажа нет и шаг 1 порядка
|
||||
делается руками.
|
||||
|
||||
## Находка агента — не задача
|
||||
|
||||
@@ -64,6 +66,14 @@
|
||||
ради которого заведение из ревью и выделено. Дешёвая мелочь по явному согласию может
|
||||
заводиться и без поштучного вопроса — но карта пользователю предъявляется
|
||||
всё равно.
|
||||
|
||||
**Барьер снимается ровно в одном случае — когда его уже прошли.** В хвосте
|
||||
задачи (`av-dev:code-resolve`, шаг 6; в обслуживании — шаг 5) человек одной
|
||||
репликой сказал, что из урожая заводится, и третьего стопа у прогона не будет:
|
||||
там карта идёт **строкой доклада**, а не вопросом. Признак читается буквально:
|
||||
**список находок уже был показан человеку и получил ответ**. Не был — карта
|
||||
предъявляется вопросом, и это обычный случай прямого вызова и вызова из
|
||||
`av-dev:code-deep-review`, где находки разбирались по одной, а нарезка — нет.
|
||||
6. **Заводи утверждённое** через `tasks.py add`, с тремя добавками:
|
||||
- **тег партии** — `--tag review-ГГГГ-ММ-ДД` (или `audit-<slug>`), чтобы весь
|
||||
заход разбора поднимался одной командой `list --tag …`;
|
||||
|
||||
Reference in New Issue
Block a user