Merge branch 'worktree-agent-a4608610' into Develop

# Conflicts:
#	.planning/ROADMAP.md
#	.planning/STATE.md
#	src/client/routes/threads/$threadId.tsx
This commit is contained in:
2026-04-06 15:04:13 +02:00
8 changed files with 1301 additions and 322 deletions

View File

@@ -63,7 +63,7 @@ Requirements for this milestone. Each maps to roadmap phases.
- [ ] **DETAIL-01**: Clicking a collection item navigates to a full detail page (`/items/:id`) showing all item data
- [ ] **DETAIL-02**: Clicking a catalog search result navigates to a public detail page (`/global-items/:id`) with "Add to Collection" button
- [ ] **DETAIL-03**: Item detail page has edit mode toggle for modifying personal fields (notes, category, quantity, purchase price)
- [ ] **DETAIL-04**: Thread candidates navigate to detail pages instead of opening slide-out panels
- [x] **DETAIL-04**: Thread candidates navigate to detail pages instead of opening slide-out panels
- [ ] **DETAIL-05**: Slide-out panels for items and candidates are removed from the application
### Tags
@@ -184,7 +184,7 @@ Which phases cover which requirements. Updated during roadmap creation.
| DETAIL-01 | Phase 21 | Pending |
| DETAIL-02 | Phase 21 | Pending |
| DETAIL-03 | Phase 21 | Pending |
| DETAIL-04 | Phase 21 | Pending |
| DETAIL-04 | Phase 21 | Complete |
| DETAIL-05 | Phase 21 | Pending |
**Coverage:**

View File

@@ -57,7 +57,7 @@
- [x] **Phase 18: Global Items & Public Profiles** — Global item catalog, user profiles, and public setup sharing (completed 2026-04-05)
- [x] **Phase 19: Reference Item Model & Tags Schema** — Collection items as references to global catalog, tag system for discovery (completed 2026-04-05)
- [x] **Phase 20: FAB & Full-Screen Catalog Search** — Global FAB with mini menu, full-screen catalog search with tag filtering (completed 2026-04-06)
- [ ] **Phase 21: Item & Catalog Detail Pages** — Full detail pages for collection items and catalog entries, replacing slide-out panels
- [x] **Phase 21: Item & Catalog Detail Pages** — Full detail pages for collection items and catalog entries, replacing slide-out panels (completed 2026-04-06)
- [ ] **Phase 22: Add-from-Catalog & Thread Integration** — Add catalog items to collection and threads, resolution creates reference items
- [ ] **Phase 23: Manual Entry Fallback** — Manual add for items not in catalog, non-functional submission prompt
@@ -266,6 +266,6 @@ Plans:
| 18. Global Items & Public Profiles | v2.0 | 4/5 | Complete | 2026-04-05 |
| 19. Reference Item Model & Tags Schema | v2.0 | 3/3 | Complete | 2026-04-05 |
| 20. FAB & Full-Screen Catalog Search | v2.0 | 2/2 | Complete | 2026-04-06 |
| 21. Item & Catalog Detail Pages | v2.0 | 1/3 | In Progress| |
| 21. Item & Catalog Detail Pages | v2.0 | 1/1 | Complete | 2026-04-06 |
| 22. Add-from-Catalog & Thread Integration | v2.0 | 0/? | Not started | - |
| 23. Manual Entry Fallback | v2.0 | 0/? | Not started | - |

View File

@@ -3,14 +3,14 @@ gsd_state_version: 1.0
milestone: v1.3
milestone_name: Research & Decision Tools
status: planning
stopped_at: Completed 21-01-PLAN.md
last_updated: "2026-04-06T06:17:39.050Z"
stopped_at: Completed 21-02-PLAN.md
last_updated: "2026-04-06T13:03:13.009Z"
last_activity: 2026-04-06
progress:
total_phases: 14
completed_phases: 13
total_plans: 38
completed_plans: 36
total_phases: 15
completed_phases: 14
total_plans: 39
completed_plans: 37
percent: 0
---
@@ -25,9 +25,9 @@ See: .planning/PROJECT.md (updated 2026-04-03)
## Current Position
Phase: 21 of 21 (Item & Catalog Detail Pages)
Plan: 1 of 3 complete
Status: Executing
Phase: 20 of 18 (PostgreSQL Migration)
Plan: Not started
Status: Ready to plan
Last activity: 2026-04-06
Progress: [----------] 0% (v2.0 milestone)
@@ -58,8 +58,8 @@ Key decisions made during v2.0 planning:
- [Phase 20]: Created tags table in schema (was missing, needed for GET /api/tags endpoint)
- [Phase 20]: FAB visible on all authenticated routes, not just collection gear tab
- [Phase 20]: Add button on catalog search cards is a stub (Phase 21 wires actual flow)
- [Phase 21]: Edit mode on detail pages uses local useState, not UIStore panel state
- [Phase 21]: Add to Collection button on catalog detail page is a stub (Phase 22 wires actual flow)
- [Phase 21]: Candidate data fetched from useThread hook (find in array) not new API endpoint
- [Phase 21]: AddCandidateModal inline in thread page, local modal pattern replacing UIStore panel
### Pending Todos
@@ -70,6 +70,7 @@ None active.
| # | Description | Date | Commit | Directory |
|---|-------------|------|--------|-----------|
| 260406-j44 | Comprehensive dev seed script for bikepacking gear data | 2026-04-06 | — | [260406-j44-comprehensive-dev-seed-script-for-bikepa](./quick/260406-j44-comprehensive-dev-seed-script-for-bikepa/) |
| Phase 21 P02 | 4min | 2 tasks | 2 files |
### Blockers/Concerns
@@ -78,6 +79,6 @@ None active.
## Session Continuity
Last session: 2026-04-06T13:02:00.000Z
Stopped at: Completed 21-01-PLAN.md
Last session: 2026-04-06T13:03:13.007Z
Stopped at: Completed 21-02-PLAN.md
Resume file: None

View File

@@ -0,0 +1,90 @@
---
phase: 21-item-catalog-detail-pages
plan: 02
subsystem: ui
tags: [react, tanstack-router, candidate-detail, modal-dialog, edit-mode]
requires:
- phase: 20-fab-full-screen-catalog-search
provides: FAB and catalog search overlay foundation
provides:
- Candidate detail page at /threads/:threadId/candidates/:candidateId with edit mode
- Restructured thread route directory for nested candidate routes
- Add-candidate modal dialog on thread page replacing slide-out panel
affects: [21-03-candidate-card-navigation-rewire]
tech-stack:
added: []
patterns: [nested-route-directory-structure, local-modal-pattern]
key-files:
created:
- src/client/routes/threads/$threadId/candidates/$candidateId.tsx
modified:
- src/client/routes/threads/$threadId/index.tsx
key-decisions:
- "StatusBadge on detail page is read-only (no onStatusChange) since status cycling happens on cards"
- "AddCandidateModal defined inline in thread index.tsx rather than separate component file"
- "Candidate data fetched from useThread hook (find in candidates array) rather than new endpoint"
patterns-established:
- "Nested route directory: $threadId/index.tsx + $threadId/candidates/$candidateId.tsx"
- "Local modal pattern: useState in parent page controls modal visibility, no UIStore needed"
requirements-completed: [DETAIL-04]
duration: 4min
completed: 2026-04-06
---
# Phase 21 Plan 02: Candidate Detail Page & Thread Route Restructuring Summary
**Candidate detail page with edit mode toggle at /threads/:threadId/candidates/:candidateId, thread route directory restructured for nested routes, add-candidate modal replacing slide-out panel**
## Performance
- **Duration:** 4 min
- **Started:** 2026-04-06T12:57:42Z
- **Completed:** 2026-04-06T13:02:26Z
- **Tasks:** 2
- **Files modified:** 2
## Accomplishments
- Restructured thread route from flat file to directory structure supporting nested candidate routes
- Created full candidate detail page with read/edit modes, image display, pros/cons, notes, and thread actions
- Replaced UIStore openCandidateAddPanel call with local modal dialog containing all form fields
## Task Commits
Each task was committed atomically:
1. **Task 1: Restructure thread route and create candidate detail page** - `cecaf78` (feat)
2. **Task 2: Add candidate modal dialog on thread page** - `47b416e` (feat)
## Files Created/Modified
- `src/client/routes/threads/$threadId/index.tsx` - Moved from $threadId.tsx, updated imports, added AddCandidateModal
- `src/client/routes/threads/$threadId/candidates/$candidateId.tsx` - New candidate detail page with edit mode toggle
## Decisions Made
- StatusBadge rendered as read-only on detail page (status changes happen via card interactions)
- AddCandidateModal defined inline in the thread page file for simplicity
- Candidate data sourced from useThread hook (find in array) to avoid new API endpoint
## Deviations from Plan
None - plan executed exactly as written.
## Issues Encountered
None
## User Setup Required
None - no external service configuration required.
## Next Phase Readiness
- Candidate detail page is ready for Plan 03 to rewire CandidateCard clicks as navigation links
- Thread route directory structure supports the nested /candidates/:candidateId path
---
*Phase: 21-item-catalog-detail-pages*
*Completed: 2026-04-06*