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>`.
- **Где логи шагов:** вывод команды, отдельного файла нет.
- **Что означает каждый исход:** ненулевой код любого шага роняет гейт. У
`docs.py check` коды свои: 0 сошлось, 1 дрейф раскладки, 2 ошибка
употребления, 3 не корень проекта, 4 внутренний сбой.
`docs.py check`, `tasks.py check` и `openspec.py check` словарь кодов общий:
0 сошлось, 1 дрейф, 2 ошибка употребления, 3 окружение (не корень проекта,
каталог не найден), 4 внутренний сбой.
- **Что красит безусловно и почему:** отказ сборки, тестов, `go vet`,
неотформатированный файл, находка `golangci-lint`, дрейф раскладки документов.
Всё перечисленное проверяется машиной и потому не обсуждается.
неотформатированный файл, находка `golangci-lint`, дрейф раскладки документов,
дрейф каталога задач, форма `openspec/config.yaml`. Машина проверяет всё
перечисленное, и это не обсуждается. Шаг, чей скрипт не найден, краснеет с
именем недостающего плагина, а не пропускается молча.
- **Чего в гейте намеренно нет и кто тогда обязан это гонять:**
- `gitleaks` — висит на pre-commit в `lefthook.yml` и смотрит только индекс
коммита. Полную историю никто не проверяет;
- согласованность документов между собой и с кодом — её судят агенты, зовёт
их скилл `av-dev-docs:healthcheck`, и звать его надо руками;
- проверка каталога задач и формы `openspec/config.yaml` — соответствующих
плагинов в проекте нет, шагов в гейте нет, и не проверяет их **никто**;
- покрытие изменённых строк не считается ничем.
**Гейт на `master` сегодня красный, и это объявленный долг, а не поломка дня.**
+1 -1
View File
@@ -1,4 +1,4 @@
{
"canon": 12,
"canon": 14,
"migrations": "migrations"
}
+4 -3
View File
@@ -1,8 +1,9 @@
# Журнал решений
Одна запись — одно решение. **ADR переносит решение из архивного `design.md`**, а
не сочиняет его заново: запись цитирует решение и ссылается на
`openspec/changes/archive/<id>/design.md`.
Одна запись — одно решение. **ADR продвигает уже написанное решение, а не
сочиняет его заново**: запись цитирует решение и ссылается на источник —
`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-…` либо `- **Статус:** устарело`.
+3
View File
@@ -0,0 +1,3 @@
{
"tasks": 1
}