Skip to content

fix(macos): put hour gutter labels on the 1 am track origin like web - #4719

Merged
tyler-dane merged 6 commits into
mainfrom
fix/macos-hour-gutter-origin
Oct 22, 2026
Merged

tyler-dane merged 6 commits into
mainfrom
fix/macos-hour-gutter-origin

Conversation

@tyler-dane

Copy link
Copy Markdown
Contributor

Refs #4331

What and why

In every macOS week-grid parity capture (latest compare: run 39704640345), events sat two hours above their gutter labels. "Call a friend 5 - 6 PM" drew on the 3 PM row, while web draws it on 5 PM.

Cards, hour lines and the now line already use web's 1 AM timed-track origin (GridTimeConstants.timedGridTopPx, ported from web timedGridTopPx). The gutter did not. renderHourColumn still followed web's old CalendarTimeColumn layout: a calc(100% / TIMED_VISIBLE_HOURS - 5px) top offset (about one hour) plus an empty first slot (another hour) before "1 AM". Web #4686 removed that offset; its HourLabelColumn now gives each label one hour slot from 1 AM at the top of the track ("no extra translate here").

This PR:

  • lays macOS gutter labels out one slot per hour from 1 AM at the top of the track, like web HourLabelColumn, with the current-hour accent unchanged
  • adds TimeGridCivilDayTests.testHourLabelsShareTheEventTrackOrigin: the "5 PM" label's top matches timedGridTopPx for 17:00 within 3 pt. The existing DST label-count test still covers 23- and 25-hour days.
  • adds a changelog line to docs/features/desktop-web-parity-checklist.md

Verify

VERDICT: PASS from bun run verify --strict (type-check, lint, knip). bun cli contracts:swift --check and bun cli desktop:export --check pass.

Not run locally: this cloud session has no Swift toolchain or Xcode, so the Swift build and the new CompassUI test only run in macOS CI. The parity-screenshots label is added separately: the week-grid compare should show the macOS labels matching web's.


Generated by Claude Code

Cards, hour lines and the now line sit on web's 1 AM timed-track origin
(timedGridTopPx), but the gutter still used the old web layout: a
calc(100% / 13 - 5px) offset plus an empty first slot. Every label drew
two hours below its events, so a 5 PM event sat on the 3 PM row. Web
#4686 dropped that offset; lay labels out one slot per hour from 1 AM
at the top of the track.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKHjv2HDx1DFAnG4cfSxcr
@tyler-dane
tyler-dane marked this pull request as ready for review October 22, 2026 02:52
@tyler-dane tyler-dane added the agent-automerge Agent-loop finished; merge-guard may squash-merge label Oct 22, 2026 — with Claude
@tyler-dane
tyler-dane enabled auto-merge October 22, 2026 02:52
@tyler-dane tyler-dane added the parity-screenshots Run the web vs macOS parity screenshot workflow on this PR label Oct 22, 2026 — with Claude
The welcome modal's buttons pair a title with a keycap chip and had no
explicit label, so accessibility read "Get started for free, Enter".
The onboarding parity capture added in #4707 clicks buttons["Get started
for free"] and fails on every run since. Label each welcome button with
its title; the keycap is a visual hint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKHjv2HDx1DFAnG4cfSxcr
(cherry picked from commit 5d42363)

Copy link
Copy Markdown
Contributor Author

macos-capture failed in NativeParityCaptureTests.testExportParitySurface_onboardingWelcome: buttons["Get started for free"] found no match. This PR doesn't cause it. The step comes from #4707 and fails on any branch that runs the capture, because the welcome buttons expose "Get started for free, Enter" (title plus keycap) as their label. The fix is #4720 (label each welcome button with its title only). I've ported the same commit here so the capture and compose steps can finish and produce this PR's week-grid compare.


Generated by Claude Code

… panel

With the welcome buttons named by title, buttons["Next"] also matched the
grid's week "Next" button behind the modal, so the click failed with
multiple matches. Query the buttons inside compass-native-welcome-modal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKHjv2HDx1DFAnG4cfSxcr
(cherry picked from commit 77e87f4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKHjv2HDx1DFAnG4cfSxcr
(cherry picked from commit b031ea7)
The onboarding capture exports onboarding-welcome-account-choice, but the
name was not a ParityCaptureSurface, so the debug URL never parsed and the
export timed out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKHjv2HDx1DFAnG4cfSxcr
(cherry picked from commit 07b3cce)
@tyler-dane
tyler-dane added this pull request to the merge queue Oct 22, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 22, 2026
…-origin

# Conflicts:
#	docs/features/desktop-web-parity-checklist.md
@tyler-dane
tyler-dane enabled auto-merge October 22, 2026 06:07
@tyler-dane
tyler-dane added this pull request to the merge queue Oct 22, 2026
Merged via the queue into main with commit 53b63c0 Oct 22, 2026
26 checks passed
@tyler-dane
tyler-dane deleted the fix/macos-hour-gutter-origin branch October 22, 2026 07:08
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 parity-screenshots Run the web vs macOS parity screenshot workflow on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants