Borrowing it
Nothing to install: this file belongs to theimaginaryfoundation/what-iff. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/theimaginaryfoundation/what-iff/main/.agents/skills/playwright-version/SKILL.mdgit clone --depth 1 https://github.com/theimaginaryfoundation/what-iffWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/theimaginaryfoundation/what-iff/playwright-version)<a href="https://agentmods.dev/skills/theimaginaryfoundation/what-iff/playwright-version"><img src="https://agentmods.dev/badge/skills/theimaginaryfoundation/what-iff/playwright-version/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/theimaginaryfoundation/what-iff/playwright-version"><img src="https://agentmods.dev/badge/skills/theimaginaryfoundation/what-iff/playwright-version.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00111 | $0.01240 |
| Opus 5.5 | $0.00044 | $0.00496 |
| Sonnet 5.5 | $0.00022 | $0.00248 |
| Haiku 4.5 | $0.00011 | $0.00124 |
Grade A, and why
playwright-version scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 99 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Playwright version: one source of truth
web/app/package.json → devDependencies["@playwright/test"]
is the source of truth. It is pinned exactly — 1.62.1, never ^1.62.1.
Everything else derives from it through one resolver:
web/app/e2e/scripts/playwright-version.sh # prints e.g. 1.62.1
Its only consumer now is scripts/ci-image.sh, which folds the resolved
version into the CI base image's tag (see the ci-image-version skill for
that layer). Everything that used to read playwright-version.sh directly —
e2e/scripts/visual-docker.sh, .github/workflows/e2e-mock.yml's version
job — now calls scripts/ci-image.sh e2e instead, so both resolve the same
baked image ref rather than each deriving a bare Playwright tag on its own.
Why exact, and why this matters more than a normal dependency
The PNGs under e2e/tests/visual/**-snapshots/ were rasterized by the browsers
bundled inside one specific CI base image (docker/ci/Dockerfile's e2e
target, tagged ...:e2e-pwX.Y.Z-<digest>). Compare them using a different
image and you are checking against a renderer that never produced them — font
hinting and antialiasing shift, and the failures read as real UI regressions.
Version skew here does not break the build honestly; it produces plausible,
wrong diffs.
A range makes that skew invisible: npm install or a bot can move the
installed version inside ^1.62.1 while the image tags stay literal. Exact
pinning makes the version a fact rather than a constraint, which is what lets
an image tag be derived from it at all.
playwright-version.sh enforces both halves — it refuses a range, and it
refuses a node_modules that disagrees with package.json.
Upgrading
- Bump the pin in
web/app/package.jsonto the new exact version, thennpm installso the lockfile follows. - Confirm the resolver agrees:
A mismatch error here means the install did not take.web/app/e2e/scripts/playwright-version.sh - The CI base image updates itself.
scripts/ci-image.shresolves the version through this same script and folds it into the image tag it computes (ghcr.io/theimaginaryfoundation/what-iff-ci:e2e-pw<version>-<hash>), sovisual-docker.shand theci-image.yml/e2e-mock.ymlworkflows all pick up the new Playwright base image automatically — nothing to edit by hand. If the OS suffix Playwright publishes under has moved on (Jammy → Noble), that's the one thing still hardcoded, indocker/ci/Dockerfile'sFROM mcr.microsoft.com/playwright:v${PLAYWRIGHT_VERSION}-nobleline. - Regenerate the visual baselines in the new image — this is the step
that is easy to skip and expensive to skip:
cd web/app && npm run e2e:mock-llm:visual:docker:update - Review the regenerated PNGs before committing. A version bump legitimately shifts rendering by a pixel or two; a real UI change looks different. If you cannot tell them apart, that is a signal to bump the version in its own commit, separate from any UI work, so the diff has one cause.
- Run the visual specs once more without
:updateto confirm they now pass against the baselines you just made.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 99 lines · 111 tokens per session scan A eeb620c25824
playwright-version is a skill published in the GitHub repository theimaginaryfoundation/what-iff (19 stars, last pushed yesterday), licensed Apache-2.0. It adds 111 tokens to every session and 1,240 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-09.
Other skills, from other repositories
verify-omnigent
Drive Omnigent the way a user does and prove a behavior with recorded evidence, using an isolated server, runner, and mock model plus a feature map of every user entry point. Load before reproducing a user-facing bug, before claiming a fix works, or when reviewing whether a change covered every surface (session vs.…
test-master
Generates test files, creates mocking strategies, analyzes code coverage, designs test architectures, and produces test plans and defect reports across functional, performance, and security testing disciplines. Use when writing unit tests, integration tests, or E2E tests; creating test strategies or automation…
eval-dataset-design
A guide to creating reliable test sets for AI agents. Each evaluation task includes the request, the simulated user's behaviour, a reset starting state, and a success check that can be independently verified.
dogfood
Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to dogfood, QA, exploratory test, find issues, bug hunt, or test this app on mobile.
cua-driver
Use Cua Driver for desktop or browser tasks that are awkward or unavailable through Bash/APIs, or when the user explicitly wants GUI interaction: app testing, visual bug reproduction, form filling, calendar entry, screenshots, and demo recording. Also covers Cua setup; not OpenAI Codex Computer Use or web research.
critique
Adversarial design critique of the current work. Render it, look at it, and argue for rejection. Run after the gates are green, never instead of them.