Files
healthlog/docs/tasks/items/read-api-wire-format.md
T
av bd832337df tasks: задачи спринта раздроблены до восьми гранулярных
- конверт и точки разложены на форму провода, точки за период и условный
  запрос; свёртка — на сетку, порог неполного ведра и предел размера ответа;
  тренировки и записи разъехались на два независимых маршрута
- openapi-swagger разложена на спеку, гейт против расхождения и Swagger UI —
  все три вне набора, вместе с mcp-server
- набор спринта 2026-08-04 — весь HTTP-слой чтения, восемь задач
2026-08-04 14:21:57 +03:00

3.2 KiB

Форма провода маршрутов чтения

  • Секция: ядро
  • Зачем: Переименование поля в internal/catalog меняет публичный контракт без касания httpapi, и держит это один байтовый тест
  • Теги: goal:read-api, sprint:2026-08-04

Публичный контракт чтения перестаёт меняться от переименования поля в домене — либо потому, что доменные типы объявлены формой провода намеренно, либо потому, что между ними и транспортом появился DTO.

Сегодня типы internal/catalog сами несут json-теги, а internal/httpapi/catalog.go (66 строк) владеет только обёрткой: переименование поля в домене меняет публичный контракт без касания транспорта, и держит это один байтовый тест непустого ответа. Пока маршрут чтения был один и без потребителей, цена была нулевой; со следующей задачи образец копируют точки, тренировки, записи и MCP.

Мерджится первой из всей цели и трогает только уже живой каталог. Решение принимается до того, как его скопируют, — потом это будет не решение, а археология. Развилка не изобретается с нуля: как разделять доменные типы и форму провода, решено во множестве чужих проектов, и правило проекта требует начать с их разбора.

Критерии приёмки

  • решение записано в docs/architecture.md с названной ценой обеих сторон, а не только выбранной — оракул: глазами по разделу
  • переименование поля доменного типа либо не меняет байты ответа, либо меняет их намеренно, и тест утверждает это прямо, а не проверяет непустоту — оракул: тест на переименование
  • маршрут каталога приведён к решению, и следующий маршрут копирует образец, а не выбирает заново — оракул: гейт зелёный плюс сверка httpapi/catalog.go с записанным решением

Рамки

Трогается только каталог и его транспорт, схема не трогается. Публичный контракт каталога при этом может измениться — потребителей у него сегодня нет, и это единственный момент, когда такая правка бесплатна.