Repository navigation
v1.1.0
What's Changed
- chore: delete reminder code by @tyler-dane in #1875
- refactor(web): migrate styled-components to Tailwind by @tyler-dane in #1873
- style: tooltips by @tyler-dane in #1880
- fix(web): delete draft events immediately by @tyler-dane in #1881
- fix(grid): sync placeholder color with active draft by @tyler-dane in #1882
- refactor(web): remove cursor styling from interaction engine by @tyler-dane in #1886
- fix(web): keep day event form closed after drag by @tyler-dane in #1888
- refactor(web): remove rxjs in favor of existing tools by @tyler-dane in #1890
- style: simplify box shadow css by @tyler-dane in #1883
- refactor(web): replace floating-form store bus with idiomatic floating-ui by @tyler-dane in #1893
- fix(web): restore day draft form opening after drag by @tyler-dane in #1894
- fix(web): honor manual scroll on timed drag commit by @tyler-dane in #1896
- fix(web): stop Cmd+D from also navigating to Day view by @tyler-dane in #1898
- fix(web): fix
Deleteshortcut by @tyler-dane in #1899 - chore(web): cleanup hook files and dead code by @tyler-dane in #1901
- fix(web): close actions menu on blur by @tyler-dane in #1902
- refactor: simplify actions menu by @tyler-dane in #1904
- deps: update posthog-js by @tyler-dane in #1905
- style(web): unify Day/Week view headers by @tyler-dane in #1906
- fix(web): simplify day view toasts and remove unsupported undo by @tyler-dane in #1908
- feat: resize tasks and consolidate storage by @tyler-dane in #1907
- fix(web): all-day clicks by @tyler-dane in #1909
- Add Claude Code GitHub Workflow by @tyler-dane in #1911
- fix(web): restore migrate-with-shortcut behavior and focus by @tyler-dane in #1912
- feat(web): add query listener infrastructure by @tyler-dane in #1913
- Revert "Add Claude Code GitHub Workflow" by @tyler-dane in #1915
- docs: update readme by @tyler-dane in #1916
- feat: migrate day-events read to TanStack Query + listener middleware by @tyler-dane in #1914
- refactor(web): replace sagas with simple objects by @tyler-dane in #1919
- refactor(web): use tanstack query for event reads by @tyler-dane in #1920
- refactor(web): move persisted events to query state by @tyler-dane in #1922
- docs: update README by @tyler-dane in #1923
- refactor(web): harden event mutations by @tyler-dane in #1924
- feat(web): Warm the event cache for instant week/day navigation by @tyler-dane in #1925
- feat(web): keep pending events interactive with sidebar sync spinner by @tyler-dane in #1926
- feat(web): move google sync status into sidebar email text, remove header icon by @tyler-dane in #1927
- refactor(web): convert redux to zustand by @tyler-dane in #1928
- docs: update domain model and sse flow by @tyler-dane in #1930
- feat: add claude ship skill and enable others by @tyler-dane in #1931
- fix(web): delete existing events via FloatingEventForm; fix flaky keyboard-delete e2e spec by @tyler-dane in #1932
- feat(web): reorganize shortcuts by action, add day 'a' and week 'u' by @tyler-dane in #1933
- feat(claude): consolidate simplify-code into simplify skill by @tyler-dane in #1934
- feat(web): adjust columns based on window width by @tyler-dane in #1935
- style: replace relic components with tailwind classes by @tyler-dane in #1936
- feat(claude): require manual testing steps in ship's PR bodies by @tyler-dane in #1937
- fix: stop auto-subscribing new users, make it opt-in by @tyler-dane in #1938
- fix(web): clear stale email from sidebar after sign-out by @tyler-dane in #1940
- style(web): move auth modal sign up/log in toggle to top-right by @tyler-dane in #1939
- feat(web): persist sidebar open state across refreshes by @tyler-dane in #1941
- style(web): keep header nav controls in a fixed position by @tyler-dane in #1942
- fix: adjust biome for claude and worktrees by @tyler-dane in #1943
- fix(web): make [ sidebar shortcut global and stop flash on refresh by @tyler-dane in https://github.com//pull/1945
- style(web): redesign welcome modal with single cta and browser-back nav by @tyler-dane in #1944
- fix(web): stop someday DnD month→week drop from clobbering new dates by @tyler-dane in #1946
- test(web): enable real dexie + fake-indexeddb round trips in web tests by @tyler-dane in #1947
- fix(web): show visual feedback when keyboard-lifting a day task by @tyler-dane in #1948
- docs: have simplify skill commit separately and curb useEffect overuse by @tyler-dane in #1949
- docs: remove image from README by @tyler-dane in #1951
- feat(web): persist week view position across refresh via /week/:dateString by @tyler-dane in #1950
- feat(web): migrate react-router-dom v6 to @tanstack/react-router (Phase 1 + partial Phase 2) by @tyler-dane in #1952
- refactor(web): replace react-cmdk with a native command palette (#1686) by @tyler-dane in #1953
- refactor(web): route auth modal ?auth= param through tanstack router by @tyler-dane in #1954
- fix(web): open sidebar for command palette event creation, add shortcuts + keycaps by @tyler-dane in #1955
- test(e2e): fix ci worker-contention flakiness, restore specs by @tyler-dane in #1956
- refactor(web): clean up post-migration comment/copy debt and dead code by @tyler-dane in #1957
- chore: add qa-staging skill for post-merge staging QA sweeps by @tyler-dane in #1959
- fix: remove auth params during oauth by @tyler-dane in #1960
- feat(web): undo/redo event changes with cmd/ctrl+z by @tyler-dane in #1961
- style: sidebar and cleanup deprecated configs/comments by @tyler-dane in #1962
- feat(dev): assign per-worktree dev ports via preflight script by @tyler-dane in #1963
- fix(web): make undo/redo reliable under rapid replay by @tyler-dane in #1964
- fix(backend): retry transient write conflicts in event sync transactions by @tyler-dane in #1965
- docs: capture debugging gotchas, add ship correctness-review gate by @tyler-dane in #1967
- feat(web): move events with shift+arrow keyboard shortcuts by @tyler-dane in #1958
- refactor: clean up july 8 merge debt by @tyler-dane in #1971
- fix(web): prevent event release flash by @tyler-dane in #1970
- test(web): streamline e2e smoke coverage by @tyler-dane in #1972
- refactor(web): rename interaction overlay to draft event by @tyler-dane in #1973
- docs: cleanup stale agent files and docs by @tyler-dane in #1974
- feat(day): default task list width to 600 by @tyler-dane in #1975
- fix(day): migrate task when the reorder handle is focused by @tyler-dane in #1976
- docs(web): document floating-ui positioning conventions by @tyler-dane in #1977
- chore(claude): add committed permission surface for autonomous workflow by @tyler-dane in #1978
- feat(claude): automate workflow by @tyler-dane in #1980
- fix(web): align logout dialog and drop stale logout keycap by @tyler-dane in #1981
- fix(web): humanize user-facing copy by @tyler-dane in #1982
- style(week): render the now line only on the current day's column by @tyler-dane in #1983
- fix(web): coalesce rapid event edits into a single write by @tyler-dane in #1984
- style(forms): extract a shared EventFormShell by @tyler-dane in #1985
- docs(claude): forbid task chips in the handoff window by @tyler-dane in #1986
- Revert "docs(web): document floating-ui positioning conventions" by @tyler-dane in #1979
- feat(claude): add cleanup skill by @tyler-dane in #1988
- fix(web): keep shortcut-list keys unique for repeated combos by @tyler-dane in #1987
- refactor(day): extract shared reorder-handle focus check by @tyler-dane in #1989
- feat(core): allow events to have empty title by @tyler-dane in #1990
- fix(backend): remove legacy saslprep dependency by @tyler-dane in #1991
- refactor: remove tinycolor from core by @tyler-dane in #1993
- feat(web): improve recurring event editing and delete flow by @tyler-dane in #1992
- docs(handoff): add files for 7-10-2026 by @tyler-dane in #1994
- feat(web): replace native alerts with error toasts and a confirm dialog by @tyler-dane in #1995
- fix(web): add SEO metadata to improve search and social previews by @tyler-dane in #1996
- fix(web): select an all-day date on the first click by @tyler-dane in #1997
- style(web): move the repeat icon bottom-right and color it by priority by @tyler-dane in #1998
- feat(web): make the left sidebar width adjustable by @tyler-dane in #1999
- feat: add new handoff docs by @tyler-dane in #2000
- style(web): keep datepicker arrows fixed and cap its width in the sidebar by @tyler-dane in #2001
- style(forms): give the event form shell one standard width by @tyler-dane in #2002
- fix(web): show the repeat icon on 15-minute recurring events by @tyler-dane in #2003
- fix(web): make repeat icons consistent across event types by @tyler-dane in #2004
- fix(web): render recurring "all events" time edits immediately by @tyler-dane in #2005
- feat(web): preview recurring draft occurrences across the week by @tyler-dane in #2006
- chore: move Claude Code local settings to gitignore by @tyler-dane in #2007
- fix(web): context menu color reflects event priority by @tyler-dane in #2008
- feat(backend): log health checks at debug level so they're hidden by default by @tyler-dane in #2009
- fix(web): tint context menu hover and drop dividers by priority by @tyler-dane in #2010
- fix(web): toast responds to undo by @tyler-dane in #2011
- docs(plan): add google sub-calendar v1 roadmap by @tyler-dane in #2012
- refactor(web): dissolve the common/ junk drawer into domain-colocated dirs by @tyler-dane in #2013
- refactor(core): define strict event contracts by @tyler-dane in #2015
- feat(scripts): harden calendar event migration by @tyler-dane in #2016
- docs: add plan for july 11 by @tyler-dane in #2014
- refactor: cut the event runtime over to calendar-owned contracts by @tyler-dane in #2017
- fix(scripts): replicate sort assignment in backfill verification by @tyler-dane in #2018
- refactor(web): remove event legacy bridge by @tyler-dane in #2019
- fix(web): stop grid drafts from displaying in UTC instead of local time by @tyler-dane in #2020
- refactor(web): convert Day drag-create preview to GridEventDraft by @tyler-dane in #2021
- refactor(web): read someday sidebar events as strict Event by @tyler-dane in #2022
- refactor(web): route someday create/delete/duplicate through strict mutations by @tyler-dane in #2023
- refactor(web): route someday edit/migrate through strict mutations by @tyler-dane in #2024
- refactor(web): route someday-to-scheduled conversion through strict mutations by @tyler-dane in #2025
- refactor(web): route someday same-column reorder through strict mutations by @tyler-dane in #2026
- refactor(web): route someday cross-column reorder through strict mutations by @tyler-dane in #2027
- docs(someday): record someday sidebar completion and forms-cluster blocker by @tyler-dane in #2028
- refactor(web): commit Week saved-event drag/resize through strict mutations by @tyler-dane in #2029
- refactor(web): convert Week draft state to GridEventDraft by @tyler-dane in #2030
- refactor(web): convert event forms cluster to GridEventDraft by @tyler-dane in #2031
- refactor(web): convert Day grid renderer off legacy bridge by @tyler-dane in #2032
- refactor(web): convert grid event view-model off legacy bridge by @tyler-dane in #2033
- refactor(web): dissolve the event legacy bridge by @tyler-dane in #2034
- docs(someday): check off packet 03 exit criteria and master-doc box by @tyler-dane in #2035
- feat(backend): centralize google request context and retry policy by @tyler-dane in #2036
- refactor(web): replace raw tailwind colors by @tyler-dane in #2037
- feat(backend): paginate and widen calendarlist eligibility by @tyler-dane in #2038
- fix(web): align someday event priority colors by @tyler-dane in #2039
- feat(backend): fan out event import across every eligible calendar by @tyler-dane in #2040
- fix(web): match someday event text and cursor by @tyler-dane in #2041
- feat(web): navigate weeks with horizontal scroll by @tyler-dane in #2042
- feat(backend): watch every imported calendar, redact google ids from logs by @tyler-dane in #2043
- docs(someday): close out packet 04 checkboxes and calendar lifecycle doc by @tyler-dane in #2044
- fix(web): restore someday drag cursor by @tyler-dane in #2045
- feat(backend): enforce calendar write capability on event mutations by @tyler-dane in #2046
- feat(web): shift week view by one day by @tyler-dane in #2047
- feat: add ux-sweep skill for proactive UX/a11y exploration by @tyler-dane in #2048
- feat(backend): sync series occurrence edits/deletes to google (packet 05 step 4) by @tyler-dane in #2049
- feat(backend): suppress event notifications for hidden calendars by @tyler-dane in #2050
- fix(web): close time picker menu on outside click and fix wrong scroll target by @tyler-dane in #2051
- docs(someday): close out packet 05 checkboxes by @tyler-dane in #2052
- chore(handoff): advance cleanup marker and record evening cleanup summary by @tyler-dane in #2053
- feat(backend): dispatch google notifications per resource with honest outcomes by @tyler-dane in #2054
- feat(backend): reconcile google calendar list changes incrementally by @tyler-dane in #2055
- feat(backend): recover calendarlist sync from 410 without full repair, close packet 06 test gaps by @tyler-dane in #2056
- docs(someday): close out packet 06 checkboxes and record calendarlist decisions by @tyler-dane in #2057
- feat(backend): add read-only google watch state inspector by @tyler-dane in #2058
- fix(sync): repair google watches idempotently, stop wiping accounts on invalid_grant by @tyler-dane in #2059
- fix(gcal): respect retry-after hints, fix maintenance activity gate, prove quota attribution by @tyler-dane in #2060
- docs(someday): close out packet 07 checkboxes and record repair decisions by @tyler-dane in #2061
- feat(web): add sidebar calendar list with visibility controls by @tyler-dane in #2062
- feat(web): show calendar identity on event cards and pick create targets by @tyler-dane in #2063
- feat(web): enforce read-only calendars and render busy events safely by @tyler-dane in #2064
- feat: query freebusy availability for reader-only calendars end to end by @tyler-dane in #2065
- test(e2e): cover the calendar experience flows in a real browser by @tyler-dane in #2066
- docs(someday): close out packet 08 checkboxes and record web decisions by @tyler-dane in #2067
- test: close the v1 release gate's remaining fault and contract gaps by @tyler-dane in #2068
- test(backend): benchmark import at scale, pin index plans, warn on non-https webhook by @tyler-dane in #2069
- docs: cutover backup and rollback, upgrades guide, sub-calendar acceptance, ledger pr links by @tyler-dane in #2070
- docs(release): finalize sub-calendar v1 runbook by @tyler-dane in #2071
- chore(team): restructure handoff workflow into role-based team by @tyler-dane in #2074
- chore(team): standup 2026-07-13 by @tyler-dane in #2075
- fix(web): show today in the single-day (phone) week view by @tyler-dane in #2073
- chore(ci): skip ci for non-code file changes by @tyler-dane in #2072
- fix(backend): stop duplicating the first day of recurring Google events by @tyler-dane in #2077
- docs(architect): add sub-calendar v1 production cutover plan by @tyler-dane in #2076
- chore(web): remove tasks feature by @tyler-dane in #2078
- feat(web): prompt new users for release notes by @tyler-dane in #2079
- chore(web): remove task ui and state by @tyler-dane in #2080
- fix(web): abbreviate datepicker month labels by @tyler-dane in #2081
- feat(web): use dots for calendar visibility by @tyler-dane in #2082
- feat(web): split day view by calendar by @tyler-dane in #2083
- fix(web): clarify day calendar columns by @tyler-dane in #2084
- fix(sync): repair google sync lifecycle by @tyler-dane in #2086
- fix(web): navigate days with horizontal scroll by @tyler-dane in #2087
- fix(web): target clicked day calendar by @tyler-dane in #2085
- fix(ci): serialize environment deployments by @tyler-dane in #2088
- feat(events)!: remove someday events feature by @tyler-dane in #2091
- refactor(web): add e2e bridge and slim hooks for release-notes prompt by @tyler-dane in #2093
- chore(web): remove leftover task code and seed onboarding as events by @tyler-dane in #2094
- refactor(team): redesign standup for hands-off multi-agent execution by @tyler-dane in #2095
- fix(web): unify day view header border and show new all-day events immediately by @tyler-dane in #2096
- feat(web): dock event forms in the sidebar by @tyler-dane in #2092
- fix(web): tighten gap between sidebar month label and nav arrows by @tyler-dane in #2098
- fix(web): remove primary/read-only labels from sidebar calendar list by @tyler-dane in #2097
- feat(web): add og:image and twitter:image meta tags by @tyler-dane in #2099
- fix(web): unify allday row background across calendar columns by @tyler-dane in #2100
- refactor: remove unused priority event-tagging feature by @tyler-dane in #2101
- feat(web): make account identity the sidebar calendar list header by @tyler-dane in #2102
- chore: cleanup skills lock and components by @tyler-dane in #2103
- feat: update sidebar form by @tyler-dane in #2104
- fix(scripts): repair priority event validator by @tyler-dane in #2105
- refactor(web): decouple sidebar details state by @tyler-dane in #2106
- fix(scripts): make priority schema repair cutover-safe by @tyler-dane in #2107
- refactor(web): isolate day calendar scroll command by @tyler-dane in #2108
- fix(backend): batch google event imports by @tyler-dane in #2109
- fix(backend): batch google recurring instances by @tyler-dane in #2110
- fix(backend): handle unsupported google watches by @tyler-dane in #2111
- docs(team): record staging big bang evidence by @tyler-dane in #2112
- refactor: clean up event contracts and types by @tyler-dane in #2113
- deps(web): remove eventemitter by @tyler-dane in #2114
- refactor(web): unify command palette event actions across views by @tyler-dane in #2115
- chore: remove seed CLI command and rename LegacyEvent to CompassEvent by @tyler-dane in #2116
- feat(web): show calendar sync status in command palette by @tyler-dane in #2117
- docs(ship): add ship skill source file by @tyler-dane in #2118
- fix(web): hide active view shortcut by @tyler-dane in #2119
- fix(web): align all-day row surfaces by @tyler-dane in #2120
- fix(web): unify datepicker colors and layout by @tyler-dane in #2121
- fix(web): preserve shifted week window on today by @tyler-dane in #2122
- fix(web): prevent datepicker contrast regressions by @tyler-dane in #2123
- chore(team): standup 2026-07-14 by @tyler-dane in #2125
- fix(web): clean verification noise by @tyler-dane in #2124
- docs(team): add production go/no-go checklist by @tyler-dane in #2126
- refactor(backend): dedupe gcal events per-page default into a shared constant by @tyler-dane in #2127
- chore(team): fullstack notes 2026-07-14 (#2127) by @tyler-dane in #2128
- docs(testing): document accessibility strategy by @tyler-dane in #2129
- chore: remove old skills and react-doctor stuff by @tyler-dane in #2130
- feat(web): implement layered accessibility testing strategy by @tyler-dane in #2131
- fix(web): restore global cursor lock during event drag/resize by @tyler-dane in #2132
- refactor(web): remove dead EventForm plumbing and latest-ref indirection by @tyler-dane in #2133
- refactor(backend): dedupe repeated helpers across google sync services by @tyler-dane in #2134
- feat(web): ensure all focus areas have visible feedback by @tyler-dane in #2135
- chore(team): advance cleanup marker and record 2026-07-14 cleanup by @tyler-dane in #2136
- feat(web): add export my data command to command palette by @tyler-dane in #2137
- fix(web): explain someday events are emailed separately in export file by @tyler-dane in #2138
- feat(backend): add PostHog log export by @tyler-dane in #2139
- chore(tooling): upgrade typescript to v7 by @tyler-dane in #2140
- feat(web): add sidebar notice for leftover local task data by @tyler-dane in #2141
- refactor(web): drop the export webhook, self-serve someday recovery instead by @tyler-dane in #2142
- Revise README for better structure and content by @tyler-dane in #2143
- feat(cutover): open prod gate, fix backfill string-_id crash, add execution plan by @tyler-dane in #2144
- feat(cutover): shared-tier migration fixes + prod cutover execution record by @tyler-dane in #2145
- chore(team): move shipped sub-calendar project docs to internal repo by @tyler-dane in #2146
- chore(team): retire team/ dir; move workflow process to internal repo by @tyler-dane in #2147
- fix(e2e): wait for read-only gate before dragging in calendar-experience spec by @tyler-dane in #2148
- feat: adjust removal notice copy by @tyler-dane in #2149
- fix(backend): serialize event times with their real utc offset by @tyler-dane in #2150
- refactor(core): collapse triplicated logger construction by @tyler-dane in #2151
- fix(scripts): backfill schedule.timeZone for events stamped UTC by the sync fallback by @tyler-dane in #2152
- fix(web): calendar grid, header, and read-only event details + backend-down page and up next card by @tyler-dane in #2153
- feat: in-app delete account + drag events between all-day and timed rows by @tyler-dane in #2154
- fix(web): match input placeholder color to time values, add grid loading indicator by @tyler-dane in #2155
- fix(web): open read-only all-day events in the sidebar details form by @tyler-dane in #2156
- refactor(web): fold cross-row ghost label helper into calendarInteractionDom by @tyler-dane in #2157
- fix(web): keep keyboard focus on the backend-down retry button by @tyler-dane in #2158
- refactor(web): simplify calendar grid organization by @tyler-dane in #2159
- fix(web): show evening events on the day view and up next card by @tyler-dane in #2160
- fix(web): open the event form with details on Enter by @tyler-dane in #2161
- fix(web): keep the event context menu above the grid by @tyler-dane in #2162
- fix: sync a timed event dragged to the all-day row by @tyler-dane in #2163
- fix: let a deleted account start over cleanly by @tyler-dane in #2164
- fix(web): mute the title placeholder and fix the subscribe prompt by @tyler-dane in #2165
- fix(web): drop the double space from same-meridiem time labels by @tyler-dane in #2166
- fix(web): let the status overlays actually be announced by @tyler-dane in #2167
- test(web): cover getTimesLabel same-meridiem spacing by @tyler-dane in #2168
- chore(web): drop unused interaction-metrics fields by @tyler-dane in #2169
- docs(web): correct the muted-text contrast comment surface by @tyler-dane in #2170
- fix(web): name the local calendar "Compass" to match the server by @tyler-dane in #2171
- fix(web): make the grid context menu keyboard-operable by @tyler-dane in #2172
- feat(web): improve calendar navigation cues by @tyler-dane in #2173
- chore: cleanup copy, welcome modal, and stale docs by @tyler-dane in #2174
- docs: drop remaining Tasks-removal history lessons by @tyler-dane in #2175
- chore(tooling): automate ship review and validation by @tyler-dane in #2176
- fix: make the google revoked toast accurate and actionable by @tyler-dane in #2177
- Revise README content for clarity and formatting by @tyler-dane in #2178
- fix(web): preserve sidebar width across views and refreshes by @tyler-dane in #2179
- style(datepicker): group month label and nav arrows on the left in sidebar by @tyler-dane in #2180
- fix(web): keep multi-week drag source by @tyler-dane in #2181
- feat(day): drag events between calendar columns by @tyler-dane in #2183
- style(web): refine datepicker, week header, and event-form menu styling by @tyler-dane in #2185
- test: migrate backend and scripts to bun test runner by @tyler-dane in #2184
- feat: update index.html by @tyler-dane in #2187
- refactor(web): rename PlannerSidebar naming relics to Sidebar by @tyler-dane in #2186
- refactor(web): align week event-targeting exports with day naming convention by @tyler-dane in #2188
- style(web): restyle to Dark Abyss theme with semantic role tokens by @tyler-dane in #2189
- style(web): give events dark text on a lighter fill by @tyler-dane in #2190
- fix(web): contain event-form date fields within the card by @tyler-dane in #2191
- feat(web): add light beach theme with command palette switcher by @tyler-dane in #2192
- fix(web): stop re-surfacing handled transient errors as exceptions by @PostHog[bot] in #2194
- fix(web): stop 404 signout on post-signup sync and tolerate cache-only local edits by @PostHog[bot] in #2195
- chore: update posthog config and misc by @tyler-dane in #2193
- feat(core): add sync identity and connection contracts by @tyler-dane in #2197
- feat(core): add canonical sync event contracts by @tyler-dane in #2198
- feat(core): add durable event command contracts by @tyler-dane in #2199
- feat(core): add sync busy and change-feed contracts by @tyler-dane in #2200
- feat(sync): scaffold standalone service package by @tyler-dane in #2201
- feat(sync): validate service configuration by @tyler-dane in #2202
- feat(sync): add service health and shutdown by @tyler-dane in #2203
- feat(sync): authenticate internal service requests by @tyler-dane in #2204
- feat(sync): initialize isolated mongo storage by @tyler-dane in #2205
- fix(web): fail soft when grid element is absent on event mousedown by @PostHog[bot] in #2196
- fix(web): let useEventListener accept a null element by @tyler-dane in #2207
- feat(sync): persist connections and calendars by @tyler-dane in #2206
- feat(sync): persist events and occurrences by @tyler-dane in #2208
- fix(email): reflect kit subscription status by @tyler-dane in #2209
- chore(sync): remove private design-doc references from public comments by @tyler-dane in #2210
- fix(web): fix contrast and focus-ring clipping in auth and date pickers by @tyler-dane in #2212
- feat(sync): persist commands and jobs by @tyler-dane in #2214
- feat(sync): persist sync resources and deletion markers by @tyler-dane in #2215
- feat(sync): claim durable work with leases by @tyler-dane in #2216
- feat(sync): derive connection health from evidence by @tyler-dane in #2217
- feat(web): collect feedback in app by @tyler-dane in #2219
- fix(web): remove legacy feedback links by @tyler-dane in #2220
- feat(web): consolidate header into a clickable title and move sidebar right by @tyler-dane in #2218
- feat(sync): deploy the sync service as a passive container by @tyler-dane in #2221
- fix(sync): only deploy sync when both its secrets are set by @tyler-dane in #2222
- fix(web): pin the header's nav arrows to a fixed position by @tyler-dane in #2223
- fix(web): consolidate feedback commands by @tyler-dane in #2224
- feat: google auth adapter + command-palette nav by @tyler-dane in #2225
- feat(sync): add credential storage by @tyler-dane in #2227
- chore: remove sub-calendar v1 cutover migration code by @tyler-dane in #2228
- refactor(sync): clean up storage layout, id schemas, and config by @tyler-dane in #2226
- feat(sync): own google credential lifecycle by @tyler-dane in #2229
- fix(web): correct low-contrast text across light and dark themes by @tyler-dane in #2231
- chore(web): update copy by @tyler-dane in #2232
- test(web): sync WelcomeModal FAQ assertion to updated copy by @tyler-dane in #2236
- fix(web): fix draft drag, trackpad swipe lock, and all-day duplicate date by @tyler-dane in #2234
- feat(sync): discover google calendars by @tyler-dane in #2235
- feat(sync): normalize google event reads by @tyler-dane in #2237
- feat(sync): add google event mutations by @tyler-dane in #2238
- feat(sync): add google notification adapter by @tyler-dane in #2239
- feat(sync): add authenticated connection read api by @tyler-dane in #2240
- feat(web): improve hidden life view by @tyler-dane in #2241
- feat(sync): add authenticated disconnect endpoint by @tyler-dane in #2242
- feat(sync): begin provider oauth with a signed csrf state by @tyler-dane in #2243
- feat(sync): complete provider oauth via the public callback by @tyler-dane in #2244
- feat(sync): ingest provider push notifications by @tyler-dane in #2245
- feat(sync): expose the internal calendar query by @tyler-dane in #2246
- feat(sync): expose the internal event occurrence query by @tyler-dane in #2247
- feat(web): refine life view experience by @tyler-dane in #2248
- feat(sync): persist and locally confirm cloud event commands by @tyler-dane in #2249
- feat(sync): preserve device identity when promoting a cloud event by @tyler-dane in #2250
- fix(sync): don't confirm a provider-targeted create as a local cloud event by @tyler-dane in #2251
- feat(sync): execute provider create commands by @tyler-dane in #2252
- feat(web): expand life view variations and controls by @tyler-dane in #2253
- feat(sync): apply cloud update and delete commands locally by @tyler-dane in #2254
- feat(sync): execute provider update commands with safe replay by @tyler-dane in #2255
- feat(web): share bookmarkable life variations by @tyler-dane in #2256
- feat(sync): execute provider delete commands with deletion markers by @tyler-dane in #2257
- feat(web): improve life onboarding and sharing by @tyler-dane in #2258
- feat(web): add all-day event toggle by @tyler-dane in #2260
- feat(sync): project event occurrences from masters and exceptions by @tyler-dane in #2259
- feat(sync): project occurrences when a cloud command changes an event by @tyler-dane in #2261
- refactor(web): simplify life sidebar by @tyler-dane in #2262
- feat(sync): project occurrences for provider-linked events by @tyler-dane in #2263
- feat(sync): apply scope-all edits and deletes to a cloud series by @tyler-dane in #2264
- feat(sync): carry a target occurrence on scoped update and delete commands by @tyler-dane in #2265
- feat(sync): apply scope-this edits and deletes to a cloud series by @tyler-dane in #2266
- feat(sync): delete this-and-following occurrences of a cloud series by @tyler-dane in #2267
- feat(sync): split a cloud series on a this-and-following edit by @tyler-dane in #2268
- feat(sync): delete a provider-linked series at the provider on an all-scope delete by @tyler-dane in #2269
- fix(web): align calendar view controls by @tyler-dane in #2270
- feat(sync): edit a provider-linked series at the provider on an all-scope update by @tyler-dane in #2271
- ci: give the mongo-backed unit suites a longer step timeout by @tyler-dane in #2272
- perf(sync): cut the sync test suite from three minutes to sixteen seconds by @tyler-dane in #2273
- feat(sync): read a page of a provider calendar's events by @tyler-dane in #2274
- feat(sync): import a provider calendar's events into the canonical store by @tyler-dane in #2275
- test(web): raise async-query timeout to stop CI contention flakes by @tyler-dane in #2276
- test(sync): stop reinstalling indexes and dropping databases per test by @tyler-dane in #2278
- test: remove real-time waits by @tyler-dane in #2279
- refactor(sync): extract the provider page applier shared by import and pull by @tyler-dane in #2277
- fix(web): isolate account deletion test spies by @tyler-dane in #2280
- feat(sync): apply a provider calendar's incremental changes by @tyler-dane in #2281
- feat(sync): serve reads from a calendar's active generation by @tyler-dane in #2282
- feat(sync): non-destructive calendar repair into a fresh generation by @tyler-dane in #2283
- feat(sync): dispatch a claimed sync job to the right engine by @tyler-dane in #2284
- feat(sync): drain the job queue through a claim-dispatch-settle worker by @tyler-dane in #2285
- fix(web): isolate test files by process by @tyler-dane in #2286
- feat(sync): run the job queue with a lifecycle-managed scheduler by @tyler-dane in #2287
- test(sync): retry the shared-mongod connect to de-flake CI by @tyler-dane in #2289
- docs(sync): explain generation:0 on command-created events by @tyler-dane in #2288
- feat(sync): reconcile sweep to enqueue pulls for stale calendars by @tyler-dane in #2290
- fix(web): repair repeat event display, delete, and styling by @tyler-dane in #2291
- feat(sync): periodically reconcile stale calendars on a jittered timer by @tyler-dane in #2292
- refactor(test): replace run-tests with per-file bun test launchers by @tyler-dane in #2293
- feat(sync): open and renew calendar push channels before expiry by @tyler-dane in #2294
- feat(sync): enqueue channel renewals for expiring subscriptions by @tyler-dane in #2295
- feat(sync): renew expiring push channels on a periodic timer by @tyler-dane in #2296
- feat(sync): discover a connection's calendars and bootstrap their sync by @tyler-dane in #2298
- feat(sync): kick off calendar discovery when a connection links by @tyler-dane in #2299
- feat(sync): bound job retries and jitter their backoff by @tyler-dane in #2300
- feat(sync): heartbeat a running job's lease so long work is not re-run by @tyler-dane in #2301
- refactor(test): run native parallel tests by @tyler-dane in #2297
- fix(ci): restore green CI on main by @tyler-dane in #2302
- feat(sync): give occurrences a normalized endAt for overlap queries by @tyler-dane in #2303
- feat(sync): compute merged busy intervals for a calendar set and window by @tyler-dane in #2305
- refactor(test): clean up post-Jest migration test infrastructure by @tyler-dane in #2304
- feat(sync): add freshness and bookability evidence to busy availability by @tyler-dane in #2306
- refactor(test): run web tests on native parallel via injectable seams by @tyler-dane in #2307
- docs(test): document web native parallel investigation by @tyler-dane in #2313
- feat(sync): expose the busy-availability query over an internal route by @tyler-dane in #2308
- refactor(web): extract shared EventFormPanel for day and week sidebars by @tyler-dane in #2312
- refactor(test): refresh stale docs and migrate toast mock.module to ports by @tyler-dane in #2311
- test(backend): remove unused imports from post-jest migration tests by @tyler-dane in #2309
- refactor(web): remove CompassEvent bridge from event form hot path by @tyler-dane in #2315
- fix(web): align toast keycap hints with active theme by @tyler-dane in #2320
- feat(backend): add authenticated sync service client by @tyler-dane in #2324
- feat(web): make event creation undoable with cmd+z by @tyler-dane in #2322
- feat(web): swap u and i focus shortcuts for right sidebar by @tyler-dane in #2321
- feat(web): handle week event querying more elegantly by @tyler-dane in #2326
- feat(web): improve first-run onboarding and setup discoverability by @tyler-dane in #2316
- refactor(web): unify recurrence scope confirmation across day and week views by @tyler-dane in #2310
- fix(web): keep command palette open during calendar sync by @tyler-dane in #2325
- feat(backend): wire the sync service client from config by @tyler-dane in #2327
- feat(backend): add validated connection-routing switch by @tyler-dane in #2328
- fix(ci): stabilize selfhosted deploy startup by @tyler-dane in #2329
- feat(backend): translate sync connection state to the Google status enum by @tyler-dane in #2330
- fix(web): stop LifeView router mock from breaking AuthModal tests by @tyler-dane in #2332
- refactor(web): migrate grid draft rendering to GridEventDraft by @tyler-dane in #2331
- fix(self-host): make backend mongo dependency optional for Atlas/cloud by @tyler-dane in #2333
- refactor(web): share SidebarEventDetails across day and week by @tyler-dane in #2334
- feat(backend): serve Google connection status from sync when delegated by @tyler-dane in #2336
- refactor(web): remove week draft confirmation path by @tyler-dane in #2335
- refactor(web): share day/week interaction adapter helpers by @tyler-dane in #2338
- chore(web): sort Tailwind classes to clear lint warnings by @tyler-dane in #2337
- refactor(web): share day/week event registration ref hook by @tyler-dane in #2339
- feat(backend): add sync beginConnection client + core contracts by @tyler-dane in #2340
- refactor(web): remove draft store event projection by @tyler-dane in #2341
- refactor(web): shrink week draft actions surface by @tyler-dane in #2342
- feat(backend): add sync-delegated Google connect-begin route by @tyler-dane in #2343
- fix(self-host): hard-wait for mongo on selfhosted deploys by @tyler-dane in #2344
- fix(self-host): prune unused images on compass update by @tyler-dane in #2345
- fix(self-host): bound image prune so ssh deploys cannot stall by @tyler-dane in #2346
- refactor(web): open context-menu edit via draft store by @tyler-dane in #2347
- refactor(web): fold grid draft resize into startResizing by @tyler-dane in #2348
- chore(web): cleanup stale code by @tyler-dane in #2350
- refactor(web): drop draft context setters for setLocalDraft by @tyler-dane in #2349
- refactor(web): open week event form via draft store by @tyler-dane in #2351
- refactor(web): narrow draft reads for drag grid helpers by @tyler-dane in #2352
- refactor(web): colocate modules and remove dead scaffolding by @tyler-dane in #2353
- feat(backend): expose connect-delegation flag on /api/config by @tyler-dane in #2354
- feat(web): use sync redirect flow for Google connect when delegated by @tyler-dane in #2355
- feat(backend): add SYNC_EVENT_ROUTING switch for event delegation by @tyler-dane in #2357
- feat(backend): add listEventOccurrences to SyncServiceClient by @tyler-dane in #2358
- feat(backend): add submitCommand to SyncServiceClient by @tyler-dane in #2359
- feat(core): add SyncEventInstance full-fidelity event-read contract by @tyler-dane in #2360
- feat(sync): assemble full-fidelity event instances + batch findByIds by @tyler-dane in #2361
- feat(sync): add GET /internal/events/full route by @tyler-dane in #2362
- feat(backend): add listFullEvents to SyncServiceClient by @tyler-dane in #2363
- feat(backend): delegate GET /api/calendars to sync (calendar-list delegation) by @tyler-dane in #2364
- feat(backend): reversible synthetic occurrence-id codec (S39 B4/C prep) by @tyler-dane in #2365
- feat(backend): delegate GET /api/event to sync (S39 B4) by @tyler-dane in #2366
- feat(backend): delegate event writes to sync submitCommand (S39 C) by @tyler-dane in #2367
- feat(web): client-owned calendar visibility via localStorage (S39 A2) by @tyler-dane in #2368
- feat(sync): expose public /sync oauth paths and staging routing knobs by @tyler-dane in #2369
- fix(sync): trust one proxy hop behind Caddy for rate limits by @tyler-dane in #2370
- fix(deps): bump gaxios to v7 for googleapis-common mergeHeaders by @tyler-dane in #2371
- fix(deps): bump google-auth-library to v10 for gaxios 7 by @tyler-dane in #2372
- fix(sync): re-derive connection state after import completes by @tyler-dane in #2373
- feat(sync): invalidation outbox + GET /internal/changes by @tyler-dane in #2374
- feat(backend): bridge sync change feed to browser SSE by @tyler-dane in #2375
- fix(web): refresh Google metadata from Sync SSE signals by @tyler-dane in #2376
- feat(web): show Sync connection summary on metadata by @tyler-dane in #2377
- feat(web): show reconnect action in calendar list header by @tyler-dane in #2378
- feat(web): show sync connection last-synced timestamps by @tyler-dane in #2379
- feat(web): resume local event promotion by @tyler-dane in #2380
- fix(sync): invalidate browser after provider pull by @tyler-dane in #2381
- feat(sync): centralize redaction and add safety canaries by @tyler-dane in #2382
- feat(sync): purge principal data on account deletion by @tyler-dane in #2383
- feat(sync): purge soft-disconnected caches after 30 days by @tyler-dane in #2384
- test(sync): add R-SEC-03 cross-tenant isolation matrix by @tyler-dane in #2385
- feat(sync): emit sanitized health snapshots by @tyler-dane in #2386
- chore(sync): add operating and recovery controls by @tyler-dane in #2387
- feat(scripts): inventory legacy sync data by @tyler-dane in #2388
- feat(scripts): migrate provider connections by @tyler-dane in #2389
- feat(scripts): migrate provider sync state by @tyler-dane in #2390
- feat(scripts): migrate pending compass intent by @tyler-dane in #2391
- feat(backend): add sync cutover controls by @tyler-dane in #2392
- fix(backend): preserve maintenance envelope in express errors by @tyler-dane in #2393
- feat(scripts): preseed sync service safely by @tyler-dane in #2394
- fix(sync): keep series DTSTART when BYDAY skips start day by @tyler-dane in #2396
- fix(backend): give sync commands a 30s deadline for provider deletes by @tyler-dane in #2397
- fix(sync): cascade series exceptions on provider delete by @tyler-dane in #2398
- docs(agents): add cursor cloud setup and run notes by @tyler-dane in #2400
- chore(agents): unify cursor skills, rules, and hooks by @tyler-dane in #2401
- chore(cloud): make cloud agent env deterministic + one-command backend setup by @tyler-dane in #2402
- docs(agents): stop restating AGENTS.md rules in cursor rule files by @tyler-dane in #2403
- fix(web): show multi-day timed events in the all-day row by @tyler-dane in #2404
- fix(web): hide up-next empty-state pressure copy by @tyler-dane in #2408
- fix(web): never let the calendar be silently wrong by @tyler-dane in #2410
- fix(web): unify Day and Week keyboard edit shortcuts by @tyler-dane in #2409
- fix(web): convert recurring events to all-day on "All" edits by @tyler-dane in #2411
- fix(web): restore Save button hover contrast by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2413
- fix(web): render recurring-event edits and deletes optimistically by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2412
- fix(web): seed shortcut drafts with default calendar by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2414
- fix(web): show sample banner only when demos are visible by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2415
- fix(web): seed day grid fixtures on local calendar by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2419
- feat(scripts): purge-user CLI, and fix account deletion stranding events by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2418
- fix(web): allow dragging all-day drafts onto the timed grid by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2416
- feat(sync): import Google event colors into sync storage by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2420
- feat(core): expose optional event color on app contracts by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2421
- feat(sync): write event colors back to Google by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2422
- feat(web): paint Google event colors on grid cards by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2423
- feat(web): add event color picker with clear support by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2424
- refactor: simplify event color plumbing helpers by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2425
- fix(sync): surface reconnect when Google auth is revoked mid-write by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2427
- feat(web): add context-menu event colors and match draft fills by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2426
- fix(web): resize the Day view draft live while dragging by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2417
- refactor(web): collapse dual sources of truth in create/edit by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2429
- fix(web): make calendar visibility toggle instant both ways by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2430
- refactor(web): share the visibility-filtered events across grid consumers by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2431
- fix(web): default all-day->timed conversion to a visible time, not fixed 9am by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2433
- refactor(web): make calendar visibility a reactive external store by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2434
- fix(web): show loading on Google reconnect button immediately by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2436
- fix(web): dedupe catchall errors when backend fails by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2438
- docs(sync): sync service cutover and ops runbook by @cursor[bot] in https://github.com/SwitchbackTech/compass-calendar/pull/2407
- chore: remove emdash slop by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2439
- fix(web): drop transient network exceptions from posthog by @cursor[bot] in https://github.com/SwitchbackTech/compass-calendar/pull/2435
- fix(sync): stop null event colors from 500ing the calendar list by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2437
- fix(sync): fail fast on revoked auth during pull/import/repair/subscription jobs by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2428
- fix(web): make grid load-error overlay visible and retryable by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2440
- fix(web): constrain context menu colors to 6x2 grid by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2441
- fix(web): clear command palette search on close by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2442
- fix(web): fix draft recurrence editing and let users clear repeats by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2443
- feat(sync): resolve google custom event-label colors on read by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2444
- fix(web): hide non-actionable email-update palette rows by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2446
- fix(sync): resolve prod preseed parity blockers by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2448
- fix(self-host): derive compose profiles from config by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2450
- fix(sync): refuse provider writes when the writer is unavailable by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2451
- fix(sync): drain the job queue with MAX_CONCURRENCY workers by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2452
- fix(sync): rotate failing resources out of the reconcile sweep head by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2453
- fix(sync): stamp attempt before token fetch in import and repair too by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2454
- fix(sync): exclude credential-less connections from the reconcile sweep by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2455
- chore(scripts): add refresh-connection-states CLI backfill by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2456
- feat(self-host): run Sync by default, mirroring prod architecture by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2457
- fix(auth): stop the legacy sync engine from double-running on sign-in by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2458
- feat(calendar): delegate freebusy availability to Sync by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2459
- fix(web): route the reconnect toast through the sync delegation fork by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2460
- fix(sync): stop the legacy repair action from running a third engine by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2461
- test(backend): drop shared harness's last non-mocking legacy sync import by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2462
- fix(backend): fix beforeAll/beforeEach CONFIG ordering in event delegation tests by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2463
- feat(sync): make Sync the only routing choice, drop connection/eventRouting flags by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2464
- chore(auth): strip the now-dead legacy sync-kickoff guards from google.auth.service.ts by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2465
- chore(user): strip the legacy sync-health fallback from assessGoogleMetadata by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2466
- chore(calendar): strip the now-dead legacy branch from calendar.controller.ts by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2467
- chore(event): strip the now-dead legacy branch from event.controller.ts by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2468
- chore(events): strip the now-dead legacy watch-repair gate from streamEvents by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2469
- chore(gcal): relocate self-contained Google utilities out of packages/backend/src/sync/ by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2470
- chore(migrations): retire the legacy sync-watch-data migration by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2471
- fix(auth): collapse Google auth mode to a 2-way SIGNUP/SIGNIN split by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2472
- chore(sync): relocate account-deletion watch/sync cleanup out of sync/ by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2474
- fix(sync): make partial-index type guards provable to the query planner by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2473
- fix(sync): fail move commands instead of stranding them silently pending by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2477
- chore(sync): delete the legacy in-backend Google-sync engine wholesale by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2478
- fix(web): promote full-day timed events to the all-day row by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2476
- chore(sync): make Sync required at startup and remove the legacy web connect fork by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2480
- chore: clean up dead code left over from PR #2480 by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2482
- fix(sync): settle durable provider read failures instead of wedging jobs by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2481
- chore: retire legacy sync code, watch/sync collection plumbing, and finished migration CLIs by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2484
- chore(backend): delete the dead Google-Calendar API layer and event-store adapter cluster by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2486
- chore(backend): make the Sync client non-nullable, collapse the absent-sync seam by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2487
- chore(sync): de-duplicate internal repetition (schedulers, sweeps, errors, contracts) by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2488
- Reliable recurring-event edits and undo/redo by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2489
- chore(web,scripts,core,backend): dead-code sweep + knip guardrail against regrowth by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2490
- fix(sync): self-heal failed jobs and surface wedged work in connection state by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2491
- perf(sync,backend): multiplex the SSE change-feed poll into one global feed by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2492
- fix(sync): resolve custom event-label colors during calendar repair by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2493
- fix(ci): always configure required Sync on deploy by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2494
- docs(agents): add chaos pre-release skill by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2496
- fix(web): default grid click draft to 30 minutes by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2498
- chore(scripts): retire completed migrations by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2503
- fix(web): focus life birth date without opening picker by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2500
- fix(scripts,web,e2e): make bun test:web usable and green again by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2495
- perf(web): fix broken week-view card memoization chain by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2497
- fix(backend,sync): make silent failures visible and non-wedging by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2499
- fix(sync,backend,web): un-stick the delete/update command path by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2501
- perf(sync): batch occurrence-projection writes within an import page by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2502
- fix(sync): stop idle job claims from walking pending backoff rows by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2505
- fix(web): localize event time labels instead of the stored offset by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2507
- fix(web): wrap grid event titles at word boundaries instead of mid-word by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2508
- feat(web): add top-level error boundary + pre-mount exception capture by @PostHog[bot] in https://github.com/SwitchbackTech/compass-calendar/pull/2504
- fix(web): make grid event shortcuts focused-only and consistent by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2510
- fix(web): enable JS code splitting for the web bundle by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2447
- fix(sync): require readiness for deploy health by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2511
- test(web): cover first-run onboarding by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2513
- fix(web): clarify anonymous local storage by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2514
- fix(web): capture unexpected event failures by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2515
- fix(sync,core,scripts): anchor EXDATE/RDATE series expansion at DTSTART, not now by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2516
- Potential fix for code scanning alert no. 64: Prototype-polluting merge call by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2517
- feat: release-day stability (sync refresh, event scoping, launch ops) by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2512
- chore(web): bump posthog-js to 1.409.5 by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2519
- fix(web): keep deleted anonymous recurring occurrences gone by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2518
- fix(web,sync): speed week reads, cancel edit-all overrides, link form errors by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2520
- fix(sync,web): surface exhausted jobs and skip draft compass hop by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2522
- refactor(web,sync): simplify runtime lifecycle ownership by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2523
- test(web): silence msw and jsdom log noise by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2524
- fix(web): stop UNTIL from double-floating in the recurrence form by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2525
- fix(web): keep sidebar closable on narrow viewports by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2526
- fix(sync): stop one unreadable job doc from freezing every sweep by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2527
- fix(sync): project a create at the calendar's active generation by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2528
- fix(web): keep the signed-out message alive and unqueued by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2529
- fix(sync): bootstrap a push channel for an imported calendar that lacks one by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2530
- fix(auth): connect sync during google sign-in by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2531
- fix(ci): derive runtime.nodeEnv from the deploy target, not a hardcoded literal by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2532
- fix(sync): emit a reconcile-sweep-completion event instead of relying on a gauge by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2533
- chore(web): general cleanup by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2521
- feat(events): add recurring scope toast by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2534
- feat(scripts): repair legacy-migrated series with wrong-frame BYDAY by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2535
- chore(scripts): retire repair-legacy-series-weekday tooling by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2536
- fix(web): clarify google calendar sync status by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2537
- feat(web): clarify recurring scope toast by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2538
- fix(web): defer anonymous save toast during auth by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2539
- feat(web): auto-refresh Google Calendar sync on app focus by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2541
- fix(sync): close google onboarding sync gap by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2542
- refactor(self-host): share config profile derivation by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2543
- refactor(sync): share provider command dispatch by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2544
- refactor(web): extract draft resize transition by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2545
- fix(web): stabilize calendar refresh status by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2546
- docs: cleanup readme by @tyler-dane in https://github.com/SwitchbackTech/compass-calendar/pull/2540
New Contributors
Full Changelog: v1.0.0...v1.1.0