Repository navigation
What's Changed
- fix(web): stop signup toast from stealing 1:00 create by @tyler-dane in #3071
- fix(web): teach advertised shortcuts on blocked clicks by @tyler-dane in #3070
- fix(web): save booking settings with Mod+Enter by @tyler-dane in #3073
- refactor: share block-party, booking, and shortcut helpers by @cursor[bot] in #3075
- fix(web): keep guest form off empty-horizon jump by @tyler-dane in #3077
- fix(web): teach Esc on Up Next banner dismiss by @tyler-dane in #3074
- fix(web): land typed times on the focused week column by @tyler-dane in #3078
- refactor(web): collapse duplicated focus-retry loops and pointer hint lists by @tyler-dane in #3079
- fix(web): stop repeating email on destination calendar select by @tyler-dane in #3091
- fix(web): use icon buttons for booking link actions by @tyler-dane in #3092
- fix(web): pin booking keyboard hints to the sticky save bar by @tyler-dane in #3094
- fix(web): unwrap posthog's rejection prefix before dropping known noise by @tyler-dane in #3095
- feat(web): default to light theme by @tyler-dane in #3093
- fix(web): map booking save failures to actionable toasts by @tyler-dane in #3096
- fix(core): remove booking date-override feature by @tyler-dane in #3099
- feat(web): hand-hold the Block Party onboarding game by @tyler-dane in #3097
- feat(web): greet mobile visitors with the Time Block Party game by @tyler-dane in #3098
- perf(web): take the booking stack off the boot path and gate mobile LCP by @tyler-dane in #3101
- feat(web): return to the palette after overlay escape by @tyler-dane in #3100
- feat(web): redesign guest confirmation and cancel pages by @tyler-dane in #3104
- fix(ci): diagnose wedged unit test runs instead of raising the timeout by @tyler-dane in #3103
- fix(web): configure web vitals explicitly and reject zeroed timings by @tyler-dane in #3102
- fix(web): let series-scope toast own digits 1 and 2 by @tyler-dane in #3105
- fix(booking): let the Compass calendar block availability by @tyler-dane in #3106
- docs(booking): specify guest reschedule for v1.3 by @tyler-dane in #3123
- refactor: share game scoring, overlay dismiss, and booking put pick by @cursor[bot] in #3125
- refactor(web): extract shared booking number-field row by @tyler-dane in #3126
- refactor(web): resolve confirmed-page view like cancel page by @tyler-dane in #3127
- fix(web): move booking settings hint out of the sticky save bar by @tyler-dane in #3152
- fix(web): add diagnostic properties to sse connection degraded events by @tyler-dane in #3163
- feat(billing): add stripe publishableKey config (WP-01) by @tyler-dane in #3164
- feat(billing): add subscription summary, cancel, and resume (WP-02) by @tyler-dane in #3165
- feat(billing): add stripe.js embedded checkout port (WP-04) by @tyler-dane in #3168
- feat(billing): add setup-mode payment-method session (WP-03) by @tyler-dane in #3167
- fix(web): always show Mod+Enter keycaps on booking Save by @tyler-dane in #3153
- feat(web): contextual prompt for locked write shortcuts by @tyler-dane in #3166
- feat(web): copy buttons, text selection, and confusion-gated keyboard hint by @tyler-dane in #3171
- fix(web): make booking settings hint screen-reader readable by @tyler-dane in #3170
- feat(billing): render embedded checkout inside the gate (WP-05) by @tyler-dane in #3169
- feat(web): Escape backs out one step on the public booking picker by @tyler-dane in #3193
- feat(core): add booking reschedule contracts by @tyler-dane in #3124
- feat(web): Settings > Billing management view (WP-06) by @tyler-dane in #3194
- feat(web): Escape aborts the pending booking cancel confirm by @tyler-dane in #3195
- feat(web): update card inside Settings billing (WP-07) by @tyler-dane in #3196
- docs(billing): rewrite for embedded checkout (WP-08) by @tyler-dane in #3198
- feat(web): confirm discard before Escape closes dirty booking settings by @tyler-dane in #3197
- feat(web): return to booking page on confirmation Escape by @tyler-dane in #3199
- feat(booking): let guests edit name and notes after confirm by @tyler-dane in #3200
- feat(sync): reflect the Meet URL Google mints on booking create by @tyler-dane in #3201
- docs(booking): add product audit prompt for next-milestone work by @tyler-dane in #3116
- feat(booking): do not promise a Meet invite that cannot be minted by @tyler-dane in #3202
- fix(web): keep event form title visible beside copy button by @tyler-dane in #3203
- fix(web): keep cancel actions on the confirmation permalink by @tyler-dane in #3204
- docs(providers): add calendar providers spec by @tyler-dane in #3205
- fix(web): keep copy icons only on event guests by @tyler-dane in #3280
- fix(web): f4 then Enter opens the targeted event, not a 4am draft by @tyler-dane in #3281
- fix(booking): log failed race compensation instead of swallowing it by @tyler-dane in #3282
- fix(booking): bound confirmed reservation scans to the requested window by @tyler-dane in #3286
- fix(booking): rate-limit host admin GET and PUT page routes by @tyler-dane in #3287
- docs(booking): record that public rate limits are per-process by @tyler-dane in #3288
- fix(booking): expire guest cancel and edit tokens at slotEnd by @tyler-dane in #3289
- fix(booking): re-check billing before guest confirm by @tyler-dane in #3290
- fix(booking): mark cancel locally before deleting the event by @tyler-dane in #3291
- feat(scripts): run verify checks concurrently and prefer fast tiers by @tyler-dane in #3285
- refactor(booking): fold the repeated guest reservation lookups into helpers by @tyler-dane in #3296
- docs(ci): review the 2026-09-03 loop slowdowns and plan the fixes by @tyler-dane in #3298
- ci: cache docker layers and pin oven/bun to 1.3.14 by @tyler-dane in #3293
- fix(ci): run the unit matrix once per PR push by @tyler-dane in #3284
- ci: run perf-budget on main and nightly, not every web PR by @tyler-dane in #3292
- refactor(web): share the guest reservation view resolver by @tyler-dane in #3295
- refactor(web): name the booking welcome-text cap and the shared select class by @tyler-dane in #3297
- ci(test): shard e2e four ways, guard web shard memory, exit scripts on Bun's summary by @tyler-dane in #3300
- test(web): restore the TimePicker assertions #3285 weakened by @tyler-dane in #3301
- ci(booking-loop): auto-merge, per-PR guard concurrency, launch on merge, drop the ledger by @tyler-dane in #3299
- docs(ci): record which loop velocity fixes landed; name e2e shard checks by job id by @tyler-dane in #3302
- fix(booking): cap host notice hours and buffer minutes by @tyler-dane in #3303
- fix(booking): default host timezone from calendar not UTC by @tyler-dane in #3304
- fix(booking): pin slots availability to host timezone by @tyler-dane in #3305
- test(booking): close out v1.5 e2e, a11y, and spec by @tyler-dane in #3306
- docs(web): name the posthog exception wire properties next to capture_exceptions by @tyler-dane in #3310
- feat(ci): generalize booking-loop into a milestone-driven agent loop by @tyler-dane in #3311
- fix(ci): stop passing issue JSON through the environment in the picker by @tyler-dane in #3312
- feat(web): capture shortcut_key, context, and view on shortcut_unavailable_attempt by @tyler-dane in #3307
- refactor(scripts): drain constraint allowlists to documented globs by @tyler-dane in #3313
- fix(web): collapse per-instance lock ids in shortcut_unavailable_attempt context by @tyler-dane in #3315
- feat(web): name OverlayPanel lock reasons by title for shortcut telemetry by @tyler-dane in #3317
- feat(sync): exclude event ids from busy availability by @tyler-dane in #3316
- feat(scripts): single incremental type-check with project references by @tyler-dane in #3314
- feat(web): show reschedule actions on booking confirmation by @tyler-dane in #3320
- feat(web): add public reservation reschedule page by @tyler-dane in #3321
- test(e2e): cover guest reschedule and close booking v1.3 by @tyler-dane in #3323
- feat(ci): collapse static checks and shard unit (web) by @tyler-dane in #3325
- feat(backend): align updateBookingEvent and forward excludeEventIds by @tyler-dane in #3324
- docs(ci): review Copilot only on ready agent-loop PRs by @tyler-dane in #3327
- feat(backend): add public reservation reschedule APIs by @tyler-dane in #3319
- feat(ci): pick up to N non-overlapping agent-loop issues by @tyler-dane in #3326
- feat(providers): widen provider kinds and calendar capabilities (WP-01) by @tyler-dane in #3322
- feat: update og-image by @tyler-dane in #3329
- feat(booking): pin confirm duration and v1.4 recovery papercuts by @tyler-dane in #3330
- feat(scripts): make verify a verdict and lint report every finding by @tyler-dane in #3332
- fix(ci): let the merge queue own strategy in both merge guards by @tyler-dane in #3333
- chore(agents): collapse the agent instruction surface by @tyler-dane in #3328
- feat(web): split the welcome overlay into three one-action screens by @tyler-dane in #3342
- ci: add a unit rollup gate so the ruleset needs one unit context by @tyler-dane in #3340
- feat(sync): thread per-connection ProviderAdapters through dispatch and custody (WP-03a) by @tyler-dane in #3341
- feat(providers): add microsoft and apple config and deploy plumbing by @tyler-dane in #3343
- ci: let the loop merge CI-speed changes and lint workflows in static by @tyler-dane in #3344
- feat(scripts,sync): per-provider audit CLI and safety canary markers by @tyler-dane in #3345
- feat(sync): replace google-only wiring with a ProviderRegistry by @tyler-dane in #3355
- feat(sync): minimal CalDAV client and iCloud discovery by @tyler-dane in #3357
- feat(sync): parameterize oauth and notification public paths by provider by @tyler-dane in #3358
- feat(sync,core): add password credential kind with at-rest encryption by @tyler-dane in #3359
- feat(sync): Microsoft patternedRecurrence to RRULE conversion by @tyler-dane in #3360
- feat(sync): add Apple ICS to ProviderEventRead normalizer (WP-04) by @tyler-dane in #3361
- feat(sync): add shared adapter contract suite with recorded google corpus by @tyler-dane in #3363
- feat(ci): add nightly live-provider smoke against compass-smoke by @tyler-dane in #3366
- feat(web): cut block party to 11 tasks without repeated keys by @tyler-dane in #3365
- feat(sync): poll-only subscription short-circuit and per-provider reconcile cadence by @tyler-dane in #3367
- feat(sync): encrypt OAuth refresh tokens at rest by @tyler-dane in #3368
- chore(ci): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #3348
- chore(ci): bump actions/setup-node from 6 to 7 by @dependabot[bot] in #3349
- chore(ci): bump actions/cache from 5 to 6 by @dependabot[bot] in #3346
- feat(sync): add Apple credential validation auth adapter by @tyler-dane in #3364
- chore(deps): bump zod from 3.25.76 to 4.5.4 by @dependabot[bot] in #3354
- chore(ci): bump actions/checkout from 6 to 7 by @dependabot[bot] in #3347
- chore(deps): bump @types/react from 18.3.31 to 19.2.18 by @dependabot[bot] in #3352
- chore(deps): bump react-toastify from 9.1.3 to 11.1.0 by @dependabot[bot] in #3353
- feat(sync): Microsoft auth adapter (WP-01) by @tyler-dane in #3362
- feat(sync): add Apple CalDAV event reader with sync-collection by @tyler-dane in #3371
- feat(sync): add Apple ICS event serializer for CalDAV writes by @tyler-dane in #3374
- feat(sync): add Apple CalDAV event writer (WP-06b) by @tyler-dane in #3375
- fix(web): use one shortcut for calendar refresh by @tyler-dane in #3376
- feat(sync): configure Apple reconcile sweep cadence and sizing by @tyler-dane in #3377
- feat(backend): add provider-neutral connection API by @tyler-dane in #3378
- feat(web): add additive provider connect layer by @tyler-dane in #3380
- feat(web): migrate settings, sidebar, banners and toasts to provider layer (WP-08b) by @tyler-dane in #3382
- perf(api): harden shared HTTP boundaries by @tyler-dane in #3372
- fix(sync): keep legacy credentials usable without encryption key by @tyler-dane in #3385
- feat(booking): enable on any healthy writable destination by @tyler-dane in #3390
- docs(providers): match p0 architecture names in the spec by @tyler-dane in #3392
- feat(sync): add Microsoft Graph event normalizer (WP-04) by @tyler-dane in #3391
- feat(sync): Microsoft Graph event reader with delta (WP-05) by @tyler-dane in #3393
- feat(web): gate attendees on capabilities and neutralize provider copy by @tyler-dane in #3394
- feat(sync): Microsoft Graph event writer create, patch, delete, fetch (WP-06a) by @tyler-dane in #3395
- feat(sync): Graph event writer Teams conferencing and instance fetch (WP-06b) by @tyler-dane in #3396
- feat(sync): add Microsoft Graph people suggestions adapter (WP-08) by @tyler-dane in #3398
- feat(booking): Apple destination booking without video link by @tyler-dane in #3399
- feat(booking): support Microsoft Teams destinations and conference kinds by @tyler-dane in #3400
- refactor(sync): share contact suggestion ranking across people adapters by @tyler-dane in #3401
- fix(web): create events on the selected week column by @tyler-dane in #3388
- refactor(sync): share provider write-error classification by @tyler-dane in #3402
- feat(web): navigate the month picker by week with stable keyboard focus by @tyler-dane in #3404
- feat(sync): Microsoft calendar discovery adapter (WP-02) by @tyler-dane in #3405
- feat(sync): add Microsoft Graph change-notification adapter (WP-07) by @tyler-dane in #3406
- ci(e2e): install bun from npm instead of apt unzip plus setup-bun by @tyler-dane in #3407
- ci(e2e): skip shards for backend, sync, and scripts-only pull requests by @tyler-dane in #3408
- test(e2e): wait for the slot picker before public booking tests start by @tyler-dane in #3409
- ci(e2e): assign spec directories to shards by measured duration by @tyler-dane in #3410
- docs(ci): record after numbers for the 2026-09 CI audit by @tyler-dane in #3411
- feat(web): migrate sse, booking, calendars and analytics off google connect by @tyler-dane in #3412
- ci(agent-loop): allow auth and telemetry paths for the identity and closeout milestones by @tyler-dane in #3413
- feat(sync): register Microsoft in ProviderRegistry (WP-09) by @tyler-dane in #3423
- ci(agent-loop): allow auth paths for the apple milestone by @tyler-dane in #3422
- feat(sync): wire Microsoft live smoke and document fixture corpus (WP-12) by @tyler-dane in #3424
- fix(web): read provider-neutral auth and metadata contracts by @tyler-dane in #3425
- feat(sync): Apple credential connect route (backend and sync) by @tyler-dane in #3426
- fix(web): raise month picker day contrast in dark theme by @tyler-dane in #3427
- feat(backend): store user identities and look up by provider subject by @tyler-dane in #3430
- feat(web): Connect iCloud credential form (WP-09) by @tyler-dane in #3431
- refactor(web): retire legacy Google module alias shim by @tyler-dane in #3432
- feat(backend): Sign in with Microsoft recipe, handlers, and provider-neutral adoption by @tyler-dane in #3433
- feat(backend): add Sign in with Apple as a login method by @tyler-dane in #3434
- feat(backend): link verified emails across login methods by @tyler-dane in #3436
- feat(sync): register Apple in ProviderRegistry and bind connection adapters (WP-08) by @tyler-dane in #3429
- feat(sync): record Apple fixture corpus and wire live smoke (WP-11) by @tyler-dane in #3437
- fix(sync): per-provider health snapshot and provider closeout docs by @tyler-dane in #3438
- feat(web): provider-parameterized sign-in start and callback by @tyler-dane in #3435
- feat(web): connect Microsoft in Settings, onboarding and the sidebar by @tyler-dane in #3428
- feat(web): sign-in buttons per configured provider and callback e2e by @tyler-dane in #3439
- test(e2e): microsoft connect, consent banner, and attendee coverage by @tyler-dane in #3440
- feat(web): connect-calendar prompt for signed-in users with no connections (WP-04) by @tyler-dane in #3441
- feat(web): verify cross-provider duplicate merge (Providers C WP-01) by @tyler-dane in #3443
- feat(web): per-connection health copy for every state and reason by @tyler-dane in #3445
- refactor: share instance ids, graph fetch, and booking slot helpers by @cursor[bot] in #3446
- docs(providers): document apple and microsoft setup by @tyler-dane in #3447
- refactor(web): retire the legacy google authorization shim by @tyler-dane in #3448
- refactor(sync): share watch and contacts error classification by @cursor[bot] in #3451
- refactor(sync): retire pass-through provider wiring indirection by @tyler-dane in #3452
- fix(backend): guard sse subscribe against a stream that ended before headers flush by @claude[bot] in #3450
- fix(ci): enable autofix auto-merge with a token that has contents:write by @tyler-dane in #3454
- Quiet month-picker colors and stage shortcut hints by @tyler-dane in #3453
- refactor(sync): consolidate command test scaffolding by @tyler-dane in #3460
- refactor(sync): unify recurring-series transitions by @tyler-dane in #3461
- refactor(backend): narrow the Stripe billing seam by @tyler-dane in #3462
- Revise features and limitations in README.md by @tyler-dane in #3464
- feat(web): reconnecting badge and reload prompt for degraded sse stream by @tyler-dane in #3467
- feat(web): name the key in the locked-shortcut upgrade toast and attribute conversions by @tyler-dane in #3468
- fix(web): polish welcome signup flow by @tyler-dane in #3463
- refactor(web): derive EventForm schedule state from the draft by @tyler-dane in #3466
- feat(backend): emit posthog events from the stripe webhook by @tyler-dane in #3471
- refactor(web): derive notification state from browser sources by @tyler-dane in #3472
- ci: quiet skip-flooded workflows and recalibrate the script budget by @tyler-dane in #3474
- fix(backend): wait for in-flight account deletion retry before mongo stop by @claude[bot] in #3444
- refactor(ci): simplify the agent loop by @tyler-dane in #3476
- fix(backend): align booking freshness with google reconcile lag by @tyler-dane in #3477
- fix(web): make add account chooser menu opaque by @tyler-dane in #3475
- feat(web): reuse sign-in pills for connect prompts by @tyler-dane in #3488
- feat(web): make settings nav read as clickable pages by @tyler-dane in #3489
- feat(booking): seed weekday hours and require them to enable by @tyler-dane in #3490
- feat(web): one-click turn on for the booking page by @tyler-dane in #3492
- feat(booking): editable booking address, contracts and backend (WP-05) by @tyler-dane in #3487
- feat(web): add booking page address field to essentials (WP-06) by @tyler-dane in #3493
- feat(web): add booking funnel analytics events (WP-07) by @tyler-dane in #3495
- refactor(booking): share default page input and drop unused connect idleLabel by @cursor[bot] in #3497
- feat(booking): close out v1.6 first-run coverage and spec (WP-08) by @tyler-dane in #3496
- refactor(booking): remove duplication left by the v1.6 booking work by @tyler-dane in #3498
- docs(agents): let agents merge a green PR instead of stopping at the label by @tyler-dane in #3499
- fix(web): show one header refresh control by @tyler-dane in #3500
- feat(booking): serve public pages at /meet with /book redirect by @tyler-dane in #3510
- feat(booking): rename host-facing copy from booking to meeting by @tyler-dane in #3511
- feat(booking): rename guest-facing copy from booking to meeting by @tyler-dane in #3519
- feat(sync): carry providerManaged read fact from provider read to web event (WP-02) by @tyler-dane in #3520
- fix(web): match welcome Google and email button widths by @tyler-dane in #3518
- feat(sync): store customizations for provider-managed event updates by @tyler-dane in #3522
- feat(booking): replace meeting e-leader with hold-Mod section chords by @tyler-dane in #3521
- feat(web): lock schedule for provider-managed events (WP-04) by @tyler-dane in #3524
- feat(web): meeting page on/off switch by @tyler-dane in #3523
- docs: document provider-managed events and add acceptance scenario (WP-05) by @tyler-dane in #3525
- feat(web): group weekly hours into day-pill rows by @tyler-dane in #3526
- fix(sync): classify google write 400 as unsupportedCapability by @tyler-dane in #3528
- feat(web): first-run meeting address screen by @tyler-dane in #3527
- test(e2e): close out booking v1.7 first visit, a11y, and docs by @tyler-dane in #3529
- fix(sync): held-off calendars are not stale for the booking gate by @tyler-dane in #3538
- feat(web): keep settings mod chords on sidebar pages only by @tyler-dane in #3539
- feat(web): weekly hours start and end time menus by @tyler-dane in #3540
- feat(booking): remove buffer, welcome text, max per day, and guest invites by @tyler-dane in #3542
- feat(web): keep booking settings from scrolling horizontally by @tyler-dane in #3543
- feat(web): guided booking first-run setup wizard by @tyler-dane in #3546
- test(booking): cover unbookable guest state and v1.8 closeout docs by @tyler-dane in #3547
- refactor(booking): share leftover helpers after meeting and hours work by @cursor[bot] in #3548
- feat(booking): close out v1.8 WP-07 (unbookable e2e, a11y, doc drift) by @tyler-dane in #3549
- feat(web): anchor settings dialog to the top by @tyler-dane in #3556
- feat(web): list weekly hours per day with several blocks by @tyler-dane in #3557
- feat(web): drop slug helper, invite footnote, and live at by @tyler-dane in #3558
- feat(web): move meeting timezone under More options by @tyler-dane in #3559
- fix(web): close booking v1.9 a11y sweep and spec drift by @tyler-dane in #3560
- refactor(booking): share the guest slot picker across booking and reschedule by @tyler-dane in #3561
- fix(sync): request Google Meet on booking event inserts by @tyler-dane in #3576
- fix(web): align weekly hours lines and show timezone on go-live by @tyler-dane in #3578
- fix(web): move destination calendar under More options in booking settings by @tyler-dane in #3580
- fix(web): lead the mobile intro with the desktop pitch before the game by @tyler-dane in #3581
- fix(web): drop copy-link buttons from the confirmation page by @tyler-dane in #3579
- fix(web): keep the meeting tab visible when a calendar needs reconnecting by @tyler-dane in #3582
- fix(web): stop the settings dialog flashing the calendar on first scroll by @tyler-dane in #3583
- fix(booking): meeting description blank lines and linked URLs in editor by @tyler-dane in #3585
- fix(web): keep series base rows cached so edit-all rebases onto the series by @tyler-dane in #3586
- feat(booking): show host when guests cannot book by @tyler-dane in #3587
- feat(booking): toast the host when a guest books by @tyler-dane in #3589
- feat(web): show sidebar nudge to set up the meeting page by @tyler-dane in #3590
- feat(web): keep the meeting link when the page is off by @tyler-dane in #3591
- fix(web): booking setup wizard dead-ends, Back button, address focus by @tyler-dane in #3592
- fix(web): send shortcut identity properties to posthog by @tyler-dane in #3593
- fix(web): announce unavailable booking days and close v1.10 docs by @tyler-dane in #3594
- feat(web): teach the shortcut on every click by @tyler-dane in #3597
- fix(web): paint the calendar shell before app startup by @tyler-dane in #3606
- fix(sync): count only live channels in the never-notified gauge by @tyler-dane in #3608
- fix(web): align billing receipts and group plan actions by @tyler-dane in #3607
- refactor(web): share booking reconnect and destination helpers by @cursor[bot] in #3609
- refactor(web): collapse booking destination and weekly-hours duplication by @tyler-dane in #3610
- feat(web): add typed signup funnel steps by @tyler-dane in #3611
- fix(web): recover from provider callback failures by @tyler-dane in #3612
- feat(web): re-surface the connect calendar prompt by @tyler-dane in #3613
- test(e2e): cover the consent-screen cancel path by @tyler-dane in #3614
- chore(ci): bump actions/cache from 5 to 6 by @dependabot[bot] in #3599
- chore(ci): bump actions/checkout from 6 to 7 by @dependabot[bot] in #3600
- chore(deps): bump google-auth-library from 10.9.1 to 11.0.2 by @dependabot[bot] in #3602
- chore(deps): bump @googleapis/calendar from 14.3.0 to 16.0.0 by @dependabot[bot] in #3601
- chore(deps): bump @faker-js/faker to 10 across packages by @tyler-dane in #3615
- chore(deps): bump the minor-and-patch group with 5 updates by @dependabot[bot] in #3598
- feat(core): add hidden event visibility contracts by @tyler-dane in #3624
- feat(core): expose deploy version and shared PostHog error keys by @tyler-dane in #3625
- feat(backend): store hidden event ids per user by @tyler-dane in #3627
- feat(web): add hidden-events query and local fallback by @tyler-dane in #3629
- feat(web): tell same-email accounts apart by provider by @tyler-dane in #3632
- feat(web): render hidden events as a narrow strip by @tyler-dane in #3631
- fix(ci): join deploy health-check version probe onto /config by @tyler-dane in #3633
- feat(web): hide or show focused event with x by @tyler-dane in #3634
- feat(web): add hide and show event to the context menu by @tyler-dane in #3635
- fix(backend): disable SuperTokens automatic account linking by @tyler-dane in #3637
- test(web): cover google and apple logos in the add-account menu by @tyler-dane in #3626
- fix(web): hide first-event prompt while the form is open by @tyler-dane in #3638
- test(e2e): close out hidden events with docs and a11y by @tyler-dane in #3636
- fix(web): start signup from connect chooser when signed out by @tyler-dane in #3639
- fix(web): tell one reconnect story across banner sidebar and toasts by @tyler-dane in #3640
- fix(ci): re-enter autofix on recurrence and failed runs by @tyler-dane in #3641
- fix(test): type core and backend fixtures by @tyler-dane in #3642
- fix(test): type sync fixtures part one by @tyler-dane in #3643
- refactor(web): share account options and hidden-event helpers by @cursor[bot] in #3646
- fix(test): type sync fixtures part two by @tyler-dane in #3647
- fix(sync): force microsoft consent so reconnect returns a refresh token by @tyler-dane in #3648
- chore(test): type check node tests by @tyler-dane in #3650
- refactor(web): clear technical debt from the last week of merges by @tyler-dane in #3651
- fix(ci): let dispatched autofix runs reach the agent by @tyler-dane in #3652
- fix(web): explain blocked edge-focus while editing an event by @tyler-dane in #3653
- fix(web): paint a week-view silhouette as the boot shell by @tyler-dane in #3654
- chore(deps): dependency hygiene dead, duplicated, and unexplained pins by @tyler-dane in #3630
- fix(web): hide sidebar provider marks except on shared-email hover by @tyler-dane in #3656
- fix(ci): escalate autofix PRs stuck without a terminal label by @tyler-dane in #3657
- fix(backend): capture the real parse error when a sync 200 body is not JSON by @claude[bot] in #3655
- chore(deps): bump stripe from 18.5.0 to 22.6.1 by @dependabot[bot] in #3603
- fix: stop transient sync blips from failing an event save by @tyler-dane in #3658
- feat(scripts): mint Microsoft refresh tokens for live-provider-smoke by @tyler-dane in #3660
- fix(scripts): drop select_account prompt from microsoft token minting by @tyler-dane in #3661
- feat(scripts): make microsoft smoke setup a single verified command by @tyler-dane in #3663
- docs: microsoft closeout, verified publisher, redirect shapes, staging proof by @tyler-dane in #3666
- fix(sync): match microsoft occurrences at minute precision, patch smoke against read version by @tyler-dane in #3665
- fix(scripts): surface the graph cause when microsoft smoke setup fails by @tyler-dane in #3667
- fix(sync): send a single microsoft oauth prompt value by @tyler-dane in #3668
- fix(scripts): fail live-provider-smoke when expected providers skip by @tyler-dane in #3669
- fix(booking): add newly discovered calendars to meeting blockers by @tyler-dane in #3670
- refactor(booking): share discovered-blocker merge by @cursor[bot] in #3671
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3672
- fix(sync): patch against the fresh provider version on a bare key rotation by @tyler-dane in #3675
- fix(sync): retry the smoke patch after an exchange change-key bump by @tyler-dane in #3673
- fix(sync): carry content-length in the invalidResponse detail by @claude[bot] in #3678
- fix(web): move refresh control to the sidebar footer by @tyler-dane in #3679
- fix: clear the active posthog error-tracking issues by @tyler-dane in #3681
- feat(web): simplify the welcome start screen by @tyler-dane in #3680
- fix(core): treat mongo connection pool checkout timeouts as transient by @claude[bot] in #3683
- fix(web): explain blocked overlay shortcuts by @tyler-dane in #3684
- feat(web): add rsvp jump target to form shortcuts by @tyler-dane in #3685
- refactor: reuse digit-jump index and attendee status maps by @cursor[bot] in #3690
- fix(backend): use stripe embedded_page ui_mode and name unexpected sync statuses by @tyler-dane in #3691
- ci(deploy): require sync credential encryption key on every deploy by @tyler-dane in #3692
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3693
- fix(web): coalesce sse-driven refetches into one per window by @tyler-dane in #3696
- fix: bound calendar reads and cancel obsolete range requests by @tyler-dane in #3701
- fix(web): report storage failures and record undo after persist by @tyler-dane in #3702
- perf(web): defer closed dialogs from the calendar boot path by @tyler-dane in #3704
- fix(web): seed week geometry from the boot shell by @tyler-dane in #3705
- perf(web): restore static imports for closed dialogs by @tyler-dane in #3706
- fix(backend): require confirmed sync outcomes for booking writes by @tyler-dane in #3721
- fix(core): reject nonexistent dst wall times in booking slots by @tyler-dane in #3722
- fix(backend): include destination health in booking readiness by @tyler-dane in #3723
- fix(backend): make new-meeting notices lossless by @tyler-dane in #3725
- fix(core): redact booking capabilities from telemetry and logs by @tyler-dane in #3726
- fix(web): discard grid draft when hiding from the week menu by @tyler-dane in #3724
- fix(backend): share public booking rate limits across replicas by @tyler-dane in #3727
- refactor: reuse event invalidation prefix and booking helpers by @cursor[bot] in #3729
- feat(web): add host and guest booking funnel transitions by @tyler-dane in #3730
- fix(backend): persist booking intent and recover interrupted ops by @tyler-dane in #3731
- fix(backend): prevent overlapping reschedules and preserve concurrent edits by @tyler-dane in #3732
- fix(backend): give booking edits retry-safe operation identities by @tyler-dane in #3734
- feat(backend): emit booking lifecycle and recovery health signals by @tyler-dane in #3735
- feat(scripts): publish meeting dashboard and monitoring rules by @tyler-dane in #3736
- docs: record meeting release evidence and recommended no-go by @tyler-dane in #3737
- refactor(backend): dedupe booking operation resume and insert plumbing by @tyler-dane in #3738
- feat(backend): start a card-less local trial at signup by @tyler-dane in #3746
- feat(web): qualify shortcut hint impressions by dwell by @tyler-dane in #3747
- fix(web): ignore welcome faq double-clicks by @tyler-dane in #3749
- feat(web): place mobile game pieces with tap-to-place by @tyler-dane in #3750
- feat(web): register version on posthog events by @tyler-dane in #3748
- feat(web): prompt local trials to add a card by @tyler-dane in #3751
- refactor: share checkout panel and booking capture helpers by @cursor[bot] in #3793
- fix(sync): bulkWrite provider pages and skip reimport by @tyler-dane in #3788
- fix(core): keep internal sync sockets alive across polls by @tyler-dane in #3789
- fix(web): overlap db init session and event prefetch by @tyler-dane in #3791
- fix(sync): invalidate only when a pull changed something by @tyler-dane in #3785
- fix(sync): skip outbox writes on connection list reads by @tyler-dane in #3784
- fix(backend): dedupe sse invalidations per calendar per tick by @tyler-dane in #3778
- fix(backend): parse events once and memoize timezones by @tyler-dane in #3780
- feat(core): add environment to log resources by @tyler-dane in #3776
- fix(sync): skip enqueue for inactive calendars by @tyler-dane in #3777
- fix(backend): add calendar indexes and billing projection by @tyler-dane in #3779
- fix(web): stabilize grid measurement refs by @tyler-dane in #3774
- feat(web): report boot-set size and fail over budget by @tyler-dane in #3781
- fix(backend): parallelize metadata reads and hoist config by @tyler-dane in #3783
- refactor(web): derive shortcut legend from shared binding tables by @tyler-dane in #3794
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3795
- fix(backend): tolerate the migration-era userId_1 calendar index at startup by @tyler-dane in #3797
- fix(web): treat overlay tab as native focus by @tyler-dane in #3810
- feat(web): find events by title from the command palette by @tyler-dane in #3814
- feat(web): precompress self-host web assets with brotli and gzip by @tyler-dane in #3815
- feat(web): go to a typed date with G and the palette by @tyler-dane in #3816
- feat(web): move events an hour or a week with Alt+Shift+Arrow by @tyler-dane in #3817
- fix(web): calibrate boot chunk ceiling; correct self-host encode docs by @tyler-dane in #3818
- feat(web): paste copied events onto the selected day by @tyler-dane in #3819
- docs: plan the welcome email sequence by @tyler-dane in #3703
- feat(web): report shortcut_invoked with registry id by @tyler-dane in #3821
- feat(web): toggle calendars with digits in a focused list by @tyler-dane in #3820
- docs(providers): record microsoft work-tenant proof by @tyler-dane in #3823
- ci(web): require the boot-size build check on pull requests by @tyler-dane in #3825
- fix(ci): treat a failed release-on-main run as a red main by @tyler-dane in #3826
- feat(ci): notify Discord on release and deploy failures by @tyler-dane in #3827
- feat(web): show used shortcuts in the legend overlay by @tyler-dane in #3824
- refactor(ci): share the failure notifier and the ci web build config by @tyler-dane in #3829
- fix(core): treat mongo socket read timeouts as transient by @claude[bot] in #3813
- feat(web): teach palette shortcuts with next-time hints by @tyler-dane in #3822
- feat(web): close out keyboard v1 acceptance, e2e, and a11y by @tyler-dane in #3831
- feat(web): add public printable /shortcuts catalog by @tyler-dane in #3828
- refactor: share catalog snapshot and recent-merge helpers by @cursor[bot] in #3832
- refactor(web): fold day and week grids onto shared primitives by @tyler-dane in #3833
- refactor(web): simplify Keyboard v1 without changing chords by @tyler-dane in #3834
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3836
- fix(ci): ship serve-web.ts's import into the web runtime image by @tyler-dane in #3837
- chore(claude): allow posthog exec calls without prompting by @tyler-dane in #3838
- docs(agents): note how web sessions create github milestones by @tyler-dane in #3859
- refactor(sync): split provider-command service and tests (pair 1/4 for #3335) by @tyler-dane in #3860
- refactor: typecheck provider-command tests and share week timed layer by @cursor[bot] in #3866
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3867
- perf(web): shorten the boot path to the first week paint by @tyler-dane in #3868
- fix(ci): use bun ecosystem for dependabot updates by @tyler-dane in #3869
- test(web): freeze booking picker fixture date by @tyler-dane in #3870
- refactor: share command token and grid overlay helpers by @cursor[bot] in #3871
- chore(deps): bump helmet from 7.2.0 to 8.3.0 by @dependabot[bot] in #3863
- chore(deps): bump supertokens-node from 23.1.0 to 24.0.3 by @dependabot[bot] in #3864
- chore(deps): bump the minor-and-patch group with 4 updates by @dependabot[bot] in #3861
- refactor(sync): re-home the split's orphaned docs and share the write stop by @tyler-dane in #3879
- fix(web): ask about the series after a nudge burst, not per keystroke by @tyler-dane in #3880
- refactor(web): share deferred nudge and series-scope helpers by @cursor[bot] in #3882
- refactor(sync): share the provider-command fetch, confirm, and series split by @tyler-dane in #3883
- refactor(sync): share linked-update resolve and occurrence commit by @cursor[bot] in #3884
- refactor: clear technical debt from the last week of merges by @tyler-dane in #3885
- refactor: share series-start split and grid recurrence by @cursor[bot] in #3886
- refactor(web): table the grid edit shortcut registrations by @tyler-dane in #3887
- fix(web): render an event once when its id repeats in a range read by @tyler-dane in #3893
- fix(web): show one booking blocker message and action by @tyler-dane in #3894
- fix(web): exclude current timezone from time travel search by @tyler-dane in #3896
- fix(web): prefetch day events with the route loader by @tyler-dane in #3897
- fix(web,backend): populate signup_failed error and log oauth callback step by @tyler-dane in #3899
- feat(web): make undo action-agnostic for hide, calendars, RSVP, and series refusal by @tyler-dane in #3895
- feat(sync): drop plaintext OAuth refresh acceptance and fail fast at startup by @tyler-dane in #3902
- fix(web): make context menu edit/duplicate/delete keyboard-only by @tyler-dane in #3900
- feat(web): searching state and collapsed series in command palette event search by @tyler-dane in #3901
- fix(web): make demo onboarding copy and banner keyboard-first by @tyler-dane in #3903
- fix(web): let a mounted G notice win over go-to-date by @tyler-dane in #3904
- docs(agents): auto-merge without waiting for a merge request by @tyler-dane in #3905
- fix(web): call compass a keyboard calendar on mobile by @tyler-dane in #3898
- fix(backend): emit checkout_completed when Stripe omits subscription on webhook by @tyler-dane in #3908
- fix(security): audit hardening and dependency bumps by @tyler-dane in #3909
- feat(web): show missing-permissions modal instead of toast by @tyler-dane in #3907
- refactor: simplicity audit (2-week window) by @tyler-dane in #3911
- fix(sync): refuse to boot without credential encryption key by @tyler-dane in #3920
- fix(backend): treat aborted sync body reads as timeouts by @tyler-dane in #3921
- fix(core): fingerprint exceptions by class and sanitized message by @tyler-dane in #3922
- test(web): upgrade msw to v2 by @tyler-dane in #3923
- perf(sync): index occurrence endAt and cap busy overlap reads by @tyler-dane in #3926
- docs: retire the welcome email plan doc for the tracking issue and WPs by @tyler-dane in #3910
- fix(web): back off and stop SSE reconnects; close streams on a schedule by @tyler-dane in #3925
- feat(scripts): add connection-report CLI by @tyler-dane in #3928
- fix(sync): sample health freshness from live connections by @tyler-dane in #3929
- fix(sync): parse storage records with strip read schemas by @tyler-dane in #3931
- perf(backend): fetch availability for every calendar in one Sync call by @tyler-dane in #3930
- fix(core): parse sync HTTP responses as z.object by @tyler-dane in #3932
- perf(web): fetch each event window once on cold boot by @tyler-dane in #3934
- fix(backend): stop PostHog alerts for expected billing 409s by @tyler-dane in #3937
- feat(sync): emit oauth_callback and oauth_return for connect funnel by @tyler-dane in #3936
- perf(web): import phosphor icons from per-icon paths by @tyler-dane in #3938
- perf(sync): warm mongo clients and wake idle job drains by @tyler-dane in #3939
- fix(ci): recalibrate lighthouse script transfer budget for main by @tyler-dane in #3940
- feat(backend): email config block and provider port (WP-01) by @tyler-dane in #3942
- feat(backend): welcome sequence emailSend ledger (WP-02) by @tyler-dane in #3943
- perf(web): drop zod locales, rrule, and bson from boot by @tyler-dane in #3944
- fix(ci): keep commas inside milestone titles in the agent loop queue by @tyler-dane in #3946
- feat(web): merge duplicate copies across any two calendars by @tyler-dane in #3947
- fix(web): bundle production react when the config says production by @tyler-dane in #3948
- fix(sync): skip connection invalidation on idle lastSyncedAt ticks by @tyler-dane in #3949
- fix(web): bundle production react for staging docker builds by @tyler-dane in #3950
- feat(web): one onboarding surface at a time (Simplify v1 WP-01) by @tyler-dane in #3951
- fix(sync): ignore foreground pulls when deriving catching up by @tyler-dane in #3952
- feat(backend): welcome sequence v1 WP-03 queued row to delivered email by @tyler-dane in #3945
- docs: email-ready staging launch ops checklist (WP-07) by @tyler-dane in #3955
- feat(backend): welcome sequence unsubscribe and provider suppression (WP-04) by @tyler-dane in #3956
- feat(backend): welcome sequence WP-05 heartbeat, analytics, deploy wiring by @tyler-dane in #3957
- fix(web): make the welcome flow respond to every mouse click by @tyler-dane in #3953
- refactor: share onboarding eligibility and recent-merge helpers by @cursor[bot] in #3958
- feat(web): make shortcut showcase opt-in for new visitors by @tyler-dane in #3959
- refactor(web): simplify v1 WP-06 legacy keys, notification source, trial banner dismiss by @tyler-dane in #3965
- fix(scripts): stabilize parallel scripts tests under shared mongod by @tyler-dane in #3964
- feat(web): sidebar tip mute and slower cadence (Simplify v1 WP-05) by @tyler-dane in #3962
- refactor: pay down duplicated scaffolding from the last week of merges by @tyler-dane in #3966
- refactor(web): remove click-to-teach pointer tracker (Simplify v1 WP-04) by @tyler-dane in #3961
- docs(e2e): simplify v1 WP-07 closeout acceptance and e2e by @tyler-dane in #3967
- refactor(providers): drop P0 wire aliases (WP-06) by @tyler-dane in #3968
- ci(agent-loop): drop file-count merge guard by @tyler-dane in #3969
- fix(backend): repair welcome email unsubscribe link and webhook logging by @tyler-dane in #3984
- fix(backend): retry welcome emails on a rejected api key by @tyler-dane in #3987
- feat(booking-web): scaffold apps/booking-web (WP-01) by @tyler-dane in #3985
- fix(ci): restore main after booking-web workspace wiring (#3985) by @tyler-dane in #3989
- feat(scripts): booking-web Docker and compose service (WP-03) by @tyler-dane in #3988
- feat(booking-web): move guest /meet routes out of calendar-web (WP-02) by @tyler-dane in #3990
- feat(scripts): booking-web-only staging deploy pipeline (WP-04) by @tyler-dane in #3991
- feat(ci): staging Caddy apply and booking-web deploy SSH fix by @tyler-dane in #3992
- fix(ci): fetch private infra Caddyfile via gh api by @tyler-dane in #3994
- fix(sync,backend): reduce PostHog Discord noise from transient sync and Resend webhooks by @tyler-dane in #3995
- fix(e2e): stabilize calendar-experience writable picker and hide width checks by @tyler-dane in #3996
- docs: correct gh and GraphQL facts for web sessions in AGENTS.md by @tyler-dane in #3941
- fix(web): calendar-web cutover off guest /meet (WP-06) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/3997
- docs: booking-web guest /meet topology (WP-07) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/3998
- refactor: pay down leftovers from the booking-web move by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/3999
- refactor: pay down dev-server duplication and the dead booking-web shim by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4000
- refactor: pay down leftover booking-web, email, and form-import debt by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4006
- refactor: pay down duplicated predicates and guest-cutover leftovers by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4007
- fix(backend): emit checkout_completed for card-less signup trials by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4010
- fix(web): reload once when a post-boot chunk is missing after a deploy by @PostHog[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4011
- fix(web): correct PostHog environment on staging web by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4012
- refactor: share checkout capture and booking-web page fixtures by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4013
- refactor(booking-web): share the guest page-query gate and status copy by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4014
- fix(web): repair up-next join shortcuts and OS event notifications by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4015
- chore(deps): bump date-fns from 2.30.0 to 4.4.0 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4002
- chore(deps): bump @types/supertest from 6.0.3 to 7.2.1 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4003
- chore(deps): bump express-rate-limit from 7.5.1 to 8.7.0 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4004
- feat(core): enable booking in production by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4016
- chore(deps): bump google-auth-library from 10.9.1 to 11.1.0 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4005
- fix(booking-web): serve guest bundle under /meet so the proxy routes it by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4021
- feat(web): step back through settings pages with browser back by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4022
- chore(deps): bump the minor-and-patch group across 1 directory with 27 updates by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4001
- fix(web): parse loosely typed times in the time picker by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4024
- fix(web): read leading-zero times as 24-hour by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4025
- Update booking page URL in README by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4031
- fix(backend): hide apple provider in production by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4030
- feat(booking): ship booking-web in full deploys and declutter the setup wizard by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4034
- feat(web): meeting page nudge copy and M shortcut by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4035
- chore(deps): bump the minor-and-patch group across 1 directory with 10 updates by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4028
- fix(backend): downgrade unmapped booking errors to warn when operational by @claude[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4023
- fix(core): accept bookingWeb in Compass config schema by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4036
- fix(ci): emergency SSH restore strips bookingWeb from compass.yaml by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4037
- fix(ci): harden emergency strip (www probe, orphan containers) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4038
- fix(deps): complete #4028 booking-web pins and boot-size ceilings by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4039
- fix(ci): deploy booking-web on port 9082 for staging and production by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4040
- fix(self-host): keep booking-web running on read-only root filesystem by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4041
- fix(backend): keep sync proxy status on booking routes by @PostHog[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4027
- feat(backend): offer microsoft in production and self-host by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4042
- fix(booking-web): add compass footer and float the timezone picker by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4043
- fix(backend): render booking cancel and reschedule as short links by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4044
- feat(web): add google meet link on event create by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4045
- refactor: share conference labels, html escape, and notification payload by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4047
- feat(web): meeting page UX tweaks (link, footer CTA, palette, not-found) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4046
- refactor(web): pay down meeting-link, settings-nav, and search-flag duplication by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4048
- fix(web): limit Up Next join to virtual meeting URLs by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4049
- fix(sync): persist Outlook series color changes via Graph categories by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4050
- fix(web): remove shortcut unavailable toast by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4059
- feat(web): shortcut levels v1: a sidebar badge for keyboard progress by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4061
- feat(web): add meeting page discovery to command palette by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4060
- refactor(web): share live booking check and used shortcut ids by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4062
- refactor: move calendar web to apps/calendar-web by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4063
- refactor(web): pay down settings, booking, and preference-store debt from last week by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4064
- fix(booking-web): keep the phone action bar flush and hide keycaps on touch by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4066
- fix(web): send phone visitors of meeting setup to the desktop handoff by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4067
- test(self-host): wait for serve-web's ready line instead of polling by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4069
- feat(web): fire a sample notification when event notifications are enabled by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4070
- refactor(web): share booking tap-target classes and page predicates by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4071
- refactor(web): pay down guest meeting setup and shortcut level debt by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4072
- refactor(web): Monday simplicity audit cleanup (booking inputs, reconnect) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4075
- fix(web): add "the" to meeting page nudge heading by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4076
- feat(web): add year-month caption picker for life date of birth by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4086
- feat(backend): host delete cancels linked booking reservation (WP-07) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4094
- feat(web): grid cards show guest reply state (booking v1.11 WP-04) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4096
- fix(web): omit Today from Life view switcher menu by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4095
- fix(web): guest meeting setup hands off to sign-up and resumes by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4099
- feat(web): booking WP-06 cancel and reschedule from event form by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4100
- feat(booking): host toasts for guest cancel and reschedule (WP-03) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4098
- fix(booking): hide current slot on guest reschedule page by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4097
- feat(web): host toast when a guest replies (booking v1.11 WP-05) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4102
- docs(booking): close out v1.11 WP-08 acceptance, e2e, and spec alignment by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4105
- feat(web): trial v2 per-step signup telemetry and PostHog funnel (WP-04) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4108
- fix(web): remove duplicate sidebar account headings for provider calendars by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4109
- feat(backend): trial v2 WP-01 awaiting checkout at signup by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4107
- feat(web): move shortcut level badge to the sidebar header by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4110
- feat(web): trial v2 explore-first welcome and trial nudges (WP-03) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4111
- feat(web): trial step in auth modal, migrate anonymous events after checkout by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4112
- docs(e2e): Trial v2 WP-05 billing docs and signup trial step e2e by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4114
- fix(web): bring boot gzip under ceiling for Trial WP-02 by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4115
- refactor(web): share host toast nav and card reply chrome by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4116
- fix(web): headroom for staging-cloud boot gzip (+4 B) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4117
- refactor(web): pay down trial v2 billing and mirrored-state debt by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4119
- fix(web): keyboard-only context menu hide/colors; teach M on right-click by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4128
- fix(web): mouse intent WP-01 truth pass by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4130
- fix(web): read typed quick times as 24-hour clock by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4133
- feat(web): paint merged duplicate cards with a whole-card calendar gradient by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4132
- fix(web): boot gzip ceiling covers the environment web builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4134
- feat(web): pointer intent tracker (WP-02) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4129
- feat(web): hover-hunt reveals page-jump chips (WP-03) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4135
- feat(web): mouse intent WP-04 chrome and form click teaching by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4136
- refactor(web): share card fill and drop unused pointer-intent hook by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4137
- feat(web): mouse intent WP-06 skip persistence, Newcomer tips, Explorer retirement by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4140
- docs(web): mouse intent WP-07 closeout acceptance, e2e, and guidance by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4142
- fix(web): boot gzip headroom for mouse-intent staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4144
- refactor(web): one teach gate for every pointer hint by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4145
- test(sync): stabilize JobRepository enqueue wake integration test by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4146
- docs(web): plan keyboard-first meeting setup as command palette pages by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4148
- docs: plan the native macos app by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4147
- fix(booking): require guest token to read public reservations (launch security) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4073
- chore(deps): weekly security audit transitive dependency overrides by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4074
- fix(booking-web): render one page shell on the not-found view by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4164
- test(core): make diffRRuleOptions test clock and timezone independent by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4165
- fix(email): point welcome drip ctas at urls the app handles by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4166
- ci(scripts): teach loop, verify, and ci about apps/calendar-macos by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4167
- fix(web): raise boot gzip ceiling for welcome-link staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4168
- feat(booking-web): make bare /meet the meeting landing page by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4169
- feat(desktop): add the swift app skeleton hosting the web app in wkwebview by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4170
- feat(desktop): web bridge and OAuth callback relay (WP-02) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4171
- fix(web): keep the now line visible over accent-colored events by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4173
- fix(web): stop truncating shortcut level try-next labels by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4174
- refactor(billing): remove card-less local trial paths (WP-06) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4175
- refactor: share meeting-setup hrefs and parse desktop oauth deep links by @cursor[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4182
- feat(desktop): native notifications with window closed (WP-06) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4183
- fix(web): raise boot gzip ceiling for WP-06 staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4186
- refactor(desktop): one typed bridge surface and parsed compass:// links by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4188
- feat(desktop): dock badge and menu bar agenda (WP-07) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4185
- fix(web): raise boot gzip ceiling for v1.2.554 staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4191
- feat(desktop): native main menu and staging switch (WP-08) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4190
- feat(desktop): native main menu and staging switch (WP-08) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4192
- feat(desktop): global quick-add hotkey (WP-09) by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4193
- feat(desktop): WP-10 sleep resilience, offline page, launch at login, appearance by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4194
- chore(deps): bump jose from 5.10.0 to 6.2.12 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4180
- chore(deps): bump @googleapis/calendar from 16.0.0 to 20.0.1 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4177
- chore(deps): bump @testing-library/react from 14.3.1 to 16.3.3 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4178
- chore(deps): bump @types/node from 24.12.2 to 26.6.3 by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4179
- fix(web): find timezones by name like central or eastern by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4199
- fix(web): raise boot gzip ceiling for v1.2.564 staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4200
- chore(deps): bump the minor-and-patch group across 1 directory with 10 updates by @dependabot[bot] in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4198
- fix(web): raise boot gzip ceiling for v1.2.566 staging builds by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4201
- fix(web): send resumed guests back to a taken meeting address by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4202
- feat(desktop): release-macos.yml signed notarized universal DMG by @tyler-dane in https://github.com/KeepSoftwareSimple/compass-calendar/pull/4172
New Contributors
Full Changelog: v1.2.0...v1.3.0