4.3 KiB
4.3 KiB
Tasks — Add @suaveplan/react-auth — pages + PermissionGate (Wave 3)
No retroactive ticks. Each box reflects work done in this change.
1. Spec authoring
- 1.1 Read
../suaveplan/enterprise/react-auth.mdend-to-end - 1.2 Read
openspec/specs/react-auth/spec.md(Wave 1 + Wave 2 canonical) - 1.3 Read
openspec/AGENTS.md§§ 2a, 6a, 7, 12, 13, 14 - 1.4 Draft
proposal.mdfrom template with## Source mapping - 1.5 Draft
specs/react-auth/spec.mddelta with## ADDED Requirements, one per page + PermissionGate - 1.6 Every requirement carries a
**Verified by:**line at draft time
2. Implementation
- 2.1 Add 7 subpath exports to
package.jsonexportsblock - 2.2 Extend
vite.config.tslib.entrywith 7 new entries - 2.3 Ship
src/pages/login/(page.tsx, .test.tsx, .md, .stories.tsx, index.ts) - 2.4 Ship
src/pages/register/ - 2.5 Ship
src/pages/forgot-password/ - 2.6 Ship
src/pages/reset-password/ - 2.7 Ship
src/pages/email-verification/(also includes .types.ts) - 2.8 Ship
src/pages/profile/(split intoprofile.tsx+profile-sections.tsxto honour the 300-line cap; .types.ts; .md; .stories.tsx; index.ts; .test.tsx) - 2.9 Ship
src/components/permission-gate/ - 2.10 Extend
src/components/index.tswithPermissionGatenamed re-export - 2.11 Extend
src/index.tswith the 7 new symbols (named re-exports only) - 2.12 Extend
src/index.test.tsexpected-keys list with the 7 new symbols - 2.13 Add
profilePagegroup toen-gb.ts/cy-gb.ts/zh-cn.tsunderauth.profilePage
3. Tests
- 3.1
src/pages/login/login.test.tsx— guard redirect, happy path, returnTo, error swallow - 3.2
src/pages/register/register.test.tsx— guard redirect, strip confirmPassword, navigate, error swallow - 3.3
src/pages/forgot-password/forgot-password.test.tsx— happy path, reset, error - 3.4
src/pages/reset-password/reset-password.test.tsx— missing token, happy path, CTAs - 3.5
src/pages/email-verification/email-verification.test.tsx— missing token, success, expired, CTAs - 3.6
src/pages/profile/profile.test.tsx— guard, tab switching, profile update, password change validation, delete account - 3.7
src/components/permission-gate/permission-gate.test.tsx— allow, deny, requireAll, numeric, unauthenticated - 3.8 Every
it(...)carries{ timeout: 5000 } - 3.9 All tests import from
@suaveplan/testing/runner
4. Documentation
- 4.1 Sibling
.mdfor every page + PermissionGate + ProfileSections (≥200 words, Basic + Advanced examples, full API reference) - 4.2 No README changes (Wave 1's README already lists subpaths generically)
5. Pre-archive 6-gate verification
- 5.1
bun run check— Biome clean across the monorepo - 5.2
bunx turbo lint typecheck test --filter=@suaveplan/react-auth --force— green - 5.3
bunx turbo test:coverage --filter=@suaveplan/react-auth— 100/100/100/100 istanbul - 5.4
bun scripts/openspec-conformance.ts @suaveplan/react-auth— exit 0 - 5.5
bunx turbo build --filter=@suaveplan/react-auth --force— green - 5.6
bun scripts/lint/check-test-runner-imports.ts— exit 0
6. Pre-archive 9-row checklist
- 6.1 Generics threaded — pages thread Wave 2 form prop generics; no
as any - 6.2 N/A — no new boundary input; pages re-use Wave 2's Zod boundaries
- 6.3 No new error codes introduced; pages swallow
useAuth()action rejections (errors surface via the existing contexterrorfield) - 6.4 N/A — no strict-mode behaviour toggle in this wave
- 6.5 N/A — no new OTel instruments in this wave (pages are routing adapters; metrics live on Wave 1 actions)
- 6.6 N/A — no lifecycle dedup claims on pages
- 6.7 No retroactive ticks
- 6.8 No
export *in any feature-module barrel - 6.9 No direct
vitest/bun:testimports in test files
7. Archive
- 7.1 Fold spec delta — APPEND new requirements to
openspec/specs/react-auth/spec.mdunder## ADDED Requirements; do NOT modify Wave 1 / Wave 2 requirements - 7.2 Move
openspec/changes/add-react-auth-pages/→openspec/archive/2026-05-19-add-react-auth-pages/ - 7.3 No MANIFEST.md / STATUS.md updates (not a new package)