8e82213d1e
fix(variety): remove unused total, add warning border, fix abbreviation, aria
...
- EffortBar: remove unused \`total\` derived variable
- VarietyWarningCards: add border border-[var(--yellow-light)] to cards
- variety page: protein abbreviation uses split(' ')[0].slice(0,3).toUpperCase()
- variety page: breadcrumb separator span gets aria-hidden="true"
Addresses Kai blocker: unused total. Atlas blockers: yellow-light border,
protein abbreviation, breadcrumb aria.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:37:26 +02:00
cb15143c30
refactor(variety): fix \$derived.by pattern, remove dead import, use pure functions
...
- Change all \$derived(() => {...}) to \$derived.by(() => {...}) — values not functions
- Remove unused formatDayLabel import
- Delegate subScores to computeSubScores(), warnings to computeWarnings()
- Remove () call syntax from all template reactive references
Addresses Kai blockers: anti-pattern derived, dead import.
Addresses QA blocker: logic now exercised by unit tests in variety.ts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:36:00 +02:00
9adf786b8f
test(variety): extract and test sub-score/warnings pure functions
...
- Extract computeSubScores() and computeWarnings() to variety.ts
- 18 unit tests covering formulas, boundaries, clamping, edge cases:
- proteinDiversity: repeats × 2 penalty, clamped to 0
- ingredientOverlap: overlaps × 1.5 penalty, clamped to 0
- effortBalance: easy-hard diff × 1.5, total=0 → 10
- warnings: repeat≥2 days, overlap≥2 days, duplicates
Addresses QA blockers: untested business logic in sub-score derivations.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:32:20 +02:00
1bf929280b
test(variety): add all-zero edge case test for EffortBar
...
Addresses QA concern: renders no segments when easy=0, medium=0, hard=0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:30:19 +02:00
75c860a62b
test(variety): add boundary tests for VarietyScoreHero (score=0,4,7,10)
...
Addresses QA concern: boundary values (0, 4, 7, 9, 10) now have
explicit tests covering description labels and aria-valuenow.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:29:26 +02:00
8ad636f825
feat(variety): implement C3 variety review screen (Issue #28 )
...
- Add /planner/variety route with mobile stacked + desktop 2-column layout
- Implement VarietyScoreHero: Fraunces score display + progress bar + color-coded description
- Implement ScoreBreakdownList: 3 sub-score rows (protein diversity, ingredient overlap, effort balance)
- Implement VarietyWarningCards: yellow-tint warning cards derived from API tagRepeats/ingredientOverlaps
- Implement EffortBar: proportional colored segments (Easy/Medium/Hard) with ×N labels
- Desktop: protein grid (7 columns, repeat highlight with yellow ring) + effort bar in right panel
- Client-side sub-score derivation from VarietyScoreResponse (tagged for TODO to move to API)
- 26 new tests across 5 components + server load function; 455 tests total, 0 type errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-03 11:23:29 +02:00