Goal / finish line
views/Day/components/Calendar/ and views/Week/components/Grid/ render through packages/web/src/grid/ with a day-count parameter; duplicated concepts (DayCalendarBusyPeriods vs MainGridBusyPeriods, dayAllDayRows.util vs AllDayRow/, DayCalendarEventCards vs MainGridEvents) exist once.
Acceptance
- Changing all-day rendering requires editing one component.
- The two 26-line per-view event registries collapse into
grid/interaction.
bun test:web, bun run test:e2e (allday, timed, navigation specs) green; no visual regression in the Day and Week screenshots the e2e suite already takes.
Context
Three grid implementations layered on each other; nothing in either view names the other. Split into slices (busy periods, all-day rows, event cards) so each PR stays small.
Package scope
web
Verify commands
bun test:web
bun run test:e2e
bun run verify --strict
Approval boundary
allow
Untrusted input
Goal / finish line
views/Day/components/Calendar/andviews/Week/components/Grid/render throughpackages/web/src/grid/with a day-count parameter; duplicated concepts (DayCalendarBusyPeriodsvsMainGridBusyPeriods,dayAllDayRows.utilvsAllDayRow/,DayCalendarEventCardsvsMainGridEvents) exist once.Acceptance
grid/interaction.bun test:web,bun run test:e2e(allday, timed, navigation specs) green; no visual regression in the Day and Week screenshots the e2e suite already takes.Context
Three grid implementations layered on each other; nothing in either view names the other. Split into slices (busy periods, all-day rows, event cards) so each PR stays small.
Package scope
web
Verify commands
Approval boundary
allow
Untrusted input