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