docs: раскладка переехала в .av-dev.toml, а расхождения документов сведены

- Перевод на канон 1 доделан: адреса служебного файла и имена скиллов
  переставлены в девяти местах прозы и кода, гейт зовёт три скрипта по новым
  путям, прежние docs/.docs.json и tasks/.tasks.json удалены.
- Сверка двумя агентами нашла четырнадцать расхождений, тринадцать сведены
  строками: число прогонов ревью и преамбула журнала дефектов, счёт capability,
  маршруты README, дубли инварианта захвата и кодов прогона, протухшие указатели
  записок разведки, маркер долга на переехавшем абзаце. Срок жизни сессии
  нормирует спека access, database.md на неё ссылается.
- Purpose спеки pipeline объявляет неописанным то, что в ней же и стоит; правка
  идёт изменением openspec, поэтому заведена задача pipeline-spec-purpose-drift.
This commit is contained in:
av
2026-08-13 12:36:36 +03:00
parent eacaf76d5f
commit b76f2d7c7e
25 changed files with 171 additions and 85 deletions
@@ -0,0 +1,54 @@
# 🧹 Свести Purpose спеки pipeline с её же требованиями
- **Тип:** chore
- **Категория:** Очередь — Правка одного раздела спеки, но откладывать её значит держать нормативный документ противоречащим себе.
- **Зачем:** Преамбула спеки объявляет сознательно неописанными пять требований, которые в ней же и стоят с 2026-08-12: читатель узнаёт границу нормы из раздела, который ей противоречит.
Нашла сверка документов 2026-08-13. `Purpose` спеки `pipeline` перечисляет как
сознательно неописанные захват задачи и срок его протухания, число попыток,
состояние «мертва» и паузу перед повтором. Ниже в той же спеке эти требования
стоят: их дописало изменение `pocketbase-storage` 2026-08-12, а преамбулу не
поправило.
Не переехала в спеку одна вещь — цепочка переходов
`created``converted``transcribe``done` либо `failed`. Маркер долга в
[architecture.md](../../docs/architecture.md) уже уточнён под это и называет
неперехавшей именно цепочку, так что после правки `Purpose` два документа
сойдутся.
Материал для замены — формулировка из отчёта сверки:
> Описаны: пустой прогон воркера, неделимость захвата и срок его протухания,
> число попыток и состояние «мертва», условность записи результата по признаку
> захвата, нарастающая пауза перед повтором. Сознательно не описаны: цепочка
> переходов `created` → `converted` → `transcribe` → `done` либо `failed`,
> отмена контекста посреди шага, освобождение ресурсов внешних клиентов. Это не
> значит, что такого поведения нет: оно живёт в коде, а требования на него не
> написаны, потому что требование без проверки — предположение, а не норма.
> Первая задача, которая трогает любое из перечисленного, дописывает его сюда.
## Затрагивает
- раздел `Purpose` в `openspec/specs/pipeline/spec.md` — требований спеки правка
не касается, они уже написаны;
- маркер долга о поведении в `docs/architecture.md` — как парная сторона
утверждения о том, что ещё не переехало.
## Критерии приёмки
- `Purpose` не называет неописанным ни одно требование, которое в спеке стоит.
Оракул — построчная сверка перечня из `Purpose` с заголовками `Requirement`
той же спеки: пересечения нет.
- Спека остаётся годной для инструмента. Оракул — `openspec validate --strict`
отрабатывает без отказа.
- Маркер долга в `docs/architecture.md` и `Purpose` называют неперехавшим одно и
то же. Оракул — чтение обоих мест подряд: перечни совпадают.
## Рамки
Правится преамбула, а не требования: поведение сервиса задача не меняет и кода
не трогает. Спека правится изменением openspec своим порядком, а не прямой
правкой файла. Соседняя задача
[context-cancel-in-pipeline](context-cancel-in-pipeline.md) уберёт из перечня
неописанного отмену контекста, когда доедет, — здесь эта строка остаётся на
месте.