Testing & verification
One place for “how do I check this didn’t break?” across every app. Run the relevant checks before every commit.
Per-app checks
Section titled “Per-app checks”| App | Command | Notes |
|---|---|---|
| Workers (Python) | cd apps/workers && uv run pytest -q | Full suite. Network-free — SearXNG/Nominatim/Gemini are faked in tests (unreachable in CI/sandbox). |
| Backend (NestJS) | cd apps/backend && npx tsc --noEmit | Type-check. Piping to tail masks the exit code — check echo $?. |
| Web (Vite/React) | cd apps/web && npx tsc --noEmit && npm run build | Type-check + production build. |
| Mobile (Flutter) | cd apps/mobile && fvm flutter analyze | Static analysis. For new imports/const-eval, a real fvm flutter run/build is the authoritative check — the analyzer can miss const-evaluation errors. |
Philosophy
Section titled “Philosophy”- Bug fixes: Red → Green. Write a failing test that reproduces the bug, then fix it. For config/docs/scaffolding/wiring, use focused verification appropriate to the changed surface.
- Never mark work done without focused proof — tests, a type-check, or a live/visual check after deploy.
- Worker enrichment is unit-tested with fakes (no network): geocode, media, and chat web-search all run against fake clients so the suite is deterministic and offline.
Mobile end-to-end (Maestro)
Section titled “Mobile end-to-end (Maestro)”Device/sim flows live in .maestro/
(login, trips, wizard, plan_day, planner, reel_import, drafts,
onboarding, guide_and_map_actions). They drive a booted simulator via the
Maestro runner.
Tips that bite on iOS:
- Native platform views (the OSM/MapLibre map,
CNTabBar) are tapped via accessibility text, not widget ids. - Icon-only nav items are matched by their SF-symbol / semantic label
(e.g.
show map,bookmark,sparkle).
Live / prod verification
Section titled “Live / prod verification”Some paths can’t be exercised locally (SearXNG is internal-only, Nominatim is blocked in the sandbox, the web UI is behind a cloudflared tunnel). Verify those against prod after deploy — see Deploy for the reliable readiness signals and the JWT auth recipe for live API checks.