makiolaj and Claude Sonnet 4.6
5f63e6f75d
fix: resolve Bun mock isolation contamination across test files
...
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
makiolaj and Claude Sonnet 4.6
4ccbb2b070
fix: wire catalog add buttons, fix Trans bold rendering, lint cleanup
...
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
makiolaj and Claude Sonnet 4.6
16058d0f4d
chore: update bun.lock for @anthropic-ai/sdk
...
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
makiolaj
065b262b5b
chore: add db:crawl and db:crawl-all npm scripts
2026-04-18 16:45:54 +02:00
makiolaj
44602d409e
feat: crawl-all batch runner — iterate active manufacturers by tier
2026-04-18 16:45:39 +02:00
makiolaj
3d2911cedc
feat: crawl-manufacturer agent script — Haiku tool-use loop + bulk upsert
2026-04-18 16:45:17 +02:00
makiolaj
b2a725a646
feat: canonical taxonomy — categories and tags for ingestion
2026-04-18 16:44:32 +02:00
makiolaj and Claude Sonnet 4.6
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
makiolaj
0b4715b80c
fix: update all tests and MCP catalog tool for manufacturerId schema migration
2026-04-18 16:30:11 +02:00
makiolaj
a508773809
feat: all services join manufacturers for global item brand display
2026-04-18 16:24:24 +02:00
makiolaj
2924c2269c
feat: item service joins manufacturers for brand display
2026-04-18 16:22:10 +02:00
makiolaj
12b3f8e380
feat: upsertGlobalItemSchema — brand → manufacturerSlug
2026-04-18 16:21:32 +02:00
makiolaj
5037350aa0
feat: global-item service uses manufacturerSlug, joins manufacturers for brand
2026-04-18 16:21:25 +02:00
makiolaj
8ff680ef92
feat: migrate globalItems — drop brand text, add manufacturerId FK
2026-04-18 16:19:31 +02:00
makiolaj and Claude Sonnet 4.6
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
makiolaj and Claude Sonnet 4.6
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
makiolaj and Claude Sonnet 4.6
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
makiolaj and Claude Sonnet 4.6
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
makiolaj
2cb83a63f1
docs: catalog population implementation plans (schema migration + ingestion script)
2026-04-18 14:49:34 +02:00
makiolaj and Claude Opus 4.6
bea386e7db
style(i18n): fix lint — formatting and import ordering across 21 files
...
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
makiolaj
1b2ddcd0bd
docs(phase-34): evolve PROJECT.md after phase completion
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
makiolaj
be5b318041
docs(phase-34): complete phase execution
2026-04-18 14:41:42 +02:00
makiolaj and Claude Opus 4.6
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
makiolaj
fefef38e9b
docs: add agent execution model to catalog population spec
2026-04-18 14:39:59 +02:00
makiolaj
4ba42f521c
docs(34): add code review report
2026-04-18 14:13:08 +02:00
makiolaj
26e20bd0d2
docs: catalog population design spec
2026-04-18 14:11:50 +02:00
makiolaj
fd874a3ff2
docs(34-05): complete German translations plan summary
...
- All 6 German locale namespaces verified complete and passing
- Key parity test passes (22/22)
- Build passes with both locales
2026-04-18 14:09:20 +02:00
makiolaj
31297a3921
fix(34-05): add missing German translation keys to collection namespace
...
- Add form.msrp, form.purchasePrice, form.itemNamePlaceholder, form.optionalNotes
- Fixes key parity test failure in tests/i18n/locales.test.ts
2026-04-18 14:08:51 +02:00
makiolaj
0570ee3ed5
chore: merge executor worktree (worktree-agent-a3da6e62 — plan 34-04)
2026-04-18 14:07:22 +02:00
makiolaj
a1ffcf3061
docs(34-03): complete locale-aware formatter integration plan summary
...
- All 5 tasks verified complete: useLanguage hook, formatPrice/formatWeight
with Intl.NumberFormat, useFormatters locale wiring, formatter tests
- 15 tests passing, build clean, CURRENCY_SYMBOLS removed
2026-04-18 14:07:09 +02:00
makiolaj
d08a49e8ab
docs(34-04): complete language picker and i18n sync plan summary
...
- Language picker in settings using pill-toggle pattern (English/Deutsch)
- i18n sync with DB setting on load via useEffect in RootLayout
- Both tasks verified complete at commit 46715cc
2026-04-18 14:06:48 +02:00
makiolaj
bf64b8f6a5
chore: merge executor worktree (worktree-agent-a1291d63 — plan 34-02)
2026-04-18 14:04:14 +02:00
makiolaj
3ff3ff4cb9
chore: merge executor worktree (worktree-agent-a5cefc89 — plan 34-08)
2026-04-18 14:03:25 +02:00
makiolaj and Claude Sonnet 4.6
f91417a24b
docs(34-02): complete extract hardcoded strings plan summary
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-18 14:02:41 +02:00
makiolaj
2aa156a6b7
feat(34-02): extract hardcoded strings from modals, routes, and catalog
...
- AddToCollectionModal: all labels, placeholders, toast messages
- collection/index.tsx: tab labels (Gear/Planning)
- threads/$threadId/index.tsx: thread detail page and AddCandidateModal
- items/$itemId.tsx: back links, action buttons, field labels, metadata
- setups/$setupId.tsx: all setup detail strings and confirm dialog
- users/$userId.tsx: public profile page strings
- global-items/index.tsx: discover/catalog filter UI strings
- Added catalog.json namespace (en + de) and registered in i18n.ts
- Extended en/de threads, setups, collection, common locales with missing keys
2026-04-18 14:01:09 +02:00
makiolaj
6fd8874970
feat(34-02): extract hardcoded strings from thread/candidate components
...
- CandidateCard: replace all hardcoded titles and badge text with t()
- CandidateListItem: add useTranslation, replace winner/delete/open labels and +/- Notes badge
- CandidateForm: add useTranslation, replace all form labels, placeholders, validation errors, submit button
- ComparisonTable: move STATUS_LABELS inside component with t(), replace all ATTRIBUTE_ROWS labels, View button, impact row labels
- StatusBadge: refactor STATUS_CONFIG to STATUS_ICONS + runtime STATUS_LABELS via t()
- CreateThreadModal: replace title, thread name label, category label, placeholder, cancel/submit buttons, error messages
- AddToThreadModal: replace modal titles, labels, placeholders, back/cancel/submit buttons, error messages
- threads.json: extend candidateForm with category, notes, pros, cons, product link labels and all placeholders
2026-04-18 13:44:26 +02:00
makiolaj
c5af1247c0
feat(34-02): i18n collection and item components
...
- CollectionView: t() for empty state, stats labels, filter text
- ItemCard: t() for tooltip title attributes
- ItemForm: t() for all form labels, placeholders, error messages, buttons
- CategoryPicker: t() for search placeholder, create button, no results
- CategoryFilterDropdown: t() for all categories label, search placeholder
- CategoryHeader: t() for save/cancel buttons, item count
- WeightSummaryCard: t() for title, legend labels, view mode toggle
- ItemPicker: t() for panel title, empty state, action buttons
- ManualEntryForm: t() for all form labels, error messages, submit button
- LinkToGlobalItem: t() for all UI chrome strings
- ProfileSection: t() for all form labels, messages, buttons
- collection.json: added new keys for categoryPicker, categoryFilter, weightSummary, itemPicker, categoryHeader, linkToGlobal, manualEntry, profileSection, itemCard
2026-04-18 13:35:59 +02:00
makiolaj
f4e93bf554
docs(34-08): complete German translation gap closure plan summary
...
- 58 missing German keys added across 5 de/*.json files
- 19/19 i18n parity tests pass
- 1 deviation: fixed JSON syntax error from smart quotes
2026-04-18 13:29:38 +02:00
makiolaj
23172f794f
fix(34-08): add 58 missing German translations to 5 de/*.json locale files
...
- de/common.json: add home, imageUpload, profile sections (34 keys)
- de/settings.json: add currency.suggestion, currency.switch, showConversions (4 keys)
- de/threads.json: add card.candidates, card.candidates_one, planning section (11 keys)
- de/setups.json: add card.by, card.anonymous, impact.compareWith (3 keys)
- de/collection.json: add tabs.setups, totals, classificationBadge (6 keys)
- Fixed JSON syntax error: replaced smart quotes in dangerZoneDescription with single quotes
- All German text uses proper Unicode umlauts throughout
- bun test tests/i18n/locales.test.ts: 19 pass, 0 fail
2026-04-18 13:29:12 +02:00
makiolaj
e27c919430
docs(34-01): complete i18n foundation plan summary
...
- Install react-i18next, i18next, i18next-browser-languagedetector
- Create 6 English namespace JSON files from component string extraction
- Initialize i18n with LanguageDetector before React rendering
2026-04-18 13:28:35 +02:00
makiolaj and Claude Opus 4.6
8634ca41c1
docs(34-08): gap closure plan for 58 missing German translations
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-18 13:22:25 +02:00
makiolaj
95c0ab4037
test(34): gap closure verification — 2 gaps found (missing German keys)
CI / ci (push) Failing after 21s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
2026-04-17 20:38:39 +02:00
makiolaj
6376cfcb8d
docs(34): add code review report
2026-04-17 20:34:56 +02:00
makiolaj
3c973e8ec1
docs(34-07): complete German umlaut correction plan summary
2026-04-17 20:31:24 +02:00
makiolaj
1963faea84
fix(34-07): replace ASCII umlaut fallbacks with proper Unicode in all German locale files
...
- common.json: Löschen, Schließen, Zurück, Bestätigen, Änderungen, Überspringen, Gegenstände, etc.
- collection.json: Ausrüstung, Gegenstände, Zusätzliche, Hinzufügen
- threads.json: wählen, Kategorie, hinzufügen, Sammlung, hinzugefügt
- setups.json: Ausrüstung, Gegenstände, Öffentlich, Läuft, können, Zurückschalten
- onboarding.json: Ausrüstung, Gegenstände, wählen, fügen, überspringen, prüfen, Stöbern
- settings.json: Schlüssel, Währung, Wählen, Ändern, Gegenstände, Ausrüstung
2026-04-17 20:30:48 +02:00
makiolaj
4a23904c3f
docs(34-06): complete i18n gap closure — routes and components plan summary
2026-04-17 20:27:39 +02:00
makiolaj
480abdd17f
feat(34-06): wire useTranslation into 10 remaining components
...
- ThreadTabs: tab labels (gear, planning, setups) via collection namespace
- PlanningView: section title, tab labels, empty state steps, CTAs via threads namespace
- TotalsBar: 'Sign in' link via common.auth.signIn
- ThreadCard: resolved badge and candidate count (plural) via threads namespace
- PublicSetupCard: by/anonymous and item count (plural) via setups namespace
- SetupImpactSelector: compare dropdown placeholder via setups.impact.compareWith
- ClassificationBadge: base/worn/consumable labels via collection.classificationBadge
- ImpactDeltaBadge: add mode label via setups.impact.adding
- ImageUpload: click-to-add, error messages via common.imageUpload
- DashboardCard: skipped (renders props only, no hardcoded UI strings)
- Add card, planning keys to en/de threads.json
- Add classificationBadge, tabs, totals keys to en/de collection.json
- Add card.by, card.anonymous, impact.compareWith to en/de setups.json
- Add imageUpload keys to en/de common.json
- Build passes, all 19 i18n parity tests pass
2026-04-17 20:26:50 +02:00
makiolaj
755c0ab89f
feat(34-06): wire useTranslation into routes and settings currency suggestion
...
- Add useTranslation to routes/index.tsx: home section headings use t()
- Add useTranslation to routes/profile.tsx: all profile/security/danger zone strings use t()
- Wire currency suggestion banner in settings.tsx with t() interpolation
- Wire showConversions section title/description in settings.tsx
- Add home and profile keys to en/common.json
- Add currency.suggestion, currency.switch, showConversions to en/settings.json
- Add corresponding German translations with proper umlauts to de/common.json and de/settings.json
2026-04-17 20:21:54 +02:00
makiolaj
b21ba0d97b
docs(34): create gap closure plans for missing i18n wiring and German umlauts
2026-04-17 20:09:47 +02:00
makiolaj
459a4ed4b0
test(34): UAT complete — 6 passed, 1 issue (incomplete German translation coverage)
2026-04-17 20:05:31 +02:00