Skip to content

Complete deterministic E2E test harness - #207

Open
nat-openclaw wants to merge 22 commits into
mainfrom
feature/e2e-test-harness
Open

Complete deterministic E2E test harness#207
nat-openclaw wants to merge 22 commits into
mainfrom
feature/e2e-test-harness

Conversation

@nat-openclaw

Copy link
Copy Markdown
Collaborator

Summary

  • complete E2E harness tickets 08–16 and mark every acceptance criterion ready for review
  • add deterministic recovery, download resume, fixture-game lifecycle, offline behavior, reliability/retention, CI/release gates, incremental updates, torrent installation, and live-service scenarios
  • add production-safe process and network containment, transactional updater recovery, package smoke coverage, quarantine enforcement, and accessible Observer controls

Verification

  • 265 E2E tests passed with 2,281 assertions
  • 46 updater tests passed with 308 assertions
  • application, updater, and Observer builds passed
  • E2E/Observer and application typechecks passed with no errors
  • application, updater, and Observer accessibility checks passed
  • Actionlint, Biome, JavaScript syntax, PowerShell static validation, package-boundary checks, secret scans, and git diff --check passed
  • no leaked processes, listeners, or network connections

Platform note

Native Windows runtime execution is deferred to the dedicated Windows pass. Windows paths have static and unit coverage and do not block the current ticket group.

🤖 Generated with Claude Code

@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)
open-game-installer-web Ready Ready Preview Jul 31, 2026 6:24am

@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 193 files, which is 93 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0fe94009-fdc9-4b11-8125-2f7db751f2a3

📥 Commits

Reviewing files that changed from the base of the PR and between 642565b and 76e593c.

⛔ Files ignored due to path filters (4)
  • bun.lock is excluded by !**/*.lock
  • e2e/fixture-addon/icon.svg is excluded by !**/*.svg
  • packages/addon-server/lib/_generated/event-proxy.ts is excluded by !**/_generated/**
  • packages/client-kit/lib/_generated/addon-proxy.ts is excluded by !**/_generated/**
📒 Files selected for processing (193)
  • .github/workflows/accessibility.yml
  • .github/workflows/build-release.yml
  • .github/workflows/e2e-full.yml
  • .github/workflows/e2e-required.yml
  • .gitignore
  • .scratch/e2e-test-harness/issues/01-application-automation-accessibility.md
  • .scratch/e2e-test-harness/issues/02-updater-automation-accessibility.md
  • .scratch/e2e-test-harness/issues/03-first-observable-application-scenario.md
  • .scratch/e2e-test-harness/issues/04-first-deterministic-updater-scenario.md
  • .scratch/e2e-test-harness/issues/05-observe-and-control-live-run.md
  • .scratch/e2e-test-harness/issues/06-packaged-updater-application-handoff.md
  • .scratch/e2e-test-harness/issues/07-golden-journey.md
  • .scratch/e2e-test-harness/issues/08-last-known-good-recovery.md
  • .scratch/e2e-test-harness/issues/09-interrupted-game-download-recovery.md
  • .scratch/e2e-test-harness/issues/10-fixture-game-lifecycle.md
  • .scratch/e2e-test-harness/issues/11-offline-product-behavior.md
  • .scratch/e2e-test-harness/issues/12-run-reliability-and-retention.md
  • .scratch/e2e-test-harness/issues/13-ci-and-release-gates.md
  • .scratch/e2e-test-harness/issues/14-incremental-update-fallback.md
  • .scratch/e2e-test-harness/issues/15-deterministic-torrent-installation.md
  • .scratch/e2e-test-harness/issues/16-live-service-scenarios.md
  • .scratch/e2e-test-harness/spec.md
  • AGENTS.md
  • CONTEXT-MAP.md
  • EFFECT-MIGRATION.md
  • application/e2e-main.cjs
  • application/e2e-product-main.cjs
  • application/package.json
  • application/src/electron/handlers/handler.addon.ts
  • application/src/electron/handlers/handler.ddl.ts
  • application/src/electron/handlers/handler.library.ts
  • application/src/electron/handlers/handler.steam.ts
  • application/src/electron/handlers/handler.torrent.ts
  • application/src/electron/handlers/helpers.app/library.ts
  • application/src/electron/handlers/helpers.app/uninstall.ts
  • application/src/electron/lib/online.ts
  • application/src/electron/lib/renderer-notifications.ts
  • application/src/electron/main.ts
  • application/src/electron/manager/manager.addon.ts
  • application/src/electron/manager/manager.webtorrent.ts
  • application/src/electron/preload.mts
  • application/src/electron/server/addon-server.ts
  • application/src/frontend/App.svelte
  • application/src/frontend/components/CustomDropdown.svelte
  • application/src/frontend/components/GameConfiguration.svelte
  • application/src/frontend/components/NotificationSideView.svelte
  • application/src/frontend/components/PlayPage.svelte
  • application/src/frontend/components/RangeInput.svelte
  • application/src/frontend/components/StorePage.svelte
  • application/src/frontend/components/built/DeleteAddonWarningModal.svelte
  • application/src/frontend/components/built/UpdateAppModal.svelte
  • application/src/frontend/components/modal/ButtonModal.svelte
  • application/src/frontend/components/modal/ChangelogModal.svelte
  • application/src/frontend/components/modal/ConfigurationModal.svelte
  • application/src/frontend/components/modal/InputModal.svelte
  • application/src/frontend/components/modal/Modal.svelte
  • application/src/frontend/components/modal/README.md
  • application/src/frontend/components/modal/WineDllOverridesModal.svelte
  • application/src/frontend/global.d.ts
  • application/src/frontend/lib/setup/setup.ts
  • application/src/frontend/managers/Debug.svelte
  • application/src/frontend/managers/GameManager.svelte
  • application/src/frontend/managers/NotificationManager.svelte
  • application/src/frontend/managers/RootPasswordGranter.svelte
  • application/src/frontend/views/ClientOptionsView.svelte
  • application/src/frontend/views/CommunityAddonsList.svelte
  • application/src/frontend/views/ConfigView.svelte
  • application/src/frontend/views/FocusedAddonView.svelte
  • application/src/frontend/views/OutOfBoxExperience.svelte
  • docs/adr/0001-webdriverio-for-electron-e2e-automation.md
  • docs/adr/0002-run-descriptor-for-e2e-handoff.md
  • docs/adr/0003-preserve-last-known-good-installation-during-updates.md
  • docs/adr/0004-trust-immutable-github-release-assets.md
  • docs/agents/domain.md
  • docs/agents/issue-tracker.md
  • docs/agents/triage-labels.md
  • e2e/CONTEXT.md
  • e2e/accessibility-states.ts
  • e2e/application-scenario-wdio.conf.ts
  • e2e/electron-service-options.ts
  • e2e/fixture-addon/addon.json
  • e2e/fixture-addon/main.ts
  • e2e/fixture-service.cjs
  • e2e/incremental-update.cjs
  • e2e/observer/index.html
  • e2e/observer/src/App.svelte
  • e2e/observer/src/main.ts
  • e2e/observer/src/styles.css
  • e2e/observer/tsconfig.json
  • e2e/offline-traffic-guard.cjs
  • e2e/package.json
  • e2e/product-journey-wdio.conf.ts
  • e2e/quarantines.json
  • e2e/run-accessibility.mjs
  • e2e/run-updater-accessibility.ts
  • e2e/specs/application.accessibility.ts
  • e2e/specs/application.visible-navigation.ts
  • e2e/specs/packaged-handoff.ts
  • e2e/specs/updater.accessibility.ts
  • e2e/specs/updater.fixture-release.ts
  • e2e/src/application-run-descriptor.cjs
  • e2e/src/application-scenario.ts
  • e2e/src/build-fixture-torrent.ts
  • e2e/src/ci-gates.ts
  • e2e/src/electron-chromedriver.ts
  • e2e/src/execution-video.ts
  • e2e/src/live-service-scenarios.ts
  • e2e/src/observer-server.ts
  • e2e/src/observer-state.ts
  • e2e/src/observer-suite.ts
  • e2e/src/observer-window-main.cjs
  • e2e/src/packaged-handoff-audit.ts
  • e2e/src/packaged-handoff-descriptor.ts
  • e2e/src/packaged-handoff-fixtures.ts
  • e2e/src/packaged-handoff-run-descriptor.cjs
  • e2e/src/packaged-handoff.ts
  • e2e/src/process-tree.ts
  • e2e/src/production-package-smoke.ts
  • e2e/src/quarantined-scenarios.ts
  • e2e/src/replay-run.ts
  • e2e/src/run-application-scenario.ts
  • e2e/src/run-ci-suite.ts
  • e2e/src/run-deterministic-torrent-ci.ts
  • e2e/src/run-events.ts
  • e2e/src/run-incremental-update.ts
  • e2e/src/run-last-known-good-recovery.ts
  • e2e/src/run-live-service-scenario.ts
  • e2e/src/run-observer-accessibility.ts
  • e2e/src/run-observer-suite.ts
  • e2e/src/run-observer.ts
  • e2e/src/run-packaged-handoff.ts
  • e2e/src/run-production-package-boundary.ts
  • e2e/src/run-production-package-smoke.ts
  • e2e/src/run-quarantined-scenarios.ts
  • e2e/src/run-reliability.ts
  • e2e/src/run-reliable-packaged-handoff.ts
  • e2e/src/run-retention.ts
  • e2e/src/run-updater-scenario.ts
  • e2e/src/updater-run-descriptor.cjs
  • e2e/src/updater-scenario.ts
  • e2e/src/windows-torrent-network-isolation.ps1
  • e2e/tests/application-scenario.test.ts
  • e2e/tests/ci-gates.test.ts
  • e2e/tests/electron-chromedriver.test.ts
  • e2e/tests/electron-service-options.test.ts
  • e2e/tests/execution-video.test.ts
  • e2e/tests/fixtures/observer-runner.ts
  • e2e/tests/fixtures/observer-suite-check.ts
  • e2e/tests/live-service-scenarios.test.ts
  • e2e/tests/observer-server.test.ts
  • e2e/tests/observer-state.test.ts
  • e2e/tests/observer-suite.test.ts
  • e2e/tests/packaged-handoff-audit.test.ts
  • e2e/tests/product-journey-system.test.ts
  • e2e/tests/production-package-smoke.test.ts
  • e2e/tests/quarantined-scenarios.test.ts
  • e2e/tests/updater-scenario.test.ts
  • e2e/tests/windows-platform-regressions.test.ts
  • e2e/tests/workspace-builds.test.ts
  • e2e/tsconfig.json
  • e2e/updater-accessibility-states.ts
  • e2e/updater-scenario-wdio.conf.ts
  • e2e/updater-wdio.conf.ts
  • e2e/vite.observer.config.ts
  • e2e/wdio.conf.ts
  • package.json
  • packages/connection/lib/protocol-base.ts
  • packages/errors/.gitignore
  • packages/errors/.npmignore
  • packages/errors/src/boundary.ts
  • packages/errors/src/format.ts
  • packages/errors/tsdown.config.js
  • packages/online-state/.gitignore
  • packages/online-state/lib/index.ts
  • packages/online-state/package.json
  • packages/online-state/tsconfig.json
  • scripts/ensure-workspace-builds.ts
  • updater/e2e-main.cjs
  • updater/e2e-product-journey-main.cjs
  • updater/e2e-scenario-main.cjs
  • updater/package.json
  • updater/public/index.html
  • updater/src/main.ts
  • updater/src/offline-decision.ts
  • updater/src/preload.ts
  • updater/src/production-update-coordinator.d.mts
  • updater/src/production-update-coordinator.mjs
  • updater/src/status.ts
  • updater/src/update-engine.d.mts
  • updater/src/update-engine.mjs
  • updater/src/windows-job-evidence.d.mts
  • updater/src/windows-job-evidence.mjs
  • updater/src/windows-job-wrapper.ps1

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/e2e-test-harness

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.

Co-Authored-By: Claude <noreply@anthropic.com>
Pin one Electron version, skip unsupported Windows fsync, normalize NODE_OPTIONS paths, gate SteamGridDB by platform, and reuse the updater a11y session so required Linux/Windows workflows stay ticket-scoped.

Co-authored-by: Cursor <cursoragent@cursor.com>
Match the production General setting condition so Windows accessibility no longer expects a control that only Linux exposes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Resolve the real Electron binary, disable GPU for CI hosts, wait for the live-service control, and surface Electron stderr when the scan process exits early.

Co-authored-by: Cursor <cursoragent@cursor.com>
GitHub Actions workspaces under D:\a\... turn \a into BEL when Chromium parses backslashes as escapes. Forward-slash absolute paths keep Observer and WDIO launches intact.

Co-authored-by: Cursor <cursoragent@cursor.com>
Launch Observer from a temp-packaged Electron app outside D:\a\..., and dismiss notification overlays before the torrent dropdown focus assertion.

Co-authored-by: Cursor <cursoragent@cursor.com>
Raw Electron main-process launches exit 255 on Windows CI. Observer is a web page, so drive axe through puppeteer-core and the runner Chrome/Chromium binary instead.

Co-authored-by: Cursor <cursoragent@cursor.com>
Collapse Windows Job result evidence to kill-on-close survivors, drop freeze/rescan cleanup loops, and delete tactic-only tests that never gated required CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
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.

2 participants