Skip to content

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

Description

@Al629176

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 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:

Feature Shipped in Missing test
"Just chatting" sends empty tool list to model open bug #2094 Agent markup leaks into chat undetected
Composio BYOK — per-company key stored server-side PR #2060 No scope or persistence proof
Ledger rejects rows missing a required field PR #2048 Partial entries silently accepted until observed in prod
Blocker → DM → reply → resume (Epic #1860) PRs #2004 #2006 #2017 #2038 End-to-end park/resume never driven by a test
Attachment upload+resolve scope parity Bug #2029 Attachment rejection only noticed in the field
Inference test mislabels 404 as bad URL Bug #1993 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.

Auth / Onboarding

  • Magic-link login → session cookie → console (spec: wiring.spec.ts)
  • Password login toggle (spec: login-centred.spec.ts)
  • Resend throttle (spec: login-resend.spec.ts)
  • First-run setup wizard → named company + first integration (spec: onboarding-gate.spec.ts, company-setup.spec.ts)
  • First-run product tour, dismissal, persistence (spec: tour-completion-persists.spec.ts, tour-popover-in-viewport.spec.ts)
  • OAuth onboarding resume after redirect (spec: oauth-onboarding-resume.spec.ts)
  • Member vs admin role enforcement on Connections/Settings (spec: connections-authority.spec.tsFAILING)
  • Multi-host sign-in and host-switcher (spec: sidebar-host-switcher.spec.ts, manage-hosts.spec.ts)

Chat

Work Board / Tasks

  • Kanban columns render with correct cards (spec: board-columns.spec.ts)
  • Drag to reorder / move between columns (spec: board-drag.spec.ts)
  • Chat → card dispatch: a Do-it-once message produces a card (spec: chat-to-card.spec.ts)
  • Task detail view: steps, attempts, artifacts tabs (spec: agent-runs.spec.ts)
  • Assignee picker (spec: assignee-picker.spec.ts)
  • Budget display on team card (spec: team-budget.spec.ts, team-budget-edit.spec.ts)
  • Task export (ops: src/server/ops/task_export/, no spec)

Approvals

Workflows

  • Canvas renders and is keyboard-accessible (workflow-canvas-escape.spec.ts, workflow-canvas-fit.spec.ts)
  • Node config inspector (workflow-node-config.spec.ts, workflow-node-inspector-reveal.spec.ts)
  • Create, edit, delete a workflow (workflow-create-affordance.spec.ts, workflow-edit-delete.spec.ts)
  • Live run with inference (workflow-run-inference.spec.ts, workflow-canvas-live.spec.ts)
  • Run history rail and result panel (workflow-run-history.spec.ts, workflow-run-result.spec.ts)
  • Inline workflow approval (workflow-inline-approval.spec.ts)
  • Week-1 nudge to save a workflow (workflow-week1-nudge.spec.ts)
  • Selection persists across company switch (spec: workflow-selection-persists.spec.tsFAILING)
  • Delete/pause sweep does not miss a concurrent registration (bug workflow delete/pause sweep can miss a run that registers just after the sweep runs #2059, no spec)

Workspace

Ledgers

Connections

Inference / Settings

Memory / Brain

Observatory / Runs

  • Runs list renders attempts (spec: agent-runs.spec.ts)
  • Deep trace view (ops: src/server/ops/deep_trace.rs, spec: workflow-run-traces.spec.ts)

Company / Team

  • Agent roster cards render (spec: company-cards.spec.ts)
  • Agent detail panel and profile sheet (spec: agent-detail.spec.ts, agent-profile-panel.spec.ts, agent-profile-sheet.spec.ts)
  • Desks view (spec: team-desks.spec.ts)
  • People invite (spec: people-invite.spec.ts)

Finance / Usage

Skills / Pages

  • Skills registry (skills-registry.spec.ts)
  • Pages render with SDK assets (pages-render.spec.ts)

Accessibility / Shell

  • Sidebar navigation keyboard accessibility (sidebar-navigation-accessibility.spec.ts)
  • Skip-to-content link present (page-headings.spec.ts)
  • Shell two-layer layout (shell-two-layer.spec.ts)
  • Theme toggle visible (theme-toggle-visible.spec.ts)
  • Toast dismissal (toast-dismissal.spec.ts)
  • Mobile responsiveness (spec: overview-responsive-chrome.spec.ts)

New spec files (this PR / sub-issues)

Six new specs written against the gaps above:

File Covers
just-chatting-no-tools.spec.ts Issue #2094 — empty tool list in Just chatting mode
composio-byok.spec.ts PR #2060 — BYOK key persistence, catalog deadline, member gate
ledger-required-fields.spec.ts PR #2048 — 422 on missing required field, no "could not be read"
blocker-dm-flow.spec.ts Epic #1860 — park → DM → approve → resume end-to-end
attachment-scope.spec.ts Issue #2029 — upload and resolve use the same scope
inference-setup-errors.spec.ts Issue #1993 — correct label for 404 / 401 / network failure

Solution

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

3 — Add missing coverage for remaining gaps

Follow-up sub-issues for:


Acceptance criteria

  • Failing lanes greenconnections-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 suitejust-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).
  • Regression safety — Each new spec has at least one assertion that would fail if the bug it covers reappeared (i.e., it is not vacuous — composio-catalog-deadline was 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).
  • 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 documentedCLAUDE.md or a comment in playwright.config.ts notes the target spec count so a future PR that accidentally drops a spec is caught.

Related

Activity

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

Metadata

Metadata

Assignees

Labels

epicEpic — parent issue tracking a major feature or initiativepriority: p1Next. Wrong behaviour a user will hit, or a security weakness behind a condition.

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions