"Run the full regression" is not a strategy, it is the absence of one. Your defect tracker and git history already know where this product breaks; an LLM can mine both into a ranked risk map, and you turn that map into a regression scope you can defend in the release meeting.
Tier: Core · Workflow area: Test design & planning
This playbook correlates two datasets every team has and almost none uses — where bugs have historically clustered, and what changed in this release — into a risk-ranked regression scope. The model does the correlation and drafting; you own every inclusion and, more importantly, every exclusion.
When NOT to use:
git log over the release window; a monorepo needs path filters agreed up front.Export the two histories. Defects from Jira (12 months, resolved, with component/label and severity) and change data from git for the release window:
git log --since="6 weeks ago" --numstat --pretty="COMMIT|%h|%an|%s" \
> changes.txt
git diff --stat v2.14.0..HEAD -- 'src/**' > release-diff.txt
From Jira, export the defect list as CSV with key, summary, component, severity, and linked area. Strip customer names and incident details before anything leaves approved tooling.
Ask for a defect-density map first — one dataset at a time:
Here is 12 months of resolved defects (CSV). Produce a table:
Component | Defect count | P1/P2 count | Trend (rising/flat/falling by
quarter) | Recurring themes (2-3 words each).
Note data-quality problems you see (miscategorized items, dumping-ground
components) rather than silently working around them.
Overlay the change history. Now the correlation prompt:
Here is the change log for release 2.15 (git numstat + commit subjects).
Cross-reference against the defect-density table you produced.
Output a regression-risk ranking: Area | Changed in 2.15? (which commits) |
Historical defect density | Coupling risk (files changed together with
historically buggy files) | Risk score 1-5 | One-line rationale.
Flag areas that are HIGH history but NOT changed — candidates for a
thin smoke pass, and say why they still carry risk (shared dependencies).
A good ranking row is auditable back to its sources:
Payments/refunds | YES — 9 commits incl. a1b2c3 "rework refund state
machine" | 31 defects/12mo, 6 P1s, rising | High: refund_service.py
co-changes with ledger.py (14 P1-linked commits) | 5 | State machine
rework in the historically worst component.
Verify the load-bearing claims. Spot-check the commits it cites (git show a1b2c3 --stat), confirm the defect counts against a Jira filter, and check the co-change claim (git log --oneline -- src/refund_service.py src/ledger.py). Models occasionally attribute commits to the wrong area or double-count moved files — two minutes of verification protects the whole ranking's credibility.
Cut the scope and write the exclusions down. Map risk scores to depth: 5 → full manual + automated pass; 4 → automated suite + targeted exploratory charter (pb-07); 3 → automated only; 1–2 → smoke or skip. The critical artifact is the exclusion list — every skipped area, its risk score, and a one-line acceptance rationale, signed by whoever owns the release.
Close the loop after release. Any escape gets mapped against the scoping decision: was its area scored low, or scored high and tested anyway? Feed the answer into next release's prompt as calibration.
The ranking's job is to make your risk acceptance explicit — a wrong ranking you verified and signed is a process working; a right ranking nobody reviewed is luck.
Risk-based scoping with AI is not about running fewer tests — it is about being able to say, with sources, why the tests you ran were the right ones and why the ones you skipped were acceptable to skip.