docs: документы подняты на канон 7
- review.md переведён на словарь меток: вопросы адресованы темам, триггеры профиля стали триггерами метки в три списка, quick/standard/wide → small/ medium/large, профиль deep упразднён - openspec/config.yaml переписан по канонической форме: адреса passport и CLAUDE.md вместо пересказа правил ревью и конвенций - разобраны находки doc-consistency и doc-code-drift: исключение инварианта сверено со спеками, единая точка времени и таблица classifyErr дополнены, MaxTorrentSize получил дом в database.md
This commit is contained in:
@@ -40,8 +40,12 @@ Go 1.26, один статический бинарь (`CGO_ENABLED=0`). Module
|
||||
последней копии там выключен сознательно
|
||||
([state-reconciliation](openspec/specs/state-reconciliation/spec.md));
|
||||
(2) уборка воркером **собственного** торрента, добавленного этим же `add`
|
||||
секундами ранее, когда задачу отменили в окне после `add`
|
||||
([download-tracking](openspec/specs/download-tracking/spec.md)). Всё
|
||||
секундами ранее, когда закрытие **любым** путём (`Cancel` или `Dismiss`)
|
||||
увело задачу из `catched` в окне после `add` — уборка привязана к состоянию,
|
||||
а не к команде; признак «своё» даёт подтверждённое отсутствие инфохэша
|
||||
непосредственно перед `add`
|
||||
([download-tracking](openspec/specs/download-tracking/spec.md),
|
||||
[state-reconciliation](openspec/specs/state-reconciliation/spec.md)). Всё
|
||||
остальное под `paths.downloads` — по-прежнему `critical`.
|
||||
- **Последняя копия не снимается** — `Undo` отклоняется целиком, если у цели не
|
||||
осталось других жёстких ссылок (`nlink <= 1`) или исходного файла уже нет.
|
||||
@@ -108,7 +112,8 @@ Go 1.26, один статический бинарь (`CGO_ENABLED=0`). Module
|
||||
- `govulncheck` даёт `WARN`, а не `FAIL`: находка тут — состояние
|
||||
зависимостей, а не диффа. Разбирает агент ревью по трассам вызовов.
|
||||
- `-race` без gcc уходит в `SKIP` с явным «гонки НЕ проверены» — тогда их
|
||||
проверяет проход `ops` рассуждением, и это идёт в границы покрытия.
|
||||
проверяет рассуждением тема `operations` ([docs/review.md](docs/review.md)
|
||||
→ «Вопросы по темам»), и это идёт в границы покрытия.
|
||||
- Ничего не гоняется против **живого** qBittorrent, LLM и метабаз:
|
||||
интеграционные тесты за env-гейтами, запускает человек вручную.
|
||||
- Качество распознавания гейтом не проверяется вовсе и проверяться не будет:
|
||||
@@ -140,7 +145,8 @@ Go 1.26, один статический бинарь (`CGO_ENABLED=0`). Module
|
||||
- **Необратимое** (спрашивается у человека всегда): всё, что пишет в
|
||||
`paths.downloads` или удаляет оттуда; удаление раздачи из qBittorrent вместе
|
||||
с файлами (`Delete`) — кроме уборки собственного, только что добавленного
|
||||
торрента при отмене (см. исключения инварианта выше); снятие последней копии
|
||||
торрента, когда закрытие любым путём увело задачу из `catched` (см.
|
||||
исключения инварианта выше); снятие последней копии
|
||||
данных; правка уже применённой миграции; `git push --force`; удаление или
|
||||
перезапись файла в библиотеке Jellyfin, которого мы не создавали.
|
||||
- **Общий станок** — покрасневший `task gate` на `master` врывается в
|
||||
@@ -155,30 +161,30 @@ Go 1.26, один статический бинарь (`CGO_ENABLED=0`). Module
|
||||
(CLI `openspec`, v1.x). Сначала спецификация — потом код.
|
||||
|
||||
- `openspec/specs/<capability>/spec.md` — **нормативный дом поведения**: что
|
||||
система делает сейчас. Capability — это поведение или домен (`ingest`,
|
||||
`recognition`, `file-layout`, `review`, `notifications`), а не пакет кода.
|
||||
система делает сейчас. Capability — это поведение или домен системы, а не
|
||||
пакет кода.
|
||||
- `openspec/changes/<id>/` — предлагаемое изменение: `proposal.md`, `design.md`
|
||||
(для нетривиальных), дельта-спеки (`ADDED`/`MODIFIED`/`REMOVED Requirements`),
|
||||
`tasks.md`. После реализации change архивируется в
|
||||
`openspec/changes/archive/`, дельты вливаются в `openspec/specs/`.
|
||||
- `openspec/config.yaml` — только нужды генерации артефактов: язык, правила
|
||||
именования capability, придирки валидатора.
|
||||
именования capability, придирки валидатора — плюс адреса документов канона.
|
||||
Пересказа этих документов там нет: второй дом факта расходится молча.
|
||||
|
||||
Поток работы — через слэш-команды `opsx:*`: `opsx:explore` (продумать),
|
||||
`opsx:propose` (завести change), `opsx:apply` (реализовать tasks),
|
||||
`opsx:sync`/`opsx:archive` (влить и архивировать).
|
||||
|
||||
Правила спек:
|
||||
Правила спек — язык, именование capability и придирки валидатора — живут в
|
||||
[openspec/config.yaml](openspec/config.yaml) (`context` и `rules`), оттуда их
|
||||
читает порождение артефактов; здесь не дублируются. Перед коммитом change —
|
||||
`openspec validate --strict`.
|
||||
|
||||
- Каждое `### Requirement` ОБЯЗАНО содержать литерал `SHALL` или `MUST` —
|
||||
иначе `openspec validate` падает.
|
||||
- Структурные заголовки и ключевые слова — английские (`### Requirement:`,
|
||||
`#### Scenario:`, `GIVEN/WHEN/THEN`, RFC 2119), остальной текст — русский.
|
||||
- `openspec validate --strict` перед коммитом change.
|
||||
|
||||
Ревью — два чекпоинта: профиль `design` на предложении (после design/specs, ДО
|
||||
кода) и ревью изменения после apply, до archive. Настройка конвейера под проект
|
||||
и журнал дефектов — [docs/review.md](docs/review.md).
|
||||
Ревью — два чекпоинта: ревью дизайна на предложении (после design/specs, ДО
|
||||
кода) и ревью изменения после apply, до archive. Состав обоих выбирается по
|
||||
метке задачи (`small` / `medium` / `large`), которую разметка ставит один раз
|
||||
после propose. Настройка конвейера под проект и журнал дефектов —
|
||||
[docs/review.md](docs/review.md).
|
||||
|
||||
## Документация
|
||||
|
||||
|
||||
Reference in New Issue
Block a user