- доменные типы internal/catalog лишились json-тегов и MarshalJSON; типы metricWire/layerWire/aggregationWire и перевод catalogWire живут в транспорте, тело отказа тоже получило объявленный тип — байты ответа не изменились - заведён сторож: обход графа типов ответа утверждает, что домен не доезжает до сериализации, плюс требование json-тега на полях транспортных структур и заведомо красные случаи к обоим правилам - решение с ценой обеих сторон записано в architecture.md и ADR; шаг lint в гейте получил свой кеш — общий на машину красил прогон находками из чужого worktree
60 lines
4.2 KiB
Markdown
60 lines
4.2 KiB
Markdown
# Журнал решений
|
||
|
||
Одна запись — одно решение. **ADR это промоут поверх архивного `design.md`**,
|
||
а не второе сочинение: запись цитирует решение и ссылается на
|
||
`openspec/changes/archive/<id>/design.md`.
|
||
|
||
## Когда заводить
|
||
|
||
Верно одно из трёх:
|
||
|
||
<!-- копия: adr-когда-заводить из av-dev-pm/skills/canon/references/canon.md -->
|
||
- **дорогой откат** — переделка стоит дороже переписывания одного файла;
|
||
- **намеренный отказ** от очевидного подхода;
|
||
- **пересмотр прежнего решения** — тогда у старой записи обязателен статус
|
||
«заменено на».
|
||
<!-- /копия: adr-когда-заводить -->
|
||
|
||
Не заводить для рутины и для того, что видно из кода и `git log`.
|
||
|
||
## Соглашения
|
||
|
||
- Имя файла — `ADR-ГГГГ-ММ-ДД-slug.md`, слаг английский, дата — когда решение
|
||
реально принято.
|
||
- Записи неизменяемы: передумали — новая запись, старой ставится статус.
|
||
- Активная запись статуса не имеет. Значений два: `заменено на ADR-…` и
|
||
`устарело`; ставятся полем меты записи — `- **Статус:** …` рядом с датой и
|
||
источником, а не абзацем в теле.
|
||
|
||
## Записи
|
||
|
||
Новые сверху.
|
||
|
||
| Дата | Запись | Статус |
|
||
| --- | --- | --- |
|
||
|
||
- [ADR-2026-08-04-forma-provoda-prinadlezhit-transportu](ADR-2026-08-04-forma-provoda-prinadlezhit-transportu.md)
|
||
— публичный контракт чтения объявляет транспорт, а не домен; «доменные типы и
|
||
есть форма провода» (`wtf`, Prometheus) отвергнуто фактом — поля `store.Point`
|
||
не совпадают с обещанным проводом точек ни одним именем; `apidiff` как сторож
|
||
отвергнут: смены `json`-тега он не видит вовсе.
|
||
- [ADR-2026-08-04-novizna-sekcii-vyvoditsya-iz-zhurnala](ADR-2026-08-04-novizna-sekcii-vyvoditsya-iz-zhurnala.md)
|
||
— признак «секция встречена впервые» выводится запросом к журналу; реестр по
|
||
образцу `category_value` отвергнут как вторая копия факта, с названным
|
||
условием пересмотра — ретеншен архива.
|
||
- [ADR-2026-08-04-tie-break-po-poryadku-zhurnala](ADR-2026-08-04-tie-break-po-poryadku-zhurnala.md)
|
||
— тай-брейк точек при равной полноте: побеждает пришедшая, то есть правило
|
||
становится явной функцией порядка журнала; хранимая метка провенанса
|
||
(LWW-Register) отвергнута по цене формата и миграции.
|
||
- [ADR-2026-08-03-kod-ryadom-so-strokoj-reestrom](ADR-2026-08-03-kod-ryadom-so-strokoj-reestrom.md)
|
||
— код HealthKit кладётся реестром рядом со строкой, а не полем внутри точки;
|
||
словарь живёт в бинаре, выведенный код в отпечаток витрины не входит.
|
||
|
||
Сырьё для промоута накоплено — архивные изменения в
|
||
`openspec/changes/archive/`, из них решения с дорогим откатом и намеренные
|
||
отказы есть как минимум в `2026-08-01-polnota-tochki-mnozhestvom-klyuchey`
|
||
(идентичность точки и тай-брейк), `2026-08-02-reindex-iz-arhiva` (подмену базы
|
||
делает человек) и `2026-08-02-cena-chitayushchego-marshruta` (чекпойнт WAL по
|
||
таймеру). Промоут делает скилл `av-dev-pm:docs`, а не переезд: адаптация
|
||
раскладки содержания не сочиняет.
|