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

39 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Форма провода маршрутов чтения
- **Секция:** ядро
- **Зачем:** Переименование поля в 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` с
записанным решением
## Рамки
Трогается только каталог и его транспорт, схема не трогается. Публичный контракт
каталога при этом может измениться — потребителей у него сегодня нет, и это
единственный момент, когда такая правка бесплатна.