Files
healthlog/docs/adr/README.md
T
av 3d24248075 docs: документация приведена к канону av-dev-pm 4
- каждая запись каталога задач получила тип вместо тега kind: и префикса
  заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок
  секций канонический
- поправлены протухшие факты: нереализованные маршруты Read API, MCP и
  `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию
  диффа, периметр перестал дублировать security.md
- замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек
  storage и parsing
2026-08-05 19:09:35 +03:00

5.5 KiB

Журнал решений

Одна запись — одно решение. ADR это промоут поверх архивного design.md, а не второе сочинение: запись цитирует решение и ссылается на openspec/changes/archive/<id>/design.md.

Когда заводить

Верно одно из трёх:

  • дорогой откат — переделка стоит дороже переписывания одного файла;
  • намеренный отказ от очевидного подхода;
  • пересмотр прежнего решения — тогда у старой записи обязателен статус «заменено на».

Не заводить для рутины и для того, что видно из кода и git log.

Соглашения

  • Имя файла — ADR-ГГГГ-ММ-ДД-slug.md, слаг английский, дата — когда решение реально принято.
  • Записи неизменяемы: передумали — новая запись, старой ставится статус.
  • Активная запись статуса не имеет. Значений два: заменено на ADR-… и устарело; ставятся полем меты записи — - **Статус:** … рядом с датой и источником, а не абзацем в теле.

Записи

Новые сверху. Все шесть активны — статуса поэтому ни у одной нет.

  • ADR-2026-08-04-otvet-tochek-nesyot-rod-i-ego-primenimost — конверт точек несёт измеренный род, его применимость к отданному ряду и границу окна измерения; строка "aggregation": "sum" пересмотрена, поле applied отвергнуто как выводимое; род вместе с данными взят у Google Cloud Monitoring и CloudWatch, отдельный /metadata Prometheus отвергнут.
  • ADR-2026-08-04-sloy-vybiraetsya-po-ohvatu-tochek — «самый мелкий слой, покрывающий весь диапазон» пересмотрено: правило было неопределено на законном входе. Охват меряется метками точек, а не часами объектов, иначе период короче часа отдаёт пустой ряд при непустых данных; цена меры измерена (13.9 мс против 0.026 мс) и потребовала одного словаря слоёв.
  • ADR-2026-08-04-forma-provoda-prinadlezhit-transportu — публичный контракт чтения объявляет транспорт, а не домен; «доменные типы и есть форма провода» (wtf, Prometheus) отвергнуто фактом — поля store.Point не совпадают с обещанным проводом точек ни одним именем; apidiff как сторож отвергнут: смены json-тега он не видит вовсе.
  • ADR-2026-08-04-novizna-sekcii-vyvoditsya-iz-zhurnala — признак «секция встречена впервые» выводится запросом к журналу; реестр по образцу category_value отвергнут как вторая копия факта, с названным условием пересмотра — ретеншен архива.
  • ADR-2026-08-04-tie-break-po-poryadku-zhurnala — тай-брейк точек при равной полноте: побеждает пришедшая, то есть правило становится явной функцией порядка журнала; хранимая метка провенанса (LWW-Register) отвергнута по цене формата и миграции.
  • ADR-2026-08-03-kod-ryadom-so-strokoj-reestrom — код 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, а не переезд: адаптация раскладки содержания не сочиняет.