Skip to content
cccskills
FreePublished on GitHub

governing-quality-waivers

Turns "we will skip this check for now" into a dated, attributed, expiring waiver with a stated reason and owner, inventories the silent skips already hiding in a repo - skipped tests, disabled lint rules, ts-expect-error, continue-on-error, lowered thresholds, coverage ignores - and reports expired waivers as findings. Use when a team wants to bypass a quality gate, when skip lists and quarantined tests accumulate without owners, when an audit asks why a check is off, or when a repo needs to know what it has quietly stopped enforcing.

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 (3)

  • SKILL.md9.3 KB
  • resources/silent-skip-inventory.md6.2 KB
  • resources/waiver-register-template.md6.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Governing Quality Waivers

Use this skill when something in the quality system is being switched off - or when you need to find out how much already has been.

Every repo accumulates skips. A test.skip from a sprint that ended, an eslint-disable-next-line nobody can explain, a continue-on-error: true added during an incident, a coverage threshold lowered to match reality. None were wrong at the time. All of them are now invisible, unowned, and permanent.

A waiver makes the same decision visible: same skip, but with a reason, an owner, and a date. That is the entire mechanism, and it is the difference between a considered trade-off and rot.

When to Use

  • someone wants to bypass a quality gate for this change or this release
  • a check is failing and the pragmatic answer is "not now"
  • a repo has skip lists, disabled rules, or quarantined tests with no owners
  • an audit, a handover, or a new lead asks what this project actually enforces
  • a quality contract has SHOULD practices that will not be done this quarter
  • a continue-on-error or a lowered threshold turns up in a diff

Operating Principles

  • Skipping is allowed. Silent skipping is not. The goal is not zero waivers; it is zero unowned waivers.
  • A waiver has four fields, always. What, why, who, until when. Missing any one makes it a skip wearing a nicer name.
  • MUST is not waivable. A mandatory practice that cannot be met means the practice is wrong, the profile is wrong, or the work is not done. Those are three real answers; "waived" is not a fourth.
  • Expiry is not optional and "never" is not a date. An unbounded waiver is a permanent lowering of the bar, and it should be recorded as a contract change instead.
  • The owner is a person or a named team. "The team" owns nothing.
  • The reason names the blocker, not the feeling. "Flaky" is not a reason. "Fails when the CI runner's clock skews past the token TTL; needs a fake clock, tracked in QA-431" is.
  • An expired waiver is a finding. Not a warning, not a nag - a finding that appears every run until it is renewed with a fresh justification or removed.
  • Renewal requires a new justification. Rubber-stamping the old reason is how a 90-day waiver becomes a three-year one.

Workflow

Phase 1: Classify the request

Before writing anything, establish what kind of skip this is:

KindExampleHandling
Not applicableDAST on a library with no HTTP surfacenot a waiver - remove the row from the contract with a reason
Deferred by maturitymutation testing at crawlnot a waiver - it is next level's contract
Genuine waivercontract testing postponed until the schema stabiliseswaiver with reason, owner, expiry
Blocked workintegration tests need infrastructure nobody has provisionedwaiver plus a ticket for the blocker; the waiver expiry tracks the ticket
Refusala MUST practice someone does not want to donot waivable - escalate as a contract or profile question

Getting this classification right prevents the register from filling up with rows that were never waivers, which is what makes people stop reading it.

Phase 2: Write the entry

Use ./resources/waiver-register-template.md. Store the register where the contract lives - .qa/waivers.md, or the waivers: block of .qa/quality-contract.yaml.

- id: W-004
  scope: coverage-rigor
  paths: ['src/generated/**']
  reason: >-
    Generated OpenAPI clients. Tests would assert the generator's output, not our
    behaviour. Regenerated on every schema change; the schema itself is contract-tested.
  owner: '@maria'
  created: 2026-08-21
  expiry: 2026-12-01
  review_trigger: 'if we hand-edit anything under src/generated/'
  ticket: null

review_trigger is the field that earns its keep: an expiry catches time passing, a trigger catches the assumption breaking. A waiver justified by "this code is generated" should expire the moment someone edits it by hand.

Phase 3: Set the expiry honestly

SituationExpiry
This release onlythe release date
Waiting on a specific ticketthe ticket's target date, and name the ticket
Waiting on a third party90 days, then re-justify
Structural, no plan to changedo not waive - propose a contract change instead

The last row matters. A structural exception dressed as a waiver expires, gets renewed unread, and pollutes the register. If the bar has genuinely moved, move the contract and say so out loud.

Phase 4: Inventory the silent skips

The high-value pass, especially on an inherited repo. Work through ./resources/silent-skip-inventory.md: skipped and quarantined tests, .only leaks, disabled lint rules, @ts-expect-error and any escapes, continue-on-error and || true in CI, coverage ignores and excludes, lowered thresholds, raised retries, --no-verify habits, allowlisted secret-scan and audit findings.

For each finding, one of three outcomes - and no fourth:

  1. Fix it - usually cheaper than the discussion about it
  2. Waive it - with the four fields
  3. Delete it - the skip protects code nobody needs

Report the count. "31 silent skips, 4 with any explanation" is the sentence that gets a team to act.

Phase 5: Report and enforce

Findings, in order:

  • Expired waivers - one line each: what is unguarded now, who owns it
  • Waivers with no expiry - treat as expired
  • Silent skips - no waiver at all
  • MUST practices with a waiver attempt - an escalation, not a finding
  • Waivers renewed more than twice - the bar has moved in practice; make it explicit

Enforcement worth wiring up: a CI step that fails when a waiver in the register has passed its expiry, and a review rule that a diff adding continue-on-error, .skip, or a lowered threshold must add a register entry in the same change. Both are cheap; the second is the one that stops accumulation at the source.

Reviewing Waivers

Review the register on a fixed cadence - release, sprint, or contract re-derivation - and ask three questions per entry:

  1. Is the reason still true?
  2. Is the owner still here and still accountable?
  3. Would we accept this waiver if it were being proposed today for the first time?

The third question is the one that clears the register. Most expired waivers survive because renewal is easier than removal, and asking whether you would start it today breaks that.

Common Failure Modes

  • The register nobody reads. A file that only ever gets appended to. Cadence and expiry enforcement are what stop this.
  • "Flaky" as a reason. Names a symptom and hides the cause. Every flake has a mechanism; write down the mechanism.
  • Waiving a MUST. The most common misuse. It is a contract or profile conversation, not a waiver.
  • Expiry set to a year out by default. A year is "never" with paperwork.
  • Owner set to a team alias. Nobody gets the notification; nobody feels the deadline.
  • Waiving the measurement instead of the risk. Excluding a directory from coverage does not reduce risk; it reduces visibility of risk.
  • Inventory without action. A list of 40 silent skips that produces no fixes, waivers, or deletions was an audit for its own sake.

Resource Map

  • ./resources/waiver-register-template.md - the register format, worked entries, and the enforcement snippets for expiry checks
  • ./resources/silent-skip-inventory.md - every place a JS/TS repo hides a skip, with the search commands to find them

Related Skills

  • deriving-a-quality-contract - where MUST/SHOULD/COULD is set, which decides what is waivable at all
  • verifying-change-coverage - coverage exclusions are waivers and belong in the same register
  • recording-change-intent - the sibling discipline: a waiver records why a check is off, an intent record records why a change was made
  • analyzing-quality-metrics - waiver count and age are quality metrics worth trending
  • tech-debt-analysis - when silent skips are one symptom of broader debt
  • assessing-release-readiness - expired waivers are release evidence, and belong in the go/no-go pack

Definition of Done

This skill is complete when:

  • each request is classified as N/A, deferred, waiver, blocked, or refusal - not all funnelled into "waiver"
  • every waiver has scope, reason, owner, created date, and expiry, with a review trigger where an assumption underpins it
  • no MUST practice carries a waiver
  • the silent-skip inventory has been run and every finding resolved as fix, waive, or delete
  • expired and unbounded waivers are reported as findings with what is now unguarded
  • an expiry check runs in CI, or its absence is stated as the next action
  • the register lives next to the contract and has a named review cadence

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