Debug E2E Test
bitovi/ai-enablement-prompts
Debug and fix failing Playwright E2E tests. An agent skill from bitovi/ai-enablement-prompts.
Run, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink.
$ npx skills add sendou-ink/sendou.ink --skill e2e -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sendou-ink/sendou.ink e2e --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/e2e .claude/skills/e2e && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .claude/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2eType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sendou-ink/sendou.ink --skill e2e -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sendou-ink/sendou.ink e2e --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/e2e .agents/skills/e2e && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .agents/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sendou-ink/sendou.ink --skill e2e -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sendou-ink/sendou.ink e2e --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/e2e .cursor/skills/e2e && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .cursor/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sendou-ink/sendou.ink.git --path .claude/skills/e2e--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sendou-ink/sendou.ink --skill e2e -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sendou-ink/sendou.ink e2e --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/e2e .gemini/skills/e2e && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .gemini/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sendou-ink/sendou.ink e2eInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sendou-ink/sendou.ink --skill e2e -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/e2e .github/skills/e2e && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .github/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sendou-ink/sendou.ink --skill e2e -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sendou-ink/sendou.ink e2e --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sendou-ink/sendou.ink.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/e2e .opencode/skills/e2e && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "e2e" agent skill from https://github.com/sendou-ink/sendou.ink/tree/main/.claude/skills/e2e into .opencode/skills/e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
e2eRun, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink.
E2E is an agent skill from sendou-ink/sendou.ink. Run, debug, and manage Playwright e2e tests. Use when running e2e tests, debugging test failures, writing new specs, or investigating test infrastructure issues.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing, Debugging and Failing and flaky tests. It works with Playwright, SQLite and Docker. The repository describes itself as: Competitive Splatoon Platform. The licence is AGPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5730769. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmdockerFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and docker, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
E2E loads about 2.1k tokens when it runs. Until then it costs about 41 tokens; SKILL.md has 1,044 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
calculation: `E2E_BASE_PORT = PORT (from .env) + 500`. Worker N uses port base+N, except ports on the WHATWG fetch bad pAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from sendou-ink/sendou.ink at commit 5730769, republished under its AGPL-3.0 licence (© sendou-ink). 1,044 words, ~2,146 tokens.
.claude/skills/e2e/SKILL.md (or your agent's skills folder).e2e/*.spec.ts, config in playwright.config.tse2e/pages/<feature>/ — every spec uses them; conventions in docs/dev/e2e-page-objects.md, gotchas in docs/dev/e2e-page-objects-migration.mde2e/global-setup.ts) builds the app (skipped when no build input changed since the last e2e build — tracked via .e2e-build-marker), creates/migrates per-worker databases (via scripts/ensure-test-db.ts: pending migrations are applied, drifted databases are rebuilt), and starts one server per workerE2E_BASE_PORT = PORT (from .env) + 500. Worker N uses port base+N, except ports on the WHATWG fetch bad port list (e.g. 6679) are skipped — see e2eWorkerPort in e2e/helpers/playwright.tsE2E_WORKERS env, defaulting to min(8, max(4, cores - 2))db-test-e2e-<N>.sqlite3 in the project root; every test starts from a wiped database holding only the admin (Sendou) and N-ZAP users, and builds its own data with the factories fixtureBefore running tests, check for these common issues:
Port conflicts — Check if anything is already listening on the e2e ports (base port + worker index):
lsof -i :4501-4508 2>/dev/nullIf ports are occupied by leftover e2e servers, kill them. If occupied by something else, warn the user.
Docker running — SeaweedFS requires Docker. Check with docker info if there are storage-related failures.
Stale worker databases (db-test-e2e-*.sqlite3) are handled automatically: global setup applies pending migrations and rebuilds databases whose migration history has drifted.
pnpm run test:e2epnpm exec playwright test e2e/<name>.spec.tsBatch multiple files into one invocation — every invocation pays global setup.
pnpm run test:e2e:flaky-detectE2E_FORCE_BUILD=true pnpm run test:e2eGlobal setup reuses the previous build when nothing under app/, public/, the lockfile, or the vite/react-router configs changed. Use this override if you suspect a stale build (e.g. after changing env-dependent build behavior).
Follow this funnel when tests fail:
Common infrastructure errors and fixes:
rm -f db-test-e2e-*.sqlite3 and investigate scripts/ensure-test-db.tslsof -i :<port> and check for build errorsdocker infonavigate/impersonate after the writesIf the error is unclear, re-run with debug output and a single worker to see server logs:
E2E_DEBUG=true E2E_WORKERS=1 pnpm exec playwright test e2e/<failing-test>.spec.tsThis shows stdout/stderr from the test server, which is hidden by default.
Playwright is configured with trace: { mode: "retain-on-failure", snapshots: false } — failure traces carry screenshots, network and action logs but no DOM snapshots (recording those cost ~17% of total suite time). After a failure, check test-results/<test-folder>/error-context.md for the page's accessibility snapshot at failure time, or view the trace:
pnpm exec playwright show-trace test-results/<test-folder>/trace.zipWhen a failure needs full DOM snapshots to understand, re-run just that test with --trace retain-on-failure (the CLI flag records complete traces).
Live events run on an in-process event bus per worker server (SSE, see app/features/events), so cross-worker crosstalk cannot cause flakes. Google Fonts are also blocked at the context level so font swaps never reflow the page mid-test. Re-renders from the test's own action revalidations can still swallow a React Aria press (press start registers, press end never fires — no POST); waitForPOSTResponse retries for this, so route flows through it rather than adding sleeps.
Other known sources, each handled once in the helpers or page objects:
iframe_api, everything else aborted): the real player loads from the internet at its own pace and, arriving mid-test, closed an open select on the VoD formwaitForDropToSettle so the next click landspage.reload(), say) loads the target as a new document and the click after it is lost; reload through the page object's reload() which waits for hydrationmain where a name can appear in bothholdRevalidationsDuring (used by useActionSubmit and SendouForm) defers them until the submission settles, and useHoldRevalidationsDuringSubmissions (mounted in ChatProvider) does the same for any other submission, e.g. a plain <fetcher.Form>Every test builds its own data with factories and drives the UI through page objects:
import { NZAP_TEST_ID } from "~/db/seed/constants";
import { expect, impersonate, test } from "./helpers/playwright";
import { BuildsPage } from "./pages/builds/builds-page";
test.describe("Feature", () => {
test("does something", async ({ page, factories }) => {
await factories.BuildFactory.create({ ownerId: NZAP_TEST_ID });
await impersonate(page, NZAP_TEST_ID);
const builds = new BuildsPage(page);
await builds.goto();
// ... interact via page object methods, assert in the spec ...
});
});Key rules:
factories worker fixture (see e2e/helpers/factories.ts for the registry) creates everything elsee2e/pages/ — specs contain no raw getByTestId/getByRole calls; see docs/dev/e2e-page-objects.mdnavigate() instead of page.goto() — it waits for hydration (page objects' goto() methods wrap it)submit() instead of clicking submit buttons directly — it waits for the POST responseimpersonate(page, userId?) to authenticate. Default is admin (ADMIN_ID); prefer N-ZAP (NZAP_TEST_ID) when the flow doesn't need admin rightspage.waitForTimeout — use assertions or waitFor patterns instead (the one exception is waitForDropToSettle, dnd-kit's post-drop window has nothing observable to wait on)test from ./helpers/playwright (not from @playwright/test) — it includes worker port fixtures and the database resetnavigate, impersonate, submit) or the test fails with "writes the server never saw"| Variable | Purpose | Default |
|---|---|---|
E2E_WORKERS | Number of parallel workers | min(8, max(4, cores − 2)) |
E2E_DEBUG | Show server stdout/stderr when "true" | unset |
E2E_FORCE_BUILD | Rebuild the app even when inputs look unchanged | unset |
PORT | Base port for dev server (e2e adds 500) | 5173 |
© sendou-ink, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/e2e of sendou-ink/sendou.ink.
Open the folder on GitHubat commit 5730769
E2E next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| E2E this skillsendou-ink/sendou.ink | 297 | — | ~2.1k | Automated safety check: Notes | AGPL-3.0 | |
| Debug E2E Testbitovi/ai-enablement-prompts | 121 | — | ~677 | Automated safety check: Pass | MIT | |
| Activitypub TestingMicrock/ordinary-claude-skills | 401 | — | ~712 | Automated safety check: Pass | Custom licence | |
| Playwrightpproenca/dot-skills | 214 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Cucumber and Playwright E2E Testslanggenius/dify | 158k | — | ~682 | Automated safety check: Pass | Custom licence | |
| E2E TestingOpenHands/OpenHands | 90k | — | ~308 | Automated safety check: Pass | MIT |
bitovi/ai-enablement-prompts
Debug and fix failing Playwright E2E tests. An agent skill from bitovi/ai-enablement-prompts.
Microck/ordinary-claude-skills
Testing patterns for PHPUnit and Playwright E2E tests. An agent skill from Microck/ordinary-claude-skills.
pproenca/dot-skills
Playwright testing best practices for Next.js applications (formerly test-playwright).
langgenius/dify
Guides changes and reviews of the Cucumber and Playwright end-to-end suite under `e2e/`: feature files, step definitions, support code, tags, locators and assertions.
OpenHands/OpenHands
This skill should be used when the user asks to "add an E2E test", "run live E2E", "run mock-LLM tests", "debug Playwright CI", "test the Docker image", or changes tests/e2e, Playwright configs, E2E…
kortix-ai/suna
A skill your agent uses for every Kortix test task, behavior change, bug fix, refactor, API route change, CLI change, SDK change, browser journey, test failure, coverage question, local benchmark…
sendou-ink/sendou.ink
Add or update repository READ function benchmark cases in the DB benchmark script.
sendou-ink/sendou.ink
Turn a user-submitted scanner "Game data" zip (scanner--game-N.zip, a match card's download for reporting a misread) into 1-3 new failing fixtures (frame + expected.json) under…
sendou-ink/sendou.ink
A skill your agent uses when the user asks for a rich explanation of a code change, diff, branch, or PR.
sendou-ink/sendou.ink
Help write, debug, and explore SQLite database queries using Kysely.
sendou-ink/sendou.ink
Multi-agent code review that checks the current diff from multiple angles (spec compliance, bugs from two lenses, conventions/modernization, abstraction reuse, security, DB query performance, test…
sendou-ink/sendou.ink
Work with URL search param state via the unified app/modules/search-params system.
Works with
Categories
Run, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink. ink. Run, debug, and manage Playwright e2e tests.
E2E fits situations like: running e2e tests; debugging test failures; writing new specs; investigating test infrastructure issues.
Run `npx skills add sendou-ink/sendou.ink --skill e2e -a claude-code`. Or copy the skill folder (.claude/skills/e2e in sendou-ink/sendou.ink) into .claude/skills/e2e in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sendou-ink/sendou.ink --skill e2e -a codex`. Or copy the skill folder (.claude/skills/e2e in sendou-ink/sendou.ink) into .agents/skills/e2e in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sendou-ink/sendou.ink --skill e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e, .gemini/skills/e2e, .github/skills/e2e and .opencode/skills/e2e in your project.
Going by SKILL.md and its folder, E2E needs the command-line tools its instructions call (pnpm and docker). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use docker, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
E2E is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with E2E: Debug E2E Test (bitovi/ai-enablement-prompts, 121 stars), Activitypub Testing (Microck/ordinary-claude-skills, 401 stars), Playwright (pproenca/dot-skills, 214 stars) and Cucumber and Playwright E2E Tests (langgenius/dify, 158k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sendou-ink (a GitHub organization) maintains it in sendou-ink/sendou.ink, which has 297 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 7, 2026.
Source: sendou-ink/sendou.ink on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.