Agent skill

E2E

by sendou-ink in sendou-ink/sendou.ink

Run, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink.

AGPL-3.0Auto-check: notesTesting & QA

Install E2E

skills CLI
$ npx skills add sendou-ink/sendou.ink --skill e2e -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install sendou-ink/sendou.ink e2e --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
e2e
GitHub stars
297
Token cost
~2.1k tokens
SKILL.md length
1,044 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Run, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink.

  • Works in 4 steps: Read the error output → Check infrastructure issues → Reduce to single debug worker → …
  • Running e2e tests
  • SKILL.md covers Architecture overview, Pre-flight checks (run before…, Running tests and Debugging failures, plus 2 more sections
  • Calls pnpm and docker

What it does

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.

When your agent uses it

  • Running e2e tests
  • Debugging test failures
  • Writing new specs
  • Investigating test infrastructure issues

Example prompts

  • “/e2e”

Requirements

  • Docker

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Read the error output
  2. Check infrastructure issues
  3. Reduce to single debug worker
  4. Examine trace artifacts

What it can do on your machine

Read from SKILL.md and the folder at commit 5730769. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm
    • docker

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~41
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:13
    calculation: `E2E_BASE_PORT = PORT (from .env) + 500`. Worker N uses port base+N, except ports on the WHATWG fetch bad p

Automated 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.

SKILL.md

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.

Download SKILL.mdSave it as .claude/skills/e2e/SKILL.md (or your agent's skills folder).
name
e2e
description
Run, debug, and manage Playwright e2e tests. Use when running e2e tests, debugging test failures, writing new specs, or investigating test infrastructure issues.

E2E Test Runner

Architecture overview

  • Tests live in e2e/*.spec.ts, config in playwright.config.ts
  • Page objects live in e2e/pages/<feature>/ — every spec uses them; conventions in docs/dev/e2e-page-objects.md, gotchas in docs/dev/e2e-page-objects-migration.md
  • Global setup (e2e/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 worker
  • Port calculation: E2E_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.ts
  • Worker count: E2E_WORKERS env, defaulting to min(8, max(4, cores - 2))
  • Worker databases: 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 fixture
  • SeaweedFS (S3-compatible storage) is started via Docker Compose if not already running

Pre-flight checks (run before every test execution)

Before running tests, check for these common issues:

  1. Port conflicts — Check if anything is already listening on the e2e ports (base port + worker index):

    lsof -i :4501-4508 2>/dev/null

    If ports are occupied by leftover e2e servers, kill them. If occupied by something else, warn the user.

  2. 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.

Running tests

Run all tests
bash
pnpm run test:e2e
Run a specific test file
bash
pnpm exec playwright test e2e/<name>.spec.ts

Batch multiple files into one invocation — every invocation pays global setup.

Flaky detection (repeats each test 10 times, stops on first failure)
bash
pnpm run test:e2e:flaky-detect
Force a rebuild of the app
bash
E2E_FORCE_BUILD=true pnpm run test:e2e

Global 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).

Debugging failures

Follow this funnel when tests fail:

Step 1: Read the error output
  • Look for the actual assertion or timeout that failed
  • Check if it's an infrastructure error (server didn't start, migration failed) vs. a test logic error
Step 2: Check infrastructure issues

Common infrastructure errors and fixes:

  • "table already exists" → Should not happen anymore (global setup rebuilds drifted worker DBs); if it does, rm -f db-test-e2e-*.sqlite3 and investigate scripts/ensure-test-db.ts
  • "Server on port X did not start within timeout" → Port conflict or app build error. Check ports with lsof -i :<port> and check for build errors
  • "SeaweedFS failed to start" → Docker not running or compose issue. Check docker info
  • "Test ended with database writes the server never saw" → A factory call was not followed by a helper that talks to the server; add a navigate/impersonate after the writes
Step 3: Reduce to single debug worker

If the error is unclear, re-run with debug output and a single worker to see server logs:

bash
E2E_DEBUG=true E2E_WORKERS=1 pnpm exec playwright test e2e/<failing-test>.spec.ts

This shows stdout/stderr from the test server, which is hidden by default.

Step 4: Examine trace artifacts

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:

bash
pnpm exec playwright show-trace test-results/<test-folder>/trace.zip

When a failure needs full DOM snapshots to understand, re-run just that test with --trace retain-on-failure (the CLI flag records complete traces).

Show full SKILL.md (492 more words)Show less
Re-render races

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:

  • YouTube is stubbed at the context level (a fake 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 form
  • dnd-kit stops every click in the document for 50ms after a drop; drag helpers end with waitForDropToSettle so the next click lands
  • A tab or link clicked before hydration (after a raw page.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 hydration
  • Popovers close on navigation in a passive effect, so for a frame the old panel and the new page both show the same names; scope locators to main where a name can appear in both
  • React Router drops a fetcher's redirect when a navigation (a revalidation included) started after the submission; broadcast revalidations are jittered up to 1.5s after a live event, so one could land mid-submission and the action silently did nothing. holdRevalidationsDuring (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>

Test pattern reference

Every test builds its own data with factories and drives the UI through page objects:

typescript
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:

  • The database starts each test holding only the admin and N-ZAP; the factories worker fixture (see e2e/helpers/factories.ts for the registry) creates everything else
  • Locators live in page objects under e2e/pages/ — specs contain no raw getByTestId/getByRole calls; see docs/dev/e2e-page-objects.md
  • Use navigate() instead of page.goto() — it waits for hydration (page objects' goto() methods wrap it)
  • Use submit() instead of clicking submit buttons directly — it waits for the POST response
  • Use impersonate(page, userId?) to authenticate. Default is admin (ADMIN_ID); prefer N-ZAP (NZAP_TEST_ID) when the flow doesn't need admin rights
  • Avoid page.waitForTimeout — use assertions or waitFor patterns instead (the one exception is waitForDropToSettle, dnd-kit's post-drop window has nothing observable to wait on)
  • Import test from ./helpers/playwright (not from @playwright/test) — it includes worker port fixtures and the database reset
  • Factory writes must be followed by a helper that talks to the server (navigate, impersonate, submit) or the test fails with "writes the server never saw"

Environment variables

VariablePurposeDefault
E2E_WORKERSNumber of parallel workersmin(8, max(4, cores − 2))
E2E_DEBUGShow server stdout/stderr when "true"unset
E2E_FORCE_BUILDRebuild the app even when inputs look unchangedunset
PORTBase 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

Files

Just SKILL.md in .claude/skills/e2e of sendou-ink/sendou.ink.

Open the folder on GitHubat commit 5730769

Compare with similar skills

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.

E2E compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
E2E this skillsendou-ink/sendou.ink297—~2.1kAutomated safety check: NotesAGPL-3.0
Debug E2E Testbitovi/ai-enablement-prompts121—~677Automated safety check: PassMIT
Activitypub TestingMicrock/ordinary-claude-skills401—~712Automated safety check: PassCustom licence
Playwrightpproenca/dot-skills214—~1.7kAutomated safety check: PassMIT
Cucumber and Playwright E2E Testslanggenius/dify158k—~682Automated safety check: PassCustom licence
E2E TestingOpenHands/OpenHands90k—~308Automated safety check: PassMIT

Similar skills

  • Debug E2E Test

    bitovi/ai-enablement-prompts

    Debug and fix failing Playwright E2E tests. An agent skill from bitovi/ai-enablement-prompts.

    121 GitHub stars~677 tokensUpdated 26 days ago
    Testing & QAAuto-check passed
  • Activitypub Testing

    Microck/ordinary-claude-skills

    Testing patterns for PHPUnit and Playwright E2E tests. An agent skill from Microck/ordinary-claude-skills.

    401 GitHub stars~712 tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Playwright

    pproenca/dot-skills

    Playwright testing best practices for Next.js applications (formerly test-playwright).

    214 GitHub stars~1.7k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • 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.

    158k GitHub stars~682 tokensUpdated today
    Testing & QAAuto-check passed
  • E2E Testing

    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…

    90k GitHub stars~308 tokensUpdated today
    Testing & QAAuto-check passed
  • Testing

    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…

    20k GitHub stars~3.6k tokensUpdated today
    Testing & QAAuto-check: notes

More from sendou-ink/sendou.ink

  • DB Benchmark

    sendou-ink/sendou.ink

    Add or update repository READ function benchmark cases in the DB benchmark script.

    297 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Scanner Misread

    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…

    297 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Explain Diff HTML

    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.

    297 GitHub starsUsed in 1 repo~787 tokens
    Auto-check passed
  • SQL

    sendou-ink/sendou.ink

    Help write, debug, and explore SQLite database queries using Kysely.

    297 GitHub stars~423 tokensUpdated today
    Auto-check passed
  • Sendou Code Review

    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…

    297 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Search Params

    sendou-ink/sendou.ink

    Work with URL search param state via the unified app/modules/search-params system.

    297 GitHub stars~154 tokensUpdated today
    Auto-check passed

Categories

Questions about E2E

What does E2E do?

Run, debug, and manage Playwright e2e tests. An agent skill from sendou-ink/sendou.ink. ink. Run, debug, and manage Playwright e2e tests.

When should I use E2E?

E2E fits situations like: running e2e tests; debugging test failures; writing new specs; investigating test infrastructure issues.

How do I install E2E in Claude Code?

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.

How do I install E2E in Codex?

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.

Can I use E2E in Cursor, Gemini CLI or GitHub Copilot?

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.

What does E2E need to run?

Going by SKILL.md and its folder, E2E needs the command-line tools its instructions call (pnpm and docker). Our summary lists: Docker.

Does E2E access the network?

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.

Is E2E safe to install?

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.

What licence does E2E use?

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.

How many tokens does E2E use?

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.

What are the alternatives to E2E?

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.

Who maintains E2E?

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.