tasks: задачи спринта раздроблены до восьми гранулярных
- конверт и точки разложены на форму провода, точки за период и условный запрос; свёртка — на сетку, порог неполного ведра и предел размера ответа; тренировки и записи разъехались на два независимых маршрута - openapi-swagger разложена на спеку, гейт против расхождения и Swagger UI — все три вне набора, вместе с mcp-server - набор спринта 2026-08-04 — весь HTTP-слой чтения, восемь задач
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# Условный запрос по точкам
|
||||
|
||||
- **Секция:** ядро
|
||||
- **Зачем:** Агент опрашивает по расписанию, а каждый повтор стоит полного чтения: на каталоге это 693 мс и +153 МиБ
|
||||
- **Теги:** goal:read-api, sprint:2026-08-04
|
||||
|
||||
Повторный опрос точек с той же меткой стоит `304` вместо полного чтения, и метка
|
||||
не может ответить на другой набор данных.
|
||||
|
||||
Машинерия готова и берётся, а не пишется заново: `store.VersionedRead` держит
|
||||
правило «версией, снятой после чтения, не подписывать», `internal/httpapi/conditional.go`
|
||||
разбирает `If-None-Match` и отдаёт `304`. Новое здесь ровно одно — **область
|
||||
действия метки**. У каталога ответ есть функция версии витрины; у точек он ещё и
|
||||
функция параметров запроса, поэтому `etag(scope, version)` требует их
|
||||
канонизированной формы. Ошибиться тут значит ответить `304` на другой набор
|
||||
данных — молча и без следов.
|
||||
|
||||
Цена, которую это снимает, измерена на каталоге: 693 мс и +153 МиБ живой кучи на
|
||||
враждебном запросе. Агент опрашивает по расписанию, и без условного запроса
|
||||
каждый его повтор стоит полного чтения.
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
- повторный запрос с `If-None-Match` при неизменной витрине даёт `304` — оракул:
|
||||
тест
|
||||
- запрос, отличающийся любым параметром по очереди (метрика, окно, слой), при
|
||||
той же версии витрины даёт `200` и другое тело — оракул: тест, перебирающий
|
||||
параметры по одному
|
||||
- параметры, различающиеся только формой записи (порядок, регистр, эквивалентная
|
||||
запись времени), дают одну и ту же метку — оракул: тест на канонизации
|
||||
|
||||
## Рамки
|
||||
|
||||
Схема не трогается, данные только читаются. Берётся после точек за период.
|
||||
|
||||
Связано: `docs/architecture.md` → «Условный запрос».
|
||||
Reference in New Issue
Block a user