an agent skill · independent verification & the release gate

/quality

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?

# natural language — no flags, no fixed pipeline /quality did the checkout release actually work, and what can we tell customers about it?

runs onClaude CodeCodexCursorAntigravityopencodeGrok BuildHermes

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.

Provide evidence for what's already built — never the construction itself

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.

quality owns

the judgment layer above every technique, and the decision record behind it

  • independent verification & the release gate — evidence for what's already assembled, never the tests themselves
  • naming the oracle + grading evidence ⭐ — observed / inferred / not_tested / blocked, the vocabulary every job and both decisions rest on
  • risk-ranked verification budget — impact×probability allocation, entry/exit criteria, the stopping heuristic named out loud
  • "what we deliberately did not verify" — required output, not a courtesy; silent omission is the failure, not omission itself
  • defect classification & routing — ODC type/qualifier/trigger/impact, harm stated in user terms, routed to the owning skill
  • the evidence dossier + its adversarial read — one feature, never shipped as two; the release/claim split with residual risk owned and expired

hands off to

the "Not this skill" table — nine asks this skill declines by design

  • frontend · backend · data · ai — write the unit, component, service, pipeline, or eval tests
  • the building skill — TDD, red-green-refactor
  • the skill that owns the code — lint, complexity, review of a diff; and fixing what verification found
  • architecture — NFR budgets, threat model, system decomposition
  • product — acceptance criteria, what "good" means for users
  • operate — CI/CD, deploy, monitor, incidents, SLOs
  • growth — design or read out an experiment
  • design — design intent, usability critique against that intent

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.

The faceted router

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.

facetoptionsrule
① 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.
Ship no unverified claim. Everything on this page traces to 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.

The eleven primary jobs

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…ReadContribution
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.

Five surfaces + one additive overlay

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.

Web app & site surface-web-app-and-site.md

The default: a browser-rendered web app, SaaS product, marketing site, or landing page — first-class here, not an afterthought (the incumbent ecosystem returns zero hits for "landing page"). Job order tuned for this surface's oracles and its characteristic overclaims.

reshapesmarketing-site-first-class · surface job order · claim scope for rendered UI

Service / API surface-service-api.md

A service boundary with no rendered UI of its own: contract verification as the cheap alternative, an explicit list of what a passing contract does not establish, and authorization-matrix verification as its own job.

reshapescontract-as-cheap-oracle · auth-matrix verification · load-model choice

Mobile (iOS / Android) surface-mobile.md

Device-matrix economics come earlier here than anywhere else, because the matrix gates almost everything downstream; store review is an external gate outside your control; platform accessibility APIs replace web ARIA.

reshapesdevice-matrix budget · store review as a gate · cloud device ≠ shipping device

Data pipeline surface-data-pipeline.md

Independently verifies that a pipeline's declared contracts actually hold in production, and that a tracking implementation matches its plan — the weakest surface in the incumbent ecosystem (one incidental hit across 50 skills), where naming the oracle does the most work of any surface.

reshapescontract-vs-production check · tracking-plan drift · the seam with data's construction-side gates

AI system surface-ai-system.md

Model-driven behaviour is the thing under verification: evaluation as a release gate, distinct from ai's development-instrument evals; judge validity; a red-team scope with its declared limits.

reshapeseval-as-gate vs eval-as-instrument · judge validity · red-team scope

Regulated additive ⭐

A conformance obligation carries legal or contractual weight. Stacks on, does not replace. A scoped conformance claim, VPAT/ACR, EN 301 549, a requirement-to-evidence traceability matrix, evidence retention, and a verifier-independence statement — on top of any base surface.

reshapestraceability matrix · evidence retention · verifier independence

Oracles & evidence — the flagship

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.

A verdict cannot be binary — so it isn't one.

Four directions, one vocabulary

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

The four evidence states

  • observeddirectly witnessed under stated conditions — a human check, or a typed tool channel exercising the real system
  • inferrednot directly checked; derived from an observed result plus a stated similarity assumption
  • not_testedno evidence — must be labelled deliberate (a scoped, owned decision) or accidental (a gap needing an owner)
  • blockedverification was attempted and could not complete — distinct from not_tested: this was tried
The declared divergence: ISO/IEC 15026-2 requires quantified uncertainty; this skill ships an ordinal vocabulary instead and says so plainly — no dossier built on it may claim standard conformance on the vocabulary alone. Three rules stay non-negotiable:
never report a weaker class as a stronger onenever infer an untested surface from a neighboura component pass ≠ a composition pass

Every reference generates the same row for any tool it meets — the pattern is the deliverable, not any single table:

Evidence producedEstablishesDoes not establish
Green Lighthouse performance score One simulated run under synthetic conditions, on that version's weighted metrics. Anything about INPweight: 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.

What makes this different

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.

Subtract the folk number

The field cites round numbers with no published rationale far more than it admits to. Cite provenance or do not cite — per invariant 12.

  • 80% coverage is a Schelling point — Sonar 80, nyc [80,95], JaCoCo 0.80 — nobody justifies 80 over 70 or 90; Software Engineering at Google's own two published splits (80/15/5 vs. 70/20/10) disagree, one self-disclosed as "pulled out of a hat"
  • the a11y coverage split — never a single number: vendor self-report (Deque, who sells axe) 57%; independent measurement (WebAIM, W3C/WAI, GSA) 20–33%; the circulated 80.39% is unconfirmed
  • ODC's "10x" claim — the inventor's own unaudited figure; this skill keeps the classification discipline, not the number
  • no shape states a ratio — neither Cohn's pyramid nor Dodds's trophy publishes a numeric split; the 80/15/5 and 70/20/10 figures in circulation are later accretions by other authors

Abuse cases & the volatile-fact discipline

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.

  • jqwik's stdout injection — a deliberate "Anti-AI Usage Clause," hidden from interactive terminals via ANSI erase codes while remaining in the bytes CI and agents read — the tooling attacks the pipeline
  • overlay vendors vs. WebAIM — accused of manipulating pages to suppress error detection, plus a dropped SLAPP suit against a named practitioner — the system under test defeats the instrument
  • the licence-mismatch rate — ~12% of a 24-repo sample had a clear LICENSE file while the API reported NOASSERTION; read every licence-like file at the root, one is a sample, not the terms
  • every volatile fact is date-stamped — versions, thresholds, prices, licences carry a verification date and a re-verify pointer; an unstamped fact is a liability

The universal invariants

These rules govern every route, whichever references it loads — the behavioral spine, condensed.

What a pass produces

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.

phase 1rankrisk-ranked budget + what's deliberately unverified
phase 2namethe oracle, and what it does not establish
phase 3classifyODC type/qualifier/trigger/impact, routed to the owner
phase 4dossierthe evidence ledger + its adversarial read, one artifact
phase 5decideship & claim, separately; residual risk owned + expired

handoff.yaml + volatile_facts

assets/handoff.yaml

The routing index carrying the evidence ledger, residual risk, and the ship/claim decisions — never a copy of the dossier, only objective is required.

Evidence dossier

assets/evidence-dossier.md

The assurance case: authority ledger, requirement-to-evidence matrix, "what we deliberately did not verify," and its own adversarial read — shipped as one artifact.

Evidence worksheet

assets/evidence-worksheet.md

The "does not establish" row, fillable for any tool this skill meets — the pattern, not a fixed table.

Risk matrix + severity map

assets/risk-matrix.md · assets/severity-map.md

Impact×probability risk bands, and ODC-mapped severity (A0–A3 craft / P0–P3 functional) — severity within one classification, not a second system.

Release-gate checklist + flake policy

assets/release-gate-checklist.md · assets/flake-policy.md

Entry/exit criteria per risk band, and a flake quarantine with a forcing function — never retry-to-green.

Compatibility matrix

assets/compatibility-matrix.md

The device/browser/platform support matrix, with the licence terms on the data it was built from stated alongside it.

The handoff seams

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.

quality builds

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]

frontend · backend · data · ai

Routed, reproducible defects with ODC severity attached — quality fixes nothing; it hands a triaged finding back to the skill that owns the fix.

operate

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.

product · architecture

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.

Start here

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.

# skills.sh ecosystem (installs globally to supported clients) npx skills add gabros20/quality-skill -g -y # clone + installer (per-host targets) git clone https://github.com/gabros20/quality-skill && cd quality-skill ./install.sh codex # or: claude | cursor | antigravity | opencode | grok | hermes | agents | all # use — natural language, any host /quality we're about to ship checkout — what's the evidence, and what's still residual risk? /quality grade this axe scan: what does the pass actually establish, and what doesn't it? /quality is this flaky test a real defect or noise — triage it and say where it routes # → defect-lifecycle.md

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.

install targets by host
hostinstall targetcommand
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.

what's in the repo
skills/quality/ the skill: SKILL.md (router) + 18 references/ + assets/ docs/ installation · usage · recipes site/ this guide — deploys to quality-skill.vercel.app install.sh installer (claude | codex | cursor | antigravity | opencode | grok | hermes | agents | all) README.md · CHANGELOG.md · LICENSE

More docs: docs/installation.md · docs/usage.md · docs/recipes.md.