закрыта задача read-api-wire-format
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
Урожай спринта поднимается `tasks.py list --tag sprint:2026-08-04` — это первая порция переоценки на сессии.
|
||||
|
||||
## Набор
|
||||
- [Форма провода маршрутов чтения](items/read-api-wire-format.md) — Переименование поля в internal/catalog меняет публичный контракт без касания httpapi, и держит это один байтовый тест
|
||||
- [Точки за период](items/read-api-points-period.md) — Точки лежат в витрине и наружу не отдаются: «вес за год» достаётся только sqlite3 на хосте
|
||||
- [Условный запрос по точкам](items/read-api-points-conditional.md) — Агент опрашивает по расписанию, а каждый повтор стоит полного чтения: на каталоге это 693 мс и +153 МиБ
|
||||
- [Свёртка по сетке](items/read-api-points-bucket.md) — «Шаги за неделю по дням» — базовый запрос трекера и игры, и сегодня его нечем задать
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# Форма провода маршрутов чтения
|
||||
|
||||
- **Секция:** ядро
|
||||
- **Зачем:** Переименование поля в 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` с
|
||||
записанным решением
|
||||
|
||||
## Рамки
|
||||
|
||||
Трогается только каталог и его транспорт, схема не трогается. Публичный контракт
|
||||
каталога при этом может измениться — потребителей у него сегодня нет, и это
|
||||
единственный момент, когда такая правка бесплатна.
|
||||
Reference in New Issue
Block a user