diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index 6397024..18ff936 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -8,10 +8,10 @@ ### Bug Fixes -- [ ] **FIX-01**: User clicking "Add Candidate" on a thread page opens the add-candidate modal (not the wrong modal) -- [ ] **FIX-02**: Item images display correctly on collection overview cards (no broken/missing images) +- [x] **FIX-01**: User clicking "Add Candidate" on a thread page opens the add-candidate modal (not the wrong modal) +- [x] **FIX-02**: Item images display correctly on collection overview cards (no broken/missing images) - [ ] **FIX-03**: Catalog and collection images load without noticeable delay (slow image loading resolved) -- [ ] **FIX-04**: Clicking the sign-in button on an auth prompt redirects the user directly to the Logto login page +- [x] **FIX-04**: Clicking the sign-in button on an auth prompt redirects the user directly to the Logto login page - [ ] **FIX-05**: All clickable and interactive elements show a pointer cursor on hover throughout the app ### Admin Role @@ -67,10 +67,10 @@ | Requirement | Phase | Status | |-------------|-------|--------| -| FIX-01 | Phase 35 | Pending | -| FIX-02 | Phase 35 | Pending | +| FIX-01 | Phase 35 | Complete | +| FIX-02 | Phase 35 | Complete | | FIX-03 | Phase 35 | Pending | -| FIX-04 | Phase 35 | Pending | +| FIX-04 | Phase 35 | Complete | | FIX-05 | Phase 35 | Pending | | ROLE-01 | Phase 36 | Pending | | ROLE-02 | Phase 36 | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index c16610d..e732d87 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -234,7 +234,7 @@ Plans: **Plans**: 3 plans Plans: -- [ ] 35-01-PLAN.md — Thread modal fix, ItemWithCategory type extension, login auto-redirect (FIX-01, FIX-02, FIX-04) +- [x] 35-01-PLAN.md — Thread modal fix, ItemWithCategory type extension, login auto-redirect (FIX-01, FIX-02, FIX-04) - [ ] 35-02-PLAN.md — Lazy loading + image skeleton states on GearImage and all card components (FIX-03) - [ ] 35-03-PLAN.md — Cursor-pointer audit across ItemCard, FabMenu, BottomTabBar (FIX-05) @@ -318,7 +318,7 @@ Plans: | 32. Setup Sharing System | v2.3 | 4/4 | Complete | 2026-04-15 | | 33. Currency System | v2.3 | 6/6 | Complete | 2026-04-13 | | 34. i18n Foundation | v2.3 | 8/8 | Complete | 2026-04-18 | -| 35. Bug Fixes | v2.4 | 0/3 | Not started | - | +| 35. Bug Fixes | v2.4 | 1/3 | In Progress| | | 36. Admin Role & Panel Foundation | v2.4 | 0/TBD | Not started | - | | 37. Admin — Global Item Management | v2.4 | 0/TBD | Not started | - | | 38. Admin — Tag Management | v2.4 | 0/TBD | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index e7b6c8f..5611f87 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -2,16 +2,16 @@ gsd_state_version: 1.0 milestone: v2.4 milestone_name: Admin Foundation -status: in_progress -stopped_at: Phase 35 — Bug Fixes (UI-SPEC approved, ready to plan) -last_updated: "2026-04-19T00:00:00.000Z" -last_activity: 2026-04-19 +status: executing +stopped_at: "Phase 35 planned — 3 plans ready to execute (wave 1: all parallel)" +last_updated: "2026-04-19T17:43:31.083Z" +last_activity: 2026-04-19 — Phase 35 planned (3 plans, verification passed) progress: - total_phases: 4 - completed_phases: 0 - total_plans: 0 - completed_plans: 0 - percent: 0 + total_phases: 20 + completed_phases: 7 + total_plans: 32 + completed_plans: 30 + percent: 94 --- # Project State @@ -26,11 +26,11 @@ See: .planning/PROJECT.md (updated 2026-04-19) ## Current Position Phase: 35 — Bug Fixes -Plan: — -Status: Context gathered — ready to plan -Last activity: 2026-04-19 — Phase 35 context captured +Plan: 1 of 3 complete +Status: In progress — 35-01 complete, 35-02 and 35-03 remaining +Last activity: 2026-04-19 — 35-01 complete (FIX-01, FIX-02, FIX-04) -Progress: [░░░░░░░░░░] 0% +Progress: [███░░░░░░░] 33% ## Performance Metrics @@ -64,13 +64,21 @@ v2.4 decisions: - Catalog spec system (typed specs per tag): deferred to v2.5 - Engagement stats (views/likes/saves/appearances): deferred to v2.5 +Phase 35 decisions (35-01): + +- FIX-01: Add Candidate on thread page routes through CatalogSearchOverlay (thread mode), not a local modal +- FIX-02: ItemWithCategory type extended client-side only — server already returns image fields via withImageUrls() +- FIX-04: Login page is a server pass-through; no client auth check or card UI needed + ### Pending Todos -- Fix Add Candidate button shows wrong modal on thread page (ui) — Phase 35 -- Fix item image not showing on collection overview — Phase 35 -- Investigate slow image loading — Phase 35 -- Auth prompt sign-in button should redirect directly to Logto — Phase 35 -- Cursor pointer on all clickable links — Phase 35 +- Investigate slow image loading — Phase 35 (FIX-03, plan 35-02) +- Cursor pointer on all clickable links — Phase 35 (FIX-05, plan 35-03) + +Resolved in 35-01: +- Fix Add Candidate button shows wrong modal on thread page — DONE (FIX-01) +- Fix item image not showing on collection overview — DONE (FIX-02) +- Auth prompt sign-in button should redirect directly to Logto — DONE (FIX-04) ### Blockers/Concerns @@ -91,5 +99,5 @@ Items carried forward from v2.3: ## Session Continuity Last session: 2026-04-19 -Stopped at: Phase 35 UI-SPEC approved — ready to plan -Resume file: .planning/phases/35-bug-fixes/35-UI-SPEC.md +Stopped at: Completed 35-01-PLAN.md — FIX-01, FIX-02, FIX-04 resolved +Resume file: .planning/phases/35-bug-fixes/35-02-PLAN.md diff --git a/.planning/phases/35-bug-fixes/35-01-SUMMARY.md b/.planning/phases/35-bug-fixes/35-01-SUMMARY.md new file mode 100644 index 0000000..3546c40 --- /dev/null +++ b/.planning/phases/35-bug-fixes/35-01-SUMMARY.md @@ -0,0 +1,89 @@ +--- +phase: 35-bug-fixes +plan: "01" +subsystem: client +tags: [bug-fix, modal, types, auth, thread, login] +dependency_graph: + requires: [] + provides: + - thread-add-candidate-wired-to-catalog-search + - item-with-category-image-fields + - login-redirect-immediate + affects: + - src/client/routes/threads/$threadId/index.tsx + - src/client/hooks/useItems.ts + - src/client/routes/login.tsx +tech_stack: + added: [] + patterns: + - "useUIStore selector per action (openCatalogSearch, setCatalogSessionThreadId)" + - "Immediate useEffect redirect for server-handled auth routes" +key_files: + created: [] + modified: + - src/client/routes/threads/$threadId/index.tsx + - src/client/hooks/useItems.ts + - src/client/routes/login.tsx +decisions: + - "FIX-01: Add Candidate routes through CatalogSearchOverlay in thread mode, not a local modal" + - "FIX-02: ItemWithCategory type extended client-side only — server already returns all fields" + - "FIX-04: Login page is a pass-through; client renders no UI beyond a brief loading indicator" +metrics: + duration: "~15 minutes" + completed: "2026-04-19T17:42:45Z" + tasks_completed: 3 + tasks_total: 3 +--- + +# Phase 35 Plan 01: Type/Wiring Bug Fixes Summary + +**One-liner:** Wire thread Add Candidate to CatalogSearchOverlay, expose image fields on ItemWithCategory, and replace login card UI with immediate server redirect. + +## Tasks Completed + +| Task | Name | Commit | Files | +|------|------|--------|-------| +| 1 | Wire Add Candidate button, delete AddCandidateModal | 7fca929 | src/client/routes/threads/$threadId/index.tsx | +| 2 | Extend ItemWithCategory with image fields | b43a932 | src/client/hooks/useItems.ts | +| 3 | Replace login page UI with useEffect redirect | 053d562 | src/client/routes/login.tsx | + +## What Was Built + +**FIX-01 — Thread Add Candidate button wired correctly** + +The toolbar "Add Candidate" button on thread detail pages was calling `setAddCandidateOpen(true)`, opening a local `AddCandidateModal` form that duplicated the CatalogSearchOverlay functionality. The button now calls `setCatalogSessionThreadId(threadId)` + `openCatalogSearch("thread")`, routing through the existing overlay. The entire `AddCandidateModal` component (~300 lines) was deleted along with its unused imports (`useCreateCandidate`, `useCurrency`, `ImageUpload`, `CategoryPicker`). + +**FIX-02 — ItemWithCategory type now includes image and currency fields** + +The `ItemWithCategory` interface was missing six fields that the server already returns via `withImageUrls()`: `imageUrl`, `dominantColor`, `cropZoom`, `cropX`, `cropY`, `priceCurrency`. Adding them to the interface unblocks collection overview cards from receiving typed image data for display. + +**FIX-04 — Login page is a lean pass-through** + +The old login page rendered a full card UI with a sign-in button. Since `/login` on the server immediately issues a Logto OIDC redirect, no client-side auth check or UI is needed. The page now renders only "Signing in..." and immediately navigates to `/login` via `useEffect`. + +## Deviations from Plan + +None — plan executed exactly as written. + +## Verification + +- `grep -n "addCandidateOpen" src/client/routes/threads/$threadId/index.tsx` → 0 matches +- `grep -n "AddCandidateModal" src/client/routes/threads/$threadId/index.tsx` → 0 matches +- `grep -n "openCatalogSearch" src/client/routes/threads/$threadId/index.tsx` → 2 matches +- All 6 image/currency fields present in `ItemWithCategory` +- `wc -l src/client/routes/login.tsx` → 18 lines +- `bun run lint` → 0 errors (1 warning in unrelated script file) +- `bun test` → 464 pass, 0 fail + +## Known Stubs + +None. + +## Self-Check: PASSED + +- 7fca929 exists: confirmed +- b43a932 exists: confirmed +- 053d562 exists: confirmed +- src/client/routes/threads/$threadId/index.tsx: exists, modified +- src/client/hooks/useItems.ts: exists, modified +- src/client/routes/login.tsx: exists, modified (18 lines)