Skip to content

ci: add a macOS desktop e2e lane - #3137

Open
1625567290 wants to merge 6 commits into
apache:mainfrom
1625567290:ci/macos-desktop-e2e
Open

ci: add a macOS desktop e2e lane#3137
1625567290 wants to merge 6 commits into
apache:mainfrom
1625567290:ci/macos-desktop-e2e

Conversation

@1625567290

Copy link
Copy Markdown
Contributor

Summary

Desktop e2e only ran on Linux xvfb, so macOS overlay-scrollbar hit testing and App Nap compositor throttling could not fail a PR. This adds a macos-15 sibling of the existing e2e job.

The Linux job name is unchanged so the required check stays intact. Isolated CI displays (xvfb and GitHub macOS runners) show the fixture window; local machines stay hidden.

Fixes #2342

Test plan

  • Official desktop e2e on macOS: 26 passed, 1 skipped
  • Alignment audit: all fixtures clean
  • isCiIsolatedDisplay covers Linux CI, macOS CI, and local Darwin

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 73c58ec4-acb0-40d3-bcc5-fc5bcc25dd88

📥 Commits

Reviewing files that changed from the base of the PR and between 5f3c942 and e7cfa3e.

📒 Files selected for processing (1)
  • apps/desktop/e2e/prompt-rail.spec.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/desktop/e2e/prompt-rail.spec.ts

Included review availability: Your plan includes up to 3 reviews per rolling hour; 1 remains after this review.


📝 Walkthrough

Summary

This PR adds a macOS 15 desktop E2E lane. It uses the existing shard configuration and preserves the Linux e2e job name. This enables coverage for macOS renderer behavior that Linux Xvfb cannot reproduce, including overlay-scrollbar hit testing, post-scroll hit timing, and background-window compositor throttling.

The PR extends the existing E2E path. It does not create a separate fixture or test framework. isCiIsolatedDisplay centralizes display detection for Linux CI, macOS CI, and local Darwin. Fixture windows remain hidden locally and become visible on isolated CI displays.

The solution is coherent and small. The new macOS lane is required for platform coverage. The scrolling helper and updated hit-testing diagnostics address macOS-specific window restoration and virtualized transcript timing. No deletion is evident without reducing regression coverage. Some test diagnostics could be simplified later if they prove unnecessary after the macOS lane stabilizes.

Validation

  • The reported test plan passed 26 macOS desktop E2E tests.
  • One macOS desktop E2E test was skipped.
  • The reported plan confirmed fixture alignment.
  • The reported plan covered isCiIsolatedDisplay for Linux CI, macOS CI, and local Darwin.
  • The alignment audit runs in the macOS lane.
  • Required check status is unverified from the available evidence.

Review-relevant risks

  • The PR changes CI workflow permissions and checkout credential persistence. These are governance and security-relevant changes. Material changes in these areas require independent human review under repository policy.
  • The PR changes prompt-rail offsets from 12px/15px to 48px/51px. This can affect user-visible prompt-rail placement and macOS scrollbar hit behavior. Material changes in user-visible behavior require independent human review under repository policy.
  • The PR changes desktop E2E scrolling and click behavior. These changes can affect regression detection and test reliability. Material changes to release-quality validation require independent human review under repository policy.
  • The person performing the merge must review the final diff. A maintainer makes the final determination.

Walkthrough

The pull request adds a macOS desktop E2E lane, broadens isolated-display handling to macOS, tightens CI checkout permissions, reserves prompt-rail space for overlay scrollbars, and improves prompt-rail and slash-command E2E synchronization.

Changes

macOS E2E and CI display support

Layer / File(s) Summary
Isolated CI display detection
scripts/fixture-env.mjs
Adds isCiIsolatedDisplay for Linux and macOS and accepts only explicit truthy CI values.
Fixture visibility integration
apps/desktop/e2e/fixtures.ts, scripts/fixture-window.mjs, apps/desktop/e2e/playwright.config.ts
Fixtures and Electron windows use isolated-display detection. Documentation describes Linux isolated displays and visible macOS windows.
macOS E2E workflow and CI permissions
.github/workflows/ci.yml
Adds read-only contents access, disables persisted checkout credentials, and runs macOS 15 E2E tests with Electron caching and alignment auditing.
Prompt rail layout and E2E synchronization
apps/desktop/src/renderer/styles/prompt-rail.css, apps/desktop/e2e/prompt-rail.spec.ts
Moves the rail 48px from the right edge and improves scrolling, direct activation, hit testing, and diagnostics in prompt-rail tests.
Slash-command menu synchronization
apps/desktop/e2e/slash-command-menu.spec.ts
Focuses the remounted composer and types / before validating command-menu entries.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: 🔵 Low · up to e7cfa

The PR adds macOS desktop end-to-end coverage, but a revised relay lifecycle timeout may allow regressions in the 10ms fallback deadline to pass undetected. The change is otherwise mergeable with explicit owner awareness and follow-up on that test guard.

Sequence Diagram(s)

sequenceDiagram
  participant CI as GitHub Actions
  participant Playwright
  participant Electron
  CI->>Playwright: Run desktop E2E tests on macOS 15
  Playwright->>Electron: Launch visible fixture windows
  Electron-->>Playwright: Render prompt rail and composer
  Playwright-->>CI: Report E2E results
  CI->>CI: Run alignment audit
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Ai Use Disclosure ⚠️ Warning The PR description selects neither required AI-use declaration. The eight introduced commit messages also contain no valid Generated-by trailer. Add one explicit declaration. If generative tooling made a substantive contribution, name the tool and scope, add trailers to affected commits, and ensure they survive squash/amend. See “Human ownership and AI attribution” in CONTRIBUTIN...
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the primary change: adding a macOS desktop E2E lane.
Description check ✅ Passed The description explains the change, links issue #2342, and reports verification results, although it omits the template checklist and AI-use sections.
Linked Issues check ✅ Passed The changes add the requested macOS E2E lane, preserve the Linux check, and address macOS display, scrolling, and compositor behavior described in issue #2342.
Out of Scope Changes check ✅ Passed The workflow, fixture handling, E2E updates, and prompt-rail adjustments support the linked issue objectives and do not show unrelated changes.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ff3a97dc-ecaf-49cf-b569-3206d4d82ba6

📥 Commits

Reviewing files that changed from the base of the PR and between 4e8629c and 1030c8c.

📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • apps/desktop/e2e/fixtures.ts
  • apps/desktop/e2e/playwright.config.ts
  • scripts/fixture-env.mjs
  • scripts/fixture-window.mjs

Included review availability: Your plan includes up to 3 reviews per rolling hour; 1 remains after this review.

Comment thread .github/workflows/ci.yml
Comment thread scripts/fixture-env.mjs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
apps/desktop/src/renderer/styles/chat-header.css (1)

159-162: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Do not rely on scrollbar-gutter: stable for overlay scrollbars.

The CSS Overflow specification defines stable for classic scrollbars. Overlay scrollbars do not create a gutter. (w3.org) This declaration therefore cannot provide the stated macOS guarantee. Verify that .maka-chat-layout is the actual [data-chat-scroll-container="true"] element. If it is not, the rule is inert. Since prompt-rail.css already applies an explicit 48px offset, remove this rule unless classic-scrollbar stability on this exact scroll box is a separate requirement.

Sources: Path instructions, MCP tools


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 868001b8-cc67-4d25-966d-f8d405bec20b

📥 Commits

Reviewing files that changed from the base of the PR and between fbb9c24 and 97335a7.

📒 Files selected for processing (3)
  • apps/desktop/e2e/prompt-rail.spec.ts
  • apps/desktop/src/renderer/styles/chat-header.css
  • apps/desktop/src/renderer/styles/prompt-rail.css

Included review availability: Your plan includes up to 3 reviews per rolling hour; 0 remain after this review.

Comment thread apps/desktop/e2e/prompt-rail.spec.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 561c6bc7-ce31-4fff-8cd6-e688c98d6d12

📥 Commits

Reviewing files that changed from the base of the PR and between 97335a7 and 5f3c942.

📒 Files selected for processing (3)
  • apps/desktop/e2e/prompt-rail.spec.ts
  • apps/desktop/e2e/slash-command-menu.spec.ts
  • packages/eval/harbor/test_relay_lifecycle.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/desktop/e2e/prompt-rail.spec.ts

Included review availability: Your plan includes up to 3 reviews per rolling hour; 2 remain after this review.

Comment thread packages/eval/harbor/test_relay_lifecycle.py Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the desktop end-to-end CI surface to include macOS runners so platform-specific renderer/compositor behaviors (overlay scrollbars, App Nap throttling, post-scroll hit-testing) can fail PRs before merge, while preserving the existing Linux e2e job name to keep required checks stable.

Changes:

  • Add a new e2e_macos GitHub Actions job (macos-15) alongside the existing Linux xvfb e2e lane.
  • Generalize “CI display must be visible” detection from Linux-only (isCiLinuxDisplay) to cross-platform (isCiIsolatedDisplay), and update fixture launch behavior accordingly.
  • Harden prompt-rail styling and e2e tests against macOS-specific hit-testing/scrolling/titlebar overlay behaviors; reduce a slash-command menu flake by ensuring composer focus before typing.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
scripts/fixture-window.mjs Switches to isCiIsolatedDisplay() to decide when the fixture window must be visible on CI.
scripts/fixture-env.mjs Adds cross-platform CI-display detection and fixes CI flag parsing (CI=false no longer treated as truthy).
apps/desktop/src/renderer/styles/prompt-rail.css Moves prompt-rail away from macOS overlay scrollbar hit regions to prevent dead-band clicks.
apps/desktop/e2e/slash-command-menu.spec.ts Stabilizes slash-command triggering by refocusing the composer before typing /.
apps/desktop/e2e/prompt-rail.spec.ts Improves macOS-visible-window robustness for scroll mounting and hit-testing assertions.
apps/desktop/e2e/playwright.config.ts Updates documentation comment to reflect macOS CI compositor behavior.
apps/desktop/e2e/fixtures.ts Uses isCiIsolatedDisplay() so macOS CI runs with a visible Electron window when needed.
.github/workflows/ci.yml Adds e2e_macos lane and hardens checkout by disabling persisted credentials; sets minimal contents: read permissions.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/fixture-env.mjs

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated no new comments.

Suppressed comments (1)

apps/desktop/src/renderer/styles/prompt-rail.css:53

  • The comment says “GitHub's macos-15 image uses Always”, but the new macOS CI lane explicitly sets AppleShowScrollBars to WhenScrolling. This inconsistency makes it unclear which scrollbar mode the 48px offset is primarily targeting (and can mislead future debugging if CI behavior changes).
     sailed through CI green. The overlay dead band is 14px when the bar
     appears only while scrolling, and ~16px when the system shows scroll
     bars Always — GitHub's macos-15 image uses Always, and a visible
     Electron window can stack a native overlay on the webview's own bar.
     Rest the rail at `space-8 + space-4` (48px), clear of that stack, and

@Astro-Han Astro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a dedicated macOS lane is the right way to validate an OS-specific compositor/overlay problem, and the fixture isolation is thoughtfully scoped. One test seam still defeats that goal: the critical jump assertions bypass the native pointer path, while the test itself records that the first tick is hidden by the titlebar.

The first-principles split is simpler: prove user reachability with one real pointer interaction on a visible tick and assert its destination; test jump/auto-follow state transitions separately at the logic boundary. That removes the synthetic-click exception and makes each test responsible for exactly one claim.

Review performed with Codex reviewer agents and DeepSeek V4 Flash as advisory tools; I verified this finding against the latest head and live CI state.

中文评论

增加独立 macOS lane 是验证特定系统 compositor/overlay 问题的正确方向,fixture 隔离也很克制。但关键跳转断言绕过了原生 pointer path,而测试本身又明确记录首个 tick 被 titlebar 覆盖,因此当前测试不能证明真实用户交互可达。

更符合第一性原理的最小方案是:用一次真实 pointer 交互点击可见 tick 并断言落点,单独在逻辑边界验证 jump/auto-follow 状态变化。这样可以删掉 synthetic click 例外,每个测试只证明一个事实。

本次审查使用了 Codex reviewer agents 与 DeepSeek V4 Flash 作为辅助工具;我已依据最新 head 和实时 CI 状态复核该问题。

Comment thread apps/desktop/e2e/prompt-rail.spec.ts Outdated
@Astro-Han

Copy link
Copy Markdown
Contributor

/agentic_review

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. macOS failure is nonblocking 🐞 Bug ≡ Correctness
Description
The new e2e_macos job is independent of the unchanged required e2e check, so Linux can pass and
permit merging while the macOS lane fails. This defeats the PR's goal of making macOS-specific
failures block a PR.
Code

.github/workflows/ci.yml[R235-238]

+  e2e_macos:
+    needs: changes
+    if: needs.changes.outputs.e2e == 'true'
+    runs-on: macos-15
Relevance

●●● Strong

Recent workflow reviews accept fixes ensuring platform-specific or filtered checks cannot bypass
required validation.

PR-#2961
PR-#3192

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The existing e2e job depends only on changes, while the added macOS job is a separate sibling
that also depends only on changes; neither consumes the other's result. The workflow comment
explicitly preserves the Linux job as the required check, and GitHub documents that configured
required status checks are what must succeed to permit merging.

.github/workflows/ci.yml[202-238]
.github/workflows/ci.yml[243-262]
🌐 GitHub states that required status checks must complete successfully to satisfy protected-branch merge requirements.

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new macOS E2E job does not feed into the existing required `e2e` status, so a macOS failure does not necessarily block merging.

## Issue Context
Reuse the existing required-check name as the single authority rather than requiring `e2e_macos` separately in branch protection. Because Linux and macOS require different runners, consolidating execution into one job is impossible; a small aggregator job retaining the `e2e` name is the unavoidable additional job/runner burden.

## Fix Focus Areas
- .github/workflows/ci.yml[202-262]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Titlebar blocks first tick 🐞 Bug ≡ Correctness
Description
The changed test acknowledges that the first prompt-rail tick is under the macOS titlebar and
replaces a real pointer click with HTMLElement.click(). The suite therefore passes while users
cannot physically activate the earliest prompt through that tick.
Code

apps/desktop/e2e/prompt-rail.spec.ts[R255-258]

+  await page.locator('.maka-prompt-rail-tick').first().evaluate((tick) => {
+    if (!(tick instanceof HTMLElement)) throw new Error('the first prompt-rail tick is missing');
+    tick.click();
+  });
Relevance

●●● Strong

Recent desktop reviews accept titlebar-safe-area and E2E hit-testing corrections; synthetic clicks
can mask a real interaction failure.

PR-#3160
PR-#3171

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The added comments state that a pointer click on the first tick lands on layout content rather than
the tick, and the new code invokes the handler synthetically instead. The rail controls are genuine
buttons whose pointer-driven onClick performs navigation, while the BrowserWindow uses a macOS
hiddenInset titlebar overlay and the rail's vertical sizing does not account for that overlay
clearance.

apps/desktop/e2e/prompt-rail.spec.ts[207-224]
apps/desktop/e2e/prompt-rail.spec.ts[246-258]
packages/ui/src/prompt-anchor-rail.tsx[519-538]
apps/desktop/src/main/main-window.ts[273-299]
apps/desktop/src/renderer/styles/prompt-rail.css[58-62]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The first prompt-rail tick remains occluded by the macOS titlebar, and the E2E now bypasses the defect with a synthetic DOM click.

## Issue Context
Correct the rail's vertical safe area using the existing titlebar-clearance seam, then retain a real Playwright pointer click. Reusing the existing clearance is preferable to adding a new platform flag, geometry authority, or synthetic interaction path; apply the same real-click behavior to both changed tests.

## Fix Focus Areas
- apps/desktop/e2e/prompt-rail.spec.ts[207-258]
- apps/desktop/e2e/prompt-rail.spec.ts[309-312]
- apps/desktop/src/renderer/styles/prompt-rail.css[58-62]
- apps/desktop/src/renderer/styles/shell-layout.css[102-116]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Web pages:
  +2 more
Review mode: ⚖️ Balanced: This changes CI execution, cross-platform fixture-window behavior, and interaction/layout tests across several files, creating real but reviewable correctness and maintenance risk in one careful pass.

Grey Divider

Tip of the day
💡 Did you know, you can keep summaries lean with Finding overflow, which tucks the rest behind 'View more'

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread .github/workflows/ci.yml
Comment thread apps/desktop/e2e/prompt-rail.spec.ts Outdated
@Astro-Han

Copy link
Copy Markdown
Contributor

This PR also changes the visible prompt-rail position on macOS to avoid overlay scrollbar and titlebar hit regions. Could you please add a screenshot of the resulting prompt rail in the Desktop UI, ideally with the macOS overlay scrollbar visible? A before/after comparison is welcome, but one clearly annotated result is sufficient. Thanks!

Posted by Codex on behalf of Astro-Han.

@1625567290
1625567290 force-pushed the ci/macos-desktop-e2e branch from bc64b35 to cebe9c5 Compare August 23, 2026 03:08
@1625567290

Copy link
Copy Markdown
Contributor Author

Rebased onto current main and force-updated the branch to cebe9c511. GitHub now reports the PR as mergeable.

Here is the requested macOS result with the native overlay scrollbar visible at the far right. The prompt rail is inset from that hit region and its first-to-last tick column stays below the titlebar clearance:

macOS prompt rail with overlay scrollbar

The rebased implementation restores normal Playwright pointer clicks for the first tick and verifies the complete painted rail column instead of trimming the titlebar-covered prefix. Local validation on the new head: prompt-rail E2E 7/7, the previously failing titlebar workbar scenario 1/1, Desktop build and typecheck, CI contract tests 29/29, helper tests 61/61, lint, format, ASF headers, and diff checks.

The new CI run is currently action_required, so it needs maintainer approval before the macOS lane can execute.

@1625567290
1625567290 force-pushed the ci/macos-desktop-e2e branch from cebe9c5 to 217df6e Compare August 23, 2026 06:23
@1625567290

Copy link
Copy Markdown
Contributor Author

@Astro-Han Fixed the two failures from the current macOS run in 217df6e69 after rebasing onto main@6ada6b546.

  • The prompt-rail hit-test now polls until ResizeObserver-published geometry has converged, while still failing if any titlebar-covered or between-tick gap remains.
  • The workbar safe-area test now normalizes the native caption inset to 0px before applying its simulated 80px override; the previous assertion incorrectly assumed every macOS runner started at zero, while the failed runner already exposed about 10px.

Local macOS verification:

  • both previously failing scenarios: 2/2 in normal mode and 2/2 with CI=true
  • complete visible-window suite: the two targeted scenarios passed; 51 passed and 1 skipped overall, with three unrelated current-main failures in unchanged Skills/settings tests
  • Desktop typecheck, CI/helper contracts (29/29), lint, format, ASF headers, and diff checks passed

The updated-head workflow is awaiting creation/approval; please approve it when GitHub exposes the run.

@1625567290
1625567290 force-pushed the ci/macos-desktop-e2e branch from 217df6e to 940e129 Compare August 23, 2026 12:00
@1625567290

1625567290 commented Aug 23, 2026

Copy link
Copy Markdown
Contributor Author

@Astro-Han Rebased onto current main (a2f2a1afa) and force-updated the branch to 940e129c7; GitHub reports it mergeable.

The previous red test check was the aggregator reporting two platform lanes that had been cancelled by overlapping approved runs; it was not a test assertion failure. I rebuilt the current tree and ran the actual macOS Electron surfaces locally on this rebased content:

  • prompt-rail and session-workbar E2E: 13/13 passed
  • CI planner contract: 29/29 passed
  • Desktop production build passed
  • ASF header check passed
  • git diff --check passed

The fresh exact-head workflow can now provide the remote Linux/macOS evidence.

The fresh workflow is waiting for maintainer approval: CI 32638153455. Please approve this exact-head run.

@1625567290
1625567290 force-pushed the ci/macos-desktop-e2e branch from 940e129 to 999d3e1 Compare August 23, 2026 12:41
@1625567290

Copy link
Copy Markdown
Contributor Author

The previous CI run had one macOS geometry failure: prompt-rail.spec.ts reported 74 hit-test misses. The Linux lane passed, and the macOS lane finished with 54 passed, 1 skipped, and only that assertion failing.

I reran the same head locally on macOS with AppleShowScrollBars=Always: the targeted test passed 10/10, and the complete prompt-rail file passed 35/35 across five repetitions. I did not weaken the assertion.

The branch is now rebased onto current main at 999d3e101. Post-rebase validation is green for the targeted real-window test, Desktop/workspace build, CI planner tests (29/29), ASF header check, and diff check. The fresh CI run is waiting for maintainer approval.

@Astro-Han Astro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at exact head 999d3e10167024926b58fea393cbd79dc54351d0. [P1] + [P2]; not ready to merge.

[P1] The geometry-wait fix is deterministically ineffective on the lane it targets — apps/desktop/e2e/prompt-rail.spec.ts:200-244

The change wraps the continuous hit-test in a 10 s expect.poll, on the premise that the rail needs more time to settle. Two hosted runs at patch-equivalent heads say otherwise:

run head e2e_macos result
32638153455 940e129c7 failure insideViewport:true, hasSpan:true, misses:74
32640104914 999d3e101 failure insideViewport:true, hasSpan:true, misses:74

test_linux is green in both; the aggregate fails closed as designed.

Identical numbers across two runs is the part that matters. misses:74 is not boundary jitter that a longer wait would absorb — it is the same sustained non-hitting each time, which falsifies the "just wait for layout" premise directly. A local 10/10 green doesn't outweigh two same-valued reds on the actual target lane; different platform, different result, and the target lane is the one that has to pass.

What the evidence does not yet settle is whether the cause is real product geometry or a hit-test seam in the harness — see the P2, which is why that distinction can't currently be made. Either way, one of the two has to be fixed and the exact head has to go green before merge. Loosening the continuous-reachability assertion is not an option here: that assertion is the contract, and relaxing it converts a visible failure into an invisible one.

For the record, the other failing spec in that job — a skill-draft-lifecycle click timeout — is on an unchanged path and I'm not attributing it to this PR.

[P2] The macOS lane produces nothing to diagnose with — .github/workflows/ci.yml:235-262

The new macOS lane has no upload-artifact step at all, and the artifacts API returns 0 for both runs above. So a runner-only failure currently cannot be investigated.

The second commit makes this worse in a specific way: the previous assertion emitted rail travel hits ${JSON.stringify(travel.sample)}, and the poll message that replaced it still computes sample but never prints it. What survives in the log is misses=74 with no way to see which elements intercepted those 74 y-positions — which is exactly the information needed to tell product geometry from a harness seam.

Suggested: upload apps/desktop/test-results plus traces and screenshots on always(), and restore sample to the failure message. That is likely a prerequisite for diagnosing the P1 rather than a follow-up to it.

Closed from earlier rounds

The previously-raised planner concern is withdrawn: the planner suite is 29/29 and every non-Storybook apps/desktop/** path does select E2E. Both real runs confirm the Linux/macOS selection and the fail-closed aggregate, so there is no missed-selection defect.

@1625567290
1625567290 force-pushed the ci/macos-desktop-e2e branch from 999d3e1 to 960c92b Compare August 23, 2026 13:47
@1625567290

Copy link
Copy Markdown
Contributor Author

Addressed both findings at exact head 3aae1d4a8.

  • P1: the hit-test no longer rounds the rail x-coordinate to an integer. It now walks the full vertical path at 0.25 CSS-pixel intervals and also checks every tick center, every adjacent seam, and the maximum geometric gap. This preserves the continuous user-reachability contract while removing the coordinate alias that could put a narrow rail sample on its outside edge. The current-head target passed 10/10 locally on macOS.
  • P2: the macOS lane now uploads apps/desktop/test-results with if: always(). The existing Playwright configuration retains traces, videos, and screenshots on failure, so a runner-only failure will have the intercepted-element samples plus downloadable diagnostics. The CI planner contract now pins this upload behavior.
  • The unrelated Skill draft timeout was also stabilized through the menu active-descendant keyboard contract rather than a pointer target that can be replaced during catalog refresh.
  • A separate project-picker race found by the complete local run was narrowed to the menu focus boundary and stabilized without changing the product assertion.

Validation: full Desktop E2E passed 56 with 1 existing skip; the final continuous-path target passed 10/10; build, typecheck, lint, format, ASF headers, and CI planner 30/30 passed. The fresh exact-head checks are ready for maintainer approval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: add a macOS e2e lane so platform-specific renderer regressions cannot sail through green

3 participants