<< All versions

Skill v1.0.0

currentLLM-judged scan90/100
borda/ai-rig/test-impact
──Details
PublishedOctober 23, 2026 at 06:55 AM
Content Hashsha256:742ed827f61e7063...
Git SHA0ab984e25be1
──Files
Files (1 file, 3.7 KB)
SKILL.md3.7 KBactive
SKILL.md · 61 lines · 3.7 KB

version: "1.0.0" name: test-impact description: '$codemap-py:test-impact qname [--no-mocks]: affected tests; skip caller/dependency query/exec.'


Before asking, read User Questions.

Test Impact

Find minimum static-analysis test set for one changed function or module; never run tests. Output ready-to-run pytest command.

  • Function (module::symbol): BFS reverse calls, direct/transitive tests, plus mock_patches.
  • Module (bare module): BFS reverse imports, plus mocks of any module symbol.

not_covered includes dynamic dispatch, hooks, string dispatch, as with fn-blast; surface it, never silently omit.

NOT for: all function callers (use $codemap-py:query-code fn-rdeps <module::symbol> --exclude-tests); module deps/blast radius (use $codemap-py:query-code); test execution.

Runtime note

Codex has no bin/ PATH entry or plugin-root variable. Resolve installed root once, substitute PLUGIN_ROOT, retain in reasoning; shell state doesn't persist.

Inputs

<qname> [--no-mocks]: qname is module::symbol (dotted or once-defined bare name resolves; module-suffix or bare method name → candidates) or bare dotted module; --no-mocks removes mock-only tests. If omitted, use User Questions to request the actual changed module::symbol or bare module, accepting cancel to stop; wait for the value. Use native free text unless grounded concrete targets can be offered; choosing a format name is not a target. Use first non-flag token only. If tokens remain after --no-mocks, warn one symbol accepted per invocation, each remainder needs another invocation.

Workflow

1. Query (and build only when allowed)

bash
PLUGIN_ROOT/bin/codemap-py query test-impact "<qname>" [--no-mocks]

If index missing and SCAN_NO_AUTOBUILD=1, report codemap index missing and SCAN_NO_AUTOBUILD=1 — refusing to auto-build. Build it manually first: $codemap-py:scan-codebase and stop. Otherwise run PLUGIN_ROOT/bin/codemap-py index --incremental in the foreground, then retry once.

2. Parse

Read JSON from CLI stdout; never assume first line is JSON — logs can surround it. Treat test_files as the authoritative argv list. pytest_cmd is quoted for a POSIX shell on POSIX hosts and PowerShell on native Windows; for another shell, build its command from test_files with that shell's quoting, never reuse incompatible escaping. Use test_files, pytest_cmd, via_call, via_mock, index.not_covered, index.hint. Non-zero exit is never an empty result: error JSON is on stdout. With rejected_target (typo, ambiguous name, module not indexed) report error plus every candidates/suggestions entry and ask for one exact target — no rebuild advice. Exit 2 without it is a rejected argument. Only other failures (missing/corrupt index) get rebuild advice.

3. Output

For total == 0, report: "No tests found via static analysis. Try the full suite or search for the symbol name directly under tests/."

For total > 0, print:

text
## Test impact: <qname>
**Affected tests** (<total> files, <via_call> via call/import graph, <via_mock> via mocks):
<test_files as bullet list>
**Run:**
<pytest_cmd>
**Caveat:** dynamic-dispatch / hook-callback callers are not in the static graph — <hint>.

Include Caveat only for non-empty not_covered. With total >= 5, write a YAML --- block (Title, Date, Scope, Focus, Agents, Outcome, Confidence, Next steps, Path) followed by the same content to .reports/codex/codemap-py/test-impact-<branch>-<YYYY-MM-DD>.md and print it. <branch> is git branch --show-current | tr '/' '-' (main if empty/detached). Never overwrite: append -2, -3, … until free.

All versions