Skip to main content
skill Claude Code

fix · alirezarezvani — Claude skill: repair failing Playwright tests

Sorts a failing or flaky Playwright test into a category, applies the matching fix, then proves it holds. Useful when a test fails in CI but passes locally.

Install into Claude Code · Plugin marketplace All methods and platforms ↓
/plugin marketplace add alirezarezvani/claude-skills
/plugin install pw@claude-code-skills
Open on GitHub

What fix does

The skill runs the test to capture the error, then repeats it and runs it with parallel workers — that separates a real break from flakiness. Next it captures a trace with --trace=on --retries=0 and reads it.

Failures land in four buckets: timing and async, test isolation, environment, infrastructure. Each has its own fixes. For timing, waitForTimeout() gets replaced with web-first assertions and missing await calls get added. For isolation, shared mutable state comes out and test data gets created per test. For environment, viewport sizes and font rendering are matched between local and CI. For infrastructure, timeouts and retries go up.

After the fix the test runs 10 times via --repeat-each=10; all 10 must pass or you go back to categorizing. At the end the skill suggests prevention: retries: 2 in CI, trace: 'on-first-retry' in the config. You need Playwright installed and tests run through npx playwright test. Worth installing if you already have tests that break now and then; skip it if the project doesn't use Playwright.

What it helps with

  • figure out why a test fails in CI but passes locally
  • remove flakiness from a Playwright suite
  • trace an intermittent failure back to its cause
  • fix a test that only breaks under parallel workers
  • lock in a fix by verifying 10 repeat runs

Example prompts for the agent

  • fix the failing test in e2e/login.spec.ts
  • the checkout test fails in CI but passes locally, dig in
  • this test passes sometimes, find out why

How to install fix

1Plugin marketplace

/plugin marketplace add alirezarezvani/claude-skills
/plugin install pw@claude-code-skills

This installs the whole pw plugin with all its skills

2Skills CLI (Vercel)

npx skills add alirezarezvani/claude-skills --skill fix -a claude-code

3Manually: put the files in place

~/.claude/skills/fix/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/fix/

From the same set349

The whole set →
engineering-skills Alireza Rezvani An engineering skill index for Claude Code that helps you select one specialist SKILL.md for the task at hand. It covers architecture, testing, DevOps, and data work. Claude Code 2,387installs finance-skills Alireza Rezvani Routes ambiguous finance prompts to the right bundled skill: financial-analyst, saas-metrics-coach, or month-end-close. Claude Code 2,312installs marketing-skills Alireza Rezvani A directory and router for marketing skills in Claude Code. It picks the right specialist skill for SEO, content, CRO, channels, and related tasks. Claude Code 2,264installs business-growth-skills Alireza Rezvani Routes growth and revenue prompts to the right specialized skill across customer success, sales engineering, RevOps, and proposals in Claude Code. Claude Code 2,189installs engineering-advanced-skills Alireza Rezvani An index of 37 engineering skills for architecture, automation, reliability, and platform work. Use it when a project needs task-specific engineering workflows. Claude Code 2,019installs product-skills Alireza Rezvani Product work orchestrator for Claude Code. Routes queries across 16 domain lanes and validates discovery trees with deterministic scripts. Claude Code 1,994installs pm-skills Alireza Rezvani Routes project-delivery requests across 8 PM sub-skills for Jira, Confluence, sprints, reporting, and team communication. Useful for controlled delivery work. Claude Code 1,975installs senior-backend Alireza Rezvani Scaffolds backend APIs, detects database bottlenecks, and runs load tests. Useful when designing Express routes, optimizing PostgreSQL, or preparing for production. Claude Code 1,674installs

Other versions of fix

Similar

Questions about fix

How do I install fix in Claude?

Through the plugin marketplace: /plugin marketplace add alirezarezvani/claude-skills, then /plugin install pw@claude-code-skills. Or directly: npx skills add alirezarezvani/claude-skills --skill fix -a claude-code.

What does the fix skill do?

It diagnoses a failing or flaky Playwright test, assigns the failure to one of four categories, and applies the fix for that category. Then it verifies stability with 10 repeat runs.

What do I need for it to work?

Playwright in the project — tests run via npx playwright test. The skill takes a test file path, a test name, or a description of the failure.

Source text

SKILL.md · MIT
---
name: "fix"
description: >-
  Fix failing or flaky Playwright tests. Use when user says "fix test",
  "flaky test", "test failing", "debug test", "test broken", "test passes
  sometimes", or "intermittent failure".
---

# Fix Failing or Flaky Tests

Diagnose and fix a Playwright test that fails or passes intermittently using a systematic taxonomy.

## Input

`$ARGUMENTS` contains:
- A test file path: `e2e/login.spec.ts`
- A test name: ""should redirect after login"`
- A description: `"the checkout test fails in CI but passes locally"`

## Steps

### 1. Reproduce the Failure

Run the test to capture the error:

```bash
npx playwright test <file> --reporter=list
```

If the test passes, it's likely flaky. Run burn-in:

```bash
npx playwright test <file> --repeat-each=10 --reporter=list
```

If it still passes, try with parallel workers:

```bash
npx playwright test --fully-parallel --workers=4 --repeat-each=5
```

### 2. Capture Trace

Run with full tracing:

```bash
npx playwright test <file> --trace=on --retries=0
```

Read the trace output. Use `/debug` to analyze trace files if available.

### 3. Categorize the Failure

Load `flaky-taxonomy.md` from this skill directory.

Every failing test falls into one of four categories:

| Category | Symptom | Diagnosis |
|---|---|---|
| **Timing/Async** | Fails intermittently everywhere | `--repeat-each=20` reproduces locally |
| **Test Isolation** | Fails in suite, passes alone | `--workers=1 --grep "test name"` passes |
| **Environment** | Fails in CI, passes locally | Compare CI vs local screenshots/traces |
| **Infrastructure** | Random, no pattern | Error references browser internals |

### 4. Apply Targeted Fix

**Timing/Async:**
- Replace `waitForTimeout()` with web-first assertions
- Add `await` to missing Playwright calls
- Wait for specific network responses before asserting
- Use `toBeVisible()` before interacting with elements

**Test Isolation:**
- Remove shared mutable state between tests
- Create test data per-test via API or fixtures
- Use unique identifiers (timestamps, random strings) for test data
- Check for database state leaks

**Environment:**
- Match viewport sizes between local and CI
- Account for font rendering differences in screenshots
- Use `docker` locally to match CI environment
- Check for timezone-dependent assertions

**Infrastructure:**
- Increase timeout for slow CI runners
- Add retries in CI config (`retries: 2`)
- Check for browser OOM (reduce parallel workers)
- Ensure browser dependencies are installed

### 5. Verify the Fix

Run the test 10 times to confirm stability:

```bash
npx playwright test <file> --repeat-each=10 --reporter=list
```

All 10 must pass. If any fail, go back to step 3.

### 6. Prevent Recurrence

Suggest:
- Add to CI with `retries: 2` if not already
- Enable `trace: 'on-first-retry'` in config
- Add the fix pattern to project's test conventions doc

## Output

- Root cause category and specific issue
- The fix applied (with diff)
- Verification result (10/10 passes)
- Prevention recommendation

© Alireza Rezvani · MIT · alirezarezvani/claude-skills

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor