Compare commits
2
Commits
95fed623e7
...
142659bfd1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
142659bfd1
|
||
|
|
96dafc9011
|
+5
-5
@@ -1014,7 +1014,7 @@ HTML-комментарии, невидимые в отрендеренном ma
|
||||
**XX. Порядок задаёт граф; стадии остаются единицей состава.** Профиль
|
||||
по-прежнему набирается стадиями, но запускается всё, у чего закрыты входящие
|
||||
рёбра. Рёбер три вида, и смешивать их нельзя: **зависимость** (гейт → все
|
||||
опиниативные, все проходы → триаж), **конфликт за ресурс** (ненаправленный, между
|
||||
проходы с мнением, все проходы → триаж), **конфликт за ресурс** (ненаправленный, между
|
||||
теми, кто держит машину), **барьер стоимости** (только `deep`).
|
||||
|
||||
**YY. Сериализует ресурс, а не имена.** Пометка «держит машину» — таблицей в
|
||||
@@ -2358,8 +2358,8 @@ JJJ): у профиля обязан быть один правильный от
|
||||
`standard` остался хоть один взгляд на ось времени.
|
||||
|
||||
Модель у него верхняя, `opus`, и это не противоречит слову «средний»: усилие
|
||||
режется **входом и потолком**, а не моделью. Дешёвая модель на опиниативном
|
||||
проходе платит триажем — это записанный замер, и отменять его без нового замера
|
||||
режется **входом и потолком**, а не моделью. Дешёвая модель на проходе
|
||||
с мнением платит триажем — это записанный замер, и отменять его без нового замера
|
||||
нельзя.
|
||||
|
||||
**ААББУУ. Объём и незнакомость изменения вошли в правило выбора ступени.** Раньше
|
||||
@@ -2607,7 +2607,7 @@ JJJ): у профиля обязан быть один правильный от
|
||||
`docs/autotests.md` проект напишет: что покрыто, что нарочно нет, где
|
||||
`testdata`. `docs/gate.md` не напишет никто — гейт это команда, а не предмет.
|
||||
2. **Слово «гейт» уже занято дважды** — команда проекта и ребро графа («пока гейт
|
||||
красный, опиниативные не идут»). Третье значение сделало бы отчёт нечитаемым:
|
||||
красный, проходы с мнением не идут»). Третье значение сделало бы отчёт нечитаемым:
|
||||
«гейт красный» и «гейт нашёл» — про разное.
|
||||
3. **Тема шире гейта.** «Хватает ли проверок» и «чего в гейте намеренно нет» за
|
||||
пределы красного/зелёного выходят. Назвать целое именем инструмента — тихо его
|
||||
@@ -2828,7 +2828,7 @@ JJJ): у профиля обязан быть один правильный от
|
||||
держит ровно на одной ступени из трёх, а приёмником проектных тем работает на
|
||||
всех.
|
||||
|
||||
**АЕАГВ. Вход и потолок применены к каждому опиниативному проходу.** На `quick`
|
||||
**АЕАГВ. Вход и потолок применены к каждому проходу с мнением.** На `quick`
|
||||
`specs` читает только дельта-спеку, `code` — только индекс конвенций. Потолки
|
||||
напечатаны и раздельны по половинам `code`: 3 технических, 2 конвенционных, 1 по
|
||||
инвариантам. Раздельность обязательна — конвенционных находок больше по
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: review-autotests
|
||||
description: "Тема `autotests` — проверено ли машиной и хватает ли проверок. Запускает команду гейта проекта (сборка/vet/линт/формат/тесты/флаки/гонки/покрытие изменённых строк/миграции/секреты/уязвимости) и интерпретирует вывод. Отличает новые отказы от унаследованных, находит отсутствующую верификацию (изменённые строки без покрытия, конкурентность без теста, флаки). Пока гейт красный, опиниативные проходы не запускаются. Первый проход ревью кода и источник его графа, обязателен при любой метке."
|
||||
description: "Тема `autotests` — проверено ли машиной и хватает ли проверок. Запускает команду гейта проекта (сборка/vet/линт/формат/тесты/флаки/гонки/покрытие изменённых строк/миграции/секреты/уязвимости) и интерпретирует вывод. Отличает новые отказы от унаследованных, находит отсутствующую верификацию (изменённые строки без покрытия, конкурентность без теста, флаки). Пока гейт красный, проходы с мнением не запускаются. Первый проход ревью кода и источник его графа, обязателен при любой метке."
|
||||
tools: Bash, Read, Grep, Glob
|
||||
model: sonnet
|
||||
color: green
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: review-basics
|
||||
description: "Тематический проход ревью для метки medium и приёмник проектных тем при любой метке. Запускается тогда и только тогда, когда в задании есть темы: с меткой medium это три темы ядра плюс свои темы проекта, с меткой small и large — только свои темы проекта. Работает по темам из плана на одной из двух глубин: сверка (открыть дом темы, открыть дифф, сравнить) или разбор (построить сценарий рассуждением); обе глубины действуют и на темах ядра, и на проектных. Ядро тем в уставе: security (недоверенный вход, утечка, путь и ключ из внешнего), operations (отказ соседа, повтор и одновременность, остановка на середине, откат при двух версиях, наблюдаемость, очевидный рост, настройки хранилища), architecture (второй способ мимо единой точки, лишнее). Ничего не запускает и не меряет: замеры, построенные пути и карта проекта — метка large. Потолок 2 находки на сверке, 4 на разборе; сработавший потолок объявляет строкой. Подтверждающий сигнал о заниженной метке (основной несёт code). Только чтение."
|
||||
description: "Тематический проход ревью для метки medium и приёмник проектных тем при любой метке. Запускается тогда и только тогда, когда в задании есть темы: с меткой medium это три темы ядра плюс свои темы проекта, с меткой small и large — только свои темы проекта, а на прогоне без метки (сценарий обслуживания) — то, что назвал план, обычно operations на сверке. Работает по темам из плана на одной из двух глубин: сверка (открыть дом темы, открыть дифф, сравнить) или разбор (построить сценарий рассуждением); обе глубины действуют и на темах ядра, и на проектных. Ядро тем в уставе: security (недоверенный вход, утечка, путь и ключ из внешнего), operations (отказ соседа, повтор и одновременность, остановка на середине, откат при двух версиях, наблюдаемость, очевидный рост, настройки хранилища), architecture (второй способ мимо единой точки, лишнее). Ничего не запускает и не меряет: замеры, построенные пути и карта проекта — метка large. Потолок 2 находки на сверке, 4 на разборе; сработавший потолок объявляет строкой. Подтверждающий сигнал о заниженной метке (основной несёт code). Только чтение."
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: opus
|
||||
color: yellow
|
||||
@@ -22,6 +22,12 @@ color: yellow
|
||||
директива, и план так и скажет. Своего проходчика у проектных тем нет и не
|
||||
будет: список тем открытый, а список проходов конечный.
|
||||
|
||||
**Третья роль появляется на прогоне без метки** — так идёт сценарий
|
||||
обслуживания, где изменение не меняет поведения и размечать нечего. Метки в
|
||||
задании не будет; тему и глубину назовёт сам план, и работаешь ты ровно по нему.
|
||||
Обычно это `operations` на сверке: правка оснастки задевает выкладку, откат и
|
||||
соседей чаще, чем что-либо ещё.
|
||||
|
||||
**Ты запускаешься тогда и только тогда, когда тебе есть что принимать.** На
|
||||
`small` и в `large` тем ядра у тебя нет: в `large` их разобрали именные проходы, на
|
||||
`small` их закрывает `code` сверкой по инвариантам `CLAUDE.md`. При этих двух
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: review-code
|
||||
description: "Технический разбор кода изменения плюс сверка с конвенциями проекта — две половины одного прохода, обе при любой метке. Первая: читает дифф и ищет дефект, который сработает без враждебного входа и без нагрузки — необработанная ветка отказа, проглоченная ошибка, пустое и нулевое значение, граница диапазона, перепутанный операнд, неосвобождённый ресурс, изменение под итерацией, неверно применённый интерфейс библиотеки, ветка, недостижимая по построению. Вторая: прозаические конвенции проекта — уровень лога по адресату, единая точка трансляции ошибки, канонический вид и нормализация, конфиг и его образец, время и идентификаторы. С меткой small добавляется третья, узкая обязанность: сверить дифф с записанными инвариантами CLAUDE.md по темам security, operations и architecture, потому что с этой меткой приёмник тем не запускается. Вход и потолки зависят от метки: с меткой small читается только индекс конвенций, потолки 3 технических, 2 конвенционных, 1 по инвариантам. Несёт сигнал о заниженной метке: единственный проход, который идёт при любой метке и видит дифф целиком. Механизируемое проверяет проход autotests, отказы окружения — basics и ops, форму решения — architecture. Только чтение."
|
||||
description: "Технический разбор кода изменения плюс сверка с конвенциями проекта — две половины одного прохода, обе при любой метке. Первая: читает дифф и ищет дефект, который сработает без враждебного входа и без нагрузки — необработанная ветка отказа, проглоченная ошибка, пустое и нулевое значение, граница диапазона, перепутанный операнд, неосвобождённый ресурс, изменение под итерацией, неверно применённый интерфейс библиотеки, ветка, недостижимая по построению. Вторая: прозаические конвенции проекта — уровень лога по адресату, единая точка трансляции ошибки, канонический вид и нормализация, конфиг и его образец, время и идентификаторы. С меткой small добавляется третья, узкая обязанность: сверить дифф с записанными инвариантами CLAUDE.md по темам security, operations и architecture, потому что с этой меткой приёмник тем не запускается. Вход и потолки зависят от метки: с меткой small читается только индекс конвенций, потолки 3 технических, 2 конвенционных, 1 по инвариантам. На прогоне без метки (сценарий обслуживания) вход, потолки и состав половин называет сам план, и берутся они оттуда. Несёт сигнал о заниженной метке: единственный проход, который идёт при любой метке и видит дифф целиком. Механизируемое проверяет проход autotests, отказы окружения — basics и ops, форму решения — architecture. Только чтение."
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: opus
|
||||
color: yellow
|
||||
@@ -17,7 +17,8 @@ color: yellow
|
||||
**Вторая — конвенции проекта.** Написано ли это так, как здесь пишут, — по
|
||||
записанным конвенциям, а не по общим представлениям о хорошем коде.
|
||||
|
||||
**С меткой `small` — третья половина, и она узкая.** Сверить дифф с
|
||||
**С меткой `small` — и на прогоне без метки, если план включил её прямо, —
|
||||
третья половина, и она узкая.** Сверить дифф с
|
||||
**записанными инвариантами** `CLAUDE.md` по темам `security`, `operations` и
|
||||
`architecture`. Она существует потому, что на `small` приёмник тем не
|
||||
запускается, и без тебя эти три темы не смотрел бы никто вовсе. На `medium` и в
|
||||
@@ -33,6 +34,11 @@ color: yellow
|
||||
Метка приходит в задании. **Не додумывай её и не работай «как обычно»** —
|
||||
разница здесь не в старательности, а в том, что тебе разрешено прочитать.
|
||||
|
||||
**Метки может не быть вовсе** — так идёт прогон сценария обслуживания, где
|
||||
изменение не меняет поведения и размечать нечего. Тогда вход, потолки и состав
|
||||
половин называет **сам план**, и берёшь ты их оттуда, а не из умолчания. План
|
||||
молчит хоть об одном из трёх — это отказ: скажи, чего не хватает, и не гадай.
|
||||
|
||||
| | `small` | `medium` и `large` |
|
||||
|---|---|---|
|
||||
| дом конвенций | **только индекс**: перечень родов и пометки о механизированном | весь дом целиком, до чтения диффа |
|
||||
@@ -121,7 +127,8 @@ color: yellow
|
||||
`docs/conventions/`, форму дома называет план прогона. Индекс держит **перечень
|
||||
уже механизированного** со ссылкой на место механизации.
|
||||
|
||||
**Сколько ты из этого дома читаешь, решает метка.**
|
||||
**Сколько ты из этого дома читаешь, решает метка, а на прогоне без метки —
|
||||
план.**
|
||||
|
||||
- **`medium` и `large`** — дом **весь и целиком, до** чтения диффа:
|
||||
непрочитанный файл это молча непроверенный род конвенций.
|
||||
@@ -210,10 +217,12 @@ color: yellow
|
||||
- **Тесты разбора — на реальных данных**, с проверкой идемпотентности повторного
|
||||
разбора.
|
||||
|
||||
## Половина третья — только на `small`: темы ядра против инвариантов
|
||||
## Половина третья — на `small` и по прямому указанию плана: темы ядра против инвариантов
|
||||
|
||||
С меткой `small` приёмник тем не запускается, и темы `security`, `operations` и
|
||||
`architecture` остаются за тобой. **Работа узкая и точно очерченная: взять
|
||||
`architecture` остаются за тобой. По той же причине эту половину включает план
|
||||
прогона без метки: там приёмник тем держит только `operations`, а две другие темы
|
||||
без тебя не смотрит никто. **Работа узкая и точно очерченная: взять
|
||||
записанные инварианты `CLAUDE.md` и сверить с ними дифф.**
|
||||
|
||||
- `security` — инвариант про недоверенный вход, границу периметра, секреты;
|
||||
|
||||
@@ -145,7 +145,7 @@ severity:
|
||||
```
|
||||
|
||||
- **инлайн** — оркестратор чинит сам, не спрашивая и не логируя. Правка локальна,
|
||||
решение однозначно, объём right-size.
|
||||
решение однозначно, объём — по размеру находки.
|
||||
- **развилка** — цена сопоставима с переработкой, либо меняется scope, либо
|
||||
трогается инвариант из `CLAUDE.md`, либо надо менять спеку. Формулируй готовым
|
||||
вопросом с 2–3 вариантами: оркестратор перенесёт его почти дословно.
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
записанного вопроса, правило необратимого — живёт в SKILL.md и тут не
|
||||
пересказывается.
|
||||
|
||||
## Почему цикл SDD здесь не урезан, а не имеет входа
|
||||
## Почему цикл SDD здесь не урезан, а остался без входа
|
||||
|
||||
Это не поблажка по цене, и формулировать её как «мелкая задача — короткий путь»
|
||||
Это не поблажка по цене, и называть сценарий «коротким путём для мелких задач»
|
||||
нельзя: путь, выбираемый по самооценке размера, и есть тот самый дешёвый способ
|
||||
«ускориться», против которого написана вся защита сценария решения.
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
их в актуальные спеки. Change без дельт — пустой артефакт, который потом надо
|
||||
архивировать, и разметчик по нему назовёт не те темы.
|
||||
|
||||
То есть механика цикла остаётся не пропущенной, а **без входа**. Отсюда и состав
|
||||
Шаги цикла здесь не пропущены — **им нечего обрабатывать**. Отсюда и состав
|
||||
сценария: выпали ровно те шаги, у которых нет предмета, и не выпал ни один из
|
||||
тех, у которых он есть.
|
||||
|
||||
@@ -106,10 +106,8 @@
|
||||
прогоном, при отказе — человек решает сам, откатить или оставить. Коммитить его
|
||||
сообщением про обслуживание нельзя.
|
||||
|
||||
**Это единственное место сценария, где ждут ответа**, и плановым стопом оно не
|
||||
становится: плановый стоп проходят все прогоны, а этот — только те, где задача
|
||||
оказалась не тем, чем объявлена. Прогон, дошедший до него, стоит дороже обычного
|
||||
— и это довод за проверку признака на шаге 1, а не после написанного кода.
|
||||
**Прогон, дошедший до этого стопа, стоит дороже обычного** — и это довод за
|
||||
проверку признака на шаге 1, а не после написанного кода.
|
||||
|
||||
## OpenSpec здесь не предпосылка
|
||||
|
||||
@@ -155,7 +153,7 @@ flowchart TD
|
||||
|
||||
in --> s1 --> s2 --> s3 --> s4 --> s5 --> s6 --> s7 --> out
|
||||
s1 -.->|"форма правки неизвестна"| stop1["стоп: нужна разведка"]
|
||||
s2 -.->|"меняется дельта-спека"| stop2["стоп: идёт решением,<br/>следующим прогоном"]
|
||||
s2 -.->|"нашлась дельта-спека"| stop2["стоп: назвать тип,<br/>объяснить, дать два решения"]
|
||||
```
|
||||
|
||||
Схема — **сводка**: содержание каждого шага в его разделе ниже, и при расхождении
|
||||
@@ -178,8 +176,8 @@ flowchart TD
|
||||
дорогой откат, намеренный отказ от очевидного подхода, пересмотр прежнего
|
||||
решения. Стоп с названной причиной, разведка идёт следующим прогоном.
|
||||
|
||||
**Последний исход — не редкость, и его стоит ждать.** Незнакомое обслуживание это
|
||||
выбор подхода с ценой и с тем, что становится невозможным, — предмет чекпоинта
|
||||
**Последний исход — не редкость, и его стоит ждать.** Незнакомое обслуживание —
|
||||
это выбор подхода с ценой и с тем, что становится невозможным, — предмет чекпоинта
|
||||
вариантов, а не работы без стопа. И там же решение получает законный источник для
|
||||
ADR: список источников канон закрыл двумя — архивный `design.md` и записка
|
||||
разведки, — а обслуживание не производит ни того ни другого.
|
||||
@@ -222,11 +220,11 @@ ADR: список источников канон закрыл двумя — а
|
||||
|
||||
### 2. Сделать правку
|
||||
|
||||
Код и конфиги — по конвенциям проекта. Правка right-size: чинится названное в
|
||||
записи, а соседнее не золотится по пути.
|
||||
Код и конфиги — по конвенциям проекта. Правка по размеру задачи: чинится названное в записи, соседнее не улучшается
|
||||
заодно.
|
||||
|
||||
**Гейт правится — сверь состав, а не цвет.** Красный, ставший зелёным, виден
|
||||
сразу; «проверок стало на две меньше, обе зелёные» не видно ничем, а это самая
|
||||
сразу; убыли проверок гейт не покажет — он зелёный и до, и после. Это самая
|
||||
дорогая из возможных правок оснастки: молча выключено то, чем проверяется всё
|
||||
остальное. Состав проверок и способ его снять — **дело проекта**: он объявляет
|
||||
их семантикой гейта в `CLAUDE.md`. Снимай исходное состояние **до** правки, по
|
||||
@@ -240,7 +238,7 @@ ADR: список источников канон закрыл двумя — а
|
||||
### 3. Гейт до зелёного
|
||||
|
||||
Прогони гейт и добейся зелёного — он же условие следующего шага: пока гейт
|
||||
красный, опиниативные проходы не запускаются.
|
||||
красный, проходы с мнением не запускаются.
|
||||
|
||||
**Поведенческая верификация здесь другая, чем в решении.** Проверяется не новое
|
||||
поведение, а то, что прежнее не поехало: команда из `CLAUDE.md` поднимается, шаг
|
||||
@@ -258,17 +256,28 @@ Change ты не передаёшь — его нет.
|
||||
которой здесь нет (незнакомое ушло в разведку шагом 1). Разметчик без своего
|
||||
корпуса вернул бы метку, выведенную из ничего.
|
||||
|
||||
Поэтому план у сценария **свой и постоянный**:
|
||||
Поэтому план у сценария **свой и постоянный**, и глубину он называет сам —
|
||||
проходы берут её из метки, а метки здесь нет:
|
||||
|
||||
| Тема | Дом | Кто закрывает | Когда |
|
||||
| --- | --- | --- | --- |
|
||||
| `autotests` | `CLAUDE.md`, семантика гейта | `review-autotests` | всегда |
|
||||
| `operations` | `architecture.*`, раздел эксплуатации | `review-basics`, глубина «сверка» | всегда |
|
||||
| `conventions` + технический разбор | `conventions.*` | `review-code` | дифф трогает код, а не только оснастку |
|
||||
| Тема | Дом | Кто закрывает | Глубина и вход | Когда |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `autotests` | `CLAUDE.md`, семантика гейта | `review-autotests` | как обычно: гейт запускается целиком | всегда |
|
||||
| `operations` | `architecture.*`, раздел эксплуатации | `review-basics` | **сверка**: дом темы против диффа, потолок 2 | всегда |
|
||||
| `conventions` + технический разбор | `conventions.*` | `review-code` | вход `small`: только индекс конвенций; потолки 3 технических и 2 конвенционных; **третья половина включена** — сверка с инвариантами `CLAUDE.md`, потолок 1 | дифф трогает код, а не только оснастку |
|
||||
|
||||
**Глубина названа в плане потому, что иначе её неоткуда взять.** Вход и потолки
|
||||
`review-code` заданы меткой, у `review-basics` меткой задана и сама возможность
|
||||
запуска; на прогоне без метки оба взяли бы их наугад — то есть по-разному от
|
||||
прогона к прогону, и молча.
|
||||
|
||||
**Третья половина `review-code` включена намеренно.** В конвейере она живёт при
|
||||
метке `small`, где приёмник тем не запускается, и сверяет дифф с записанными
|
||||
инвариантами `CLAUDE.md` по темам `security`, `operations` и `architecture`.
|
||||
Здесь у неё та же работа: без неё `security` не смотрит вообще никто.
|
||||
|
||||
Триаж обязателен, как и на всяком прогоне: он единственный сток и единственный,
|
||||
кто сверяет план с исходом. План на его входе — не формальность: тема,
|
||||
оставшаяся без отчёта, видна только ему.
|
||||
кто сверяет план с исходом. На его вход подаётся этот план — вместо плана
|
||||
разметки, которого нет.
|
||||
|
||||
**Условие третьей строки проверяемое, и смотрится оно по диффу**, а не по
|
||||
намерению: обновление зависимости или правка файла CI кода не трогают, чистка и
|
||||
@@ -276,10 +285,20 @@ Change ты не передаёшь — его нет.
|
||||
«здесь ошибка в логике», и чистка, прошедшая без него, проверена только на то,
|
||||
что она собирается.
|
||||
|
||||
**Границы покрытия называются полностью.** Темы `requirements` и `security` в
|
||||
плане нет: у первой нет предмета — дельта-спек не существует, у второй нет
|
||||
проходчика на этом сценарии. Обе уезжают в доклад строкой. Отчёт, из которого
|
||||
исчезло «что не смотрел никто», сообщает «проверено», не сообщая, что именно.
|
||||
**Сигнал о заниженной метке на этом прогоне не работает** — метки нет, и
|
||||
поднимать нечего. Его место занимает признак сценария: показалось, что глубины
|
||||
мало, потому что задача крупнее заявленного, — ищи дельту, а не метку.
|
||||
|
||||
**Границы покрытия называются полностью:**
|
||||
|
||||
- `requirements` — предмета нет, дельта-спек не существует;
|
||||
- `security` — своего прохода нет; сверена против записанных инвариантов внутри
|
||||
`review-code`, а он шёл не всегда. Не шёл — тему не смотрел никто, и это
|
||||
говорится прямо;
|
||||
- `architecture` — то же: только против инвариантов, и только если шёл `code`.
|
||||
|
||||
Отчёт, из которого исчезло «что не смотрел никто», сообщает «проверено», не
|
||||
сообщая, что именно.
|
||||
|
||||
Отработка — как в решении: помеченное `инлайн` чини сам и не логируй, `развилка`
|
||||
— вопросом в запись. После правок снова гейт. Отложенные находки собери в секцию
|
||||
@@ -369,8 +388,9 @@ Change ты не передаёшь — его нет.
|
||||
- **состав гейта до и после**, если правка его трогала; не сверялся — почему;
|
||||
- по каждому критерию приёмки: **оракул и наблюдаемый исход**;
|
||||
- **`Урожай`** — отложенные находки списком;
|
||||
- **строка границ покрытия**: план сценария фиксирован, `requirements` и
|
||||
`security` на этом прогоне не смотрел никто, и разметчик не запускался.
|
||||
- **строка границ покрытия**: план сценария фиксирован, разметчик не запускался,
|
||||
`requirements` не смотрел никто, а `security` и `architecture` — только против
|
||||
записанных инвариантов, и то если шёл проход `code`.
|
||||
|
||||
## Тонкости сценария
|
||||
|
||||
|
||||
@@ -257,7 +257,7 @@ flowchart TD
|
||||
сессия, ушёл контекст) — повтори шаг 3, а не гони прогон без него.
|
||||
|
||||
**Режим по умолчанию — `по графу`, и обосновывать его не надо.** Конвейер сам
|
||||
знает свои рёбра: гейт открывает опиниативные проходы, проходы с пометкой «держит
|
||||
знает свои рёбра: гейт открывает проходы с мнением, проходы с пометкой «держит
|
||||
машину» идут цепочкой (иначе замеры портят друг друга и находка выглядит
|
||||
доказанной), триаж — сток. Просить **`линейно`** нужно только по причине, и она
|
||||
называется строкой: так сказал оператор; машина занята чем-то ещё; идёт разбор
|
||||
@@ -394,9 +394,10 @@ flowchart TD
|
||||
|
||||
## Тонкости сценария
|
||||
|
||||
- Гейт блокирует: пока он красный, опиниативные проходы не запускаются. Чинить и
|
||||
- Гейт блокирует: пока он красный, проходы с мнением не запускаются. Чинить и
|
||||
перезапускать, а не «посмотреть заодно».
|
||||
- Стиль правок — заточка под проект и конвенции, right-size, без золочения.
|
||||
- Стиль правок — заточка под проект и конвенции, по размеру задачи, без
|
||||
улучшений заодно.
|
||||
- **Занизить метку ревью, пропустить тему или проскочить чекпоинт — самый дешёвый
|
||||
способ «ускориться», и он же самый дорогой по последствиям.** Защита устроена
|
||||
так, что регулятора у тебя нет: метку выбирает разметчик **до того**, как ты
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: review
|
||||
description: "Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Разметка задачи идёт один раз, после propose: агент review-scope выводит размер и сложность, из их максимума — метка, и раздаёт темы проходам обеих стадий. Метка правит и ревью дизайна (small — только specs; medium — плюс rubric; large — плюс architecture), и ревью кода (small — гейт, спеки, код, триаж; medium — плюс приёмник тем; large — плюс доказательство: враждебные постановки, эксплуатационный постмортем, архитектурный проход на широком входе). Триаж обязателен всегда. Порядок прогона — граф зависимостей: гейт открывает опиниативные проходы, проходы с пометкой «держит машину» идут цепочкой, триаж — единственный сток. Проектная специфика приходит из документов канона av-dev-docs. Вызывается из скилла resolve — двумя стадиями: ревью дизайна до кода и ревью кода после apply. Третий вызов идёт от сценария обслуживания: без change и без метки, фиксированным планом (autotests, operations, плюс conventions, если тронут код), разметчик при этом не запускается."
|
||||
description: "Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Разметка задачи идёт один раз, после propose: агент review-scope выводит размер и сложность, из их максимума — метка, и раздаёт темы проходам обеих стадий. Метка правит и ревью дизайна (small — только specs; medium — плюс rubric; large — плюс architecture), и ревью кода (small — гейт, спеки, код, триаж; medium — плюс приёмник тем; large — плюс доказательство: враждебные постановки, эксплуатационный постмортем, архитектурный проход на широком входе). Триаж обязателен всегда. Порядок прогона — граф зависимостей: гейт открывает проходы с мнением, проходы с пометкой «держит машину» идут цепочкой, триаж — единственный сток. Проектная специфика приходит из документов канона av-dev-docs. Вызывается из скилла resolve — двумя стадиями: ревью дизайна до кода и ревью кода после apply. Третий вызов идёт от сценария обслуживания: без change и без метки, фиксированным планом (autotests, operations, плюс conventions, если тронут код), разметчик при этом не запускается."
|
||||
---
|
||||
|
||||
# Конвейер ревью
|
||||
@@ -274,14 +274,14 @@ charter'а, а модель потом двигает калибровка, и
|
||||
а не как мнение.
|
||||
|
||||
**Самая дешёвая модель не используется ни на одном проходе, и это не экономия
|
||||
наоборот.** Дешёвая модель на опиниативном проходе даёт правдоподобные находки,
|
||||
наоборот.** Дешёвая модель на проходе с мнением даёт правдоподобные находки,
|
||||
которые триаж обязан опровергать оракулом, — а это самая дорогая операция
|
||||
конвейера. Механизируемая же работа здесь вынесена **ниже** модели: гейт,
|
||||
покрытие диффа, карта проекта — это скрипты проекта, они стоят ноль токенов.
|
||||
Дешёвому проходу просто не осталось работы.
|
||||
|
||||
Экономия достигается **не понижением модели, а тремя другими рычагами**, и все
|
||||
три применяются к каждому опиниативному проходу, а не к одному избранному.
|
||||
три применяются к каждому проходу с мнением, а не к одному избранному.
|
||||
|
||||
1. **Непуск.** `large` добавляет доказательство — запуск, замер, построенный
|
||||
путь — и стоит часов; `small` снимает приёмник тем. Что при этом перестаёт
|
||||
@@ -289,7 +289,7 @@ charter'а, а модель потом двигает калибровка, и
|
||||
2. **Вход.** `basics` идёт на верхней модели, но с узким входом: дифф и его
|
||||
окрестности, без карты проекта. На `small` сужаются и остальные: `specs`
|
||||
читает только дельта-спеку, `code` — только индекс конвенций.
|
||||
3. **Потолок.** Он есть у каждого опиниативного прохода и напечатан: `basics` — 2
|
||||
3. **Потолок.** Он есть у каждого прохода с мнением и напечатан: `basics` — 2
|
||||
находки на сверке и 4 на разборе; `code` — 3 технических и 2 конвенционных на
|
||||
`small`, 4 конвенционных выше; `specs` — 3 на `small`; `architecture` — 3;
|
||||
триаж — 7 в основном списке.
|
||||
@@ -441,12 +441,12 @@ flowchart TD
|
||||
— и очередь между ними была бы платой ни за что.
|
||||
|
||||
Рёбер два вида, и они разной природы. Путать их нельзя: первое про
|
||||
**осмысленность** (без плана задание не определено, на красном гейте опиниативный
|
||||
**осмысленность** (без плана задание не определено, на красном гейте проход с мнением
|
||||
проход не о чем), второе про **железо**.
|
||||
|
||||
| Ребро | Смысл | Между кем |
|
||||
|---|---|---|
|
||||
| **зависимость** | B не стартует, пока A не закончил, потому что без A задание B не определено | гейт → все опиниативные; все проходы → триаж |
|
||||
| **зависимость** | B не стартует, пока A не закончил, потому что без A задание B не определено | гейт → все проходы с мнением; все проходы → триаж |
|
||||
| **конфликт за ресурс** | A и B не держат машину одновременно; кто из них первый — неважно, направления у ребра нет | проходы, помеченные «держит машину» |
|
||||
|
||||
**План разметки — вход графа, а не его узел.** Он готов до того, как ревью кода
|
||||
@@ -654,20 +654,26 @@ change**: у работы, не меняющей поведения, дельт
|
||||
Разметчик без своего корпуса вернул бы величину, выведенную из ничего, — и это
|
||||
хуже отсутствующей метки, потому что выглядит измеренным.
|
||||
|
||||
**План приходит вызовом и фиксирован сценарием**, а не выводится здесь:
|
||||
**План приходит вызовом и фиксирован сценарием**, а не выводится здесь. **Он же
|
||||
называет глубину и вход каждого прохода** — их обычный источник метка, и без неё
|
||||
проходы взяли бы их наугад:
|
||||
|
||||
| Тема | Кто закрывает | Когда |
|
||||
|---|---|---|
|
||||
| `autotests` | `review-autotests` | всегда |
|
||||
| `operations` | `review-basics`, глубина «сверка» | всегда |
|
||||
| `conventions` + технический разбор | `review-code` | дифф трогает код, а не только оснастку |
|
||||
| Тема | Кто закрывает | Глубина и вход | Когда |
|
||||
|---|---|---|---|
|
||||
| `autotests` | `review-autotests` | как обычно | всегда |
|
||||
| `operations` | `review-basics` | сверка, потолок 2 | всегда |
|
||||
| `conventions` + технический разбор | `review-code` | вход `small` (индекс конвенций), потолки 3 и 2, третья половина включена — потолок 1 | дифф трогает код |
|
||||
|
||||
Триаж обязателен и здесь — он единственный сток и единственный, кто сверяет план
|
||||
с исходом. Темы `requirements` и `security` в плане отсутствуют: у первой нет
|
||||
предмета, у второй нет проходчика на этом сценарии, — и обе обязаны быть названы
|
||||
в границах покрытия. Дом плана — сценарий, а не этот скилл:
|
||||
`av-dev-code:resolve`, `references/maintain.md`, раздел «Ревью — план фиксирован
|
||||
сценарием».
|
||||
с исходом; на его вход подаётся этот план вместо плана разметки. Тема
|
||||
`requirements` в плане отсутствует за отсутствием предмета; `security` и
|
||||
`architecture` закрыты только сверкой с записанными инвариантами внутри `code` —
|
||||
третья половина этого прохода включается здесь по той же причине, что и при
|
||||
метке `small`. Все три обязаны быть названы в границах покрытия, а **сигнал о
|
||||
заниженной метке на таком прогоне не работает**: поднимать нечего.
|
||||
|
||||
Дом плана — сценарий, а не этот скилл: `av-dev-code:resolve`,
|
||||
`references/maintain.md`, раздел «Ревью — план фиксирован сценарием».
|
||||
|
||||
**Правило гейта на таком прогоне работает жёстче обычного.** Правка, которая
|
||||
трогает сам гейт, проверяется гейтом же — инструмент проверяет себя, — поэтому
|
||||
@@ -686,7 +692,7 @@ change**: у работы, не меняющей поведения, дельт
|
||||
Слово «гейт» теперь значит ровно одно — барьер, который проект запускает; тема
|
||||
шире него ровно на «чего в гейте намеренно нет».
|
||||
|
||||
**Пока гейт красный — опиниативные проходы не запускаются.** Оркестратор чинит и
|
||||
**Пока гейт красный — проходы с мнением не запускаются.** Оркестратор чинит и
|
||||
перезапускает гейт. Исключение одно: отказ, унаследованный от базовой ветки
|
||||
(гейт проверяет это прогоном на базе) — тогда он фиксируется находкой и не
|
||||
блокирует.
|
||||
@@ -750,7 +756,7 @@ Recall темы `conventions` равен длине конвенций прое
|
||||
это направление `code → spec`: надо заметить **отсутствие** — тихий фолбэк,
|
||||
самодеятельный дефолт, проглоченную ошибку. У `code` это пропущенный дефект,
|
||||
который поедет в прод. Ни то ни другое не оставляет следа ни в отчёте, ни в
|
||||
границах покрытия; прочие опиниативные проходы держат `opus` из-за цены **ложных**
|
||||
границах покрытия; прочие проходы с мнением держат `opus` из-за цены **ложных**
|
||||
находок, эти двое — из-за цены пропущенных.
|
||||
|
||||
## Стадия 3 — Темы (`medium` целиком; `small` и `large` — только свои темы проекта)
|
||||
@@ -865,6 +871,10 @@ Recall темы `conventions` равен длине конвенций прое
|
||||
стартует. Получает сырые выводы всех проходов, `git diff`, режим и **план
|
||||
разметки задачи**; возвращает финальный отчёт.
|
||||
|
||||
**На прогоне без change его место занимает план сценария** — см. «Прогон без
|
||||
change»: сверять исход с планом триаж обязан и там, а другого плана в том прогоне
|
||||
не существует.
|
||||
|
||||
**План на входе у триажа — не формальность, а сверка.** Он единственный, кто
|
||||
видит и то, что размечено, и то, что пришло: «тем размечено шесть, отчёты
|
||||
покрывают пять» — находка о самом прогоне, и заметить её больше некому. Раньше он
|
||||
@@ -1041,7 +1051,7 @@ flowchart TD
|
||||
прогоне — поимённо, а не общим «метка ниже». Формулировка «не запускается
|
||||
ничего» была бы короче и была бы ложью: гейт запускает инструменты проекта, а
|
||||
триаж проверяет оракул `critical`/`major` запуском — оба идут при любой метке.
|
||||
Не проверяется **опиниативным** проходом: построенный путь атаки (его надо
|
||||
Не проверяется **проходом с мнением**: построенный путь атаки (его надо
|
||||
прогнать), поведение библиотеки и драйвера в вырожденном случае (достаётся только
|
||||
экспериментом), любое число — время удержания блокировки, пик кучи, темп роста
|
||||
журнала, стоимость на годовой истории. `basics` задаёт часть тех же вопросов
|
||||
|
||||
@@ -109,6 +109,8 @@ color: green
|
||||
| промпт | текст, которым зовут модель |
|
||||
| change, capability, spec | сущности OpenSpec, имена вещей чужого инструмента |
|
||||
| generative, applicative | роды проходов ревью, вводятся определением по месту |
|
||||
| чекпоинт | плановый стоп работы, на котором ждут ответа человека. «Остановка» называет любой перерыв, «согласование» — обряд одобрения, а здесь место в процессе, назначенное заранее |
|
||||
| синк | сверка каждого документа канона с только что сделанной работой, с обязательным отрицанием по нетронутым. «Обновление документации» называет исход, а не работу, и молчит о принуждённом отрицании |
|
||||
|
||||
**Список закрыт.** Слово не отсюда и не из таблицы имён вещей выше — находка,
|
||||
а не «принятый стиль»: у него либо есть живой русский аналог, либо оно
|
||||
@@ -117,9 +119,9 @@ color: green
|
||||
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не
|
||||
надо: **конфляция** (смешение), **декорреляция** (разведённость, разведён с
|
||||
кем-то), **непоймание** (почему не поймали), **эвал-сет** (проверочный
|
||||
набор), **гайд** (руководство). Каждое было латинизмом или калькой при живом
|
||||
русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то
|
||||
есть выглядело словарём, не будучи им.
|
||||
набор), **гайд** (руководство), **опиниативный** (проход с мнением). Каждое
|
||||
было латинизмом или калькой при живом русском слове, и каждое к моменту снятия
|
||||
жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
|
||||
|
||||
7. **Жаргон и метафоры заменяются прямым называнием.** Автору образ понятен,
|
||||
читателю — нет.
|
||||
|
||||
@@ -145,6 +145,8 @@
|
||||
| промпт | текст, которым зовут модель |
|
||||
| change, capability, spec | сущности OpenSpec, имена вещей чужого инструмента |
|
||||
| generative, applicative | роды проходов ревью, вводятся определением по месту |
|
||||
| чекпоинт | плановый стоп работы, на котором ждут ответа человека. «Остановка» называет любой перерыв, «согласование» — обряд одобрения, а здесь место в процессе, назначенное заранее |
|
||||
| синк | сверка каждого документа канона с только что сделанной работой, с обязательным отрицанием по нетронутым. «Обновление документации» называет исход, а не работу, и молчит о принуждённом отрицании |
|
||||
|
||||
**Список закрыт.** Слово не отсюда и не из таблицы имён вещей выше — находка,
|
||||
а не «принятый стиль»: у него либо есть живой русский аналог, либо оно
|
||||
@@ -153,9 +155,9 @@
|
||||
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не
|
||||
надо: **конфляция** (смешение), **декорреляция** (разведённость, разведён с
|
||||
кем-то), **непоймание** (почему не поймали), **эвал-сет** (проверочный
|
||||
набор), **гайд** (руководство). Каждое было латинизмом или калькой при живом
|
||||
русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то
|
||||
есть выглядело словарём, не будучи им.
|
||||
набор), **гайд** (руководство), **опиниативный** (проход с мнением). Каждое
|
||||
было латинизмом или калькой при живом русском слове, и каждое к моменту снятия
|
||||
жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
|
||||
|
||||
7. **Жаргон и метафоры заменяются прямым называнием.** Автору образ понятен,
|
||||
читателю — нет.
|
||||
|
||||
@@ -117,6 +117,8 @@ color: green
|
||||
| промпт | текст, которым зовут модель |
|
||||
| change, capability, spec | сущности OpenSpec, имена вещей чужого инструмента |
|
||||
| generative, applicative | роды проходов ревью, вводятся определением по месту |
|
||||
| чекпоинт | плановый стоп работы, на котором ждут ответа человека. «Остановка» называет любой перерыв, «согласование» — обряд одобрения, а здесь место в процессе, назначенное заранее |
|
||||
| синк | сверка каждого документа канона с только что сделанной работой, с обязательным отрицанием по нетронутым. «Обновление документации» называет исход, а не работу, и молчит о принуждённом отрицании |
|
||||
|
||||
**Список закрыт.** Слово не отсюда и не из таблицы имён вещей выше — находка,
|
||||
а не «принятый стиль»: у него либо есть живой русский аналог, либо оно
|
||||
@@ -125,9 +127,9 @@ color: green
|
||||
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не
|
||||
надо: **конфляция** (смешение), **декорреляция** (разведённость, разведён с
|
||||
кем-то), **непоймание** (почему не поймали), **эвал-сет** (проверочный
|
||||
набор), **гайд** (руководство). Каждое было латинизмом или калькой при живом
|
||||
русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то
|
||||
есть выглядело словарём, не будучи им.
|
||||
набор), **гайд** (руководство), **опиниативный** (проход с мнением). Каждое
|
||||
было латинизмом или калькой при живом русском слове, и каждое к моменту снятия
|
||||
жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
|
||||
|
||||
7. **Жаргон и метафоры заменяются прямым называнием.** Автору образ понятен,
|
||||
читателю — нет.
|
||||
|
||||
@@ -296,11 +296,19 @@ stateDiagram-v2
|
||||
**напоминает** — беклог, заведённый до появления типа, законен, и переоформлять
|
||||
его «заодно» здесь не просят.
|
||||
|
||||
**Тип не выбирает метку ревью и вообще ничего не предписывает конвейеру.**
|
||||
Профиль выбирается по факту изменения, а не по типу задачи: `chore` бывает
|
||||
миграцией схемы, `fix` — правкой публичного контракта. Правило «предписание
|
||||
процесса в теле задачи снимается» типом не отменяется, а подтверждается: он
|
||||
описывает работу, а не то, как её проверять.
|
||||
**Тип не выбирает метку ревью и глубину проверки.** Профиль выбирается по факту
|
||||
изменения, а не по типу задачи: `chore` бывает миграцией схемы, `fix` — правкой
|
||||
публичного контракта. Правило «предписание процесса в теле задачи снимается»
|
||||
типом не отменяется, а подтверждается: он описывает работу, а не то, как её
|
||||
проверять.
|
||||
|
||||
**Одно исполнителю тип всё же говорит — каким сценарием работу вести, и то не
|
||||
один.** В плагине `av-dev-code` скилл `resolve` выбирает сценарий связкой из двух
|
||||
признаков: тип **предлагает** (`chore` — обслуживание, `research` — разведка),
|
||||
а подтверждает его предмет работы — есть ли что менять в спеках. Признаки
|
||||
разошлись — работа останавливается, и тип меняется здесь, командой `edit --type`,
|
||||
а не переклеивается исполнителем по ходу. Метку и глубину это по-прежнему не
|
||||
задаёт: их называет разметка изменения, а на прогоне без change — сам сценарий.
|
||||
|
||||
## Как написана задача
|
||||
|
||||
|
||||
@@ -145,6 +145,8 @@
|
||||
| промпт | текст, которым зовут модель |
|
||||
| change, capability, spec | сущности OpenSpec, имена вещей чужого инструмента |
|
||||
| generative, applicative | роды проходов ревью, вводятся определением по месту |
|
||||
| чекпоинт | плановый стоп работы, на котором ждут ответа человека. «Остановка» называет любой перерыв, «согласование» — обряд одобрения, а здесь место в процессе, назначенное заранее |
|
||||
| синк | сверка каждого документа канона с только что сделанной работой, с обязательным отрицанием по нетронутым. «Обновление документации» называет исход, а не работу, и молчит о принуждённом отрицании |
|
||||
|
||||
**Список закрыт.** Слово не отсюда и не из таблицы имён вещей выше — находка,
|
||||
а не «принятый стиль»: у него либо есть живой русский аналог, либо оно
|
||||
@@ -153,9 +155,9 @@
|
||||
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не
|
||||
надо: **конфляция** (смешение), **декорреляция** (разведённость, разведён с
|
||||
кем-то), **непоймание** (почему не поймали), **эвал-сет** (проверочный
|
||||
набор), **гайд** (руководство). Каждое было латинизмом или калькой при живом
|
||||
русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то
|
||||
есть выглядело словарём, не будучи им.
|
||||
набор), **гайд** (руководство), **опиниативный** (проход с мнением). Каждое
|
||||
было латинизмом или калькой при живом русском слове, и каждое к моменту снятия
|
||||
жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
|
||||
|
||||
7. **Жаргон и метафоры заменяются прямым называнием.** Автору образ понятен,
|
||||
читателю — нет.
|
||||
|
||||
+5
-3
@@ -160,6 +160,8 @@
|
||||
| промпт | текст, которым зовут модель |
|
||||
| change, capability, spec | сущности OpenSpec, имена вещей чужого инструмента |
|
||||
| generative, applicative | роды проходов ревью, вводятся определением по месту |
|
||||
| чекпоинт | плановый стоп работы, на котором ждут ответа человека. «Остановка» называет любой перерыв, «согласование» — обряд одобрения, а здесь место в процессе, назначенное заранее |
|
||||
| синк | сверка каждого документа канона с только что сделанной работой, с обязательным отрицанием по нетронутым. «Обновление документации» называет исход, а не работу, и молчит о принуждённом отрицании |
|
||||
|
||||
**Список закрыт.** Слово не отсюда и не из таблицы имён вещей выше — находка,
|
||||
а не «принятый стиль»: у него либо есть живой русский аналог, либо оно
|
||||
@@ -168,9 +170,9 @@
|
||||
Отсюда же читается снятое. Эти слова из текстов убраны, и возвращать их не
|
||||
надо: **конфляция** (смешение), **декорреляция** (разведённость, разведён с
|
||||
кем-то), **непоймание** (почему не поймали), **эвал-сет** (проверочный
|
||||
набор), **гайд** (руководство). Каждое было латинизмом или калькой при живом
|
||||
русском слове, и каждое к моменту снятия жило в трёх-шести файлах разом — то
|
||||
есть выглядело словарём, не будучи им.
|
||||
набор), **гайд** (руководство), **опиниативный** (проход с мнением). Каждое
|
||||
было латинизмом или калькой при живом русском слове, и каждое к моменту снятия
|
||||
жило в трёх-шести файлах разом — то есть выглядело словарём, не будучи им.
|
||||
|
||||
7. **Жаргон и метафоры заменяются прямым называнием.** Автору образ понятен,
|
||||
читателю — нет.
|
||||
|
||||
Reference in New Issue
Block a user