Skip to content

Remove the end-to-end test suite - #133

Merged
soorya-u merged 2 commits into
mainfrom
chore/e2e-harness-cleanup
Jul 26, 2026
Merged

Remove the end-to-end test suite#133
soorya-u merged 2 commits into
mainfrom
chore/e2e-harness-cleanup

Conversation

@soorya-u

@soorya-u soorya-u commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Summary

  • Deletes tests/e2e in full: the harness-driven Vitest + shell-use terminal tier (login/start/stop/status/agents doctor over a real PTY) and the Playwright cross-peer browser suite (worker-connects, catalog, thread-lifecycle, thread-sync, cold-resume).
  • Deletes .github/workflows/nightly.yml entirely (all three jobs: the e2e run, build smoke, real-WebRTC check).
  • Removes the tooling that only existed to run the suite: mise.toml's process-compose and github:microsoft/shell-use, the e2e-only files under tooling/test/ (fixtures/wrangler-env-file.ts, fixtures/terminal-session.ts, fixtures/cli-worker-state.ts, mocks/cli-worker-config.ts, helpers/process.ts), and the workspace/CI wiring (package.json workspace entry + test:e2e script, turbo.json task, the e2e Vitest project, related knip.json/biome.json entries).
  • Keeps tooling/test/fixtures/cyrus-home.ts and tooling/test/mocks/auth-env.ts — both are genuinely shared outside tests/e2e (apps/cli's own unit tests, and the root @cyrus/server Vitest project's Miniflare bindings respectively).
  • Updates docs/guides/TESTING_FRAMEWORK.md and docs/guides/VERIFY_LOOP.md to drop the now-stale e2e/Playwright/nightly content; the manual full-stack verification loop is unaffected and is now the only loop.
  • Adds docs/adr/0019-remove-end-to-end-test-suite.md recording the decision (why, what coverage is lost, how to recover the suite from git history if ever re-justified), and links it from docs/adr/0017-*.md as a partial supersession.

Why

The suite's infrastructure cost (compiled cyrusd binary rebuilt per run, wrangler dev + local D1 + Vite via process-compose, a PTY driver, Playwright browsers) was carried entirely off the path contributors feel day to day — it only ran on manual workflow_dispatch, never on PRs or main, and never reached the "stable pass history" its own docs said cron was waiting on. Full reasoning in the ADR.

Test plan

  • bun run check:types — all packages pass
  • bun check:knip — clean
  • bun check:syncpack — clean
  • bun run test:unit — 81 passed / 1 skipped (Vitest) + 101 passed (Bun, apps/cli)
  • Pre-push hooks (typecheck, knip, syncpack, unit tests) passed independently on push

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

Summary by CodeRabbit

  • Testing

    • Removed the automated end-to-end test suite covering browser and terminal workflows.
    • Integration and unit tests remain available for ongoing validation.
    • Full-stack verification is now performed manually using the documented verification process.
    • Deployment smoke checks continue to validate service health, with optional signaling checks.
  • Documentation

    • Updated testing and verification guidance to reflect the revised coverage and manual validation approach.

The Playwright/PTY e2e harness (tests/e2e) carried real infrastructure
cost — a compiled cyrusd binary rebuilt per run, wrangler dev + local
D1 + Vite orchestrated through process-compose, a PTY driver, Playwright
browsers — but only ever ran on manual workflow_dispatch, never on PRs
or main, and never reached the stable pass history its own docs said
cron was waiting on. That's pure maintenance surface with no day-to-day
safety net, so it's removed along with the nightly workflow that ran it
and the process-compose/shell-use tooling that only existed to run it.

tooling/test keeps the two pieces genuinely shared outside tests/e2e
(cyrus-home.ts, used by apps/cli's own tests; auth-env.ts, used by the
root @cyrus/server Vitest project) and drops everything else that was
e2e-only.

See docs/adr/0019-remove-end-to-end-test-suite.md for the full record,
including which OpenSpecs lose cross-process/browser coverage as a
result and how to recover the removed harness from git history if a
future need re-justifies its cost.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cyrus Ready Ready Preview, Comment Jul 26, 2026 7:10pm

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@soorya-u, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 48 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5511d229-1336-40fd-af19-fa40e9e546e8

📥 Commits

Reviewing files that changed from the base of the PR and between 2fda4b6 and 46342c1.

📒 Files selected for processing (2)
  • docs/guides/TESTING_FRAMEWORK.md
  • docs/guides/VERIFY_LOOP.md
📝 Walkthrough

Walkthrough

The pull request removes the E2E test suite and nightly workflow, updates test execution configuration and documentation, adds shared test fixtures and authentication bindings, and migrates selected CLI tests to shared temporary-home utilities.

Changes

E2E retirement and test execution updates

Layer / File(s) Summary
Remove E2E execution topology
package.json, turbo.json, vitest.config.ts, mise.toml
Removes E2E workspace and scripts, replaces the Turbo E2E task with integration testing, removes E2E Vitest registration, and updates managed tools.
Consolidate shared test support
tooling/test/fixtures/*, tooling/test/mocks/*, tooling/test/package.json, knip.json, vitest.config.ts
Adds temporary Cyrus-home and authentication-environment utilities, exports them from @cyrus/test, and uses shared bindings in the server Vitest project.
Migrate CLI temporary-home tests
apps/cli/..., biome.json
Updates CLI tests to use the shared temporary-home fixture and permits the corresponding @cyrus/test imports.
Document the revised testing model
docs/adr/*, docs/guides/TESTING_FRAMEWORK.md, docs/guides/VERIFY_LOOP.md
Records E2E removal and updates unit, integration, deploy-smoke, and manual full-stack verification guidance.

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

Possibly related issues

  • Issue 107 — Directly concerns removing the E2E harness, Playwright suite, process-compose lifecycle, and CLI terminal tests.

Possibly related PRs

  • soorya-u/cyrus#38: Adds the nightly workflow and E2E harness that this pull request removes.
  • soorya-u/cyrus#83: Modifies the shared @cyrus/test tooling and exports used by this pull request.
  • soorya-u/cyrus#104: Overlaps with the Vitest configuration and nightly WebRTC testing changes retired here.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: the end-to-end test suite was removed.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/e2e-harness-cleanup

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

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/adr/0019-remove-end-to-end-test-suite.md`:
- Line 3: Correct the decision date in ADR 0019’s opening metadata to reflect
the actual decision date, ensuring it is not later than the review date; update
the superseding-reference text only if needed to keep the ADR metadata
consistent.

In `@docs/guides/TESTING_FRAMEWORK.md`:
- Line 67: Update the deployment smoke-test documentation to reference the
environment variables consumed by tooling/test/smoke/deploy.ts:
SMOKE_BEARER_TOKEN and SMOKE_ROOM_ID, replacing DEPLOY_SMOKE_TOKEN and
DEPLOY_SMOKE_ROOM_ID while preserving the described optional WebSocket check.

In `@docs/guides/VERIFY_LOOP.md`:
- Line 87: The verification guide still references the deleted “canonical
harness flow” and documents an unactionable email/password path. Update the
relevant section of VERIFY_LOOP to remove that harness reference and describe
the surviving authentication sequence, including sign-up/sign-in, device claim,
and approval, or link to an existing document that covers those concrete steps.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: cad63df7-311e-445a-bc23-ab52a9fdce26

📥 Commits

Reviewing files that changed from the base of the PR and between 7467051 and 2fda4b6.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (50)
  • .github/workflows/nightly.yml
  • apps/cli/__tests__/integration/wiring.test.ts
  • apps/cli/package.json
  • apps/cli/src/commands/service/status.test.ts
  • apps/cli/src/store/health.test.ts
  • biome.json
  • docs/adr/0017-vitest-default-bun-only-cli-desktop.md
  • docs/adr/0019-remove-end-to-end-test-suite.md
  • docs/guides/TESTING_FRAMEWORK.md
  • docs/guides/VERIFY_LOOP.md
  • knip.json
  • mise.toml
  • package.json
  • tests/e2e/harness/auth.ts
  • tests/e2e/harness/cli-doctor-terminal.test.ts
  • tests/e2e/harness/cli-login-terminal.test.ts
  • tests/e2e/harness/cli-login.test.ts
  • tests/e2e/harness/cli-login.ts
  • tests/e2e/harness/cli-service-terminal.test.ts
  • tests/e2e/harness/cli-worker.ts
  • tests/e2e/harness/database.test.ts
  • tests/e2e/harness/database.ts
  • tests/e2e/harness/dev-servers.ts
  • tests/e2e/harness/env.ts
  • tests/e2e/harness/process-compose.test.ts
  • tests/e2e/harness/process-compose.ts
  • tests/e2e/harness/process.ts
  • tests/e2e/harness/shell-use.ts
  • tests/e2e/harness/stack.ts
  • tests/e2e/package.json
  • tests/e2e/process-compose.yaml
  • tests/e2e/tsconfig.json
  • tests/e2e/web/device-auth.ts
  • tests/e2e/web/fixtures.ts
  • tests/e2e/web/helpers.ts
  • tests/e2e/web/playwright.config.ts
  • tests/e2e/web/prepare-database.ts
  • tests/e2e/web/specs/catalog.spec.ts
  • tests/e2e/web/specs/cold-resume.spec.ts
  • tests/e2e/web/specs/smoke.spec.ts
  • tests/e2e/web/specs/thread-lifecycle.spec.ts
  • tests/e2e/web/specs/thread-sync.spec.ts
  • tests/e2e/web/specs/worker-connects.spec.ts
  • tooling/test/fixtures/cyrus-home.ts
  • tooling/test/mocks/auth-env.ts
  • tooling/test/mocks/data-channel.ts
  • tooling/test/package.json
  • tooling/test/setup/bun.setup.ts
  • turbo.json
  • vitest.config.ts
💤 Files with no reviewable changes (35)
  • .github/workflows/nightly.yml
  • tests/e2e/harness/cli-login.test.ts
  • tests/e2e/package.json
  • tests/e2e/harness/cli-service-terminal.test.ts
  • tests/e2e/web/specs/smoke.spec.ts
  • tests/e2e/web/specs/worker-connects.spec.ts
  • tests/e2e/harness/process.ts
  • tests/e2e/web/specs/thread-lifecycle.spec.ts
  • tests/e2e/web/specs/thread-sync.spec.ts
  • tests/e2e/web/specs/cold-resume.spec.ts
  • tooling/test/mocks/data-channel.ts
  • tests/e2e/web/prepare-database.ts
  • tests/e2e/web/specs/catalog.spec.ts
  • tests/e2e/web/playwright.config.ts
  • tests/e2e/harness/process-compose.test.ts
  • tests/e2e/harness/cli-doctor-terminal.test.ts
  • mise.toml
  • tests/e2e/web/fixtures.ts
  • tests/e2e/web/device-auth.ts
  • tests/e2e/harness/dev-servers.ts
  • tests/e2e/harness/cli-worker.ts
  • tests/e2e/web/helpers.ts
  • tests/e2e/harness/cli-login.ts
  • turbo.json
  • tests/e2e/harness/shell-use.ts
  • tests/e2e/harness/database.test.ts
  • tests/e2e/harness/cli-login-terminal.test.ts
  • tooling/test/setup/bun.setup.ts
  • tests/e2e/process-compose.yaml
  • tests/e2e/harness/auth.ts
  • tests/e2e/tsconfig.json
  • tests/e2e/harness/process-compose.ts
  • tests/e2e/harness/database.ts
  • tests/e2e/harness/stack.ts
  • tests/e2e/harness/env.ts

Comment thread docs/adr/0019-remove-end-to-end-test-suite.md
Comment thread docs/guides/TESTING_FRAMEWORK.md Outdated
Comment thread docs/guides/VERIFY_LOOP.md
…oke secrets

VERIFY_LOOP.md still pointed at the deleted "canonical harness flow"
section for the manual email/password verification step; inline the
actual sign-up/sign-in/device-approve steps instead (already described
earlier in the same section).

TESTING_FRAMEWORK.md's smoke-test secret names were flagged as
mismatching tooling/test/smoke/deploy.ts's env vars. Checked
.github/workflows/deploy.yml: DEPLOY_SMOKE_TOKEN/DEPLOY_SMOKE_ROOM_ID
are the actual GitHub secret names a maintainer configures, mapped to
the script's SMOKE_BEARER_TOKEN/SMOKE_ROOM_ID inside the workflow — the
doc was right to lead with the secret names, just needed the mapping
spelled out.

The ADR 0019 date finding was already withdrawn on the PR (the review
timestamp isn't a valid reference point for the decision date).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@soorya-u

Copy link
Copy Markdown
Owner Author

Addressed the CodeRabbit review (46342c1):

  • docs/adr/0019-*.md:3 (decision date) — no change needed; already withdrawn on the thread (review-timestamp comparison isn't a valid way to judge the ADR's decision date).
  • docs/guides/VERIFY_LOOP.md:87 — fixed. It still pointed at the deleted "canonical harness flow" section for the manual email/password step; inlined the actual sign-up/sign-in/device-approve steps instead (already described earlier in the same section).
  • docs/guides/TESTING_FRAMEWORK.md:67 — partially right, but not quite as suggested. Checked .github/workflows/deploy.yml: DEPLOY_SMOKE_TOKEN/DEPLOY_SMOKE_ROOM_ID are the correct names — they're the actual GitHub secrets a maintainer configures, mapped to the script's SMOKE_BEARER_TOKEN/SMOKE_ROOM_ID inside the workflow. Applying the suggested diff verbatim would have made the doc wrong for its actual purpose (telling a maintainer which secrets to set). Kept the original secret names and added the mapping inline instead.

Pre-push hooks (typecheck, knip, syncpack, unit tests) passed on this commit too.

@soorya-u
soorya-u merged commit 7521c9e into main Jul 26, 2026
9 checks passed
@soorya-u
soorya-u deleted the chore/e2e-harness-cleanup branch July 26, 2026 19:11
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.

1 participant