Files
schalli 7110512d83
Tessera CI/CD / Lint & Type Check (push) Successful in 48s
Tessera CI/CD / Tests (push) Successful in 1m6s
Tessera CI/CD / Build & Publish Images (push) Successful in 2m58s
docs(quick-260916-k2z): Mehrfach-Kreise je Kalender am Tag; Zusammenfassung, Aktenstand
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 14:38:40 +02:00

8.8 KiB

phase, plan, subsystem, tags, requires, provides, affects, actuals, tech-stack, key-files, key-decisions, patterns-established, requirements-completed, coverage, duration, completed, status
phase plan subsystem tags requires provides affects actuals tech-stack key-files key-decisions patterns-established requirements-completed coverage duration completed status
quick-260916-k2z 01 ui
react
next.js
vitest
calendar-widget
dashboard
phase provides
quick-260916-jvj Plakette in Kalenderfarbe (badgeColor = day.events[0]?.color), Tooltip mit Farbpunkt je Zeile, sortierte Tagesgruppen in groupEventsByDate
groupDayBySource(events) — gruppiert Tagestermine nach sourceId (nicht Farbe), Reihenfolge = erstes Auftreten
buildDayBadges(events, max) — baut bis zu drei Plaketten-Kreise, ab dem vierten Kalender einen grauen Restkreis mit Summe
Kalender-Widget rendert je Kalender am selben Tag einen kleinen farbigen Kreis statt einer einzigen Gesamt-Plakette
dashboard-calendar-widget
calendar-month-helpers
tokens tasks commits
4700 2 2
added patterns
Reine Hilfsfunktionen ohne React/DOM in calendar-month.ts, vom Widget importiert (Muster aus resolveCalendarConfig/groupEventsByDate fortgeschrieben)
Ein DOM-Element traegt genau ein data-testid; mehrere gleichartige Elemente unterscheiden sich per rest-Flag im data-testid (calendar-day-count vs. calendar-day-count-rest), Positionierung wandert auf einen gemeinsamen Wrapper
created modified
apps/web/src/components/dashboard/widgets/calendar-month.ts
apps/web/src/components/dashboard/widgets/calendar-month.test.ts
apps/web/src/components/dashboard/widgets/calendar-widget.tsx
apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx
CHANGELOG.md
Grau-Wahl fuer den Restkreis: text-background statt text-white, weil --muted-foreground im Dunkelmodus hell ist (oklch 0.65) und weisse Schrift dort schwach waere; text-background ist auf beiden Themes lesbar (aus PLAN uebernommen, keine eigene Abweichung)
Gruppierung nach sourceId, nicht nach Farbe — zwei Kalender mit identischer Farbe bleiben zwei Kreise (aus PLAN uebernommen)
buildDayBadges(events, max = CALENDAR_DAY_BADGE_MAX) als generische Kappungslogik: erste max-1 Gruppen sichtbar, Rest zu einem Summen-Eintrag gebuendelt — wiederverwendbar fuer aehnliche Kappungsfaelle
QUICK-260916-K2Z
id description requirement verification human_judgment
D1 groupDayBySource gruppiert Tagestermine nach sourceId (nicht Farbe) in Reihenfolge des ersten Auftretens, Farbe = Farbe des ersten Termins der Gruppe QUICK-260916-K2Z
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-month.test.ts#Test 8: groupDayBySource gruppiert nach sourceId in Reihenfolge des ersten Auftretens pass
false
id description requirement verification human_judgment
D2 buildDayBadges liefert 1-3 Eintraege ohne Rest, ab dem vierten Kalender max-1 Eintraege plus einen rest:true-Eintrag mit summierter Anzahl QUICK-260916-K2Z
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-month.test.ts#Test 9: buildDayBadges liefert je Kalender einen Eintrag, ab dem vierten einen grauen Restkreis pass
false
id description requirement verification human_judgment
D3 Einzelplakette (ein Kalender am Tag) sieht unveraendert aus wie vor diesem Auftrag (Kalenderfarbe bzw. Akzentfarbe) QUICK-260916-K2Z
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3: Zaehl-Plakette zeigt die korrekte Terminanzahl je Tag pass
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3b: Plakette traegt die Kalenderfarbe des fruehesten Termins, Tooltip-Zeilen mit Farbpunkt pass
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3c: Plakette ohne Kalenderfarbe behaelt bg-primary pass
false
id description requirement verification human_judgment
D4 Zwei Kalender am selben Tag zeigen zwei kleine Kreise, je eigene Farbe und Anzahl, in Startreihenfolge QUICK-260916-K2Z
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3d: zwei Kalender am selben Tag zeigen zwei kleine Kreise in Startreihenfolge pass
false
id description requirement verification human_judgment
D5 Vier oder mehr Kalender am selben Tag zeigen zwei farbige Kreise plus einen grauen Restkreis mit der Summe der uebrigen QUICK-260916-K2Z
kind ref status
unit apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx#Test 3e: vier Kalender am selben Tag zeigen zwei Kreise plus grauen Restkreis mit Summe pass
false
id description verification human_judgment
D6 CHANGELOG.md-Stichpunkt erweitert; type-check und komplette Vitest-Suite gruen (52 Dateien / 354 Tests)
kind ref status
other pnpm --filter @tessera/web type-check && pnpm --filter @tessera/web exec vitest run pass
false
10min 2026-09-16 complete

Quick Task 260916-k2z: Kalender-Widget mehrere Kalender am selben Tag als kleine Kreise Summary

Kalender-Widget zeigt bei mehreren Kalendern am selben Tag je einen kleinen farbigen Kreis pro Kalender (bis drei), ab dem vierten Kalender zwei Kreise plus einen grauen Restkreis mit der Summe — via neuen reinen Hilfsfunktionen groupDayBySource/buildDayBadges in calendar-month.ts.

Performance

  • Duration: ~10 min (zwei Task-Commits 14:34:49 und 14:37:01 Uhr; Zeiterfassung nicht exakt ab Sitzungsbeginn protokolliert)
  • Tasks: 2
  • Files modified: 5

Accomplishments

  • groupDayBySource(events): gruppiert Tagestermine nach sourceId (nicht Farbe) in Reihenfolge des ersten Auftretens, Gruppenfarbe = Farbe des ersten Termins der Gruppe
  • buildDayBadges(events, max = 3): liefert 1-3 Einträge ohne Rest bzw. ab dem vierten Kalender max - 1 Einträge plus einen rest: true-Eintrag mit summierter Anzahl
  • Kalender-Widget: Plaketten-Rendering ersetzt (Wrapper calendar-day-badges, Kreise calendar-day-count/calendar-day-count-rest), Einzelplakette sieht unverändert aus wie zuvor
  • CHANGELOG-Stichpunkt erweitert

Task Commits

Each task was committed atomically:

  1. Task 1: Hilfsfunktionen groupDayBySource / buildDayBadges in calendar-month.ts mit Unit-Tests - 4ddadc6 (feat, TDD: RED vor Implementierung bestätigt)
  2. Task 2: Kreise je Kalender im Widget rendern, Komponententests, CHANGELOG, Gesamtlauf - 7429c5b (feat, TDD: RED vor Implementierung bestätigt)

Plan metadata: committed separately by the orchestrator (per constraints, this executor did not commit SUMMARY.md/STATE.md/PLAN.md)

Files Created/Modified

  • apps/web/src/components/dashboard/widgets/calendar-month.ts - neue Exporte DaySourceGroup, DayBadge, CALENDAR_DAY_BADGE_MAX, groupDayBySource, buildDayBadges; Kopfkommentar ergänzt
  • apps/web/src/components/dashboard/widgets/calendar-month.test.ts - Tests 8 (groupDayBySource) und 9 (buildDayBadges)
  • apps/web/src/components/dashboard/widgets/calendar-widget.tsx - Plaketten-IIFE durch Wrapper calendar-day-badges mit buildDayBadges(day.events).map(...) ersetzt; Import und Kopfkommentar angepasst
  • apps/web/src/components/dashboard/widgets/calendar-widget.test.tsx - Tests 3d (zwei Kalender) und 3e (vier Kalender) ergänzt
  • CHANGELOG.md - Stichpunkt unter „Geändert“ um „mehrere Kalender am selben Tag zeigen je einen kleinen Kreis“ erweitert

Decisions Made

  • Grau-Wahl für den Restkreis: text-background statt text-white — --muted-foreground ist im Dunkelmodus hell (oklch 0.65), text-background ist auf beiden Themes lesbar (aus dem Plan übernommen, keine eigene Abweichung nötig)
  • Gruppierung strikt nach sourceId, nicht nach Farbe (aus dem Plan übernommen)

Deviations from Plan

None - plan executed exactly as written. Die einzige Zahlenabweichung ist rein buchhalterisch: Der Plan nannte für calendar-widget.test.tsx 15 Tests, tatsächlich sind es 14 (12 bestehende + 2 neue); die im Plan als Gesamtgate genannte Summe von 354 Tests über alle 52 Dateien stimmt exakt — die einzelne Datei-Teilzahl im Plantext war ungenau, das Verhalten selbst ist unverändert zum Plan.

Issues Encountered

None.

User Setup Required

None - no external service configuration required.

Next Phase Readiness

  • Kalender-Widget-Feature ist vollständig, kein Folgeauftrag angelegt
  • Keine Blocker

Phase: quick-260916-k2z Completed: 2026-09-16

Self-Check: PASSED

All 5 modified files and the SUMMARY.md file confirmed present on disk; both task commits (4ddadc6, 7429c5b) confirmed present in git log --oneline --all.