Files
rippr/docs/feedback
uhryniuk dfd3e24062 FB-11: serialize FileTileCache mutations and log tile fetch failures
Fixes a real race in FileTileCache where two overlapping put() calls
(the persistent background map and a freshly-opened Route Planner map
both fetching tiles at once) could interleave at the _saveManifest
await point and silently lose a tile from the on-disk manifest. All
mutating and reading operations now go through a single serialization
queue. Also logs the URL and cause of tile fetch failures in
CachedTileProvider before rethrowing, and adds a concurrency
regression test. On-device verification was not performed (no
adb/emulator access in this environment); see the ticket's Outcome
section.
2026-08-25 11:36:21 -05:00
..

Post-launch feedback tickets

Same shape as docs/ui-redesign/: one file per ticket, Goal · Context · Design · Implementation · Acceptance criteria · Tests · Risks · Out of scope, written before implementing, with an Outcome section appended after.

Source: docs/FEEDBACK.md — hands-on feedback after using the redesigned app. Turned into 9 tickets so far (5 from the first pass, 4 from a second round of feedback after FB-01..FB-05 shipped), each independently completable (self-contained enough for a fresh subagent with no prior context to implement correctly).

The tickets

# Ticket Size Depends on Status
FB-01 Live, street-level map everywhere L — Done
FB-02 Hide the idle Speed panel until recording starts S — Done
FB-03 Grid-snapped HUD widgets with auto-fit text L — Done
FB-04 Fix Route Planner's map failing to render + zoom M FB-01 (shared zoom constant) Done
FB-05 Closed-loop routes in Route Planner M FB-04 (same file) Done
FB-06 Map always pannable/zoomable, with a recenter button M — Done
FB-07 Route Planner opens on Null Island instead of your real location S/M FB-01 (ambient location provider) Done
FB-08 HUD widgets reflow to fill the gap when one is hidden M — Done
FB-09 HUD default sizing follows the title, value adapts L FB-08 (same files) Done

Dependencies / dispatch order

Wave 1 (parallel): FB-01, FB-02, FB-03
Wave 2 (after Wave 1 lands): FB-04 — reuses FB-01's ambientZoom constant
Wave 3 (after Wave 2 lands): FB-05 — heavily edits the same file FB-04 just touched

Wave 4 (parallel): FB-06, FB-07, FB-08 — no file overlap between these three
Wave 5 (after Wave 4 lands): FB-09 — heavily edits the same files FB-08 just touched

FB-02 and FB-03 both touch lib/src/ui/record/record_screen.dart, but disjoint regions (the idle-state Column vs. _HudMetricValue) — low conflict risk.

Working method, per ticket

  1. Implement against the ticket's own Implementation section.
  2. flutter analyze clean, flutter test green — count must not regress (374 passing before this batch starts).
  3. Outcome section appended to the ticket file: what shipped, deviations, test counts.
  4. Commit, status flipped to Done in both the ticket file and this table.

Android-emulator verification is best-effort only for this batch — lean on widget tests as the primary bar; don't get stuck fighting emulator flakiness.