Repository navigation
Complete synthetic CLI and browser end-to-end coverage - #23
Conversation
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: 7e3e26de-197f-49e9-a8b0-1c6d4ef666ba) |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 39503b9db2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| await writeFile(report, JSON.stringify(createSampleReport())) | ||
| return { dir, home, report, cleanup: () => rm(dir, { recursive: true, force: true }), | ||
| cli: async args => { | ||
| try { const r = await exec(process.execPath, [path.join(root, 'bin/codex-insights.js'), '--codex-home', home, ...args], { cwd: root, env: { ...process.env, CI: '1' }, maxBuffer: 8 * 1024 * 1024 }); return { ...r, code: 0 } } |
There was a problem hiding this comment.
Keep the CLI cache inside the temporary fixture
Running these journeys locally still reads and writes the developer's real ~/.codex-insights-cache: --codex-home does not control the cache location, and collectLegacyThreadData defaults to that global directory unless --cache-dir is supplied. The estimate journey also accesses the global facet cache. Consequently, f.cleanup() leaves synthetic cache data behind, and the suite can fail on an otherwise valid installation whose existing cache is not writable. I confirmed that collecting this fixture leaves session-meta/synthetic.json after fixture cleanup. Pass a cache directory under dir to every subprocess so inputs and outputs are actually isolated.
Useful? React with 👍 / 👎.
| await writeFile(report, JSON.stringify(createSampleReport())) | ||
| return { dir, home, report, cleanup: () => rm(dir, { recursive: true, force: true }), | ||
| cli: async args => { | ||
| try { const r = await exec(process.execPath, [path.join(root, 'bin/codex-insights.js'), '--codex-home', home, ...args], { cwd: root, env: { ...process.env, CI: '1' }, maxBuffer: 8 * 1024 * 1024 }); return { ...r, code: 0 } } |
There was a problem hiding this comment.
Pin the fixture's default report language
On a Chinese-language machine, or when CODEX_REPORT_LANG=zh-CN is set, these subprocesses inherit the locale and generate Chinese reports because detectSystemLanguage() reads the inherited environment. That makes valid application behavior fail the English-only Estimate assertion in cli.e2e.ts and the Trust & Coverage heading assertion in views.e2e.ts. Set an English default for fixture subprocesses, such as CODEX_REPORT_LANG: 'en'; the explicit --lang zh-CN journey can still override it.
Useful? React with 👍 / 👎.
Code Review Roast 🔥Verdict: No Issues Found | Recommendation: Merge Oh wait, this PR is actually clean. I need to sit down. I had my flamethrower warmed up and everything—synthetic fixtures, loopback-only server, no live credentials, and tests that clean up after themselves. Suspiciously responsible. 📊 Overall: Like a fire drill where nobody panics and the exits are actually labeled — I came for chaos and got competence. Files Reviewed (11 files)
Reviewed by free · Input: 43.7K · Output: 3.4K · Cached: 242.7K |
Finish the existing local end-to-end suite against current main. Add 13 CLI journeys using temporary SQLite/rollout fixtures and 7 browser journeys for generated reports, profile tabs, clipboard feedback, and 375px/1440px layouts. Keep real account/session data and model calls out of the suite, and disable runner telemetry in standard commands and CI.
Update the old test-tooling pins to e2e 0.23.0 and @e2e-dev/web 0.15.5, eliminating the three high audit findings from the earlier unfinished dependency set. Align clipboard expectations with the current Copy failed feedback. Add an independent CI job and synthetic diagnostics artifacts.
Validation on macOS/Node 26.13.0: 20/20 end-to-end journeys; npm run ci (115 tests, lint, types, plugin validation, documentation and pack checks); 3 adoption tests; npm audit reports zero vulnerabilities. No production code behavior changes. Native authenticated app-server, model generation, publication and scheduling are not exercised.
Note
Low Risk
Changes are confined to dev dependencies, tests, CI, and docs; production CLI behavior is not modified.
Overview
Introduces a Tester Army end-to-end layer: 20 deterministic journeys (13 CLI subprocesses, 7 Playwright browser checks) that use temporary SQLite/rollout fixtures and a loopback fixture server—no real Codex home, model calls, or accounts.
Wires e2e 0.23.0 and @e2e-dev/web 0.15.5 via
e2e.config.mts, addsnpm run test:tester-army(plus cli/web targets) with E2E_TELEMETRY_DISABLED=1, and documents setup indocs/tester-army.mdand the README. CI gains a separatetester-armyjob (Node 22,sqlite3, Chromium) that uploads.e2e/artifacts;.gitignoreexcludes that output locally.Reviewed by Cursor Bugbot for commit 39503b9. Bugbot is set up for automated code reviews on this repo. Configure here.