- Перевод на канон 1 доделан: адреса служебного файла и имена скиллов переставлены в девяти местах прозы и кода, гейт зовёт три скрипта по новым путям, прежние docs/.docs.json и tasks/.tasks.json удалены. - Сверка двумя агентами нашла четырнадцать расхождений, тринадцать сведены строками: число прогонов ревью и преамбула журнала дефектов, счёт capability, маршруты README, дубли инварианта захвата и кодов прогона, протухшие указатели записок разведки, маркер долга на переехавшем абзаце. Срок жизни сессии нормирует спека access, database.md на неё ссылается. - Purpose спеки pipeline объявляет неописанным то, что в ней же и стоит; правка идёт изменением openspec, поэтому заведена задача pipeline-spec-purpose-drift.
55 lines
4.5 KiB
Markdown
55 lines
4.5 KiB
Markdown
# 🧹 Свести 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) уберёт из перечня
|
||
неописанного отмену контекста, когда доедет, — здесь эта строка остаётся на
|
||
месте.
|