починены находки второго ревью: цикл закрытия задачи и три отсутствовавших слота
- task-pipeline и task-batch запрещали шаг, который сами же добавили: раздел границ и финальный доклад переписаны под снятую границу приёмки - «триаж сводит строки в одну» противоречило «не сливает» — деградация снова поразрядная во всех трёх местах - канон не требовал в CLAUDE.md имени основной ветки, testdata и запретов, а скелета CLAUDE.md не было вовсе — заведён - обратимость жила в двух домах, читатели ходили в пустой; единственный дом теперь CLAUDE.md - заведены слоты «Единые точки проекта» и «Триггеры профиля», куда charter'ы слали, а канон их не создавал - блок «Вопросы к проходам» стал частью задания прохода: за ним ходили двое из девяти - чек-лист синка и правило «замер + настройка» сведены к одному дому; plugin.json больше не про бриф
This commit is contained in:
@@ -77,11 +77,18 @@ kebab-case.
|
||||
### `architecture.md` — **обзор, не поведение**
|
||||
|
||||
Принципы; компоненты **со ссылками на capability**, а не с пересказом их
|
||||
требований; внешние границы и форматы чужих систем; окружение — где работает,
|
||||
что рядом, кто перезапускает; **внешние зависимости поимённо** и чем каждая
|
||||
требований; **единые точки проекта** — где генерируются идентификаторы и время,
|
||||
где единственный парсер входного формата, где маппинг доменной ошибки в код
|
||||
ответа, где общий путь приёма (это материал для вопроса «не появился ли второй
|
||||
способ»); внешние границы и форматы чужих систем; окружение — где работает, что
|
||||
рядом, кто перезапускает; **внешние зависимости поимённо** и чем каждая
|
||||
отказывает (не только «падает», но и «отвечает медленно», «молчит», «отдаёт
|
||||
мусор»); кто заметит отказ и когда; характер потока — непрерывный, по запросу,
|
||||
по расписанию; что обратимо, а что нет; деплой; открытые вопросы.
|
||||
по расписанию; деплой; открытые вопросы.
|
||||
|
||||
**Обратимости здесь нет** — её единственный дом `CLAUDE.md`: туда ходят пять
|
||||
проходов, и раздвоение адреса означало бы, что проект написал ответ, а ревью его
|
||||
не прочитало.
|
||||
|
||||
**Поведение системы сюда не пишется.** Его нормативный дом — `openspec/specs/`,
|
||||
куда `opsx:archive` вливает дельты; второй дом синхронизировать руками
|
||||
@@ -159,12 +166,21 @@ kebab-case.
|
||||
|
||||
Два раздела с разными сроками жизни.
|
||||
|
||||
**Настройка конвейера под проект:** типовые узлы (рода узлов и 3–5 проверяемых
|
||||
свойств к каждому); типовые ложноположительные — находки, которые здесь выглядят
|
||||
убедительно и всегда неверны; вопросы к проходам поимённо с провенансом;
|
||||
недоступно проверке — два подраздела, «не проверит ни один проход»
|
||||
(принципиальная граница, по факту промаха не пересматривается) и «перестали
|
||||
проверять сознательно» (пересматривается первым).
|
||||
**Настройка конвейера под проект**, пять подразделов с точными именами — по ним
|
||||
проходы находят свой кусок:
|
||||
|
||||
- **Типовые узлы** — рода узлов проекта и 3–5 проверяемых свойств к каждому;
|
||||
- **Типовые ложноположительные** — находки, которые здесь выглядят убедительно и
|
||||
всегда неверны, каждая со строкой «почему здесь это не дефект»;
|
||||
- **Вопросы к проходам** — поимённо, в форме `<имя прохода>: <вопрос>
|
||||
(<провенанс>)`;
|
||||
- **Триггеры профиля** — проектная конкретизация правила выбора профиля ревью:
|
||||
какие пути и контракты означают `deep`, что считается «поведением, видимым
|
||||
снаружи», при каком изменении запускается независимая реализация. Уточняет
|
||||
умолчания конвейера, а не отменяет их;
|
||||
- **Недоступно проверке** — два подраздела: «не проверит ни один проход»
|
||||
(принципиальная граница, по факту промаха не пересматривается) и «перестали
|
||||
проверять сознательно» (пересматривается первым).
|
||||
|
||||
**Журнал дефектов:** запись на каждый воспроизведённый дефект с пометкой
|
||||
**проскочил / пойман ревью**. Проскочившие — эвал-сет для калибровки конвейера,
|
||||
@@ -173,13 +189,24 @@ kebab-case.
|
||||
|
||||
### `CLAUDE.md`
|
||||
|
||||
Что это и стек; **инварианты с severity рядом с формулировкой** — по ним
|
||||
проходы присваивают `critical`, поэтому severity стоит здесь, а не выводится
|
||||
каждым проходом заново; команды; **семантика гейта** — чем краснеет безусловно и
|
||||
почему, где логи, что означает исход, чего в гейте намеренно нет, **кто и когда
|
||||
обязан гонять дорогое вне гейта**; что запускать запрещено, с путями; что
|
||||
считается необратимым; общий станок, врывающийся в замороженный спринт; ориентир
|
||||
по размеру спринта.
|
||||
Что это и стек; **инварианты с severity рядом с формулировкой** — по ним проходы
|
||||
присваивают `critical`, поэтому severity стоит здесь, а не выводится каждым
|
||||
проходом заново; команды; **семантика гейта** — чем краснеет безусловно и почему,
|
||||
где логи, что означает исход, чего в гейте намеренно нет, **кто и когда обязан
|
||||
гонять дорогое вне гейта**.
|
||||
|
||||
Плюс то, что нужно git-операциям и проходам и не выводится ниоткуда:
|
||||
|
||||
- **имя основной ветки** — от неё считается база диффа
|
||||
(`git merge-base HEAD <ветка>`), в неё вливает батч, от неё ветвятся задачи.
|
||||
Угадывание между `master` и `main` ломает интеграцию целиком;
|
||||
- **что запускать запрещено, с путями** — рабочая БД, боевой каталог данных,
|
||||
внешние сервисы. Запретом с путями, а не «будь осторожен»;
|
||||
- **где `testdata`** и что в них лежит; **куда писать временное**;
|
||||
- **что считается необратимым** — единственный дом: от обратимости зависит вся
|
||||
шкала ранжирования триажа и право проходов на `critical`;
|
||||
- **общий станок**, врывающийся в замороженный спринт; **ориентир по размеру
|
||||
спринта**.
|
||||
|
||||
### `openspec/config.yaml`
|
||||
|
||||
@@ -202,6 +229,9 @@ kebab-case.
|
||||
| измеренное число | `research/` |
|
||||
| настройка с числовым значением | `database.md` |
|
||||
| периметр и модель угроз | `security.md` |
|
||||
| что необратимо | `CLAUDE.md` — **не** `architecture.md` |
|
||||
| единые точки проекта | `architecture.md` |
|
||||
| имя основной ветки, `testdata`, временный каталог | `CLAUDE.md` |
|
||||
| что уже механизировано правилом | `conventions/README.md` |
|
||||
|
||||
## Пустое называется пустым
|
||||
|
||||
@@ -71,7 +71,12 @@
|
||||
медленно, молчит, отдаёт мусор):
|
||||
- Кто заметит отказ и когда:
|
||||
- Характер потока (непрерывный, по запросу, по расписанию):
|
||||
- Что обратимо, а что нет:
|
||||
|
||||
## Единые точки проекта
|
||||
|
||||
Где генерируются идентификаторы и время; где единственный парсер входного
|
||||
формата; где маппинг доменной ошибки в код ответа; где общий путь приёма.
|
||||
Материал для вопроса «не появился ли второй способ делать то, что уже делается».
|
||||
|
||||
## Деплой
|
||||
|
||||
@@ -257,6 +262,13 @@
|
||||
### Вопросы к проходам
|
||||
|
||||
Форма: `<имя прохода>: <вопрос> (<провенанс>)`. Главный источник — журнал ниже.
|
||||
Проход, увидев свой блок, задаёт эти вопросы дополнительно к обязательным.
|
||||
|
||||
### Триггеры профиля
|
||||
|
||||
Проектная конкретизация правила выбора профиля: какие пути и контракты означают
|
||||
`deep`, что здесь считается «поведением, видимым снаружи», при каком изменении
|
||||
запускается независимая реализация. Уточняет умолчания конвейера, не отменяет их.
|
||||
|
||||
### Недоступно проверке
|
||||
|
||||
@@ -286,6 +298,66 @@
|
||||
Новый проект: «Дефектов пока не было. Настройка конвейера появится с первым
|
||||
ревью.»
|
||||
|
||||
## `CLAUDE.md`
|
||||
|
||||
Лежит в корне, не в `docs/`. Единственный файл канона, который агент читает
|
||||
**всегда**, поэтому в нём то, без чего нельзя сделать ни шага.
|
||||
|
||||
```markdown
|
||||
# CLAUDE.md
|
||||
|
||||
Памятка для работы над <проект>. Перед задачей прочитай также
|
||||
[docs/passport.md](docs/passport.md), [docs/architecture.md](docs/architecture.md)
|
||||
и [docs/conventions/](docs/conventions/README.md).
|
||||
|
||||
## Что это
|
||||
|
||||
Абзац: что делает и чего **не** делает.
|
||||
|
||||
## Стек
|
||||
|
||||
## Инварианты
|
||||
|
||||
Что нарушать нельзя. Каждый пункт — три вещи: формулировка **как проверяемое
|
||||
свойство**, а не лозунг; последствие нарушения и его обратимость; **severity**
|
||||
рядом. По этим формулировкам проходы ревью присваивают `critical`, поэтому
|
||||
severity стоит здесь, а не выводится каждым проходом заново.
|
||||
|
||||
## Команды
|
||||
|
||||
## Гейт
|
||||
|
||||
- Команда целиком и как определяется база диффа:
|
||||
- Где логи шагов:
|
||||
- Что означает каждый исход:
|
||||
- **Что красит безусловно и почему:**
|
||||
- Чего в гейте намеренно нет и **кто тогда обязан это гонять:**
|
||||
|
||||
## Запреты
|
||||
|
||||
Что запускать нельзя, **с путями**: рабочая БД, боевой каталог данных, внешние
|
||||
сервисы. Плюс где `testdata` и куда писать временное.
|
||||
|
||||
## Работа
|
||||
|
||||
- **Основная ветка:** <имя>
|
||||
- **Необратимое** (спрашивается у человека всегда):
|
||||
- **Общий станок** — какая проверка, покраснев, врывается в замороженный спринт:
|
||||
- **Ориентир по размеру спринта:** 5–8 задач, ориентир а не закон
|
||||
- **Что такое «сделана»:** пайплайн проекта пройден + критерии приёмки проверены
|
||||
поимённо
|
||||
|
||||
## Язык
|
||||
|
||||
- Документация, комментарии, сообщения коммитов — русский.
|
||||
- Код и идентификаторы — английский.
|
||||
```
|
||||
|
||||
Имя основной ветки, запреты с путями и «что необратимо» — не украшение: без
|
||||
первого падают git-операции батча и расчёт базы диффа, без второго проход может
|
||||
тронуть рабочие данные, без третьего вся шкала ранжирования триажа держится на
|
||||
догадке.
|
||||
|
||||
## `docs/.pm.json`
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user