Repository navigation
ci(e2e): run the SSH browser route e2e when its source changes - #23498
Conversation
A change to the SSH workspace browser route, its gate card, or the host-connection phase it waits on selected no e2e specs, so the Docker SSH browser spec never ran on the PR that changed it.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review. 📝 WalkthroughWalkthroughThe PR adds the Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The SSH browser E2E routing change is ready to merge after normal checks. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Review status for
Review complete; no merge performed. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
The PR is a CI routing fix with no app runtime change. I verified the mechanism end to end at a230e91.
- New route
browser.local-ssh-workspace-route—config/scripts/pr-e2e-source-routing.mjsmaps the five SSH browser-route source files totests/e2e/local-ssh-browser-routing.spec.ts. The regex is fully anchored andisProductSourceexcludes the.test.ts/.test.tsxsiblings, so the route matches exactly those files. - Lane actually runs —
selectPrE2eSpecsselects the spec,shouldRunReusablePrE2ereturns true, ande2e.ymlalready excludes the spec fromchanged-e2ewhile listing it in thessh-docker-watcher-isolationif.run-ssh-docker-e2e.mjsalready claims it withORCA_E2E_SSH_DOCKER/ORCA_E2E_LOCAL_SSH_BROWSER, so the Docker-SSH lane executes it. - Regression case covered —
ssh-browser-e2e-routing.test.mjsadds positive assertions for all five files (includingshouldRunReusablePrE2e) and negative assertions for adjacent unit tests andBrowserPane.tsx. Removing the route fails it. - Fix targets the right seam —
worktree-host-connection-phase.tswas created by #22810; probing the route against that commit's files confirms bothuse-ssh-workspace-browser-route.tsand the phase module now select the spec.
I ran vitest config/scripts/ssh-browser-e2e-routing.test.mjs config/scripts/pr-e2e-gate-contract.test.mjs — 45 passed.
ℹ️ Broad trigger on worktree-host-connection-phase.ts
worktree-host-connection-phase.ts is also imported by editor-panel content loading (useEditorPanelFileContentLoader.ts, useEditorPanelFileLoadRetry.ts) and terminal pane host state, so an edit to it now runs the 4-shard / 60-minute Docker-SSH lane even for PRs unrelated to SSH routing. The route comment and PR body justify this, and there is no narrower seam for the phase signal, so this reads as a deliberate tradeoff rather than a defect — noting it only so the cost is visible if that lane's runtime becomes a problem.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏

ELI5
CI decides which end-to-end tests a PR runs by looking at the files it changes. Changes to the code that routes browser tabs through an SSH host selected no end-to-end tests at all, so the one test that exercises that code never ran on the PR that broke it. Now a change to those files runs that test.
What Changed
Before: #22810 changed
use-ssh-workspace-browser-route.tsand the host-connection signal it waits on. CI's routing script mapped those files to zero specs, so the whole e2e workflow was skipped.local-ssh-browser-routing.spec.tsfirst ran on the nightly main run after merge, and it has failed on most main-based PRs since then.After: a new route,
browser.local-ssh-workspace-route, inconfig/scripts/pr-e2e-source-routing.mjssends these files totests/e2e/local-ssh-browser-routing.spec.ts:src/main/browser/local-ssh-browser-route.tsandlocal-ssh-browser-partitions.tssrc/renderer/src/components/browser-pane/use-ssh-workspace-browser-route.tssrc/renderer/src/components/browser-pane/assemble-chrome/ssh-routed-browser-page-gate.tsx(the "SSH connection unavailable" card)src/renderer/src/lib/worktree-host-connection-phase.ts(the host-connection phase the route gate waits on)Mechanism: no workflow change was needed. The SSH Docker e2e job already runs when this spec is among the selected specs, and the general changed-specs job already skips it. Only the file-to-spec route was missing.
Why
This adds one route beside the existing ones, following the same pattern. Alternatives considered:
ssh-terminal-sourceroute would run twelve SSH terminal specs for a browser change.browser-pane/**would put the SSH Docker lane on most browser PRs, even though most browser-pane files never touch SSH.The host-connection phase is included because a change there can strand the SSH-unavailable card without touching any browser file, which is what #22810 did.
Linked Issue
Follow-up to #22810. The test failure itself is fixed separately in #23465.
Visual Proof
N/A. CI routing only; nothing changes in the app.
Testing
local-ssh-browser-routing.spec.tsis selected and e2e runs.config/scripts/ssh-browser-e2e-routing.test.mjs. It covers every routed file and checks that tests beside them and an unrelated browser-pane file do not select the spec. It fails with the route removed and passes with it.ssh-browser-e2e-routing,pr-e2e-*,ssh-localhost-e2e-routing, andwsl-e2e-lane-contract(5 + 2 files, 110 tests).check:code-quality:changed, oxlint, and oxfmt are clean.This PR changes only
config/scripts/, which no route matches, so its own CI will not run the SSH lane. Until #23465 merges, a PR that touches the routed files will see this spec fail, as it does on main today.Review
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
No app runtime change, so it has no effect on cross-platform, SSH, mobile, or compatibility behavior. PRs that touch the five routed files now also run the SSH Docker e2e lane.
Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)