docs: канон документов поднят с версии 12 на 14

- `docs/.pm.json` переименован в `docs/.docs.json`, версия канона — 14
- ADR принимает записку разведки как источник решения наравне с архивным
  `design.md`
- заведён `tasks/.tasks.json`, а в описании гейта — шаги `tasks.py check` и
  `openspec.py check`
This commit is contained in:
av
2026-08-11 12:24:27 +03:00
parent faa1d7c699
commit 2161d7f38e
5 changed files with 17 additions and 11 deletions
+7 -6
View File
@@ -78,18 +78,19 @@ task gate # весь набор проверок разом
`origin/master`; переопределяется `task gate BASE=<rev>`. `origin/master`; переопределяется `task gate BASE=<rev>`.
- **Где логи шагов:** вывод команды, отдельного файла нет. - **Где логи шагов:** вывод команды, отдельного файла нет.
- **Что означает каждый исход:** ненулевой код любого шага роняет гейт. У - **Что означает каждый исход:** ненулевой код любого шага роняет гейт. У
`docs.py check` коды свои: 0 сошлось, 1 дрейф раскладки, 2 ошибка `docs.py check`, `tasks.py check` и `openspec.py check` словарь кодов общий:
употребления, 3 не корень проекта, 4 внутренний сбой. 0 сошлось, 1 дрейф, 2 ошибка употребления, 3 окружение (не корень проекта,
каталог не найден), 4 внутренний сбой.
- **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`, - **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`,
неотформатированный файл, находка `golangci-lint`, дрейф раскладки документов. неотформатированный файл, находка `golangci-lint`, дрейф раскладки документов,
Всё перечисленное проверяется машиной и потому не обсуждается. дрейф каталога задач, форма `openspec/config.yaml`. Машина проверяет всё
перечисленное, и это не обсуждается. Шаг, чей скрипт не найден, краснеет с
именем недостающего плагина, а не пропускается молча.
- **Чего в гейте намеренно нет и кто тогда обязан это гонять:** - **Чего в гейте намеренно нет и кто тогда обязан это гонять:**
- `gitleaks` — висит на pre-commit в `lefthook.yml` и смотрит только индекс - `gitleaks` — висит на pre-commit в `lefthook.yml` и смотрит только индекс
коммита. Полную историю никто не проверяет; коммита. Полную историю никто не проверяет;
- согласованность документов между собой и с кодом — её судят агенты, зовёт - согласованность документов между собой и с кодом — её судят агенты, зовёт
их скилл `av-dev-docs:healthcheck`, и звать его надо руками; их скилл `av-dev-docs:healthcheck`, и звать его надо руками;
- проверка каталога задач и формы `openspec/config.yaml` — соответствующих
плагинов в проекте нет, шагов в гейте нет, и не проверяет их **никто**;
- покрытие изменённых строк не считается ничем. - покрытие изменённых строк не считается ничем.
**Гейт на `master` сегодня красный, и это объявленный долг, а не поломка дня.** **Гейт на `master` сегодня красный, и это объявленный долг, а не поломка дня.**
+1 -1
View File
@@ -1,4 +1,4 @@
{ {
"canon": 12, "canon": 14,
"migrations": "migrations" "migrations": "migrations"
} }
+4 -3
View File
@@ -1,8 +1,9 @@
# Журнал решений # Журнал решений
Одна запись — одно решение. **ADR переносит решение из архивного `design.md`**, а Одна запись — одно решение. **ADR продвигает уже написанное решение, а не
не сочиняет его заново: запись цитирует решение и ссылается на сочиняет его заново**: запись цитирует решение и ссылается на источник —
`openspec/changes/archive/<id>/design.md`. `openspec/changes/archive/<id>/design.md`, а у решения, принятого разведкой без
изменения, на её записку.
## Когда заводить ## Когда заводить
+2 -1
View File
@@ -1,7 +1,8 @@
# Краткий заголовок решения # Краткий заголовок решения
- **Дата:** ГГГГ-ММ-ДД - **Дата:** ГГГГ-ММ-ДД
- **Источник:** openspec/changes/archive/<id>/design.md - **Источник:** openspec/changes/archive/<id>/design.md — либо записка разведки,
если решение принято без изменения
Статус ставится тем же полем и только при пересмотре: Статус ставится тем же полем и только при пересмотре:
`- **Статус:** заменено на ADR-…` либо `- **Статус:** устарело`. `- **Статус:** заменено на ADR-…` либо `- **Статус:** устарело`.
+3
View File
@@ -0,0 +1,3 @@
{
"tasks": 1
}