Skip to main content
AIDiveForge AIDiveForge
🕳️

Test Gap Finder

Code & Development · by AIDiveForge · Apr 20, 2026 · Advanced

Turn coverage and mutation evidence into concrete missing-behavior tests.

Get a ranked list of gaps with proposed assertions and evidence.

Free · 2 KB · SKILL.md, instructions and example files. Provide coverage reports, mutation results and the relevant code/tests.

A worked example

A small example to try before using your own data.

Input

{
  "code": "allow = actor.tenant_id == record.tenant_id",
  "mutant": "allow = True",
  "result": "survived",
  "existing_test": "same-tenant access only"
}

Expected result

Gap: cross-tenant access is untested. Add actor tenant A + record tenant B and assert denial with no mutation. This test should kill the surviving equality-removal mutant.

What to check: Assert denied behavior and absence of data changes; a test that merely repeats the equality expression is insufficient.

Limits: Coverage is a clue, not proof of correctness. Equivalent mutants and unsupported behavior need separate treatment.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "test-gap-finder"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/test-gap-finder.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "0d694d44f39126304318dc2eae90aded42a8aef786ed57859808757d5891a774":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/test-gap-finder/SKILL.md. Codex: ~/.codex/skills/test-gap-finder/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

Assert denied behavior and absence of data changes; a test that merely repeats the equality expression is insufficient.

⚙️ How it works

  1. Map uncovered lines and surviving mutants to observable behavior and affected callers.
  1. Check whether a surviving mutant is equivalent or outside the supported contract before calling it a gap.
  1. Prioritize authorization, money, isolation, recovery and other consequential behavior using the actual application context.
  1. Propose the smallest test with inputs and an outcome that would distinguish correct from faulty behavior.
  1. Separate demonstrated gaps from hypotheses and record where report coverage is incomplete.

Description

Get a ranked list of gaps with proposed assertions and evidence.

Provide coverage reports, mutation results and the relevant code/tests.

Limits: Coverage is a clue, not proof of correctness. Equivalent mutants and unsupported behavior need separate treatment.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.