From devtools
Use when a feature or specification implementation is complete (alongside the full-suite run and PR) and you need to produce or update an internal QA-facing How-To-Test manual for development-only use: an HTML walkthrough covering every user case, with Playwright screenshots (captured against mocked backend endpoints only) for web pages and request/response samples for headless APIs. Supports single-project and multi-project workspaces.
How this skill is triggered — by the user, by Claude, or both
Slash command
/devtools:how-to-testThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Produce (or update) an internal QA-facing **How-To-Test manual** intended for development and QA
Produce (or update) an internal QA-facing How-To-Test manual intended for development and QA staff (not external end users). Treat it as part of "done", alongside the full-suite run and the PR. The manual is a draft QA guide a human can follow by hand to validate every user case — not a substitute for automated tests.
If the workspace contains multiple projects (e.g. a monorepo or multi-repo workspace), generate a separate manual per project and a workspace-level index aggregating all of them.
Before generating, scan the workspace root to detect project structure:
package.json, *.csproj, pyproject.toml, go.mod, Cargo.toml, or other
language/framework markers.docker compose up, npm run dev,
aspire run, dotnet run, uv run, etc.).how-to-test/ directory already exists (at workspace root or one project's
public dir), use it as the output root.<project-root>/how-to-test/ for each project.Output paths depend on the project type detected. Choose the best match:
<public-dir>/how-to-test/<feature-slug>.html (self-contained, inline CSS).
Use slug format <ticket-number>-<short-name> lowercase, hyphen-separated, ASCII only (e.g.
1234-plan-catalog), max 50 chars.<public-dir>/how-to-test/assets/*.png.how-to-test/ directory so dev credentials never ship to prod.import.meta.env.DEV, NODE_ENV === 'development', __DEV__). Never linked in
production.<project-root>/how-to-test/<feature-slug>.html.<project-root>/how-to-test/assets/*.png.Use filenames <feature-slug>--<page-slug>.png and a test file named
<nn>-howto-<feature-slug>.spec.ts to avoid collisions. Document naming in the manual.
Place an index.html in the same directory as the manuals — a TOC with a brief description of
each feature/manual and a link to it. In a multi-project workspace, create a workspace-level
index at <workspace-root>/how-to-test/index.html that lists all projects' manuals grouped by
project, plus a per-project index inside each project's how-to-test directory.
Proceed in the order below — each step depends on the previous one.
<img> must have an alt attribute
and a one-line caption describing the state (e.g., "New plan modal open with default values").
Ensure the HTML page passes an automated a11y smoke check.contracts/openapi.yaml, spec/openapi.json, api/*.http);
show method, path, intended caller (e.g., web-client, internal-service) or OAuth aud claim,
and a JSON excerpt. If the API contract is missing or out-of-date, generate samples from the
server's dev stub or integration tests and mark them with "(inferred)" including the source
file/path used. If samples differ from the running dev server, mark the sample with "(mismatch)"
and include the actual curl response from the dev server plus a note instructing to update the
API contract.alt text and caption; HTML passes a11y smoke checkAdd a Playwright spec that mocks all backend endpoints the feature's UI depends on with
page.route(...) and captures full-page PNGs into the assets dir — frontend-only, no backend, fast.
Do not mock unrelated analytics/telemetry endpoints unless they affect layout. Reuse the mock
shapes from the feature's existing render specs.
Ensure mocks provide stable, deterministic data (fixed timestamps, deterministic IDs). Document any dynamic regions and how to normalize them (CSS masks, fixed data in mocks).
If the page requires third-party interactive auth (OAuth), mock the auth exchange or provide a stubbed dev auth flow; include exact Playwright steps to bypass interactive popups (e.g., stub token endpoints or use pre-authenticated state).
const ASSETS = "<assets-directory>"; // e.g. "frontend/public/how-to-test/assets"
test("capture: <page>", async ({ page }) => {
await page.route("**/api/<endpoint>", (r) =>
r.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify(SAMPLE),
}),
);
await page.goto("/<route>");
await page.getByTestId("<stable-testid>").waitFor();
await page.screenshot({ path: `${ASSETS}/<name>.png`, fullPage: true });
});
Run to (re)generate, then add a smoke test asserting the HTML page renders with its <img>s.
If the Playwright capture fails (e.g., filesystem permissions or invalid paths), abort CI with an
explicit error message. Include a retry step and write logs to a known location
(e.g. <project-root>/how-to-test/capture.log). If write permission is unavailable, write to a
temp directory and fail the build with instructions to fix the path.
npx claudepluginhub resalapps/resal-marketplace --plugin devtoolsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.