# Production runbook ## Deploy gate 1. Run `pnpm install --frozen-lockfile`, `pnpm check`, `pnpm build`, and `pnpm test:e2e`. 2. Build the image with immutable commit and release tags. 3. Deploy to staging, then run `SMOKE_BASE_URL=https://staging.example.com pnpm smoke:test`. 4. Verify browser error rate, login/payment failure rate, WebSocket disconnects, and p75 LCP/INP/CLS. 5. Roll out 5% → 25% → 100%; stop when a threshold below is crossed. ## Alert thresholds - Browser/API error rate > 2% for 5 minutes. - Login or payment failure rate > 3% for 5 minutes. - WebSocket disconnect rate > 5% for 10 minutes. - Mobile p75 LCP > 2.5s, INP > 200ms, or CLS > 0.1 for 30 minutes. ## Rollback 1. Route traffic to the previous immutable image tag. 2. Run `pnpm smoke:test` against production. 3. Confirm login, discovery, booking, payment callback, and health metrics. 4. Record incident owner, release tag, start/end time, and follow-up deadline. Rollback and device-push drills must be signed off in staging before public rollout.