Skip to content

test(e2e): update four stale e2e specs to match intentional product changes - #30115

Merged
nwparker merged 2 commits into
stablyai:mainfrom
SimonSQLML:fix/e2e-main-stale-specs
Oct 27, 2026
Merged

nwparker merged 2 commits into
stablyai:mainfrom
SimonSQLML:fix/e2e-main-stale-specs

Conversation

@SimonSQLML

@SimonSQLML SimonSQLML commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

ELI5

Orca has automated tests that click through the app the way a person would. Some of the app's wording and structure changed on purpose: a dialog is now called "Workspace details", the Cmd+J search box mentions workspaces and tasks, and spreadsheet files open in an editable grid. A few tests were still looking for the old wording, so they failed on every run and could hide real breakages. This PR updates those tests to look for what the app shows today. The app itself does not change.

What Changed

Tests only, 4 files. Each one now matches what the shipped product does:

  • tests/e2e/linear-url-workspace-entry.spec.ts and tests/e2e/workspace-emoji-picker.spec.ts: the Cmd+J placeholder is now Search chats, terminals, workspaces, tasks, settings, and actions... (worktree-jump-palette-surface.tsx).
  • tests/e2e/workspace-emoji-picker.spec.ts: the worktree meta dialog is now titled Workspace details (WorktreeMetaDialogDraft.tsx). It used to be Edit Worktree Details.
  • tests/e2e/os-opened-documents.spec.ts: CSV/TSV files opened from the OS are editable. They render as role="grid" named CSV editor with gridcell cells (CsvGrid.tsx), not as a table with cell cells.
  • tests/e2e/profile-state-save-delay.spec.ts: the app's <Toaster closeButton> (App.tsx) adds a close button to every toast. Before, the spec expected 0 buttons. Now it asserts that the toast's only button is sonner's close button (data-close-button). Strict mode still fails if an action button is ever added.

Before: these specs failed on main every run. After: they pass.

Why

Specs that always fail make the suite noisy and hide real regressions. Every new selector was checked against the current product source, so this is a test-only fix. Matching on the ARIA role and the accessible name checks the user-facing contract directly, so no extra test-ids are needed.

I rebased the contributor's original change onto current main and dropped the hunks that main already fixed: toaster z-index, the paired Cmd+J placeholder, the palette filter placeholder, and the ai-vault unavailable-reason spec (rewritten in #33234).

Linked Issue

Fixes #30114

Visual Proof

N/A. This only changes e2e test expectations. The product UI and behavior are the same.

Testing

  • I manually tested these changes locally
  • Automated tests added/updated, or explained why not below

On macOS, background launch only (ORCA_BACKGROUND_LAUNCH=1):

pnpm test:e2e tests/e2e/linear-url-workspace-entry.spec.ts tests/e2e/workspace-emoji-picker.spec.ts \
  tests/e2e/os-opened-documents.spec.ts tests/e2e/profile-state-save-delay.spec.ts --workers=2
  • With the specs from origin/main, the in-scope tests fail: the Cmd+J placeholder isn't found, the CSV/TSV coldResult isn't visible, the toast has 1 button where the spec expects 0, and the details dialog isn't found.
  • With this branch rebased on current main: 7 passed, 1 failed. The failure is linear-url-workspace-entry.spec.ts:130 ("pasting into the composer selects the Linear issue without ArrowDown"): window.__orcaTestReleaseLinearLookup is never installed. It fails the same way on main. It is not stale copy and is out of scope here.
  • A temporary probe spec confirmed that the new toast assertion still rejects a second button.
  • oxlint, oxfmt --check, ast-grep, the anti-slop and code-quality oxlint configs, and check-changed-code-quality.mjs are clean on the touched files.

Review

Reviewed independently by two agents and a verify pass. All approved with no blockers.

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

Notes

Test-only change. No impact on security, cross-platform behavior, SSH/remote, mobile, backwards compatibility, or performance.

Original fix by @SimonSQLML in #30115.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f79ee332-46b0-4e40-9249-55192f163c43
Commits

Reviewing files that changed from the base of the PR and between 0fba66c and 8c5d5dc.

Files selected for processing: 1
  • tests/e2e/linear-url-workspace-entry.spec.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 2 remain after this review.

Walkthrough

This pull request updates four end-to-end specs. The tests now expect current Cmd+J placeholders and the “Workspace details” dialog name, locate non-Markdown document results in the “CSV editor” grid, and check the delayed-save notice’s close-control attribute. The Linear spec also shares a connection-status fixture between its page setup and IPC handler.

Priority: Normal

Severity of issue fixed: Medium

Merge Risk: Minimal · up to 8c5d5

The updated E2E expectations and Linear fixture show no identified issue that needs to be fixed before merge.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title "test(e2e): update four stale e2e specs to match intentional product changes" matches the changeset, which updates four e2e spec files to match current product wording and structure (Cmd+J p…
Description check Passed The description follows the template closely. It has ELI5, What Changed (file-by-file before/after with mechanism and source references), Why (stale specs hide regressions, selector choice rationale, …
Linked Issues check Passed Issue #30114 requires stale E2E expectations to match current product behavior without product-code changes. The diff updates the four issue-listed specs in this PR: the Cmd+J placeholder, the `Worksp…
Out of Scope Changes check Passed The whole-PR diff changes only four E2E spec files. Each change supports issue #30114 by aligning a stale test selector or fixture with current product behavior. No product-code change or unrelated te…
Docstring Coverage Passed Docstring coverage is inconclusive: files from earlier reviews still need to be rechecked within the check's analysis limits. Not blocking.
Full details: Title check

Explanation

The title "test(e2e): update four stale e2e specs to match intentional product changes" matches the changeset, which updates four e2e spec files to match current product wording and structure (Cmd+J placeholder, 'Workspace details' dialog, CSV grid role, toaster close button). It is conventional-commit style, specific, and names the scope (four specs) and the reason (intentional product changes). It is not vague and does not describe anything absent from the diff.

Full details: Description check

Explanation

The description follows the template closely. It has ELI5, What Changed (file-by-file before/after with mechanism and source references), Why (stale specs hide regressions, selector choice rationale, rebase details), Linked Issue (Fixes #30114), Visual Proof (N/A with reason, which the template allows for test-only changes), Testing (boxes checked, macOS command, before/after results, one known failing spec explained), Review, Agent skill upstream boundary, Notes, and Checklist. The AI Disclosure section is absent from the description, and the template marks it as optional for StablyAI team members. The description does not clearly state which platform was tested beyond macOS background launch, and the template asks which platforms were tested, which it does answer (macOS). Remaining gaps are minor.

Full details: Linked Issues check

Explanation

Issue #30114 requires stale E2E expectations to match current product behavior without product-code changes. The diff updates the four issue-listed specs in this PR: the Cmd+J placeholder, the Workspace details dialog name, the CSV/TSV ARIA grid and gridcell roles, and the toaster close button. The Linear fixture setup also keeps the affected test runnable with the current worktree behavior. The PR evidence states that the other issue-listed specs were already fixed or rewritten on the reviewed head. The diff contains test-only changes.

Full details: Out of Scope Changes check

Explanation

The whole-PR diff changes only four E2E spec files. Each change supports issue #30114 by aligning a stale test selector or fixture with current product behavior. No product-code change or unrelated test change is present.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

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

@coderabbitai coderabbitai Bot 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.

🧹 Nitpick comments: 1
tests/e2e/os-opened-documents.spec.ts: 1

39-48: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Retain ARIA grid and cell assertions for CSV/TSV documents.

getByTestId('csv-grid').getByText(...) only checks that the text remains under the test-id element. It can pass if the element loses role="grid" or its cell structure while the text remains. This OS-opened-document path no longer checks those semantics. Keep the test ID for scoping, but use grid and gridcell role assertions for the result cells.

Suggested fix
       const table = page.getByTestId('csv-grid')
+      if (extension !== 'md') {
+        await expect(table).toHaveRole('grid')
+      }
       const coldResult =
         extension === 'md'
           ? page.getByRole('heading', { name: 'Cold result' })
-          : table.getByText('Cold result', { exact: true })
+          : table.getByRole('gridcell', { name: 'Cold result', exact: true })
       const warmResult =
         extension === 'md'
           ? page.getByRole('heading', { name: 'Warm result' })
-          : table.getByText('Warm result', { exact: true })
+          : table.getByRole('gridcell', { name: 'Warm result', exact: true })

ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b43ab0a1-50d8-473e-922b-cf8fa9a84d77
📥 Commits

Reviewing files that changed from the base of the PR and between 100b6b1 and 1895eb1af63c3e28b6dbc30d2e48ecb9179e7cf8.

📒 Files selected for processing: 8
  • tests/e2e/add-project-error-toast-stacking.spec.ts
  • tests/e2e/ai-vault-panel-search.spec.ts
  • tests/e2e/linear-url-workspace-entry.spec.ts
  • tests/e2e/os-opened-documents.spec.ts
  • tests/e2e/paired-cmd-j-host-qualified-tabs.spec.ts
  • tests/e2e/profile-state-save-delay.spec.ts
  • tests/e2e/workspace-emoji-picker.spec.ts
  • tests/e2e/worktree-jump-palette-filter.spec.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

@SimonSQLML

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up for CodeRabbit's nitpick and the formatter:

  • os-opened-documents: the CSV/TSV results are looked up as gridcells again, and the csv-grid container is checked for role="grid". An OS-opened CSV is editable, so it renders as a grid, not a table.
  • paired-cmd-j-host-qualified-tabs: oxfmt wrapped three getByPlaceholder lines that went over 100 columns.

It is a force-push because the first commit's author email was changed to my GitHub noreply address. Its content is unchanged.

Targeted run of both specs on my fork: 4/4 passed (md, csv and tsv cases plus the Cmd+J spec), https://github.com/SimonSQLML/orca/actions/runs/39490755521

For context, #30897 (merged today) fixed nine other stale full-suite specs. It shares no files with this PR, and this branch still merges cleanly into current main.

@SimonSQLML

Copy link
Copy Markdown
Contributor Author

@brennanb2025 @AmethystLiang could one of you take a look when you have a moment? The workflows on the current head are waiting for approval (action_required), since this comes from a fork.

For context: after #30897, the nightly full run on main at 3086fe2 (https://github.com/stablyai/orca/actions/runs/39642002390) still fails 16 spec files, and 8 of them are the ones this PR updates. #30897 left those eight to this PR. The branch merges cleanly into current main.

Align still-stale e2e expectations with shipped product behavior:
- the Cmd+J placeholder names workspaces and tasks
- the worktree meta dialog is titled "Workspace details"
- OS-opened CSV/TSV files are editable and render as an ARIA grid
- the delayed-save notice carries the app toaster's close button

Fixes stablyai#30114

Co-authored-by: Neil <neil@stably.ai>
@nwparker
nwparker force-pushed the fix/e2e-main-stale-specs branch from 33fe472 to 0fba66c Compare October 27, 2026 16:28
@nwparker nwparker changed the title test(e2e): repair full-suite specs that missed intentional product changes test(e2e): update four stale e2e specs to match intentional product changes Oct 27, 2026
@SimonSQLML

Copy link
Copy Markdown
Contributor Author

Thanks @nwparker for rebasing this onto current main and tightening the assertions!

Since stablyai#33270, Create worktree reads Linear status from the repo's host
(linear:status IPC) instead of the store, so the store-only fixture left
Linear disconnected in the composer and the pasted URL was never looked up.
Stub the linear:status handler with the same connected status.
@nwparker
nwparker merged commit 13757d7 into stablyai:main Oct 27, 2026
40 checks passed
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.

[Bug]: full sharded E2E run on main permanently fails 8 specs that expect superseded behavior

2 participants