- выбор → поимённое подтверждение → отчёт: пачка до 20 загрузок, гарды входа на обеих границах, потолок времени и остановка после трёх подряд отказов внешнего сервиса - допуск полного удаления сведён в единую точку store.State.CanDelete() — worker, страница загрузки и Telegram больше не держат своих перечней
5.1 KiB
5.1 KiB
Журнал решений
Одна запись — одно решение. ADR это промоут поверх архивного design.md,
а не второе сочинение: запись цитирует решение и ссылается на
openspec/changes/archive/<id>/design.md.
Главная ценность записи — сохранить почему: намерение и причинность. Это важнее аккуратности оформления и полноты остальных секций.
Когда заводить
Верно одно из трёх:
- дорогой откат — переделка стоит дороже переписывания одного файла;
- намеренный отказ от очевидного подхода;
- пересмотр прежнего решения — тогда у старой записи обязателен статус «заменено на».
Не заводить для рутины и для того, что видно из кода и git log.
Соглашения
- Имя файла —
ADR-ГГГГ-ММ-ДД-slug.md, слаг английский, дата — когда решение реально принято. Идентификатор записи — имя файла без.md; несколько записей за один день различаются слагом. - Заголовок в файле —
# Человеческий заголовок, без даты и id: они в имени файла и в поле меты. - Секция «Рассмотренные варианты» опциональна: оставляй, только если альтернативы реально рассматривались.
- Записи неизменяемы: передумали — новая запись, старой ставится статус.
- Активная запись статуса не имеет. Значений два:
заменено на ADR-…иустарело; ставятся полем меты записи —- **Статус:** …рядом с датой и источником, а не абзацем в теле. - Замена: в новой записи — строка «Заменяет ADR-…», в старой — поле статуса, тело не трогаем (это часть истории), в таблице ниже правится статус.
Записи
Новые сверху.