You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Comprehensive feature spec and e2e test coverage: full surface audit, new specs for gaps, and test-fix plan for the three permanently-failing e2e lanes #2113
A full audit of OpenCompany's feature surface against the existing 99 Playwright specs reveals: three spec lanes failing on every PR since 2026-09-04 (issue #2110), six shipped features with no regression coverage at all, and four open bugs whose reproduction path exists only in the issue description and not in the test suite. This issue delivers the complete feature specification, the new spec files, and the acceptance bar that marks the suite healthy.
Problem
The test suite is broken as a merge gate.Console E2E and Console E2E (live brain) have been red on main and on every open PR since approximately 2026-09-04 (issue #2110). Three specs fail deterministically:
test/e2e/connections-authority.spec.ts:145 → #company-credential not found
test/e2e/desktop-connections.spec.ts:420 → [data-testid="no-connection-run-here"] not found
test/e2e/workflow-selection-persists.spec.ts:176 → click timeout (60 s)
The live-brain lane additionally fails composio-catalog-deadline.spec.ts:223 after the catalog-deadline fix in PR #2035. Because CI builds the merge commit, every author reads these as "my branch broke E2E" — a false signal that erodes trust in the gate.
Six shipped features have no spec coverage. The following surfaces exist in the codebase and in closed PRs but have no corresponding Playwright spec:
Label correctness unverified across all HTTP shapes
Four open bugs have no reproduction path in the suite — they were filed from field reports or code reads, and a re-regression would surface only from users.
Feature specification (complete surface)
The following is the full feature list derived from the source tree (src/server/ops/, src/server/graphql/, frontend views/), closed PRs, and open epics. Each entry maps to a test-coverage state.
1 — Fix the three permanently-failing specs (blocker for all PRs)
connections-authority.spec.ts:145 — #company-credential not found. The element id or data-testid changed in a recent UI refactor (likely the Connections redesign tracked in Epic #2104). Fix: re-locate the element by its current selector, or add a stable data-testid to the credential input in ConnectionConsole.tsx.
desktop-connections.spec.ts:420 — [data-testid="no-connection-run-here"] not found. The "offer to start here" affordance was renamed or restructured in the desktop connections redesign. Fix: align the data-testid in the component with what the spec expects, or update the spec to use the current structure.
workflow-selection-persists.spec.ts:176 — click timeout. The company-switch sequence navigates away from the workflow before the click target appears. Fix: add a waitFor on the navigation settling before clicking, or use page.route to intercept the company-switch redirect.
2 — Land the six new specs
The files listed above are committed to frontend/test/e2e/. Each spec includes:
A clear issue/PR reference in its doc comment
test.skip(!LIVE_BRAIN, ...) guards where the echo brain is not enough
An explicit assertion that the pre-fix behavior does not reappear
Failing lanes green — connections-authority.spec.ts, desktop-connections.spec.ts, and workflow-selection-persists.spec.ts pass on main and on every subsequent PR. The Console E2E and Console E2E (live brain) lanes are no longer permanently red.
Six new specs in the suite — just-chatting-no-tools, composio-byok, ledger-required-fields, blocker-dm-flow, attachment-scope, inference-setup-errors are in frontend/test/e2e/ and each passes on the appropriate lane (default or live-brain).
Diff coverage ≥ 80% — Any Rust changes required to fix the failing specs (e.g. adding a data-testid via a rendered attribute) meet the changed-lines gate.
No skip-all — No new spec uses test.skip(true, ...) unconditionally. Each skip is guarded by a runtime condition (missing host feature, absent fixture user) and documented.
Observable — The Console E2E CI step reports a passing count ≥ 99 (all existing specs) and the live-brain step reports a passing count ≥ 103 (99 + 4 new live-brain specs).
Spec count documented — CLAUDE.md or a comment in playwright.config.ts notes the target spec count so a future PR that accidentally drops a spec is caught.
Summary
A full audit of OpenCompany's feature surface against the existing 99 Playwright specs reveals: three spec lanes failing on every PR since 2026-09-04 (issue #2110), six shipped features with no regression coverage at all, and four open bugs whose reproduction path exists only in the issue description and not in the test suite. This issue delivers the complete feature specification, the new spec files, and the acceptance bar that marks the suite healthy.
Problem
The test suite is broken as a merge gate.
Console E2EandConsole E2E (live brain)have been red on main and on every open PR since approximately 2026-09-04 (issue #2110). Three specs fail deterministically:The live-brain lane additionally fails
composio-catalog-deadline.spec.ts:223after the catalog-deadline fix in PR #2035. Because CI builds the merge commit, every author reads these as "my branch broke E2E" — a false signal that erodes trust in the gate.Six shipped features have no spec coverage. The following surfaces exist in the codebase and in closed PRs but have no corresponding Playwright spec:
Four open bugs have no reproduction path in the suite — they were filed from field reports or code reads, and a re-regression would surface only from users.
Feature specification (complete surface)
The following is the full feature list derived from the source tree (
src/server/ops/,src/server/graphql/, frontendviews/), closed PRs, and open epics. Each entry maps to a test-coverage state.Auth / Onboarding
wiring.spec.ts)login-centred.spec.ts)login-resend.spec.ts)onboarding-gate.spec.ts,company-setup.spec.ts)tour-completion-persists.spec.ts,tour-popover-in-viewport.spec.ts)oauth-onboarding-resume.spec.ts)connections-authority.spec.ts— FAILING)sidebar-host-switcher.spec.ts,manage-hosts.spec.ts)Chat
chat-channel-membership.spec.ts,chat-mention-badge.spec.ts)wiring.spec.ts,chat-live-events.spec.ts)chat-detached-post-failure.spec.ts)chat-mentions.spec.ts)chat-thread-avatar.spec.ts)attachment-scope.spec.ts)just-chatting-no-tools.spec.ts)workflow-selection-persists.spec.ts— FAILING)chat-dispatch-marker.spec.ts)chat-inline-approval.spec.ts)chat-presence.spec.ts)Work Board / Tasks
board-columns.spec.ts)board-drag.spec.ts)chat-to-card.spec.ts)agent-runs.spec.ts)assignee-picker.spec.ts)team-budget.spec.ts,team-budget-edit.spec.ts)src/server/ops/task_export/, no spec)Approvals
chat-approval-line.spec.ts)approval-timeout-honesty.spec.ts)blocker-dm-flow.spec.ts)Workflows
workflow-canvas-escape.spec.ts,workflow-canvas-fit.spec.ts)workflow-node-config.spec.ts,workflow-node-inspector-reveal.spec.ts)workflow-create-affordance.spec.ts,workflow-edit-delete.spec.ts)workflow-run-inference.spec.ts,workflow-canvas-live.spec.ts)workflow-run-history.spec.ts,workflow-run-result.spec.ts)workflow-inline-approval.spec.ts)workflow-week1-nudge.spec.ts)workflow-selection-persists.spec.ts— FAILING)Workspace
workspace.spec.ts)workspace.spec.ts)workspace.spec.ts)src/server/ops/workspace.rs, bug Workspace note download reads the whole note into memory before sending it #2071 — reads whole file into memory, no spec)Ledgers
ledger-list-row.spec.ts)ledger-required-fields.spec.ts)Connections
tool-grant-from-connect-page.spec.ts)composio-byok.spec.ts)composio-byok.spec.ts)connections-authority.spec.ts— FAILING)desktop-connections.spec.ts— FAILING)mcp-load-timeout.spec.ts)mcp-agent.spec.ts)add-host-connectors.spec.ts)Inference / Settings
inference.spec.ts)inference-setup-errors.spec.ts)Memory / Brain
brain-virtualization.spec.ts)brain-memory.spec.ts)cortexa selectable memory engine (#1936) #2065, no spec)Observatory / Runs
agent-runs.spec.ts)src/server/ops/deep_trace.rs, spec:workflow-run-traces.spec.ts)Company / Team
company-cards.spec.ts)agent-detail.spec.ts,agent-profile-panel.spec.ts,agent-profile-sheet.spec.ts)team-desks.spec.ts)people-invite.spec.ts)Finance / Usage
pages-render.spec.tscovers route render)Skills / Pages
skills-registry.spec.ts)pages-render.spec.ts)Accessibility / Shell
sidebar-navigation-accessibility.spec.ts)page-headings.spec.ts)shell-two-layer.spec.ts)theme-toggle-visible.spec.ts)toast-dismissal.spec.ts)overview-responsive-chrome.spec.ts)New spec files (this PR / sub-issues)
Six new specs written against the gaps above:
just-chatting-no-tools.spec.tscomposio-byok.spec.tsledger-required-fields.spec.tsblocker-dm-flow.spec.tsattachment-scope.spec.tsinference-setup-errors.spec.tsSolution
1 — Fix the three permanently-failing specs (blocker for all PRs)
connections-authority.spec.ts:145—#company-credentialnot found. The element id ordata-testidchanged in a recent UI refactor (likely the Connections redesign tracked in Epic #2104). Fix: re-locate the element by its current selector, or add a stabledata-testidto the credential input inConnectionConsole.tsx.desktop-connections.spec.ts:420—[data-testid="no-connection-run-here"]not found. The "offer to start here" affordance was renamed or restructured in the desktop connections redesign. Fix: align thedata-testidin the component with what the spec expects, or update the spec to use the current structure.workflow-selection-persists.spec.ts:176— click timeout. The company-switch sequence navigates away from the workflow before the click target appears. Fix: add awaitForon the navigation settling before clicking, or usepage.routeto intercept the company-switch redirect.2 — Land the six new specs
The files listed above are committed to
frontend/test/e2e/. Each spec includes:test.skip(!LIVE_BRAIN, ...)guards where the echo brain is not enough3 — Add missing coverage for remaining gaps
Follow-up sub-issues for:
workflow-delete-pause-sweep.spec.ts(bug workflow delete/pause sweep can miss a run that registers just after the sweep runs #2059)managed-card-provider-key.spec.ts(bug The Managed card is labelled TinyHumans but stores keys against OpenRouter — #1737's trap still works #1962)cortex-memory-engine.spec.ts(PR Makecortexa selectable memory engine (#1936) #2065)task-export.spec.ts(ops surface, no coverage)workspace-note-download-stream.spec.ts(bug Workspace note download reads the whole note into memory before sending it #2071 — reads whole file into memory before sending)Acceptance criteria
connections-authority.spec.ts,desktop-connections.spec.ts, andworkflow-selection-persists.spec.tspass on main and on every subsequent PR. TheConsole E2EandConsole E2E (live brain)lanes are no longer permanently red.just-chatting-no-tools,composio-byok,ledger-required-fields,blocker-dm-flow,attachment-scope,inference-setup-errorsare infrontend/test/e2e/and each passes on the appropriate lane (default or live-brain).composio-catalog-deadlinewas vacuous before PR fix(console): give the Composio catalog read a deadline that outlasts the host's own (#2007) #2035 fixed the deadline; this bar prevents a repeat).data-testidvia a rendered attribute) meet the changed-lines gate.test.skip(true, ...)unconditionally. Each skip is guarded by a runtime condition (missing host feature, absent fixture user) and documented.Console E2ECI step reports a passing count ≥ 99 (all existing specs) and the live-brain step reports a passing count ≥ 103 (99 + 4 new live-brain specs).CLAUDE.mdor a comment inplaywright.config.tsnotes the target spec count so a future PR that accidentally drops a spec is caught.Related