본문으로 건너뛰기
cccskills
무료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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers스타 118(GitHub 118 + cccskills 0)

실행 점수 미검증

설치 방법 보기

포함된 파일(3)

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

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

jaktestowac/awesome-copilot-for-testers1182026년 8월 27일 업데이트

jaktestowac의 스킬 모두 보기

이 스킬의 문제 신고