UAT seed reproducibility fix for route optimization (§4.16). No live geocoder
(UAT has no Google Maps key; provider is nearest_neighbor) — coordinates are
hand-picked Seattle-metro fixtures.
- seedUatRouteCohort(): 12 fixed-id clients/pets/appointments for uat-groomer on
fixed date 2026-09-15. 10 pre-geocoded (multi-stop optimized route) + 2
intentionally un-geocoded (skip-and-surface path, TC-API-16.4). Idempotent:
clients/pets/appointments upserted by deterministic UUID; skips cleanly when
uat-groomer is absent (prod/demo).
- UAT receptionist: standing `uat-receptionist@groombook.dev` staff record
(role=receptionist) + Better-Auth credential from SEED_UAT_RECEPTIONIST_PASSWORD,
so the route 403 path (TC-API-16.9) is reproducible without a hand-built session.
- UAT_PLAYBOOK §4.16: replace manual-PATCH/geocoding pre-condition with the
seeded cohort + receptionist.
The SEED_UAT_RECEPTIONIST_PASSWORD secret/env wiring in groombook/infra is a
separate change; the seed degrades gracefully (warn + skip) without it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>