baldav/docs/session-logs/2026-09-22_gapfill-order-fix.md

2.3 KiB
Raw Blame History

Сессия 2026-09-22 (2) - достройка пропусков уходила «в начало»

По утверждённому плану ~/.claude/plans/merry-discovering-dream.md.

Симптом

Достройка GPS-пропусков (🧩) показывала превью нормально, но сохранённый трек тянул прямую линию от старта к месту пропуска («возврат в начало»). На любом (недавнем) треке.

Корень

saveGapFill (db.js) ставит достроенным точкам seq = lastSeq (seq последней РЕАЛЬНОЙ точки перед пропуском). У склеенных/разрезанных треков реальные точки имеют seq = NULL (склейка/ разрез специально обнуляют seq -> порядок по ts). Тогда lastSeq остаётся 0, все достроенные точки получают seq=0, а getGpsPoints (ORDER BY COALESCE(seq,999999), ts) ставит их ПЕРЕД реальными (NULL→999999) -> прямая к началу. Подтверждено: единственный NULL-seq трек в БД - склеенный 16.09; недавние треки пользователя склеены.

Фикс

saveGapFill: после вставки достроенных точек - пере-нумерация seq ВСЕЙ сессии по ts (читаю id ORDER BY ts,id, seq=порядковый номер, пакетный CASE id WHEN.. чанками по 300, паттерн из saveSmoothedTrack). Теперь getGpsPoints всегда в порядке ts независимо от исходного seq (плотный/NULL/смешанный). Для плотных треков - no-op, для склеенных - чинит.

Проверка

  • SQL: у склеенного 16.09 реальные точки seq=NULL (seq=0 достроенной встала бы перед ними) - корень подтверждён.
  • Десктоп (Xvfb): подсадка склеенного трека -> 🧩 -> Сохранить -> переоткрыть: без прямой к началу. Затем сборка + телефон, вытянуть сегодняшний трек.