Files
yaris-obd/BUGS.md
T

127 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# yaris-obd Bug Tracker
Standalone bug/issue tracker. One `## BUG-XX` per issue. Numbering sequential.
**Status**: `OPEN` → `IN PROGRESS` → `CLOSED` (with commit ref + verification).
When CLOSED, move the entire entry to Resolved — don't duplicate.
---
## Open bugs
### BUG-01 — WiFi/hotspot unreachable from phone while cell data is on
- **Status**: `CLOSED` 2026-08-11
- **Fix**: Dual-radio setup — wlan0 is permanent AP at 10.42.0.1 (SSID "yaris 911",
password "yaris911!"), wlan1 handles internet uplink only. `yaris_uplink.py` never
touches wlan0. Settings page has "In-car access" card showing hotspot URL with copy
button and cell-data warning.
- **Verification**: Tested on both iOS and Android 2026-08-11. Both connect to AP,
`yaris.local` resolves and loads the dashboard. AP stays up with cell data active.
---
### BUG-02 — Micro-USB power port on the Pi is physically damaged
- **Status**: `OPEN`
- **Severity**: Hardware
- **Area**: Hardware / power
- **Phase**: Phase 26
- **Symptom**: Pi's micro-USB 5V connector is worn — unreliable under vibration.
- **Fix scope**: Owner hard-wires 5V/GND to GPIO header (pins 2/4 for 5V).
---
### BUG-06 — Server timestamps are shifted (naive local time stored as UTC)
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `7ce2a1e` (upload fix), manual migration on server
- **Fix**:
1. New `_to_tz_aware()` helper in `app_upload.py` converts naive SQLite
timestamps to timezone-aware ISO strings before upload (e.g.,
`2026-08-10 19:27:30` → `2026-08-10T19:27:30-04:00`). Already-aware
timestamps pass through unchanged.
2. One-time SQL migration on the Unraid server shifted all existing
`tracking_points.recorded_at` and `trips.start_time`/`end_time` by +4
hours (EDT), cleared deleted-trip markers, and recomputed all trips.
Result: 3593 tracking rows and 43 trips corrected.
- **Verification**: Server trip history now shows Aug 10 trips at 7:27 PM
and 7:58 PM (was 3:27 PM / 3:58 PM). Confirmed 2026-08-11.
---
### BUG-12 — Dashboard OBD shows "—" while Status page shows correct OBD state
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `91281b1`
- **Symptom**: Dashboard OBD card showed "—" (blank) even though the Status
page correctly reported adapter present at /dev/ttyUSB0 (disconnected from car).
- **Root cause**: Dashboard relied solely on Socket.IO `obd_status` events. If
the page loaded after the initial event fired, the card stayed at the HTML
default. Status page queried `_obd_status()` directly.
- **Fix**: Added `/api/obd/status` endpoint. Dashboard calls `refreshObdStatus()`
on load + every 15s. Socket events still update in real-time.
- **Side fix**: `renderGpsStatus()` crashed on `status.latitude.toFixed` because
the API returns lat/lon as strings — fixed with `Number()` wrapper.
- **Verification**: Dashboard shows "Disconnected" matching Status page. GPS no
longer crashes. Confirmed on live Pi 2026-08-11.
---
## Resolved
### BUG-03 — DTC/MIL codes never persisted
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `e2f2314`
- **Fix**: `save_dtc_state()` persists MIL+codes each poll. `/api/dtc` falls back to
`get_persisted_dtc_state()` when OBD offline. Cleared codes tracked via IS_SET timestamps.
- **Verification**: Deployed to Pi, `/api/dtc` returns persisted snapshot, stats show `active_dtc: 0`.
### BUG-04 — Server merges two trips into one
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `96fb897`
- **Fix**: Replaced time-gap splitting with Pi's motion-aware logic: OBD > 1 km/h primary,
GPS >= 8m × 3 consecutive fallback, 5-min inactivity gap.
- **Verification**: Server trips cleared + recomputed. 17 trips on both Pi and server.
### BUG-05 — Server route replay speed_source always "gps"
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `e2f2314`
- **Fix**: `"obd" if speed > 0 else "gps"` matching Pi logic.
- **Verification**: Docker rebuild, `/health` OK LAN + Cloudflare.
### BUG-11 — Dashboard GPS shows "Stale fix" while Status shows "Live fix"
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `9733036`
- **Fix**: `renderGpsStatus()` now reads `status.latitude`/`status.longitude` from
the `/api/gps/status` response (not just socket events). Status page now uses the
same 30s staleness threshold (`fix_age_seconds > 30` → "Stale fix") instead of
calling any fix "Live" regardless of age.
- **Verification**: Deployed to Pi, dashboard GPS card now shows lat/lon coordinates
even when fix is stale. Both pages agree on fix status.
### BUG-07 — Trip replay on portal sometimes does nothing
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `fa93384`
- **Fix**: Full rewrite of `static/js/history.js`: unified AbortController cancels fetch
+ all downstream rendering on trip switch; 300ms debounce prevents double-tap stacking;
loading spinner on map + `.table-active` row highlight give clear feedback; geocode
preload starts immediately before map rendering so cache is warm for the scrubber;
`signal.aborted` guards after every async step (route build, fitBounds, timeline init).
- **Verification**: Deployed to Pi and server. Rapid trip-switching no longer freezes.
Verified on both platforms 2026-08-11.
### BUG-08 — No trip deletion on local Pi
- **Status**: `CLOSED` 2026-08-11
- **Commit**: `c5c478b`
- **Fix**: `deletable` macro, `window.confirmDelete`, `DELETE /api/trip/<id>`, configurable
`data-delete-url` in shared `history.js`. Raw tracking preserved.
- **Verification**: Trip 1967 deleted (18→17 trips), 2028 tracking rows preserved.
### BUG-09 — Server trip scrubber geocoding is slow
- **Status**: `CLOSED` 2026-08-11
- **Fix**: `preloadGeocodes()` batch-fetches all unique coords (concurrency 4) on trip load.
`geocodePoint()` checks in-memory cache first.
- **Verification**: `preloadGeocodes` present in history.js on both Pi and server Docker container.
### BUG-10 — GPS-only false trips when car not connected
- **Status**: `CLOSED` 2026-08-11
- **Fix**: `_car_ever_connected` flag in `app_obd.py`. `build_trip_summaries()` returns
empty list when car was never connected.
- **Verification**: Pi bench-test shows 0 trips. No OBD = no GPS-only trips.