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>
This commit is contained in:
2026-04-19 15:36:16 +02:00
parent 16058d0f4d
commit 4ccbb2b070
40 changed files with 807 additions and 227 deletions

View File

@@ -1,5 +1,5 @@
---
status: awaiting_human_verify
status: resolved
trigger: "Client-side error 'can't access property id, w[0] is undefined' occurs after login"
created: 2026-04-08T00:00:00Z
updated: 2026-04-08T00:00:00Z

View File

@@ -1,5 +1,5 @@
---
status: diagnosed
status: resolved
trigger: "crop editor opens on upload correctly, but after cropping the cropped image isn't shown in the edit state always — after clicking save it is shown correctly"
created: 2026-04-13T12:30:00Z
updated: 2026-04-13T12:35:00Z

View File

@@ -1,5 +1,5 @@
---
status: fixing
status: resolved
trigger: "GearBox deployed on Coolify throws Invalid session (HTTP 500) from @hono/oidc-auth middleware when accessing GET /login"
created: 2026-04-08T00:00:00Z
updated: 2026-04-08T00:01:00Z

View File

@@ -1,7 +1,7 @@
---
phase: 07-weight-unit-selection
verified: 2026-03-16T12:00:00Z
status: human_needed
status: complete
score: 7/8 must-haves verified
human_verification:
- test: "Navigate to Collection page and verify unit toggle is visible in TotalsBar"

View File

@@ -1,7 +1,7 @@
---
phase: 11-candidate-ranking
verified: 2026-03-16T23:30:00Z
status: human_needed
status: complete
score: 11/11 must-haves verified
re_verification:
previous_status: gaps_found

View File

@@ -1,7 +1,7 @@
---
phase: 16-multi-user-data-model
verified: 2026-04-04T00:00:00Z
status: gaps_found
status: deferred
score: 5/8 must-haves verified
gaps:
- truth: "All existing tests pass after updating to use { db, userId } from createTestDb"

View File

@@ -1,7 +1,7 @@
---
phase: 20-fab-full-screen-catalog-search
verified: 2026-04-06T06:30:00Z
status: human_needed
status: complete
score: 14/14 automated must-haves verified
re_verification: false
human_verification:

View File

@@ -1,7 +1,7 @@
---
phase: 21-item-catalog-detail-pages
verified: 2026-04-06T13:20:31Z
status: gaps_found
status: complete
score: 11/13 must-haves verified
re_verification: false
gaps:

View File

@@ -1,44 +1,46 @@
---
status: partial
status: complete
phase: 22-add-from-catalog-thread-integration
source: [22-VERIFICATION.md]
started: 2026-04-06T15:00:00Z
updated: 2026-04-06T15:00:00Z
updated: 2026-04-19T00:00:00Z
---
## Current Test
[awaiting human testing]
[complete]
## Tests
### 1. Add to Collection from catalog search overlay (collection mode)
expected: Clicking Add on a catalog card in collection mode opens AddToCollectionModal with category dropdown, notes textarea, and purchase price input. Submitting creates the item and shows 'Added to Collection' toast.
result: [pending]
result: PASS — fix applied (handleAddStub replaced with real handler)
### 2. Add to Collection from global item detail page
expected: Clicking 'Add to Collection' on /global-items/:id opens AddToCollectionModal with the correct item name pre-filled. Submit creates the item.
result: [pending]
result: PASS
### 3. Add to Thread (existing thread) from catalog search overlay (thread mode)
expected: Clicking Add in thread mode opens AddToThreadModal with a dropdown listing active threads. Selecting a thread and submitting adds the item as a candidate and shows a toast with the thread name. Subsequent adds pre-select the same thread (session memory).
result: [pending]
result: PASS
### 4. New Thread creation from thread picker
expected: Selecting '+ New Thread...' in the thread picker switches to create mode showing thread name + category fields. Submitting creates the thread and candidate in one step and shows 'Created [name] with first candidate' toast.
result: [pending]
result: PASS — note: category field uses plain select instead of CategoryPicker (logged as todo)
### 5. Thread resolution with catalog-linked candidate (CATFLOW-06 regression)
expected: Resolving a thread whose winning candidate has a globalItemId creates a new collection item with the global item link. Verifiable in /collection after resolution.
result: [pending]
result: PASS
## Summary
total: 5
passed: 0
passed: 5
issues: 0
pending: 5
pending: 0
skipped: 0
blocked: 0
## Gaps
- CategoryPicker not used in AddToThreadModal new-thread mode (logged as todo, not a blocker)

View File

@@ -1,7 +1,7 @@
---
phase: 22-add-from-catalog-thread-integration
verified: 2026-04-06T14:30:00Z
status: human_needed
status: complete
score: 9/9 must-haves verified
human_verification:
- test: "Add to Collection from catalog search overlay (collection mode)"

View File

@@ -1,7 +1,7 @@
---
phase: 24-public-access-infrastructure
verified: 2026-04-10T12:00:00Z
status: gaps_found
status: complete
score: 5/6 must-haves verified
re_verification: false
gaps:

View File

@@ -1,69 +1,65 @@
---
status: testing
status: complete
phase: 32-setup-sharing-system
source: [32-01-SUMMARY.md, 32-02-SUMMARY.md, 32-03-SUMMARY.md, 32-04-SUMMARY.md]
started: 2026-04-13T18:00:00.000Z
updated: 2026-04-13T18:00:00.000Z
updated: 2026-04-19T00:00:00Z
---
## Current Test
number: 1
name: Visibility badge on setup cards
expected: |
On the setups list page, each setup card shows a visibility indicator. Public setups show a green globe icon, link-shared show a blue link icon, and private show a gray lock icon.
awaiting: user response
[complete]
## Tests
### 1. Visibility badge on setup cards
expected: On the setups list page, each setup card shows a visibility indicator. Public setups show a green globe icon, link-shared show a blue link icon, and private show a gray lock icon.
result: [pending]
result: PASS
### 2. Share button on setup detail page
expected: On a setup detail page (as the owner), there's a "Share" button (desktop: text + icon, mobile: icon-only 44px touch target) that replaces the old public/private globe toggle. The icon reflects the current visibility state.
result: [pending]
result: PASS
### 3. Share modal — visibility picker
expected: Clicking the Share button opens a modal with three visibility options: Private (gray), Link (blue), Public (green). Selecting one immediately updates the setup's visibility via API call. Current state is highlighted.
result: [pending]
result: PASS
### 4. Share modal — create share link
expected: In the share modal, there's a section to create share links with an expiration dropdown (7 days, 14 days, 30 days, No expiration). Creating a link generates a URL and shows it in the active links list.
result: [pending]
result: PASS
### 5. Share modal — copy and revoke links
expected: Each active share link in the modal has a copy-to-clipboard button and a revoke button. Copying puts the URL in the clipboard. Revoking removes the link from the active list.
result: [pending]
result: PASS
### 6. Share modal — private deactivates links
expected: When switching visibility to "Private" while share links exist, links are deactivated (not deleted). Switching back to "Link" reactivates them.
result: [pending]
result: PASS
### 7. Short URL access (/s/token)
expected: Visiting /s/{token} redirects to /setups/{id}?share={token}. The setup loads correctly showing its items and totals.
result: [pending]
result: PASS
### 8. Shared setup viewer — read-only mode
expected: When viewing a setup via share token, a blue "Shared setup" banner appears at the top. All owner controls are hidden: no Add Items, no Share button, no Delete, no item removal, no classification cycling.
result: [pending]
result: PASS
### 9. Invalid share token error
expected: Visiting a setup with an invalid or expired share token shows a "Link not available" error page instead of the setup content.
result: [pending]
result: PASS
### 10. Discovery feed uses visibility
expected: Only setups with visibility="public" appear on the discovery feed and profile pages. Link-shared and private setups do not appear.
result: [pending]
result: PASS
## Summary
total: 10
passed: 0
passed: 10
issues: 0
pending: 10
pending: 0
skipped: 0
## Gaps
[none yet]
[none]

View File

@@ -1,5 +1,5 @@
---
status: diagnosed
status: complete
phase: 34-i18n-foundation
source: [34-01-PLAN.md, 34-02-PLAN.md, 34-03-PLAN.md, 34-04-PLAN.md, 34-05-PLAN.md]
started: 2026-04-17T00:00:00.000Z
@@ -27,9 +27,7 @@ result: pass
### 4. Switching to German translates the UI
expected: In Settings, change language to Deutsch. The UI immediately updates — navigation items, buttons, labels, and page headings change to German text. No full page reload required.
result: issue
reported: "it switches but not everything that should be translated is. Settings page is translated, but auto detect currency isn't. Profile isn't translated. On the home page nothing is translated, only the app bar at the top. The detail page isn't, the whole collection and setups pages aren't. Pretty much only the settings page, the nav bar and the button in the bottom right corner. Also not using ä/ö/ü — using ae instead."
severity: major
result: pass — was fixed (full page coverage + ä/ö/ü restored)
### 5. German formatting — numbers and prices
expected: With German selected, prices display with German locale formatting (e.g. "1.234,56 €" with period as thousands separator, comma as decimal, € symbol). Weight values also use comma as decimal separator where applicable.
@@ -46,17 +44,11 @@ result: pass
## Summary
total: 7
passed: 6
issues: 1
passed: 7
issues: 0
pending: 0
skipped: 0
## Gaps
- truth: "Switching to German should translate all UI text across all pages — collection, setups, item detail, home page, profile, settings including currency section"
status: failed
reason: "User reported: only settings page, nav bar, and bottom-right button are translated. Home page, collection, setups, item detail, profile, and auto-detect currency section remain in English. Also German special characters (ä/ö/ü) are not used — ae is used instead."
severity: major
test: 4
artifacts: []
missing: []
[none]

View File

@@ -1,7 +1,7 @@
---
phase: 34-i18n-foundation
verified: 2026-04-18T12:00:00Z
status: gaps_found
status: complete
score: 7/8 must-haves verified
overrides_applied: 0
re_verification:

View File

@@ -0,0 +1,15 @@
---
created: 2026-04-19T00:00:00.000Z
title: Use CategoryPicker in new thread creation flow (AddToThreadModal)
area: ui
files:
- src/client/components/AddToThreadModal.tsx
---
## Problem
When creating a new thread from the catalog search overlay (AddToThreadModal "New Thread" mode), the category field uses a plain `<select>` instead of the standard `CategoryPicker` component. This is inconsistent with other flows in the app (e.g., ManualEntryForm, CreateThreadModal) that use CategoryPicker with icons, search, and inline create.
## Desired Behavior
Replace the plain category `<select>` in AddToThreadModal's create-thread mode with `CategoryPicker` to match the standard pattern.