Ask an agent whether a release is ready and it says yes — a green CI run, a coverage number, a scan with no findings. No named oracle, no stated evidence class, no adversarial read. quality provides independent evidence that an assembled product meets its functional and non-functional expectations, and converts that evidence into two separate decisions: may we ship, and what may we claim. It writes no tests — frontend, backend, data, and ai already own construction-side testing. It answers how do I know, and how would I know I was wrong?
runs onClaude CodeCodexCursorAntigravityopencodeGrok BuildHermes
oracles-and-evidence.mdsurface-web-app-and-site.mdsurface-regulated.md
3 of 18 loaded · read fully
Route before acting. Pick one job and at most one base surface, read only those references — never the whole library. When a conformance claim, audit trail, or verifier-independence requirement applies, surface-regulated stacks additively on top; it does not replace the base surface.
The router is the skill. There is no fixed pipeline to run start-to-finish — each job stands alone and enters where your request is. The animation traces one path; the sections below map the whole surface it routes across.
quality is the layer above the technique: deciding what verification is warranted, at what altitude, and what will deliberately go unverified; producing evidence with its class named rather than a green tick; and turning that into a release decision with the residual risk written down, owned, and given an expiry. It reports; it does not remediate — findings route back to the skill that owns the code, unless remediation is explicitly in scope.
the judgment layer above every technique, and the decision record behind it
the "Not this skill" table — nine asks this skill declines by design
Implement inside the decision, not around it. When compatible upstream artifacts exist — an NFR budget, a threat model, acceptance criteria, a construction skill's own test results — quality verifies against them without silently overriding what they decided. When they don't exist (a standalone run), it says so explicitly rather than inventing a budget or acceptance criterion to fill the gap.
SKILL.md is a router, not a script. Every request selects the smallest sufficient route: one primary job — the eleven below — combined with at most one base surface that reshapes how the job applies to what's under verification, plus the additive regulated overlay when a conformance obligation applies. Read the selected references completely; load two or three at most, never the whole pack.
| facet | options | rule |
|---|---|---|
| ① Primary job | verification-strategy-and-risk · oracles-and-evidence ⭐ · functional-verification · accessibility-conformance · performance-and-load · security-and-privacy · compatibility-and-support-matrix · ai-behavior-verification · suite-and-signal-health · defect-lifecycle · release-gate-and-claims | Exactly one. Pick the single job the request needs; the flagship — naming the oracle and grading evidence — is the judgment layer every other job is built on top of. |
| ② Base surface | web-app-and-site (default) · service-api · mobile · data-pipeline · ai-system | At most one. The surface reshapes what a passing check means — it points to the job references, it doesn't redefine them. |
| ③ Regulated overlay ⭐ | surface-regulated — conformance claims, VPAT/ACR, EN 301 549, verifier independence, on top of any base surface | Additive. Stacks on top of the base surface, never replaces it. A regulated mobile app is mobile + regulated. |
SKILL.md or research/synthesis.md — no invented statistics, benchmarks,
adoption numbers, or testimonials. Where a number is cited (the a11y coverage split, the 80%
threshold, the license-mismatch rate) it carries its source; where the skill has no number, it
says so rather than inventing one.Each job is one reference, read fully only when its route is selected — grounded in named canon, producing evidence with its class stated rather than a verdict alone. This is the whole surface, not a headline slice.
| I need to… | Read | Contribution |
|---|---|---|
| Decide how much verification this warrants, and what we skip | verification-strategy-and-risk.md |
Risk-ranked altitude allocation, the shape debate handled as contested, stopping heuristics, "what we deliberately do not verify" as a required output |
| Know how do I know this result means what it appears to mean ⭐ | oracles-and-evidence.md |
Flagship. Naming the oracle; the four evidence states; the "what this evidence does not establish" table, generatable for any tool |
| Verify the assembled system actually works end to end | functional-verification.md |
Journeys, cross-service verification, contract testing's limits, evidence capture on failure, untrusted runner output |
| Claim this is accessible | accessibility-conformance.md |
Conformance vs scan, the machine-testable boundary, claim scope, VPAT/ACR |
| Know it's fast enough, and whether the measurement supports that | performance-and-load-verification.md |
Field vs lab, percentiles and populations, coordinated omission, scores as compressed judgments |
| Verify it's secure and privacy-correct, independently of the controls we built | security-and-privacy-verification.md |
Assurance grades, what a clean scan cannot decide, severity precedence conflicts, residual risk in machine-readable form |
| Decide which browsers, devices and platforms are in scope | compatibility-and-support-matrix.md |
Building the matrix, where its numbers may legitimately come from, and the licence terms on that data |
| Verify the model's behaviour, not just its builder's evals | ai-behavior-verification.md |
Evals as a gate, judge validity, non-determinism, red-teaming, verifying agent-built work |
| Decide whether this test suite can be believed at all | suite-and-signal-health.md |
Coverage semantics, mutation, flake as an evidence-validity problem, suite runtime budget |
| Classify a finding, grade its severity, and route it | defect-lifecycle.md |
ODC classification spine, reproducibility, harm stated in user terms, triage routing |
| Decide may we ship, and what may we claim | release-gate-and-claims.md |
The evidence dossier with its adversarial read, the release/claim split, residual risk with owner and expiry |
Full router table & invariants: SKILL.md.
One base surface, at most, reshapes every job for what's actually under verification — the same oracle-naming job is bounded differently on a rendered web page than on a batch pipeline with no UI at all. The regulated overlay is additive — it stacks on top of whichever base you picked, never replaces it — and carries a distinct violet identity throughout this page. Surface coverage here is a measured differentiator: across the 50-skill incumbent QA ecosystem, data pipeline scores one incidental hit, "data engineer" zero, landing page zero — four of these five surfaces are effectively unserved elsewhere.
Most of the field treats a green check as a verdict. Four independent bodies of work — reached from four different directions — converge on the same conclusion: a verification result cannot be binary, because the thing producing it cannot decide every case. That convergence, not any one tool, is why the vocabulary below is the spine every other job and both release decisions are built on top of.
theory: an oracle "helps you decide," it does not "tell you" # Kaner, 2012 standards: a formal three-valued split # W3C ACT: automatic/manual/semiAuto tooling: 55% of 105 rules can return "incomplete" # axe-core, the dominant a11y engine assurance: uncertainty shall be stated; omission ≠ silence # ISO/IEC 15026-2
observed result plus a stated similarity assumptionnot_tested: this was triedEvery reference generates the same row for any tool it meets — the pattern is the deliverable, not any single table:
| Evidence produced | Establishes | Does not establish |
|---|---|---|
| Green Lighthouse performance score | One simulated run under synthetic conditions, on that version's weighted metrics. | Anything about INP — weight: 0. TBT carries the heaviest weight (30), and its own source comment calls the coefficients "semi-arbitrarily chosen." A score is a compressed judgment with an author, not a measurement. |
| Passing automated a11y scan | A bounded set of machine-detectable failure patterns, absent from one page state. | Full pages, complete processes, AT compatibility — the scanner says so itself: 55% of axe's rules can return incomplete. Automated coverage is never one figure: vendor self-report (Deque) 57%; independent measurement (WebAIM, W3C/WAI, GSA) 20–33%. |
| Passing load test at target RPS | The harness sent load and got responses. | True tail latency, unless coordinated omission is corrected — a closed-loop generator sends fewer requests during a stall, so the worst latencies are exactly the missing samples. |
| Green test-runner output | Whatever verdict that specific runner emits. | A shared meaning across runners — none exists. Playwright names the third state flaky; Cypress forces a policy choice; Jest has no flaky concept and silently reports passed. |
Two stances set quality apart from the technique libraries: it subtracts the folk number where the field cites a round threshold with no published rationale, and it treats adversarial subjects and volatile facts as first-class, sourced concerns rather than settled trivia.
The field cites round numbers with no published rationale far more than it admits to. Cite provenance or do not cite — per invariant 12.
An instrument pointed at an adversarial subject measures the adversary's response to the instrument, not the property you wanted — and every threshold, version, and licence in this domain churns.
These rules govern every route, whichever references it loads — the behavioral spine, condensed.
observed / inferred / not_tested / blocked — never report a weaker class in the vocabulary of a stronger one.quality's deliverable is the evidence dossier plus the decision record behind it, closed on a
release gate that was graded, not asserted. A full pass emits the fillable assets in
assets/ plus
the machine-readable handoff.yaml companion when downstream work is expected. Each
records the decision and its evidence class, what was deliberately left unverified, and — for any
volatile fact — the date it was verified and how to re-verify it.
The routing index carrying the evidence ledger, residual risk, and the ship/claim decisions — never a copy of the dossier, only objective is required.
The assurance case: authority ledger, requirement-to-evidence matrix, "what we deliberately did not verify," and its own adversarial read — shipped as one artifact.
The "does not establish" row, fillable for any tool this skill meets — the pattern, not a fixed table.
Impact×probability risk bands, and ODC-mapped severity (A0–A3 craft / P0–P3 functional) — severity within one classification, not a second system.
Entry/exit criteria per risk band, and a flake quarantine with a forcing function — never retry-to-green.
The device/browser/platform support matrix, with the licence terms on the data it was built from stated alongside it.
quality consumes upstream artifacts without silently overriding them — NFR budgets and a threat
model from architecture, acceptance criteria from product, construction-side test
results from the owning build skill — and, when downstream work is expected, emits a compact
handoff.yaml beside the evidence dossier: a routing index into it, never a copy.
skill: quality status: complete objective: "" # only required field evidence: [item, oracle, evidence_state, does_not_establish, source] residual_risks: [owner, expiry] ship_decision · claim_decision: independent volatile_facts: [fact, value, as_of, reverify_at]
Routed, reproducible defects with ODC severity attached — quality fixes nothing; it hands a triaged finding back to the skill that owns the fix.
The gate result (ship / ship-with-exception / block) and everything still residual risk, so it knows what it's inheriting rather than discovering it in production.
The claim decision's exact scope, and any conflict between a supplied acceptance criterion or NFR budget and what verification actually found.
Three distinct consumers, not one. Each is a consumer, not a co-author — quality ships the dossier, the routed defects, and the gate result; it does not fix the code, own the deploy, or design the acceptance criteria. Only objective is required; every other field may be empty. Never silently invoke a sibling skill; name it in recommended_next.
Install once. It's a plain SKILL.md router — no flags, no config, no scripts — so it
activates on natural-language phrasing ("can we ship this," "is this test suite believable," "what's
our residual risk before release," "classify this defect and route it," "audit this a11y claim")
rather than a fixed command.
The same install runs on any Agent Skills
host. Codex installs to ${CODEX_HOME:-$HOME/.codex}/skills and triggers with
$quality; agents remains a separate cross-agent installation target.
| host | install target | command |
|---|---|---|
| Claude Code | ~/.claude/skills | ./install.sh claude |
| Codex | ${CODEX_HOME:-$HOME/.codex}/skills | ./install.sh codex |
| Cross-agent path | ~/.agents/skills | ./install.sh agents |
| Cursor CLI | ~/.cursor/skills | ./install.sh cursor |
| Antigravity (IDE + agy) | ~/.gemini/…/skills | ./install.sh antigravity |
| opencode | ~/.config/opencode/skills | ./install.sh opencode |
| Grok Build | ~/.grok/skills | ./install.sh grok |
| Hermes | ~/.hermes/skills | ./install.sh hermes |
Prefer npx skills add gabros20/quality-skill -g -y when you have Node — it maps supported clients itself.
More docs: docs/installation.md · docs/usage.md · docs/recipes.md.