- каждая запись каталога задач получила тип вместо тега kind: и префикса
заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок
секций канонический
- поправлены протухшие факты: нереализованные маршруты Read API, MCP и
`healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию
диффа, периметр перестал дублировать security.md
- замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек
storage и parsing
- `GET /api/v1/metrics/{name}?from&to&layer` — ряд точек за период; конверт
объявляет слой, измеренный род, его применимость к отданному ряду и границу
окна измерения, а сам ряд собирается из одного слоя, выбранного по охвату
точек внутри периода
- use-case вынесен в `internal/points`, чтение — одним входом `store.ReadSeries`
под одной транзакцией; правило выбора слоя остаётся в домене и приходит в
хранилище колбэком
- `writeJSON` перестал экранировать HTML-символы и перестал глушить отказ
записи: дословность содержимого точки иначе не удерживается, а оборванное
тело уходило под видом успешного `200`
- доменные типы internal/catalog лишились json-тегов и MarshalJSON; типы
metricWire/layerWire/aggregationWire и перевод catalogWire живут в транспорте,
тело отказа тоже получило объявленный тип — байты ответа не изменились
- заведён сторож: обход графа типов ответа утверждает, что домен не доезжает до
сериализации, плюс требование json-тега на полях транспортных структур и
заведомо красные случаи к обоим правилам
- решение с ценой обеих сторон записано в architecture.md и ADR; шаг lint в
гейте получил свой кеш — общий на машину красил прогон находками из чужого
worktree
- свёртка спрашивает журнал, встречалось ли имя строго раньше по паре
(received_at, id), и пишет WARN с атрибутом uncovered_new; повторные молчат.
Признак выводится, а не хранится — реестр был бы второй копией факта
- добавлена подкоманда `healthlog uncovered`: перечень накопленного, чтение
только на чтение, экранированные имена и названные границы носителя
- синк документации: ADR о выводе новизны из журнала, две записи в журнал
дефектов, два правила промоутом в конвенции, терминал оператора назван
адресатом недоверенного входа
- байтовый порядок канонических форм остался тай-брейком только внутри одной
доставки: на живом корпусе он решал 98,8% спорных координат и системно хранил
меньшее значение, из-за чего step_count терял род и verify:archive был красным
- правило перестало быть коммутативным осознанно, поэтому порядок свёртки
приведён к журнальному: проход воркера прекращается на отложенной доставке,
а свёртка вне порядка журнала пишет WARN
- заведены счётчики PointsHeld и PointsErased — удержание полнотой и
единственное направление, в котором правило теряет содержание
- фазы сна, контекст пульса и имена тренировок попадают в реестр
`category_value` (миграция 00010): строка хранится дословно, выведенный код
лежит рядом отдельной записью, а не полем внутри точки
- словарь и синонимы кодов живут в бинаре (`internal/healthkit`); локаль из
`Accept-Language` сужает поиск, но в ключ реестра не входит — заголовков в
сыром архиве нет
- наблюдение входит в отпечаток витрины, выведенный код — нет: он производная
от словаря, а не от журнала
Миграция по записи «Версия 2» журнала канона: поля Дата и Источник в
docs/adr/template.md жирным, объявлено место под статус (- **Статус:**
заменено на ADR-… либо устарело), та же строка добавлена в «Соглашения»
docs/adr/README.md, docs/.pm.json переведён на canon 2.
Переносить статусы было не из чего: записей ADR в проекте пока нет, каталог
несёт только README и шаблон.
docs.py check зелёный, версия проекта сошлась с версией скрипта.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги
переименованы с транслита на английские, 85 ссылок поправлены
- conventions.md разобран в docs/conventions/, local-research.md — в
docs/research/, review-journal.md — в docs/review.md с разделом настройки
конвейера; заведены security.md, adr/ и .pm.json
- шаг docs.py check добавлен в task gate; поведение в architecture.md помечено
девятью маркерами долга, database.md получил настройки с числовым значением