Skip to content

Testing & verification

One place for “how do I check this didn’t break?” across every app. Run the relevant checks before every commit.

AppCommandNotes
Workers (Python)cd apps/workers && uv run pytest -qFull suite. Network-free — SearXNG/Nominatim/Gemini are faked in tests (unreachable in CI/sandbox).
Backend (NestJS)cd apps/backend && npx tsc --noEmitType-check. Piping to tail masks the exit code — check echo $?.
Web (Vite/React)cd apps/web && npx tsc --noEmit && npm run buildType-check + production build.
Mobile (Flutter)cd apps/mobile && fvm flutter analyzeStatic analysis. For new imports/const-eval, a real fvm flutter run/build is the authoritative check — the analyzer can miss const-evaluation errors.
  • 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.

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).

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.