Initial Commit
This commit is contained in:
72
openspec/archive/2026-05-19-add-react-auth-pages/tasks.md
Normal file
72
openspec/archive/2026-05-19-add-react-auth-pages/tasks.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# 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.md` end-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.md` from template with `## Source mapping`
|
||||
- [ ] 1.5 Draft `specs/react-auth/spec.md` delta 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.json` `exports` block
|
||||
- [ ] 2.2 Extend `vite.config.ts` `lib.entry` with 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 into `profile.tsx` + `profile-sections.tsx` to 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.ts` with `PermissionGate` named re-export
|
||||
- [ ] 2.11 Extend `src/index.ts` with the 7 new symbols (named re-exports only)
|
||||
- [ ] 2.12 Extend `src/index.test.ts` expected-keys list with the 7 new symbols
|
||||
- [ ] 2.13 Add `profilePage` group to `en-gb.ts` / `cy-gb.ts` / `zh-cn.ts` under `auth.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 `.md` for 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 context `error` field)
|
||||
- [ ] 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:test` imports in test files
|
||||
|
||||
## 7. Archive
|
||||
|
||||
- [ ] 7.1 Fold spec delta — APPEND new requirements to `openspec/specs/react-auth/spec.md` under `## 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)
|
||||
Reference in New Issue
Block a user