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:
@@ -47,7 +47,7 @@
|
||||
## Критерии приёмки
|
||||
|
||||
- Ни одно из шести мест не отвечает на свой вопрос двумя способами. Оракул —
|
||||
повторный прогон `av-dev-docs:healthcheck`: перечисленные шесть находок не
|
||||
повторный прогон `av-dev:doc-healthcheck`: перечисленные шесть находок не
|
||||
возвращаются.
|
||||
- Провайдер OIDC стоит в таблице внешних зависимостей со своими четырьмя
|
||||
столбцами отказа, и счёт зависимостей в «Открытых вопросах» сходится с
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
кодом 3.
|
||||
|
||||
Чего не знаем: ведут ли себя так же `docs.py check`, `tasks.py check` и
|
||||
`openspec.py check`. Скрипты чужие — они живут в плагинах `av-dev-docs`,
|
||||
`av-dev-tasks` и `av-dev-code`, и править их в этом репозитории нельзя. Отсюда и
|
||||
тип записи: способ починки зависит от ответа. Найдётся страж внутри — делать
|
||||
`openspec.py check`. Скрипты чужие — они живут в плагине `av-dev`, и править их
|
||||
в этом репозитории нельзя. Отсюда и тип записи: способ починки зависит от
|
||||
ответа. Найдётся страж внутри — делать
|
||||
нечего; не найдётся — либо обёртка в `Taskfile.yml` со своей проверкой предмета,
|
||||
либо разговор с владельцем плагина.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
Шаг заведён 2026-08-13 и проверен мутацией на восьми исходах вручную — правка
|
||||
уехавшего шага в дереве и в коммите, удаление, переименование, новый шаг, правка
|
||||
`migrations.go`, отсутствующий ключ в `docs/.docs.json`, каталог без шагов,
|
||||
`migrations.go`, отсутствующий ключ в `.av-dev.toml`, каталог без шагов,
|
||||
неразрешимая база диффа. Прогон был разовым: в дереве от него не осталось ничего.
|
||||
|
||||
Прецедент рядом. У шага сверки версий Go есть спека
|
||||
@@ -24,7 +24,7 @@
|
||||
## Затрагивает
|
||||
|
||||
- шаг `migrations` в `Taskfile.yml` — его логика разбора `git diff`;
|
||||
- ключ `migrations` в `docs/.docs.json` — из него шаг берёт каталог;
|
||||
- ключ `migrations` секции `[docs]` в `.av-dev.toml` — из него шаг берёт каталог;
|
||||
- каталог шагов схемы `internal/adapter/repo/pocketbase/migrations/` как предмет
|
||||
правила;
|
||||
- возможно — новая capability в `openspec/specs/` и файл проверок рядом с
|
||||
@@ -36,7 +36,7 @@
|
||||
временном клоне репозитория: правка файла шага даёт код 1 и называет файл.
|
||||
- Новый файл шага проверку не роняет, и правка `migrations.go` тоже: строка
|
||||
`Register` нового шага прибавляется именно там. Оракул — те же два сценария.
|
||||
- Каталог без единого файла шага и отсутствующий ключ в `docs/.docs.json` дают
|
||||
- Каталог без единого файла шага и отсутствующий ключ в `.av-dev.toml` дают
|
||||
код 3, а не тихий ноль. Оракул — два сценария на временном каталоге.
|
||||
- Проверка сценариев идёт в гейте, а не руками. Оракул — `task gate` красный при
|
||||
внесённом нарушении шаблона имени файла шага.
|
||||
|
||||
@@ -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) уберёт из перечня
|
||||
неописанного отмену контекста, когда доедет, — здесь эта строка остаётся на
|
||||
месте.
|
||||
@@ -42,7 +42,7 @@
|
||||
## Рамки
|
||||
|
||||
Правится только настройка конвейера в `docs/review.md`. Устав самого конвейера
|
||||
живёт в плагине `av-dev-code` и этой задачей не трогается: проект вправе
|
||||
живёт в скилле `av-dev:code-review` и этой задачей не трогается: проект вправе
|
||||
настраивать свои темы и триггеры, но не переписывать чужой скилл.
|
||||
|
||||
Журнал дефектов в том же файле не трогается — записи неизменяемы.
|
||||
|
||||
Reference in New Issue
Block a user