Skip to content

refactor: pay down grid card chrome, notifier shims, and time-parse overload - #4385

Merged
tyler-dane merged 1 commit into
mainfrom
claude/kind-dirac-i298yw
Oct 10, 2026
Merged

tyler-dane merged 1 commit into
mainfrom
claude/kind-dirac-i298yw

Conversation

@tyler-dane

@tyler-dane tyler-dane commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

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). 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 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 transition duration-260, the other duration-[260ms]; the dashed-outline condition was written two different ways). New grid-event-card-shell.ts and useGridEventEdgeFocus.ts hold 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/core and left pass-through shims in the web module: selectEventsToNotify (a one-line forward to selectDueEventReminders), a bare export { notificationKey } re-export, a NotifiableEvent = RemindableEvent alias, and a @deprecated NOTIFY_LEAD_MINUTES kept only for tests. The two consumers now import from core directly, and the tests that actually cover selectDueEventReminders move next to it in packages/core. pruneFiredKeys also stopped slicing notification keys apart by hand: notificationKeyStartDate reads a key in the module that builds it, so the key's shape lives in one place.

parseUserTime overload (clunky signature). #4380 gave it a string | ParseUserTimeOptions second 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

Selected packages: core, web
Checks run: test:core, test:web, type-check, lint, knip, test:a11y, test:e2e
Checks skipped: (none)

✓ All checks passed
VERDICT: PASS

The web suite needed WEB_TEST_SHARDS=28 to pass in this sandbox: at the default 6 shards one shard is OOM-killed (exit 137) partway through the untouched components/Settings, ShortcutShowcase, and Sidebar specs, and that reproduces identically on unmodified main here. 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

…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
tyler-dane marked this pull request as ready for review October 10, 2026 10:51
@tyler-dane tyler-dane added the agent-automerge Agent-loop finished; merge-guard may squash-merge label Oct 10, 2026 — with Claude
@tyler-dane
tyler-dane enabled auto-merge October 10, 2026 10:51
@tyler-dane
tyler-dane added this pull request to the merge queue Oct 10, 2026
Merged via the queue into main with commit 4b7e061 Oct 10, 2026
27 checks passed
@tyler-dane
tyler-dane deleted the claude/kind-dirac-i298yw branch October 10, 2026 11:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-automerge Agent-loop finished; merge-guard may squash-merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants