diff --git a/.planning/phases/08-mobile-pwa/08-VALIDATION.md b/.planning/phases/08-mobile-pwa/08-VALIDATION.md new file mode 100644 index 0000000..0efc7a8 --- /dev/null +++ b/.planning/phases/08-mobile-pwa/08-VALIDATION.md @@ -0,0 +1,85 @@ +--- +phase: 8 +slug: mobile-pwa +status: draft +nyquist_compliant: false +wave_0_complete: false +created: 2026-03-26 +--- + +# Phase 8 — Validation Strategy + +> Per-phase validation contract for feedback sampling during execution. + +--- + +## Test Infrastructure + +| Property | Value | +|----------|-------| +| **Framework** | ESLint + TypeScript strict + Next.js build (existing) | +| **Config file** | `eslint.config.mjs`, `tsconfig.json` | +| **Quick run command** | `cd packages/portal && npm run lint` | +| **Full suite command** | `cd packages/portal && npm run build` | +| **Estimated runtime** | ~45 seconds | + +--- + +## Sampling Rate + +- **After every task commit:** Run `npm run lint` in packages/portal +- **After every plan wave:** Run `npm run build` in packages/portal +- **Before `/gsd:verify-work`:** Full build must pass + Lighthouse PWA audit score >= 90 +- **Max feedback latency:** 45 seconds + +--- + +## Per-Task Verification Map + +| Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status | +|---------|------|------|-------------|-----------|-------------------|-------------|--------| +| 08-xx | 01 | 0 | MOB-04 | build | `npx next build` | ✅ | ⬜ pending | +| 08-xx | 02 | 1 | MOB-01,02 | build | `npx next build` | ✅ | ⬜ pending | +| 08-xx | 03 | 1 | MOB-03 | build | `npx next build` | ✅ | ⬜ pending | +| 08-xx | 04 | 2 | MOB-04,05 | build | `npx next build` | ✅ | ⬜ pending | +| 08-xx | 05 | 2 | MOB-06 | build | `npx next build` | ✅ | ⬜ pending | + +*Status: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky* + +--- + +## Wave 0 Requirements + +- [ ] `public/icon-192.png` — K monogram icon (192x192) +- [ ] `public/icon-512.png` — K monogram icon (512x512) +- [ ] `public/icon-maskable-192.png` — Maskable variant with safe-zone padding +- [ ] `public/apple-touch-icon.png` — iOS home screen icon (180x180) +- [ ] `public/badge-72.png` — Notification badge (72x72, monochrome) +- [ ] VAPID keys generated and added to `.env` +- [ ] `npm install @serwist/next serwist web-push idb` + `npm install -D @types/web-push` + +--- + +## Manual-Only Verifications + +| Behavior | Requirement | Why Manual | Test Instructions | +|----------|-------------|------------|-------------------| +| Pages render at 320px–1024px | MOB-01 | Device emulation | Chrome DevTools device mode, check all pages | +| Bottom tab bar on mobile | MOB-02 | Visual layout | Resize below 768px, verify tabs appear | +| Chat full-screen on mobile | MOB-03 | UI interaction | Tap conversation, verify full-screen with back arrow | +| PWA installable | MOB-04 | Browser behavior | Lighthouse PWA audit, manual install from Chrome | +| Push notification received | MOB-05 | Requires HTTPS + real device | Install PWA, send test message, verify notification | +| No hover-stuck interactions | MOB-06 | Touch device | Tap all buttons/links on real touch device | + +--- + +## Validation Sign-Off + +- [ ] All tasks have `` verify or Wave 0 dependencies +- [ ] Sampling continuity: no 3 consecutive tasks without automated verify +- [ ] Wave 0 covers all MISSING references +- [ ] No watch-mode flags +- [ ] Feedback latency < 45s +- [ ] `nyquist_compliant: true` set in frontmatter + +**Approval:** pending