Repository navigation
refactor: pay down grid card chrome, notifier shims, and time-parse overload - #4385
Merged
Merged
Conversation
…verload Three debt items left behind by changes merged in the last week. Grid event cards: TimedEventCard and AllDayEventCard each carried their own copy of the card shell - the position/fill/focus style object, the wrapper class list, the edge-focus wiring, the past-event fill step, and the calendar/edge-focus label tail. Share them through grid-event-card-shell and useGridEventEdgeFocus so the two cards cannot drift (they already had: one spelled the transition duration-260, the other duration-[260ms]). Notifier: #4377 moved the reminder logic into packages/core and left pass-through shims behind in the web module (selectEventsToNotify, a notificationKey re-export, a NotifiableEvent alias, and a deprecated NOTIFY_LEAD_MINUTES). Callers now use core directly, and the tests that cover selectDueEventReminders move next to it. pruneFiredKeys no longer slices notification keys apart by hand; notificationKeyStartDate reads them in the module that builds them. Time parsing: #4380 gave parseUserTime a string | ParseUserTimeOptions second argument. Only tests passed the string form, so the union is gone and the signature is one options object. No behavior change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NYFh4s8XfD4u5129Jx3PdN
tyler-dane
marked this pull request as ready for review
October 10, 2026 10:51
tyler-dane
enabled auto-merge
October 10, 2026 10:51
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Three pieces of debt left behind by changes merged in the last seven days. No behavior change; the shared pieces are covered by the existing card, notifier, and parser suites.
Grid event cards (duplication).
TimedEventCardandAllDayEventCardeach carried their own copy of the card shell: the position/fill/focus style object, the wrapper class list, the edge-focus wiring, the past-event fill step, and the calendar + edge-focus tail of the accessible label. Earlier sweeps (#4338, #4360) pulled out the accent stripe, the fill helper, and the activation handler but left the shell behind, and the two copies had already drifted (one spelled the transitionduration-260, the otherduration-[260ms]; the dashed-outline condition was written two different ways). Newgrid-event-card-shell.tsanduseGridEventEdgeFocus.tshold the shared pieces; each card keeps only what is genuinely its own (the timed card's draft/drag/resize fill steps and time label, the all-day card's truncating title).Notifier shims (dead indirection). #4377 moved the reminder logic into
packages/coreand left pass-through shims in the web module:selectEventsToNotify(a one-line forward toselectDueEventReminders), a bareexport { notificationKey }re-export, aNotifiableEvent = RemindableEventalias, and a@deprecated NOTIFY_LEAD_MINUTESkept only for tests. The two consumers now import from core directly, and the tests that actually coverselectDueEventRemindersmove next to it inpackages/core.pruneFiredKeysalso stopped slicing notification keys apart by hand:notificationKeyStartDatereads a key in the module that builds it, so the key's shape lives in one place.parseUserTimeoverload (clunky signature). #4380 gave it astring | ParseUserTimeOptionssecond argument. Both production callers pass the options object; only tests passed the bare string, so the union is gone and the signature is one optional options object.Verify
The web suite needed
WEB_TEST_SHARDS=28to pass in this sandbox: at the default 6 shards one shard is OOM-killed (exit 137) partway through the untouchedcomponents/Settings,ShortcutShowcase, andSidebarspecs, and that reproduces identically on unmodifiedmainhere. Finer sharding is the runner's own memory knob, not a change to any test, and every web test passes under it (0 failures across 28 shards).🤖 Generated with Claude Code
https://claude.ai/code/session_01NYFh4s8XfD4u5129Jx3PdN