- Перевод на канон 1 доделан: адреса служебного файла и имена скиллов переставлены в девяти местах прозы и кода, гейт зовёт три скрипта по новым путям, прежние docs/.docs.json и tasks/.tasks.json удалены. - Сверка двумя агентами нашла четырнадцать расхождений, тринадцать сведены строками: число прогонов ревью и преамбула журнала дефектов, счёт capability, маршруты README, дубли инварианта захвата и кодов прогона, протухшие указатели записок разведки, маркер долга на переехавшем абзаце. Срок жизни сессии нормирует спека access, database.md на неё ссылается. - Purpose спеки pipeline объявляет неописанным то, что в ней же и стоит; правка идёт изменением openspec, поэтому заведена задача pipeline-spec-purpose-drift.
4.5 KiB
🧹 Свести Purpose спеки pipeline с её же требованиями
- Тип: chore
- Категория: Очередь — Правка одного раздела спеки, но откладывать её значит держать нормативный документ противоречащим себе.
- Зачем: Преамбула спеки объявляет сознательно неописанными пять требований, которые в ней же и стоят с 2026-08-12: читатель узнаёт границу нормы из раздела, который ей противоречит.
Нашла сверка документов 2026-08-13. Purpose спеки pipeline перечисляет как
сознательно неописанные захват задачи и срок его протухания, число попыток,
состояние «мертва» и паузу перед повтором. Ниже в той же спеке эти требования
стоят: их дописало изменение pocketbase-storage 2026-08-12, а преамбулу не
поправило.
Не переехала в спеку одна вещь — цепочка переходов
created → converted → transcribe → done либо failed. Маркер долга в
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 уберёт из перечня неописанного отмену контекста, когда доедет, — здесь эта строка остаётся на месте.