- `docs/.pm.json` переименован в `docs/.docs.json`, версия канона — 14 - ADR принимает записку разведки как источник решения наравне с архивным `design.md` - заведён `tasks/.tasks.json`, а в описании гейта — шаги `tasks.py check` и `openspec.py check`
41 lines
2.5 KiB
Markdown
41 lines
2.5 KiB
Markdown
# Журнал решений
|
||
|
||
Одна запись — одно решение. **ADR продвигает уже написанное решение, а не
|
||
сочиняет его заново**: запись цитирует решение и ссылается на источник —
|
||
`openspec/changes/archive/<id>/design.md`, а у решения, принятого разведкой без
|
||
изменения, на её записку.
|
||
|
||
## Когда заводить
|
||
|
||
Верно одно из трёх:
|
||
|
||
- **дорогой откат** — переделка стоит дороже переписывания одного файла;
|
||
- **намеренный отказ** от очевидного подхода;
|
||
- **пересмотр прежнего решения** — тогда у старой записи обязателен статус
|
||
«заменено на».
|
||
|
||
Не заводить для рутины и для того, что видно из кода и `git log`.
|
||
|
||
## Соглашения
|
||
|
||
- Имя файла — `ADR-ГГГГ-ММ-ДД-slug.md`, дата — когда решение реально принято.
|
||
Слаг **английский по сути, а не транслитом**: `queue-as-table`, не
|
||
`ochered-tablicej`. Форму имени и слаг проверяет `docs.py check`.
|
||
- Записи неизменяемы: передумали — новая запись, старой ставится статус.
|
||
- Активная запись статуса не имеет. Значений два: `заменено на ADR-…` и
|
||
`устарело`; ставятся полем меты записи — `- **Статус:** …` рядом с датой и
|
||
источником, а не абзацем в теле.
|
||
|
||
## Записи
|
||
|
||
Новые сверху.
|
||
|
||
| Дата | Запись | Статус |
|
||
| --- | --- | --- |
|
||
| 2026-08-11 | [Проверки не зовут внешних программ](ADR-2026-08-11-stub-adapters-in-tests.md) | |
|
||
|
||
Решения, принятые до заведения канона 2026-08-10, источника в архиве изменений
|
||
не имеют — сочинять их задним числом правило запрещает. Ближайшие кандидаты
|
||
назовёт первое же изменение, которое тронет хранилище или вход: замена SQLite на
|
||
PocketBase и вход через OIDC оба подпадают под критерий «дорогой откат».
|