regression-testing
Skill0 starsChanged 7 months agoMITView on GitHub
Use when comparing two versions of an LLM system, debugging non-deterministic behavior, or establishing a baseline before making changes. Covers controlled comparison protocol, determinism verification, and bisect protocol for finding which change caused a regression.
8 other projects use a version of this.
Adopted by
Most recently taken up by
- upex-galaxy/agentic-qa-boilerplatetheir own version, first seen Nov 7, 2026
- proffesor-for-testing/agentic-qetheir own version, first seen Oct 25, 2026
- fishzjp/qa-skillstheir own version, first seen Oct 21, 2026
- mejbaurbahar/software-tester-skillstheir own version, first seen Oct 13, 2026
- SoftBlack42/StarPietheir own version, first seen Oct 9, 2026
- nahid-sparktales/agent-dispatchertheir own version, first seen Sep 21, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- SoftBlack42/StarPie★ 1.3ksame name
- proffesor-for-testing/agentic-qe★ 524same name
- fishzjp/qa-skills★ 62same name
- nahid-sparktales/agent-dispatcher★ 59same name
- upex-galaxy/agentic-qa-boilerplate★ 26same name
- IrMaho/TeleDOM★ 10same name
- mejbaurbahar/fagun★ 1same name
- mejbaurbahar/software-tester-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- build-reliable-agentsSkill
- agent-architectureSkill
- agent-integrationSkill
- ai-system-designSkill
- code-reviewSkill
- critic-judge-designSkill
- database-designSkill
- devopsSkill
- experiment-driven-developmentSkill
- harness-designSkill
- memory-systemSkill
- model-selectionSkill
- problem-explorationSkill
- prompt-change-managementSkill
- prompt-designSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 9 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
Before running any comparison, verify your system is as deterministic as possible.
- Distinctive: line 30
Run the same batch file twice with identical parameters.
- Distinctive: line 44
If runs differ: do not proceed.
- Distinctive: line 62
Before making any change, run the full test suite and record:
- Distinctive: line 78
When comparing two versions (A vs B), these MUST be identical across both runs:
- Very specific: line 93
Document every run with a _metadata.txt:
- Distinctive: line 114
No previously-passing easy case regressed
- Distinctive: line 124
Only 1-2 runs available (need ≥3 for statistical signal)
- Distinctive: line 132
When a regression appears and you don't know which change caused it:
- Distinctive: line 140
Key insight: Not all commits affect LLM behavior.
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Regression Testing for LLM Systems
The Core Problem
LLM systems have two sources of variance that look identical from the outside:
- Code/prompt changes — something you did caused the behavior to change
- LLM non-determinism — same code, same prompt, different output due to sampling variance
You cannot distinguish between these without a controlled protocol. Every "fix" that isn't measured is a guess.
Step 0: Establish Determinism First
Before running any comparison, verify your system is as deterministic as possible.
Check these in order:
- Temperature = 0 — is it set in your LLM config?
- Seed parameter — is a fixed seed set? (OpenAI:
seed=42, best-effort but significantly reduces variance) - No shared mutable state — verify no module-level mutation, no shared checkpointer across runs
- No parallel runs — sequential only; parallel runs share API quota and cause cascading rate limit errors
Verify determinism before proceeding: Run the same batch file twice with identical parameters. If outputs differ significantly, you have a determinism problem that must be fixed before any comparison is meaningful.
# Run 1
python terminal_app.py --batch-file test-inputs/core.txt \
--logs-dir logs/determinism-check/run1 --max-critic-rounds 3
# Run 2 (immediately after)
python terminal_app.py --batch-file test-inputs/core.txt \
--logs-dir logs/determinism-check/run2 --max-critic-rounds 3
# Compare outputs manuallyIf runs differ: do not proceed. Fix determinism first (seed, temperature, state isolation).
Step 1: Define Your Test Suite
A test suite must have:
- Fixed cases — same queries every time, in the same order
- Known expected outputs — what "correct" looks like for each case
- Difficulty labels — easy cases (should always pass) and hard cases (aspirational)
- Minimum size — at least 5-7 cases covering different query types
Easy cases are your regression canaries. If an easy case fails after a change, something is wrong regardless of whether the hard cases improved.
Step 2: Establish a Baseline
Before making any change, run the full test suite and record:
baseline_commit: <hash>
date: <ISO date>
results: [case1: sufficient, case2: sufficient, case3: no_evidence, ...]
pass_rate: N/M
notes: <any known instability>This is your ground truth. Every subsequent run is compared against this.
Step 3: Controlled Comparison Protocol
When comparing two versions (A vs B), these MUST be identical across both runs:
| Parameter | Must Match |
| Batch file | Same file, same cases, same order |
--max-critic-rounds | Identical — different values = different experiment |
--sleep-seconds | Identical |
--retry-cooldown-seconds | Identical |
| Model | Identical |
| Temperature | Identical |
| Seed | Identical |
| Time of day | Best effort — avoid running during peak API load |
If any parameter differs, the comparison is not valid for causal claims.
Document every run with a _metadata.txt:
commit: <hash> <message>
command: <full command>
batch_file: <path>
max_critic_rounds: <N>
sleep_seconds: <N>
model: <model>
temperature: <N>
seed: <N>
started_at: <ISO timestamp>
results: <per-case outcomes>
pass_rate: N/MStep 4: Interpreting Results
A change is an improvement if:
- Pass rate increased AND
- No previously-passing easy case regressed
A change is neutral if:
- Pass rate unchanged within ±1 case (could be noise)
A change is a regression if:
- Any previously-stable easy case now fails
- Pass rate dropped
A result is inconclusive if:
- Only 1-2 runs available (need ≥3 for statistical signal)
- Parameters differed between runs
- Determinism not verified
Step 5: Bisect Protocol (for regressions)
When a regression appears and you don't know which change caused it:
- Identify the last known-good commit (last run where all easy cases passed)
- Identify the first known-bad commit (first run where regression appeared)
- List all commits between them that touched LLM behavior (prompts, node logic, routing)
- Binary search: checkout midpoint commit, run stability batch, check result
- Repeat until you find the first bad commit
Key insight: Not all commits affect LLM behavior. Commits that only change display logic, docs, or non-LLM utilities can be skipped in the bisect.
Document the bisect:
last_good: <commit> — <description> — <pass_rate>
first_bad: <commit> — <description> — <pass_rate>
bisect_result: <commit> — <what it changed> — confirmed by <N> runsStep 6: Statistical Thresholds
For production systems, define minimum acceptable pass rates per case difficulty:
| Difficulty | Minimum pass rate across N runs |
| Easy | ≥ 4/5 runs |
| Medium | ≥ 3/5 runs |
| Hard | ≥ 2/5 runs (aspirational) |
A single run proving nothing is the most common mistake. Budget for multiple runs before claiming improvement.
Cost estimation before running:
N cases × M LLM calls per case × P runs × cost_per_call = total costCalculate this before starting any validation cycle. If cost is prohibitive, reduce P (runs) or N (cases) but document the tradeoff.
Known Failure Modes
| Failure | Symptom | Fix |
Different max-critic-rounds between runs | Hard case passes with 3 rounds, fails with 1 round — looks like regression | Always match this parameter |
| Entity-specific prompt examples | Parser produces same phrasing as example every run, breaks specific test cases | Remove entity-specific examples from prompts |
| Parallel validation runs | Cascading 429 errors, partial runs, misleading results | Run sequentially only |
| Comparing across API version updates | Model behavior changes independent of your code | Pin model version, note date of any OpenAI updates |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

