From 80349be2c9241b9bca832874dd210e813934704b Mon Sep 17 00:00:00 2001 From: Stream Date: Tue, 5 May 2026 23:40:01 +0300 Subject: [PATCH] auto-sync: 2026-05-05 23:40:01 --- memory/2026-05-05.md | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/memory/2026-05-05.md b/memory/2026-05-05.md index 548a147..82c5df5 100644 --- a/memory/2026-05-05.md +++ b/memory/2026-05-05.md @@ -27,3 +27,55 @@ - Web Share API требует HTTPS — на HTTP молча падает, даже на Android Chrome - Кастомные диалоги через DOM работают всегда, но Слава предпочёл простоту (только скачать) - Mouse drag: важно вешать mousemove/mouseup на `document`, а не на `list` — иначе drag ломается при выходе курсора за пределы элемента +# 2026-05-05 — Дневник + +## Enduro Trails — работа над прототипом + +### Кнопка «Поделиться» → «Скачать GPX» +- Слава попросил убрать кастомный диалог «Поделиться» (Telegram/WhatsApp) +- Оставить только скачивание GPX через `downloadGPX()` +- Иконка заменена на download-стрелку (стрелка вниз + линия) в том же стиле что и другие кнопки header +- HTML уже обновлён: `onclick="downloadGPX()"`, иконка download +- Из app.js удалены функции: `shareRoute`, `closeShareDialog`, `shareTelegram`, `shareWhatsApp`, `shareNative` +- Из app.css удалены стили: `.share-dialog`, `.sd-*`, `#share-dialog` + +### Drag-and-drop для точек маршрута +- Слава попросил добавить иконку «перетаскивания» (grip) в каждый wl-item +- Дев-агент добавил grip SVG (6 кружков) и touch-drag логику +- Логика вынесена в `_initWaypointDragHandles(list)` с общими функциями `startDrag/moveDrag/endDrag` +- **Проблема:** на десктопе не работало — дев сделал только touch-события +- **Фикс:** добавлены mouse-события (mousedown/mousemove/mouseup) с `document`-level listeners для корректного завершения drag за пределами списка + +### Баг: «Добавить точку» не работала в баре маршрутов +- Причина: `addWaypointMode()` не устанавливала `routeMode = true` +- При закрытом/свайпнутом sheet `routeMode` мог быть `false` +- Клик на карте проверяет `if (!routeMode) return` — и игнорировал добавление +- Фикс: в `addWaypointMode()` добавить `routeMode = true` перед установкой `addingWaypoint = true` + +### Расстояние по маршруту между точками +- Слава попросил показывать расстояние по маршруту (не по прямой) для каждого сегмента +- Бэкенд не возвращает `legs` — только общий `distance_m` +- Решение: функция `getRouteSegmentDistances()` — snap waypoints к геометрии маршрута, суммировать haversine по точкам геометрии +- Проблема 1: сумма сегментов не совпадала с `route.distance_m` из-за неточного snap +- Решение: масштабировать сегменты пропорционально чтобы сумма = `route.distance_m` +- Проблема 2: при смене варианта маршрута расстояния не обновлялись +- Фикс: добавить `renderWaypointsList()` в `selectRoute()` и `selectMiniRoute()` + +### Дублированные сообщения в Telegram +- Слава заметил что от меня приходят дублированные сообщения +- Анализ: `streaming.mode: "partial"` + возможный конфликт с block streaming +- Решение: переключить на `streaming.mode: "progress"` — статус во время генерации, финальный ответ одним сообщением +- Конфиг обновлён, hot-reload должен применить автоматически + +### voice-tts скилл — дублированные сообщения +- `send_voice.sh` пытался отправить через `openclaw message send` И через `MEDIA:` директиву одновременно +- Результат: в Telegram приходило сообщение с путём к файлу + голосовое +- Фикс: убрать блок `openclaw message send` из скрипта, оставить только генерацию OGG +- Доставка только через `MEDIA:` директиву в ответе ассистента + +## Технические заметки +- Web Share API требует HTTPS — на HTTP молча падает, даже на Android Chrome +- Кастомные диалоги через DOM работают всегда, но Слава предпочёл простоту (только скачать) +- Mouse drag: важно вешать mousemove/mouseup на `document`, а не на `list` — иначе drag ломается при выходе курсора за пределы элемента +- OSRM бэкенд не возвращает `legs` — только общий `distance_m`. Сегменты считаем на фронте через snap к геометрии +- `streaming.mode: "progress"` — лучший режим для Telegram: нет промежуточных сообщений, только финальный ответ