Skip to content
cccskills
FreePublished on GitHub

deriving-a-quality-contract

Derives a project-specific quality contract from three axes - risk profile, team maturity, and product surface - labelling each testing practice MUST, SHOULD, or COULD, then produces a PRESENT/PARTIAL/MISSING/WAIVED gap matrix with an ordered remediation plan. Use when a project has no agreed testing strategy, when a team argues about which practices are mandatory, when onboarding a legacy or inherited repository, when a quality strategy document has to be derived from evidence instead of opinion, or when someone asks "what testing should we actually be doing here".

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118 stars(GitHub 118 + cccskills 0)

Run score Not tested

See how to install

Files included (6)

  • SKILL.md10.8 KB
  • resources/approach-catalog.md12.4 KB
  • resources/contract-template.md7.6 KB
  • resources/detection-signals.md12.1 KB
  • resources/maturity-model.md4.6 KB
  • resources/profiles.md5.3 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Deriving a Quality Contract

Use this skill when a team needs to know which testing practices are mandatory for this project, which are expected, which are optional, and which of them are actually in place today.

"We should test more" is not a strategy. A quality contract is: a named list of practices, each labelled MUST, SHOULD, or COULD for this specific project, each with an exit criterion, an owner, and a current state. The label is derived from three axes, not from taste - which is what makes the contract survive an argument.

When to Use

  • a project has no written testing strategy, or has one nobody follows
  • a team disagrees about whether a practice (mutation testing, contract tests, load tests) is required
  • a legacy or inherited repo needs an honest quality baseline
  • a strategy document is due and the alternative is inventing one
  • a quality gate is being designed and the list of things to gate on is unclear
  • a client or auditor asks what quality practices this project commits to

Operating Principles

  • Derive, do not prescribe. The same practice is MUST for a payment service and COULD for an internal prototype. State the axes, then read the label off them.
  • Three states are a lie; four are honest. PRESENT, PARTIAL, MISSING, WAIVED. PARTIAL is the state every audit omits and every repo is full of.
  • Configured is not verified. A jest config proves unit testing is set up. It proves nothing about the change that shipped yesterday. Say which of the two you measured.
  • Drop what does not apply. A library with no HTTP surface cannot be DAST-scanned. Removing an irrelevant practice from the contract is a feature, not a shortcut.
  • A practice with no exit criterion is a slogan. Every row needs a testable finish line.
  • Skipping is allowed; silent skipping is not. Anything not being done is either COULD, or WAIVED with a reason, an owner, and a date.
  • Maturity gates ambition. A team that has no unit tests should not be handed mutation testing. Sequence the plan; do not dump it.

Workflow

Phase 0: Establish the three axes

Read the repo and ask what the repo cannot tell you.

Stack and tooling - from package.json, lockfiles, tsconfig.json, test config, CI workflows. Record the test runner, assertion style, and CI provider.

Product surface - what the thing actually exposes, because it decides which practices are even applicable:

SurfaceEvidence to look for
web-uiReact/Vue/Svelte/Angular deps, public/index.html, route components
http-apiExpress/Fastify/Nest/Hono deps, routes/, controllers/, handler files
wire-schemaopenapi.*, swagger.*, *.proto, *.graphql, tRPC routers
ai-llmopenai, @anthropic-ai/sdk, ai, langchain, llamaindex, prompts/, *.prompt.*
data-storemigration folders, ORM schema files, seed scripts
librarypackage exports/main with no server entry point, published to a registry
clibin field, commander/yargs/clipanion

A repo has several surfaces. Record all of them with the evidence, and record what is confidently absent - absence is what lets you drop rows.

Profile - the risk class. Ask, do not guess:

  • who is harmed if this breaks, and how badly
  • is there regulatory, contractual, or financial exposure
  • is money, personal data, or safety involved
  • can a bad release be rolled back in minutes, or not at all

Map the answers onto a profile from ./resources/profiles.md (critical-regulated, standard, prototype-internal) and write down the one sentence that justifies it.

Maturity - where the team is now, from ./resources/maturity-model.md (crawl, walk, run). Read it from the repo, not from ambition: no test script at all is crawl, however senior the team.

Write the triple down and confirm it with a human before continuing. Everything downstream is derived from it, so a wrong triple produces a confidently wrong contract.

Phase 1: Resolve the contract

Walk ./resources/approach-catalog.md. For each practice:

  1. Skip it if requires-surface names a surface this repo confidently lacks. Record it as N/A with the reason - do not silently omit it.
  2. Skip it if its introduced-at maturity is above the team's current level. Record it as deferred to <level>, because it is the next contract, not this one.
  3. Otherwise take the level for the resolved profile: MUST, SHOULD, or COULD.
  4. Copy the exit criterion and pick the tool from the catalog's tool column.

The output is a table of practices with levels and exit criteria. That is the contract.

Phase 2: Detect what is present

For each contracted practice, look for the evidence listed in ./resources/detection-signals.md and assign one of four states:

StateMeaning
PRESENTConfigured and wired into CI, with evidence for both
PARTIALConfigured but not enforced, enforced but not on all relevant paths, or present but demonstrably stale
MISSINGNo credible evidence
WAIVEDAbsent by a recorded decision with reason, owner, and expiry

Rules that keep this honest:

  • Quote the evidence: a file path, a dependency name, a CI step. A state with no evidence is not a finding, it is a guess.
  • A tool in devDependencies that no script and no workflow invokes is PARTIAL, not PRESENT.
  • A CI step written as tool || true, continue-on-error: true, or || echo "non-blocking" is PARTIAL - it runs and cannot fail.
  • If a check exists but excludes most of the codebase, it is PARTIAL, and name the exclusion.
  • When you genuinely cannot tell, write UNKNOWN and say what you would need. Never collapse "could not determine" into MISSING - that produces a plan for work that may already be done.

Phase 3: Grade the gap

A MUST in state MISSING is a blocker. Blockers are not waivable; they are either fixed or the profile was wrong. If a blocker list is long, that is usually a signal the profile was set aspirationally - revisit Phase 0 with the human rather than issuing a 20-item blocker list.

Order everything else by risk × effort using the effort labels in the catalog (XS ≈ 1h, S ≈ half a day, M ≈ 2 days, L ≈ a week). Front-load the practices that protect the surfaces you identified as critical.

Phase 4: Write the contract and the plan

Use ./resources/contract-template.md. The deliverable has four parts:

  1. The triple, with the sentence justifying each axis.
  2. The contract table - practice, level, tool, exit criterion, owner.
  3. The gap matrix - practice, level, state, evidence, verdict.
  4. The remediation plan - ordered, each item with a concrete first command, an effort label, and its exit criterion.

Save to .qa/quality-contract.md. If the project wants a machine-readable copy for gate tooling, also emit .qa/quality-contract.yaml in the shape shown in the template.

Then say plainly what the contract does not cover: practices dropped for missing surface, practices deferred to the next maturity level, and anything marked UNKNOWN.

Re-running It

A contract is a living artifact. On a re-run, diff against the previous one and report direction: practices that moved to PRESENT, practices that regressed, waivers that expired, blockers that remain. Hand that diff to tracking-quality-trends if a trend history is being kept. A contract that only ever gets written once becomes wallpaper.

Common Failure Modes

  • Aspirational profile. Labelling an internal admin tool critical-regulated produces a contract nobody can satisfy, and the whole document gets ignored.
  • Catalog dumping. Emitting all 30 practices as MUST. If everything is mandatory, nothing is.
  • Confusing configured with verified. The most common false PRESENT. A test runner exists; the diff is untested.
  • Silent omission. Dropping a practice without recording why. Next quarter nobody knows whether it was considered.
  • Skipping the human confirmation on the triple. The one step that cannot be automated, and the one most often skipped.
  • A plan with no first command. "Introduce contract testing" is not an action. npx openapi-typescript ./openapi.yaml -o src/types/api.ts is.

Resource Map

  • ./resources/approach-catalog.md - the practice catalog: tier, maturity, MUST/SHOULD/COULD per profile, tool, exit criterion, effort
  • ./resources/profiles.md - the three risk profiles, how to choose one, and their metric thresholds
  • ./resources/maturity-model.md - crawl / walk / run, entry criteria, and what each level unlocks
  • ./resources/detection-signals.md - per-practice evidence for PRESENT / PARTIAL in a JS/TS repo
  • ./resources/contract-template.md - output structure for the contract, gap matrix, and remediation plan

Related Skills

  • scoping-change-relevance - when the question is which contracted practices apply to one specific diff
  • governing-quality-waivers - when a practice will not be done and the skip needs a reason, an owner, and a date
  • generating-quality-gate-workflows - when the agreed contract has to be enforced in CI
  • tech-debt-analysis - when the question is code, test, and dependency health rather than which practices are mandatory
  • assessing-release-readiness - when the contract and gap matrix become evidence for a go/no-go call
  • analyzing-quality-metrics - when the contract's metric thresholds need definitions and honest interpretation

Definition of Done

This skill is complete when:

  • the profile, maturity, and surfaces are written down with the evidence and reasoning for each
  • every contracted practice carries a level, a tool, and a testable exit criterion
  • every practice has a state with quoted evidence, and UNKNOWN is used where evidence was unavailable
  • practices dropped for missing surface and deferred for maturity are listed, not silently omitted
  • MUST + MISSING blockers are called out separately from the ordered plan
  • the remediation plan is ordered and each item starts with a command someone can run today
  • the human has confirmed the triple, not just received it

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Defines, computes, and interprets test and quality metrics: pass rate, flake rate, suite duration, defect escape rate, time to detect, and coverage with its caveats. Use when building a QA dashboard, reporting suite health to stakeholders, comparing releases over time, or when a coverage percentage or a bug count is being treated as a measure of quality.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

Analyzes diffs, changed files, hotfixes, and release candidates to identify where regression risk spreads and what must be retested first. Use when scoping retest after a change, reviewing QA impact for a pull request, or building a minimal confidence suite for release validation.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

Writes and reviews API automation tests with Playwright Test, covering setup/teardown, assertions, data management, and hybrid API+UI flows. Use when creating backend API tests, contract checks, data-driven API coverage, API+UI hybrid workflows, or reviewing existing Playwright API suites.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

Measures the risk that code shipped without anyone understanding it: a teach-back attestation on high-risk changes, a risk band from changed-code complexity, diff size and whether a human explanation accompanied it, and optional AI-authorship provenance. Findings stay advisory by design. Use when an AI-assisted codebase grows faster than the team reads it, when reviews are rubber-stamped, when nobody can explain a module that ships weekly, or when leadership asks how much of the code the team can actually maintain.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

Produces an evidence-backed go/no-go recommendation: exit criteria status, open-defect risk profile, coverage against risk, environment parity, rollback readiness, and the residual risk stated plainly. Use when preparing a release sign-off, when someone asks whether a build is ready to ship, or when a decision to release is being made on impressions rather than evidence.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

Records human verification - code review, exploratory sessions, UAT, accessibility passes, UX and observability reviews - as dated, attributed attestations in a register, so human-centric practices stay in the quality contract without pretending to be automated checks. Use when a strategy requires verification no tool can prove, when sign-off evidence is scattered across chats and tickets, when a gap matrix needs to distinguish "attested" from "passed", or when an audit asks who verified what and when.

The English summary is being prepared. Showing the original description.

jaktestowac/awesome-copilot-for-testers118Updated Aug 27, 2026

See all skills by jaktestowac

Report a problem with this skill