Repeat analysis: sweep the hot-cell threshold and keep the most passes (out-and-back reps were lost when a twice-ridden approach inflated the reference)

This commit is contained in:
4aiman 2026-09-21 20:30:38 +03:00
commit 685151b76b
2 changed files with 111 additions and 110 deletions

View file

@ -9,8 +9,17 @@
- берём последние 7 дней. Корневой off-by-one в `getDailyFoodTotals` не трогал, чтобы не
сдвинуть график 30/90.
## #2 сегодняшние повторы не опознались (в работе - нужен телефон)
- Пользователь делал интервалы сегодня, «Разбор повторов» их не нашёл.
- Диагностика требует сегодняшнего трека (pull с телефона + прогон `detectRepeats`).
На момент правки #1 устройство было не подключено - жду телефон, тяну базу, смотрю,
почему не сработало (порог/длина/снос/структура).
## #2 сегодняшние повторы не опознались (исправлено)
- Трек 1790002321789 (out-and-back A(47.4915,40.0817)<->B(47.4917,40.1025), ~1.5км, 5 раз
туда-обратно). `detectRepeats` -> «не найдено».
- Диагностика: горячих ячеек полно (197 с >=3 входами, макс 10). Эталон (самый длинный проход)
при пороге горячей ячейки **2** раздувается до **2190м** - тянет разово/дважды накатанный
подъезд и развороты. Полный заезд 1585м покрывает лишь 72% этого эталона (<80%), поэтому
засчитывался лишь 1 проход. При пороге 3+ эталон сжимается до ядра **1585м** и находятся все 5.
- Причина глубже минусов порога: жадный порог 2 (нужен для «2 заездов») ломает эталон, когда
подъезд накатан 2 раза.
- Фикс: `detectRepeats` теперь ПЕРЕБИРАЕТ порог горячей ячейки от 2 до макс.входов и берёт тот,
что даёт БОЛЬШЕ проходов (при равенстве - длиннее участок). `minPasses` -> только финальный
порог числа проходов (`minReps`), развязан с порогом горячей ячейки. Вынесено в `detectAt(T)`.
- Проверка (харнесс): СЕГОДНЯ 5× 1590м [16.8,17.6,17.1,17.1,16.8]; 11сен 5×, 17сен 5×,
16сен(склеен) 5×; 5 обычных поездок - 0 ложных. ~0.9с/сессия на десктопе (перебор порогов).