Bug bashes
A bug bash runs many e2e explore sessions at the same time, each on one area of the app. A coding agent then writes a test for each finding and reports it as a bug only when the test fails. This page ports upstream’s docs/bug-bash.mdx.
Before you start
Section titled “Before you start”- Make sure the app can serve many explorers at the same time. Start the app one time and set
reuseExisting: trueon the target’sapp.command, or set port0in the app URL so each run starts its own copy. WhenCIis set, e2e ignoresreuseExisting. Use port0. - On mobile, declare one target for each simulator or emulator. Each explorer needs its own device.
- Each explore session uses model calls.
- On a deployed site that other people use, do not change data.
The agent does the rest of the setup, such as seeded accounts and the bug-bash config, from the skill.
Install the skill
Section titled “Install the skill”The coding agent runs the bug bash from the e2e-dotnet skill, which e2e init installs. To install it without init:
npx skills add hardkoded/e2e-dotnetStart a bug bash
Section titled “Start a bug bash”Give a prompt to your coding agent:
Bug bash the checkout and account settings on this branch.What the agent does
Section titled “What the agent does”- Reads the routes of the app. On a branch, it also reads the diff.
- Writes 5 to 10 charters. A charter is a one-sentence goal for one area, with one posture: first-time user, numbers and copy, edge input, state after reload, or error paths.
- Writes
e2e.bugbash.config.json, a copy of your config with one agent for each posture (--agent), then runs onee2e explorefor each charter, 4 at the same time, each with its own output directory (--output). - Merges the findings of all charters.
- Rejects findings that have a known cause. The cause can be a limit of the explorer (for example, a link that opens a new tab), the local environment, the intended design, or the seed data.
- Writes a repro test that asserts the expected behavior for each remaining finding. It can start one subagent per area, each with its own
e2e mcpsession to check locators. - Runs each repro test. The finding is a bug only when the test fails with
ASSERTION_FAILED. - Reports, in this order: confirmed bugs, production risks that it cannot verify locally, rejected findings by reason, and warnings.
Each confirmed bug has its repro test and steps. It also has the explorer’s screenshot and video when the engine records them.
To read the full procedure, run e2e guide bug-bash.
Repro tests
Section titled “Repro tests”A repro test fails until the bug is fixed. The agent puts each one in a BugBash folder of the test project and tags it bugbash. Keep them out of the run that gates merges:
dotnet test --filter "TestCategory!=bugbash"After the fix, the test passes. Remove the tag and keep the test as a regression test.
Differences from upstream
Section titled “Differences from upstream”The config is e2e.bugbash.config.json, not a TypeScript file that spreads the project’s config. The port has no saved sessions (--session), no --reporter (so no summary.md), and no tests key; --output <dir> writes the record report.json beside <dir>. See COMPATIBILITY.md.