Skip to content

fix(macos): add web notices, connection and timezone banners - #4640

Merged
tyler-dane merged 4 commits into
mainfrom
fix/macos-notice-parity
Oct 20, 2026
Merged

tyler-dane merged 4 commits into
mainfrom
fix/macos-notice-parity

Conversation

@tyler-dane

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

Copy link
Copy Markdown
Contributor

Refs #4215

What and why

Several web notices did not exist on macOS, and one existing one was quietly broken:

  • Calendar connection banner (web CalendarConnectionBanner). This adds Reconnect, Learn more (admin consent), Retry (failed first import), and Refresh (delayed) under the header. G runs the action. Before this, a signed-in Mac user whose Google access lapsed got no prompt at all.
  • Timezone mismatch banner (web TimezoneMismatchBanner). This adds Switch to device zone or Keep pinned zone, with the snooze stored per device zone. Auto timezone now also follows a Mac timezone change on the minute refresh, matching web's 60s browser-zone poll. Before this, refreshBrowserTimeZone was never called.
  • Local-mode trial card (web LocalModeConnectPrompt). It appears after one anonymous write or five shortcuts. S starts the trial and Esc dismisses. Shortcut-only explorers skip the first-event card, as on web.
  • Sidebar meeting-page nudge (web MeetingPageNudge). It shows after the first event until a meeting page is live or the nudge is dismissed. M opens Meeting settings.
  • Notice letter keys (web useNoticeActionShortcut): G, O, M, S. They stand down during event jump, an armed e sequence, or an open draft. p notice focus now cycles through the new notices too.
  • First-event card: macOS never called noteRealEventCreated, so the card never celebrated or retired after a create. EventsStore now reports landed writes, which drives this and the anonymous write count. Undo restores are excluded.
  • Sample-events banner: dismissal now updates observed state. It used to read the DB inside a computed property, so the banner could stay visible after Okay. O now dismisses it.
  • The first-event card is restyled to the web floating notice shell (semibold title, × dismiss, C keycap). Header banners now sit inside the main column's 32pt leading inset, as on web.

Verify

swift test --package-path CompassData: 216 passed. CompassKit tests pass, including new AnonymousExplorerEngagementTests, CalendarConnectionBannerTests, and TimezoneMismatchTests. The app target builds with xcodebuild.

bun run verify --strict (after merging the new main into this branch to resolve a docs conflict): VERDICT: FAIL. Checks run: test:macos:packages, type-check, lint, knip, test:macos. The only failure is NativeLaunchTests.testEventClickShowsPointerHintWithoutOpening, which also fails on a clean origin/main checkout on this machine and passed in CI on the five PRs already merged (local state, unrelated). All other macOS tests pass, including the new notice, banner, and timezone tests.

🤖 Generated with Claude Code

tyler-dane and others added 3 commits October 20, 2026 10:27
Port the local-mode trial card (S, Esc), the sidebar meeting-page
nudge (M), and the sample-events banner O key from web. Count
anonymous writes and shortcuts like web anon-explorer engagement, and
let shortcut-only explorers skip the first-event card. Completes the
first-event card on the first real create, which macOS never did, and
makes demo banner dismissal observable so it re-renders. Restyles the
first-event card to the web floating notice shell.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Port web CalendarConnectionBanner (reconnect, admin consent, failed
import, delayed; G runs the action) and TimezoneMismatchBanner (switch
to the device zone or keep the pinned one). Auto timezone now follows
a Mac timezone change on the minute refresh, like web's browser-zone
poll.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tyler-dane
tyler-dane marked this pull request as ready for review October 20, 2026 21:55
@tyler-dane tyler-dane added the agent-automerge Agent-loop finished; merge-guard may squash-merge label Oct 20, 2026
@tyler-dane
tyler-dane enabled auto-merge October 20, 2026 21:55
@tyler-dane
tyler-dane disabled auto-merge October 20, 2026 22:02
@tyler-dane

Copy link
Copy Markdown
Contributor Author

agent-loop: still conflicting after update-branch onto main. Closing so the issue can be relaunched.

@tyler-dane tyler-dane removed the agent-automerge Agent-loop finished; merge-guard may squash-merge label Oct 20, 2026
@tyler-dane tyler-dane closed this Oct 20, 2026
Resolves the RootView conflict with the unified title bar: the header
moved out of the content column, the connection and timezone banners
stay at its top.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@tyler-dane tyler-dane reopened this Oct 20, 2026
@tyler-dane tyler-dane added the agent-automerge Agent-loop finished; merge-guard may squash-merge label Oct 20, 2026
@tyler-dane
tyler-dane enabled auto-merge October 20, 2026 22:05
@tyler-dane
tyler-dane added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 385a34c Oct 20, 2026
30 checks passed
@tyler-dane
tyler-dane deleted the fix/macos-notice-parity branch October 20, 2026 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant