Commit Graph

902 Commits

Author SHA1 Message Date
38c0382f64 docs(36): capture phase context .planning/phases/36-admin-role-panel-foundation/36-CONTEXT.md .planning/phases/36-admin-role-panel-foundation/36-DISCUSSION-LOG.md 2026-04-19 20:34:10 +02:00
8f4bb5096d docs(35): add code review fix report 2026-04-19 20:15:00 +02:00
7e684176ab fix(35): WR-04 use startsWith/slice for brand-stripping to avoid mid-string matches
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:14:28 +02:00
93c273d266 fix(35): WR-03 add onError to GearImage to dismiss skeleton on broken images
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:14:07 +02:00
65f25e5964 fix(35): WR-02 close FAB menu before opening catalog search overlay
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 20:13:33 +02:00
b984e8c72f docs(35): add code review report 2026-04-19 19:55:17 +02:00
9d41400faa docs(35-03): complete cursor-pointer audit plan
- Add 35-03-SUMMARY.md with task commits, deviations, and verification results
- Update STATE.md: plan 3/3 complete, progress 100%, FIX-05 decision recorded
- Update ROADMAP.md: phase 35 marked Complete (3/3 plans)
- Update REQUIREMENTS.md: FIX-05 marked complete
2026-04-19 19:52:41 +02:00
d58f7fab40 fix(35-03): add cursor-pointer to FabMenu and BottomTabBar buttons
- Add cursor-pointer to FabMenu menu item buttons (motion.button)
- Add cursor-pointer to FabMenu main FAB button (motion.button)
- Add cursor-pointer to BottomTabBar anonymous collection tab button
- Add cursor-pointer to BottomTabBar anonymous setups tab button
- Add cursor-pointer to BottomTabBar search tab button
2026-04-19 19:50:38 +02:00
e1d516cfe8 fix(35-03): add cursor-pointer to ItemCard navigable case
- Add cursor-pointer to the non-null linkTo branch of the outer button
- Preserve cursor-default for the null linkTo branch (setup cards)
2026-04-19 19:49:44 +02:00
2d45b9024d docs(35-02): complete image lazy loading and skeleton plan
- SUMMARY.md created for 35-02 (FIX-03)
- STATE.md advanced to plan 2 of 3 complete, added 35-02 decisions
- ROADMAP.md updated (2 of 3 summaries)
- REQUIREMENTS.md marked FIX-03 complete
2026-04-19 19:49:04 +02:00
88db308a16 feat(35-02): add image skeleton loading states to all card types
- Add useState(false) loaded state to ItemCard, CandidateCard, GlobalItemCard
- Show bg-gray-100 animate-pulse skeleton overlay while image loads
- Fade in image via transition-opacity duration-200 on onLoad callback
- No-image placeholders (icon on bg-gray-50) unchanged
- Add import { useState } from react to all three files with correct Biome import order
2026-04-19 19:47:11 +02:00
2d2259a0db feat(35-02): add loading=lazy and onLoad prop to GearImage
- Add optional onLoad prop to GearImageProps interface
- Destructure onLoad in function signature
- Forward loading="lazy" and onLoad to all three img render paths (cover, hasCrop, default)
2026-04-19 19:45:01 +02:00
58d6b47c6f docs(35-01): complete plan 01 — type/wiring fixes (FIX-01, FIX-02, FIX-04)
- SUMMARY.md: 3 tasks, all passing, 464 tests green
- STATE.md: plan 1/3 complete, decisions recorded
- ROADMAP.md: phase 35 progress updated (1 of 3 summaries)
- REQUIREMENTS.md: FIX-01, FIX-02, FIX-04 marked complete
2026-04-19 19:44:05 +02:00
053d56236f fix(35-01): replace login page card UI with immediate useEffect redirect (FIX-04)
- Remove auth check, useNavigate, useTranslation, and full card UI
- LoginPage now renders only "Signing in..." and immediately navigates to server /login
- Server /login route handles Logto OIDC redirect; no client-side logic needed
2026-04-19 19:41:57 +02:00
b43a932217 fix(35-01): extend ItemWithCategory with image and currency fields (FIX-02)
- Add imageUrl, dominantColor, cropZoom, cropX, cropY, priceCurrency to interface
- Server already returns these fields via withImageUrls(); type was just incomplete
2026-04-19 19:41:44 +02:00
7fca92985a fix(35-01): wire Add Candidate button to CatalogSearchOverlay, delete AddCandidateModal
- Replace setAddCandidateOpen(true) with openCatalogSearch("thread") + setCatalogSessionThreadId
- Remove addCandidateOpen useState
- Delete entire AddCandidateModal component (~300 lines of dead code)
- Remove imports only used by the deleted modal: useCreateCandidate, useCurrency, ImageUpload, CategoryPicker
2026-04-19 19:41:33 +02:00
44392e8583 docs(35): create phase 35 bug-fix plans (3 plans, wave 1 parallel)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:35:31 +02:00
d216c80892 docs(35): fix UI-SPEC typography and spacing checker violations
Collapse font weights from 3 to 2 (remove 500/medium, map Label to 600/semibold).
Remove non-multiple-of-4 Tailwind class references from spacing Usage column.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:24:57 +02:00
805b306516 docs(35): UI design contract for bug-fixes phase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 19:22:56 +02:00
8202a0088b docs(state): record phase 35 context session 2026-04-19 19:13:04 +02:00
8220cf84ab docs(35): capture phase context 2026-04-19 19:12:37 +02:00
2ebf3a37e8 docs: create milestone v2.4 roadmap (4 phases)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 18:43:48 +02:00
4548780e5f docs: start milestone v2.4 Admin Foundation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 18:40:49 +02:00
13c48731ea chore: remove REQUIREMENTS.md for v2.3 milestone
Fresh requirements file will be created with /gsd-new-milestone.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 17:05:24 +02:00
1733fe8cfb chore: archive v2.3 milestone files
Archive setup sharing, currency system, and i18n foundation milestone.
Reorganize ROADMAP.md with v2.3 details block, update PROJECT.md,
MILESTONES.md, STATE.md deferred items, and RETROSPECTIVE.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 17:05:21 +02:00
beaea46e92 fix: use CategoryPicker in AddToThreadModal new-thread create mode
Replaces plain <select> with CategoryPicker for consistency with
ManualEntryForm, CreateThreadModal, and other thread creation flows.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 17:00:03 +02:00
9649ef2514 fix: close PGlite handle after tests to resolve exit code 100
All checks were successful
CI / ci (push) Successful in 1m40s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 58s
PGlite's WASM worker kept an open async handle, causing Bun to detect
a resource leak and exit with code 100 despite all tests passing.
Adds a preload script that closes the cached client via afterAll.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 16:43:11 +02:00
5f63e6f75d fix: resolve Bun mock isolation contamination across test files
Some checks failed
CI / ci (push) Failing after 1m35s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
- storage.service.ts: use dynamic import() inside each function so the
  current @aws-sdk mock is always picked up regardless of module load order
- images.test.ts + image.service.test.ts: replace module-level storage.service
  mock with @aws-sdk/client-s3 mock to avoid contaminating storage.service.test.ts
- routes/auth.test.ts: remove unnecessary oauth.service mock (no test uses
  verifyAccessToken) which was contaminating oauth.service.test.ts
- middleware/auth.test.ts: complete oauth.service mock shape with all exports

All 464 tests now pass in a single bun test run.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 16:19:39 +02:00
4ccbb2b070 fix: wire catalog add buttons, fix Trans bold rendering, lint cleanup
Some checks failed
CI / ci (push) Failing after 1m44s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
- CatalogSearchOverlay: replace handleAddStub with real openAddToCollection/openAddToThread routing based on catalogSearchMode
- ConfirmDialog + __root.tsx: swap t() for Trans component on deleteItemMessage, deleteCandidateMessage, pickWinnerMessage — fixes <bold> rendering as literal text
- Biome format pass: fix 23 lint/format errors across scripts, services, tests
- Planning: mark all UAT and verification gaps resolved for phases 07, 11, 16, 20, 21, 22, 24, 32, 34; close debug sessions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 15:36:16 +02:00
16058d0f4d chore: update bun.lock for @anthropic-ai/sdk
Some checks failed
CI / ci (push) Failing after 15s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:49:33 +02:00
065b262b5b chore: add db:crawl and db:crawl-all npm scripts 2026-04-18 16:45:54 +02:00
44602d409e feat: crawl-all batch runner — iterate active manufacturers by tier 2026-04-18 16:45:39 +02:00
3d2911cedc feat: crawl-manufacturer agent script — Haiku tool-use loop + bulk upsert 2026-04-18 16:45:17 +02:00
b2a725a646 feat: canonical taxonomy — categories and tags for ingestion 2026-04-18 16:44:32 +02:00
44b1eac0ba feat(catalog): migrate dev seed data to manufacturer-slug-based global items
Replace brand text field with manufacturerSlug in DEV_GLOBAL_ITEMS,
global-items-seed.json, and seed-global-items.ts. Add DEV_MANUFACTURERS
for dev-only brands not in SEED_MANUFACTURERS. Expand SEED_MANUFACTURERS
with 8 additional manufacturers referenced by seed JSON (Nemo, Therm-a-Rest,
Toaks, Katadyn, HydraPak, Nitecore, Outdoor Research, Exposure Lights).
Update dev-seed.ts to resolve slug→id before insert and use manufacturerId
as the deduplication key.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:37:27 +02:00
0b4715b80c fix: update all tests and MCP catalog tool for manufacturerId schema migration 2026-04-18 16:30:11 +02:00
a508773809 feat: all services join manufacturers for global item brand display 2026-04-18 16:24:24 +02:00
2924c2269c feat: item service joins manufacturers for brand display 2026-04-18 16:22:10 +02:00
12b3f8e380 feat: upsertGlobalItemSchema — brand → manufacturerSlug 2026-04-18 16:21:32 +02:00
5037350aa0 feat: global-item service uses manufacturerSlug, joins manufacturers for brand 2026-04-18 16:21:25 +02:00
8ff680ef92 feat: migrate globalItems — drop brand text, add manufacturerId FK 2026-04-18 16:19:31 +02:00
f868bbdecf feat: seed manufacturers list, update seedGlobalItems to resolve by name
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:16:52 +02:00
ec27df1d0f feat: manufacturers route — list, get, create
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:16:27 +02:00
8c1b19f07d feat: manufacturer service with list, get, create
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 16:15:40 +02:00
7de3e9e957 feat: add manufacturers table to schema
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 14:54:23 +02:00
2cb83a63f1 docs: catalog population implementation plans (schema migration + ingestion script) 2026-04-18 14:49:34 +02:00
bea386e7db style(i18n): fix lint — formatting and import ordering across 21 files
All checks were successful
CI / ci (push) Successful in 1m21s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 1m15s
Biome auto-fix for formatting (line length, ternary wrapping) and
import organization in files touched by phase 34 i18n work.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 14:49:10 +02:00
1b2ddcd0bd docs(phase-34): evolve PROJECT.md after phase completion
Some checks failed
CI / ci (push) Failing after 27s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
2026-04-18 14:42:16 +02:00
be5b318041 docs(phase-34): complete phase execution 2026-04-18 14:41:42 +02:00
dbab84ef2a fix(i18n): wire useTranslation into SetupsView — close verification gap
Replace hardcoded English strings in SetupsView.tsx with t() calls
using existing setups namespace keys. Closes the 1 gap found during
phase 34 verification.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 14:41:23 +02:00