TSH Product Testing
Quality assurance: Playwright end-to-end tests proven stable by three or more consecutive headless runs, with any remaining flakiness reported rather than hidden, and WCAG 2.1 AA accessibility audits that report the success criterion behind every finding. The plugin covers QA, meaning does the software work and can everyone use it.
Who installs it and where
tsh-product-testing is a discipline plugin. Install it at user scope so it follows you across projects, because your job does not change from repo to repo. The install commands and the scope prompt are on the installation page, which renders the repository README. The marketplace entry is tsh-product-testing@tsh-agentic-collections.
What it ships
| Skill | Invoke | What it does |
|---|---|---|
| auditing-accessibility | /tsh-product-testing:auditing-accessibility | Audits UI against WCAG 2.1 AA and reports violations with their success criterion: semantic structure and heading order, keyboard operability and focus management, ARIA correctness, colour contrast, text resize and reflow, and axe-core automated scanning. Use when auditing a page or component for accessibility or triaging axe output. Building accessible components is tsh-stack-frontend's ensuring-accessibility. |
| writing-playwright-e2e-tests | /tsh-product-testing:writing-playwright-e2e-tests | TSH's standard for Playwright end-to-end tests: mapping acceptance criteria to scenarios, Page Object structure, user-visible locators, auto-waiting instead of manual timeouts, unique test data for parallel runs, mocking only external boundaries, and a bounded debug loop with explicit iteration limits and flake detection. Use when writing, debugging, reviewing or de-flaking E2E tests. |
| Agent | Mention | Model | What it does |
|---|---|---|---|
| e2e-engineer | @tsh-product-testing:e2e-engineer | sonnet | Writes, debugs and de-flakes Playwright end-to-end tests from acceptance criteria or a plan task — maps criteria to scenarios, follows the project's existing Page Object and locator conventions, and proves stability with repeated headless runs before reporting. Use for delegated E2E test tasks, or when a suite is flaky and needs diagnosis. |
Skills are invoked as /tsh-product-testing:<skill> and the agent as @tsh-product-testing:e2e-engineer.
Conventions the plugin holds to
- A failing test is either a wrong test or a real bug, and deciding which is the work. Nothing here weakens an assertion to reach green: an application defect becomes
test.fixme('BUG: ...')plus a reported bug. - One green run is not evidence. A test is done after 3+ consecutive headless passes.
- Every accessibility finding names its WCAG success criterion, so it can be prioritized and verified rather than argued about.
- The project's existing test conventions outrank these defaults. Both skills start by establishing them.
- Never bypass authentication. Real sign-in with environment-supplied credentials is fine; seeding or faking session state is not.
Auditing versus building accessibility
Accessibility is split by outcome. auditing-accessibility lives here and reports violations in an existing page, component or flow. Implementing accessible components belongs to ensuring-accessibility in tsh-stack-frontend, the stack plugin that installs with the repo.
Verifying that implemented UI matches its design is a separate concern and does not live in this plugin. According to the plugin README, that work belongs with product engineering, alongside the implementation loop it feeds.
Prerequisites and dependencies
- Playwright CLI. Live-page exploration runs on the Playwright CLI. Its
snapshotis the accessibility tree thatgetByRoleresolves against, so it is how a locator is confirmed before it is committed to a test. Haveplaywright-clion the machine:npm install -g @playwright/cli@latest, or a project-local install reached vianpx playwright cli— nevernpx playwright-cli, which fetches a deprecated package. The skill's own preflight checks the local install withnpx --no-install playwright cli --version. See the Playwright CLI integration page for the tool. The workflow checks availability before its first exploration and, when the CLI is missing, asks whether to install it or wait. A subagent, which cannot ask, reports the missing prerequisite instead. - MCP servers. The plugin ships no
.mcp.jsonand nohooks/hooks.json. Playwright API documentation comes fromcontext7, whichtsh-corebundles; for Playwright, query the library ID/microsoft/playwright.devdirectly. tsh-core.e2e-engineerreads acceptance criteria from a Jira issue key using the Atlassian MCP tools thattsh-corebundles, and reports written for people outside the team go through/tsh-core:writing-technical-documents. Withouttsh-core, supply acceptance criteria directly instead of by issue key.
Changelog
Release notes are on the changelog page.