by thetestingacademy
Teach agents to build go or no-go release readiness scorecards with gated criteria for coverage, flakes, defects, performance, security, and sign-off.
npx @qaskills/cli add release-readiness-checklistAuto-detects your AI agent and installs the skill. Works with Claude Code, Cursor, Copilot, and more.
You are a release quality lead who builds a clear go or no-go scorecard using objective gates, risk notes, owner sign-off, and evidence from tests, defects, performance, security, and operations.
Create a small release readiness workspace.
mkdir -p release/readiness release/reports release/sql
touch release/readiness/scorecard-template.md
touch release/sql/release-quality.sql
Define release inputs.
// release/readiness/types.ts
export type GateStatus = 'pass' | 'warn' | 'fail' | 'not_applicable';
export type ReleaseGate = {
name: string;
status: GateStatus;
threshold: string;
evidenceUrl: string;
owner: string;
notes: string;
};
export type ReleaseScorecard = {
releaseName: string;
buildId: string;
decision: 'go' | 'no_go' | 'pending';
gates: ReleaseGate[];
};
Use this scorecard for every candidate.
# Release Readiness Scorecard
Release:
Build:
Date:
Decision: Pending
Release owner:
QA owner:
Engineering owner:
## Gates
| Gate | Status | Threshold | Evidence | Owner | Notes |
|---|---|---|---|---|---|
| Unit and integration tests | Pending | 100 percent pass | CI | QA | |
| E2E smoke | Pending | 100 percent pass | CI | QA | |
| Open S1 defects | Pending | 0 | Jira | Product | |
| Open S2 defects | Pending | Approved only | Jira | Product | |
| Flake budget | Pending | Under 2 percent | Test dashboard | QA | |
| Performance budget | Pending | No critical regression | Report | Web lead | |
| Security gate | Pending | No high or critical | Scan | Security | |
| Rollback plan | Pending | Verified | Runbook | DevOps | |
Automate the score where data is available.
// release/readiness/evaluate.ts
import type { ReleaseGate, ReleaseScorecard } from './types';
function hasFailedGate(gates: ReleaseGate[]): boolean {
return gates.some((gate) => gate.status === 'fail');
}
function hasPendingGate(gates: ReleaseGate[]): boolean {
return gates.some((gate) => gate.status === 'not_applicable' ? false : gate.status === 'warn');
}
export function evaluateRelease(releaseName: string, buildId: string, gates: ReleaseGate[]): ReleaseScorecard {
const decision = hasFailedGate(gates) ? 'no_go' : hasPendingGate(gates) ? 'pending' : 'go';
return { releaseName, buildId, decision, gates };
}
Use SQL when release evidence is stored in a warehouse.
select
suite_name,
count(*) as total_tests,
sum(case when status = 'passed' then 1 else 0 end) as passed_tests,
sum(case when status = 'failed' then 1 else 0 end) as failed_tests,
round(100.0 * sum(case when status = 'passed' then 1 else 0 end) / count(*), 2) as pass_rate
from test_results
where release_name = '2026.07'
group by suite_name
order by suite_name;
Use explicit criteria for the meeting.
Record sign-off as a decision log.
## Sign-Off
QA: Approved, smoke and regression gates pass.
Engineering: Approved, rollback plan verified.
Product: Approved, accepted S2 risk QA-4281.
Security: Approved, no high or critical findings.
DevOps: Approved, monitors active and release window staffed.
Decision: Go
Time:
Decision owner:
| Gate | Pass | Warn | Fail |
|---|---|---|---|
| Open S1 defects | 0 | Not used | Any open S1 |
| Open S2 defects | 0 | Accepted risk | Unapproved S2 |
| Smoke tests | 100 percent pass | Retry under review | Any confirmed fail |
| Flake budget | Under 2 percent | 2 to 5 percent | Over 5 percent |
| Performance | Within budget | Small accepted regression | Critical path regression |
| Security | No high or critical | Medium findings tracked | High or critical |
- name: Install QA Skills
run: npx @qaskills/cli add release-readiness-checklist12 of 29 agents supported
Build AI agents that write, run, and fix tests. Playwright, LLM evals, and CI in one live cohort.
Use code AITESTER at checkout