- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель; - буквенные метки решений заменены сквозными Р1–Р234, следствия получили префикс С при прежних номерах: схема букв выродилась до пятибуквенных и сломалась — `АЕАКЛ` была занята и темой 53, и темой 65; - 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер означал тему, а слово стояло «решение», формулировка исправлена.
87 lines
6.0 KiB
Markdown
87 lines
6.0 KiB
Markdown
# 1. Статус OpenSpec (2026-08-03)
|
||
|
||
## Что было
|
||
|
||
OpenSpec несёт оба проекта: healthlog — 5 capability, 3530 строк спек, 9
|
||
архивных change за две недели; jellybit — 11 capability, 3895 строк, 43 архивных
|
||
change. При этом в трёх местах плагина написана ветка «проект без OpenSpec»
|
||
(`task-pipeline` предпосылки, `review-pipeline` предпосылки, `task-batch`
|
||
предпосылки) — и **не исполнялась ни разу**.
|
||
|
||
Проектные факты живут в пяти домах: `CLAUDE.md`, `docs/architecture.md`,
|
||
`openspec/specs/`, `openspec/config.yaml` → `context`, и планируется шестой —
|
||
`docs/review-brief.md`.
|
||
|
||
Расхождение измерено: у healthlog раздел «Хранилище» в `docs/architecture.md` —
|
||
950 строк (377–1328) против `openspec/specs/storage/spec.md` на 1337 строк. Два
|
||
описания одного поведения, никем не сверяемые. У jellybit того же нет:
|
||
`docs/specs/architecture.md` — 300 строк обзора, детали в 11 спеках. **Проект с
|
||
43 изменениями держит архитектуру втрое короче проекта с 9.**
|
||
|
||
## Решено
|
||
|
||
**Р1. OpenSpec — жёсткая предпосылка `av-dev-pipeline`.** Ветки деградации
|
||
удаляются, вместо них объявленная зависимость и проверка на старте. Зависимость
|
||
на уровне **плагина, а не процесса**: `av-dev-tasks`, `av-dev-git` и будущий
|
||
плагин документов от OpenSpec не зависят и работают на python/ansible-проектах.
|
||
|
||
*Причина:* непроверенная ветка деградации хуже честной строки «требуется
|
||
OpenSpec» — она даёт ложную уверенность, что проект без спек поедет.
|
||
|
||
**Р2. Нормативный дом поведения — `openspec/specs/`.** `architecture.md`
|
||
переопределяется как **обзор**: принципы, компоненты со ссылками на capability,
|
||
внешние форматы данных, раскладка, деплой, открытые вопросы. Поведения он не
|
||
описывает.
|
||
|
||
*Причина:* `opsx:archive` вливает дельты именно в `openspec/specs/` — любой
|
||
другой нормативный дом обязан синхронизироваться руками и разойдётся. Форма
|
||
jellybit это уже подтвердила на 43 изменениях.
|
||
|
||
**Р3. `openspec/config.yaml` → `context` держит только нужды генерации.** Язык,
|
||
правила именования capability, придирки валидатора RFC 2119 — и ссылки. Правило
|
||
ревью, пересказ конвенций и инварианты оттуда вычищаются: у них есть свои дома.
|
||
|
||
*Причина:* блок «Ревью (процесс, не артефакт)» в обоих `config.yaml` дословно
|
||
повторяет шаги 4 и 7 `task-pipeline`. Это второй дом для правила, которым владеет
|
||
плагин, и он разойдётся на первой же правке.
|
||
|
||
## Что из этого следует
|
||
|
||
Из Р1:
|
||
|
||
**С1.** Три места с веткой деградации переписываются на объявленную предпосылку
|
||
плюс проверку на старте (есть `openspec/`, разрешаются `opsx:*`) и внятный
|
||
отказ: `task-pipeline` предпосылки, `review-pipeline` предпосылки, `task-batch`
|
||
предпосылки.
|
||
|
||
**С2.** Описание `av-dev-pipeline` в маркетплейсе получает строку «требует
|
||
OpenSpec».
|
||
|
||
**С3. Факт для темы «объединять ли tasks и pipeline»:** объединение потянуло бы
|
||
зависимость от OpenSpec на управление задачами, которой там сейчас нет.
|
||
|
||
Из Р2:
|
||
|
||
**С4.** Правило «поведение — в спеку, устройство и границы — в архитектуру»
|
||
становится контрактом плагина документов и правилом шага «синк документации» в
|
||
`task-pipeline`.
|
||
|
||
**С5.** healthlog чистится **не разом**: раздел вычищается той задачей, которая
|
||
его касается. Нужен способ не потерять остаток — иначе 950 строк «Хранилища»
|
||
останутся навсегда.
|
||
|
||
**С6. Дыра, которую решение открывает:** «почему» после архивации. Сегодня
|
||
`CLAUDE.md` healthlog велит писать причину решения в `architecture.md` — а мы её
|
||
оттуда выселяем. Спеки нормативны и «почему» не держат; `design.md` живёт внутри
|
||
change и уезжает в архив. Либо ADR (как у jellybit), либо явное правило «почему
|
||
живёт в архивных change». **Первый вопрос следующей темы.**
|
||
|
||
Из Р3:
|
||
|
||
**С7.** `av-dev-pipeline` даёт образец `openspec/config.yaml` отдельным
|
||
reference — он владеет связью с OpenSpec. Заполняется при старте проекта и при
|
||
`adopt`.
|
||
|
||
**С8.** У обоих проектов из `config.yaml` вычищается блок «Ревью (процесс, не
|
||
артефакт)», пересказ конвенций и инвариантов.
|