diff --git a/docs/backlog/README.md b/docs/backlog/README.md index c55aa7d..407eebf 100644 --- a/docs/backlog/README.md +++ b/docs/backlog/README.md @@ -19,9 +19,9 @@ ## блокеры - [Тай-брейк при равной полноте точек](taj-brejk-pri-ravnoj-polnote.md) — Сегодняшний порядок канонических форм берёт меньшее значение в 96% случаев — для накопительных это систематический недосчёт -- [Цена первого читающего маршрута: память, WAL и повторный опрос](cena-chitayushchego-marshruta.md) — Один запрос каталога способен выесть память процесса и раздуть WAL — а OOM здесь стоит доставок, которых телефон не перешлёт ## высокий +- [Цена первого читающего маршрута: память, WAL и повторный опрос](cena-chitayushchego-marshruta.md) — Решено: чекпойнт по таймеру плюс ETag по data_version. Берётся перед Read API — тот строится поверх этой машинерии - [Read API: точки, выбор слоя, свёртка по сетке](read-api-tochki.md) — Данные видны только через sqlite на хосте — ни один из трёх потребителей ничего прочитать не может - [OpenAPI-спека и Swagger UI](openapi-swagger.md) — Потребителей три и один из них агент — контракт должен читаться машиной, а не пересказываться в чате - [MCP-сервер поверх Read API](mcp-server.md) — Агент-медик — первый заказчик проекта, а подключить его сейчас нечем diff --git a/docs/backlog/cena-chitayushchego-marshruta.md b/docs/backlog/cena-chitayushchego-marshruta.md index 9bc1ae7..354b7f6 100644 --- a/docs/backlog/cena-chitayushchego-marshruta.md +++ b/docs/backlog/cena-chitayushchego-marshruta.md @@ -1,6 +1,21 @@ # Цена первого читающего маршрута: память, WAL и повторный опрос -**Приоритет:** блокеры +**Приоритет:** высокий + +**Решение принято 2026-08-02: вариант (г) плюс (в), именно в таком порядке.** +Разбирается без владельца: контракт хранения не меняется, данные не трогаются, +а обе части — общепринятая практика, а не собственный дизайн. Чекпойнт по +таймеру закрывает единственное проявление, которое ломает приём (диск), и стоит +одной горутины; `ETag` по `PRAGMA data_version` — один запрос к базе, снимает и +повтор, и большую часть читающих транзакций, не заводя кеша ответа. + +Вариант (а) — предел и дедлайн маршрута — **не отвергнут, а отложен** до +[Read API точек](read-api-tochki.md): там предел размера ответа всё равно +проектируется, и делать его дважды не нужно. Вариант (б) не берём, пока +счётчик не заговорит. Вариант (д) — последним, если (в) окажется мало. + +Задача берётся **перед** Read API: тот строится поверх этой машинерии. +Ниже — исходная постановка блокера, она же ТЗ. ## Что решить