Commit Graph

169 Commits

Author SHA1 Message Date
495a2eabf5 docs(11-01): complete sort_order + reorder backend plan
- Create 11-01-SUMMARY.md with full execution record
- Update STATE.md: progress 89%, decisions, metrics, session
- Update ROADMAP.md: phase 11 marked in-progress (1/2 plans)
- Mark requirements RANK-01, RANK-04, RANK-05 complete
2026-03-16 22:24:08 +01:00
d6acfcb126 feat(11-01): PATCH /api/threads/:id/candidates/reorder route + tests
- Import reorderCandidatesSchema and reorderCandidates into threads route
- Add PATCH /:id/candidates/reorder route with Zod validation
- Returns 200 + { success: true } on active thread, 400 on resolved thread
- Add 5 route tests: success, order persists, resolved guard, empty array, missing field
2026-03-16 22:22:31 +01:00
f01d71d6b4 feat(11-01): schema, service, and tests for sort_order + reorderCandidates
- Add sortOrder REAL column to threadCandidates schema (default 0)
- Add sort_order column to test helper CREATE TABLE
- Add reorderCandidatesSchema to shared/schemas.ts
- Add ReorderCandidates type to shared/types.ts
- getThreadWithCandidates now orders candidates by sort_order ASC
- createCandidate appends at max sort_order + 1000 (first = 1000)
- Add reorderCandidates service function (transaction, active-only guard)
- Add 5 new tests: ordering, appending, reorder success, resolved guard, missing thread
2026-03-16 22:21:42 +01:00
2986bdd2e5 docs(11-candidate-ranking): create phase plan 2026-03-16 22:15:56 +01:00
11ee50db49 docs(phase-11): add validation strategy 2026-03-16 22:08:30 +01:00
a55d58cef3 docs(phase-11): research candidate ranking phase 2026-03-16 22:07:36 +01:00
d380e756ea docs(state): record phase 11 context session 2026-03-16 22:02:31 +01:00
e4c6991ec6 docs(11): capture phase context 2026-03-16 22:02:20 +01:00
685acd2ab2 docs(phase-10): complete phase execution 2026-03-16 21:42:18 +01:00
2ce54e5990 chore(10-01): add Drizzle migration for pros/cons columns
- drizzle/0004_soft_synch.sql: ALTER TABLE thread_candidates ADD COLUMN pros/cons
- drizzle/meta/0004_snapshot.json: updated schema snapshot
- drizzle/meta/_journal.json: migration journal entry
2026-03-16 21:38:55 +01:00
11912a9416 docs(10-01): complete pros/cons schema foundation plan
- Add 10-01-SUMMARY.md with TDD execution results
- STATE.md: updated metrics, decisions, session, progress
- ROADMAP.md: phase 10 marked complete (1/1 plans)
- REQUIREMENTS.md: RANK-03 marked complete
2026-03-16 21:38:40 +01:00
4f2aefe7a4 feat(10-01): wire pros/cons through client hooks, form, and card indicator
- CandidateResponse: add pros/cons string|null fields
- CandidateForm: add pros/cons to FormData, INITIAL_FORM, pre-fill, payload
- CandidateForm: add Pros/Cons textarea inputs (after Notes, before Product Link)
- CandidateCard: add pros/cons props, render purple +/- Notes badge when present
- Thread detail route: pass pros/cons props to CandidateCard
2026-03-16 21:36:10 +01:00
7a64a1887d feat(10-01): add pros/cons columns through backend
- Add pros/cons nullable TEXT columns to threadCandidates schema
- Generate and apply Drizzle migration (0004_soft_synch.sql)
- Mirror pros/cons columns in test helper CREATE TABLE
- createCandidate: pass pros/cons to values() object
- updateCandidate: add pros/cons to Partial type
- getThreadWithCandidates: include pros/cons in select projection
- createCandidateSchema: add optional pros/cons string fields
2026-03-16 21:32:38 +01:00
719f7082da test(10-01): add failing tests for pros/cons on thread candidates
- createCandidate stores and returns pros/cons fields
- createCandidate returns null when pros/cons not provided
- updateCandidate can set and clear pros/cons
- getThreadWithCandidates includes pros/cons on each candidate
2026-03-16 21:31:39 +01:00
67044f8f2e docs(10): create phase plan 2026-03-16 21:26:59 +01:00
66d1cf2f55 docs(10): add research and validation strategy 2026-03-16 21:23:32 +01:00
fbc856b885 docs(10): research phase schema foundation pros/cons fields 2026-03-16 21:22:12 +01:00
b43472b09a docs: create milestone v1.3 roadmap (4 phases) 2026-03-16 21:14:53 +01:00
e44807fd37 docs: define milestone v1.3 requirements 2026-03-16 21:11:56 +01:00
4689d49b93 docs: complete project research 2026-03-16 21:08:09 +01:00
2fa4427de5 docs: start milestone v1.3 Research & Decision Tools 2026-03-16 20:53:52 +01:00
9647f5759d feat: redesign weight summary legend and add currency selector
Redesign WeightSummaryCard stats from a disconnected 4-column grid to a
compact legend-style list with color dots, percentages, and a divider
before the total row. Switch chart and legend colors to a neutral gray
palette.

Add a currency selector to settings (USD, EUR, GBP, JPY, CAD, AUD) that
changes the displayed symbol across the app. This is visual only — no
value conversion is performed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 20:33:07 +01:00
4cb356d6b0 chore: archive v1.2 Collection Power-Ups milestone
Archive roadmap and requirements to milestones/, evolve PROJECT.md
with validated requirements, update retrospective, and reorganize
ROADMAP.md with milestone groupings.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.2
2026-03-16 19:09:13 +01:00
aa02c75105 docs(phase-09): complete phase execution
Some checks failed
CI / ci (push) Failing after 17s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:29:42 +01:00
323a0e6ef4 docs(09-02): update ROADMAP.md with v1.2 milestone completion
- Mark phases 7, 8, 9 as complete with 2/2 plans each
- Check off all v1.2 milestone phase checkboxes
2026-03-16 15:24:46 +01:00
bf270e96d8 docs(09-02): complete weight breakdown visualization plan
- Create 09-02-SUMMARY.md with execution results
- Update STATE.md with completion status and decisions
- Mark CLAS-02, VIZZ-01, VIZZ-02, VIZZ-03 requirements complete
2026-03-16 15:23:55 +01:00
d098277797 feat(09-02): add WeightSummaryCard with donut chart and classification subtotals
- Install recharts dependency for donut chart visualization
- Create WeightSummaryCard component with pill toggle (category/classification views)
- Compute base/worn/consumable/total weight subtotals from items array
- Render donut chart with colored segments, center total, and hover tooltips
- Wire WeightSummaryCard into setup detail page below sticky bar
2026-03-16 15:20:41 +01:00
83103251b1 docs(09-01): complete classification schema and badge plan
- Create 09-01-SUMMARY.md with execution details
- Update STATE.md to phase 9, plan 1 of 2 complete
- Mark CLAS-01, CLAS-03, CLAS-04 requirements complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:16:03 +01:00
fb738d7cc2 feat(09-01): add classification API route, client hook, badge component, and setup detail wiring
- Add PATCH /:id/items/:itemId/classification endpoint with Zod validation
- Add apiPatch helper to client API library
- Add useUpdateItemClassification mutation hook
- Add classification field to SetupItemWithCategory interface
- Create ClassificationBadge click-to-cycle component (base/worn/consumable)
- Wire ClassificationBadge into setup detail page item grid
- Add integration tests for PATCH classification route (valid + invalid)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:13:08 +01:00
4491e4c6f1 feat(09-01): add classification column to setupItems with service layer and tests
- Add classification text column (default 'base') to setupItems schema
- Add classificationSchema and updateClassificationSchema Zod validators
- Add UpdateClassification type inferred from Zod schema
- Implement updateItemClassification service function
- Modify getSetupWithItems to return classification field
- Modify syncSetupItems to preserve classifications across re-sync
- Add tests for classification CRUD, preservation, and cross-setup independence
- Generate and apply Drizzle migration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 15:11:18 +01:00
0e23996986 docs(09): create phase plan for weight classification and visualization 2026-03-16 15:05:23 +01:00
7d6cf31b05 docs(phase-09): add research and validation strategy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:58:58 +01:00
dd5dff6973 docs(phase-09): research phase domain 2026-03-16 14:57:52 +01:00
705ee8af06 docs(phase-09): capture implementation context for weight classification and visualization
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:36:12 +01:00
d50054b039 docs(phase-08): complete phase execution 2026-03-16 14:18:07 +01:00
4b26f61d91 docs(08-01): complete candidate status tracking plan
- SUMMARY.md with task commits, decisions, and metrics
- STATE.md updated with position, decisions, session
- REQUIREMENTS.md: CAND-01, CAND-02, CAND-03 marked complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:14:00 +01:00
0bbf25ff39 docs(08-02): complete search/filter toolbar and category dropdown plan
- SUMMARY.md with task commits and execution metrics
- STATE.md updated with position, decisions, session info
- ROADMAP.md updated with phase 08 progress
- REQUIREMENTS.md: SRCH-01 through SRCH-05, PLAN-01 marked complete
2026-03-16 14:12:13 +01:00
25956ed3ee feat(08-01): create StatusBadge component and wire into CandidateCard
- StatusBadge: clickable pill badge with popup menu (researching/ordered/arrived)
- Muted gray styling, LucideIcon per status, click-outside dismiss, Escape key support
- CandidateCard: status + onStatusChange props, StatusBadge in pill row after category
- Thread detail page: passes candidate.status and useUpdateCandidate for onStatusChange
- Fix Biome formatting for candidateStatusSchema enum

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:12:02 +01:00
5f89acd503 feat(08-02): add search/filter toolbar to gear tab and upgrade planning filter
- Sticky search/filter toolbar with text input and CategoryFilterDropdown
- useMemo-based filtering by name (search) and categoryId (dropdown)
- "Showing X of Y items" count when filters active
- Flat grid (no category headers) when any filter is active
- "No items match your search" empty state for filtered results
- Replace PlanningView native select with CategoryFilterDropdown
2026-03-16 14:09:51 +01:00
ca1c2a2e57 feat(08-01): add status column to threadCandidates and wire through backend
- Schema: status TEXT NOT NULL DEFAULT 'researching' on thread_candidates
- Zod: candidateStatusSchema enum (researching/ordered/arrived) added to createCandidateSchema
- Service: getThreadWithCandidates selects status, createCandidate sets status, updateCandidate accepts status
- Client hooks: CandidateWithCategory and CandidateResponse types include status field
- Migration generated and applied

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:09:18 +01:00
9342085dd1 test(08-01): add failing tests for candidate status field
- 5 tests: create with/without status, update status, getThreadWithCandidates includes status
- Test helper updated with status column in thread_candidates CREATE TABLE

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 14:07:51 +01:00
9e1a875581 feat(08-02): create CategoryFilterDropdown component
- Searchable dropdown with Lucide icons per category option
- "All categories" as first option with null value
- Click-outside and Escape key dismissal
- Clear button on trigger when category selected
- Auto-focus search input when dropdown opens
- State reset (search text) when dropdown closes
2026-03-16 14:07:34 +01:00
7cd4b467d0 docs(08): create phase plan 2026-03-16 13:03:20 +01:00
061dd9c9c9 docs(phase-8): add validation strategy 2026-03-16 12:58:10 +01:00
0328ff66dd docs(phase-8): research phase domain 2026-03-16 12:57:10 +01:00
bfcbc8a945 docs(state): record phase 8 context session 2026-03-16 12:52:33 +01:00
aba6c6f41a docs(08): capture phase context 2026-03-16 12:52:24 +01:00
d86f0a1cdd docs(phase-7): complete phase execution 2026-03-16 12:28:33 +01:00
a9f802ab68 docs(07-02): complete weight unit UI wiring plan
- Created 07-02-SUMMARY.md with task commits and deviations
- Updated STATE.md: Phase 7 complete, progress 100%
- Updated ROADMAP.md: Phase 07 marked complete
- Marked UNIT-01 requirement complete in REQUIREMENTS.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:25:22 +01:00
faa437896f feat(07-02): add weight unit toggle and wire all formatWeight call sites
- Add segmented g/oz/lb/kg toggle to TotalsBar with settings persistence
- Pass unit parameter to all 8 formatWeight call sites across components and routes
- Import useWeightUnit hook in ItemCard, CandidateCard, CategoryHeader, SetupCard, ItemPicker, Dashboard, SetupDetail

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:23:19 +01:00