All skills / Developers

Test Gap Finder

Give it a diff and the tests. Get each behaviour the change adds marked Covered, Not covered or Unknown, and ranked test cases for the gaps.

Free, MIT licence, hosted on GitHub. Install the whole free set with npx skills add proskillpacks/skills, or copy this skill's folder.

What you give it

A diff and the tests.

What you get

Get each behaviour the change adds marked Covered, Not covered or Unknown, and ranked test cases for the gaps.

Before and after

Real public data, anonymised. Taken from the skill's README.

A real diff in the Express repository: a freshness check extended to a new HTTP method, and a header guard in res.send, with the tests as they were before the change.

After (skill output, excerpt):
1 | req.fresh can return true for QUERY (lib/request.js:472) | Not covered | test/req.fresh.js and test/req.stale.js only send GET requests.
4 | res.send skips Content-Length when Transfer-Encoding is set | Not covered | res.send.js:270 and :287 set Transfer-Encoding, but only with status 204 or 205.
Whether QUERY freshness is intended to follow the GET semantics is not stated in the diff.

See it run

Animated demo of Test Gap Finder on a real example: the input goes in and the finished result appears. The still shows the final result.

What it does

Give it a diff and the project's tests. You get the behaviours the change adds or alters, each marked Covered, Not covered or Unknown against the tests, and proposed test cases for the gaps with inputs and expected results taken from the code. It never gives a coverage percentage and never says a test passes unless it ran.

How it was tested

1 real-data run on a public multi-hunk change in the Express repository (Claude Sonnet). We checked each Covered and Not covered claim against the tests ourselves.

1 real-data run on a public multi-hunk change in the Express repository (Claude Sonnet). We checked each Covered and Not covered claim by searching the tests ourselves: all matched, and the proposed test for the Transfer-Encoding case is realistic. Not yet run on other models.

Tested on a real example before release. The example is shown in the Before and after section above.

How we test, what we do not do, and which assistants we ran it on.

Limits

  • It reads tests; it does not run them.
  • Not covered means it searched and found nothing.
  • No coverage percentages.

Works with

Works with any assistant that reads SKILL.md skills (Claude, Codex, Gemini CLI, Cursor and others), plus a paste-in prompt version for ChatGPT or any chatbot. A repo with the tests, or the diff and test files pasted.

Install

  1. Run npx skills add proskillpacks/skills in your project and pick this skill. Or copy the test-gap-finder folder from GitHub (https://github.com/proskillpacks/skills/tree/main/skills/developers/test-gap-finder).
  2. Put the test-gap-finder folder where your assistant looks for skills. The generic path is .agents/skills/ (or npx skills add from a folder). Tool-specific paths:
    • Claude Code: ~/.claude/skills/ (or .claude/skills/ inside one project)
    • OpenAI Codex, Gemini CLI, Cursor and others: .agents/skills/ or the skills folder their docs name
    • claude.ai: zip the skill folder yourself, then Customize, Skills, the plus button, Create skill, Upload a skill (code execution must be on in Settings, Capabilities)
    • ChatGPT or any chatbot: open the skill's prompt.md, paste it into the chat, then paste your own text or link
    • Steps for each tool, with links to its official docs: how to install Agent Skills
  3. Ask for the job in plain words, for example: "What tests am I missing for this change? The diff is in change.diff.". The skill loads by itself.

Get it

MIT licence. Use it, change it, share it.

Related

Report a problem with this skill (GitHub, or write to kaiventura.founder@gmail.com).