plugins/attesting-manual-verification/skills/attesting-manual-verification/SKILL.md
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.
npx skillsauth add jaktestowac/awesome-copilot-for-testers attesting-manual-verificationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when a quality practice can only be verified by a person, and the record of that verification needs to be worth something later.
Some practices have no signal. No tool can prove a human explored the product, that a business owner accepted the feature, that a screen reader user could complete the flow, or that a reviewer understood the change. Two bad things happen as a result: the practice gets dropped from the contract because it cannot be automated, or a tool-shaped proxy gets reported as a pass - branch protection counted as "code review done".
An attestation is the honest third option: a dated, attributed statement that a named human verified something, with the evidence attached. It is weaker than a machine check and stronger than an assumption, and it must never be presented as either.
manual-attestation practices: code review, exploratory testing, UAT, manual accessibility, UX review, observability readiness, groundedness reviewFrom the quality contract, list every practice whose verification type is manual-attestation. Typically: code-review, exploratory-testing, manual-accessibility, uat, ux-review, observability-readiness, groundedness-review.
For each, establish three things before anybody signs anything:
The attestation is the record, never the work. Run the actual practice with its own skill - planning-exploratory-testing, auditing-accessibility, code-review-advanced, verifying-acceptance-criteria - then record the outcome.
Use ./resources/attestation-register.md. Every entry carries:
| Field | Rule |
| --- | --- |
| practice | the contract practice name, not free text |
| scope | build, version, or commit range - never "current" |
| attested_by | a named person, not a team alias |
| date | when the verification happened, not when it was typed up |
| evidence | a link or path to notes, charters, defect lists, recordings |
| outcome | what was found, including "nothing" - an empty finding list is a result |
| limitations | what this verification did not cover |
| expires | the next build, the next release, or a date |
limitations is the field that makes an attestation trustworthy. "Explored checkout on Chrome desktop only; no mobile, no Safari, no guest flow" tells a release manager exactly how much weight the record carries. Without it, every attestation reads as total coverage.
Two mechanisms, and they compose:
A register file - .qa/attestations.md, next to the contract. Best for release-scoped practices: UAT, exploratory sessions, accessibility passes, observability reviews.
A commit trailer - Comprehension-Attested-by: <name> for change-scoped attestation of understanding, read from git log. Best for per-change records, because it travels with the change. Grammar in commit-trailers.instructions.md.
Do not use a PR comment as the record: squash-merge discards it and reviews get deleted.
In the gap matrix, a manual-attestation practice has three honest states:
| State | Meaning | | --- | --- | | ATTESTED | a valid, in-scope, unexpired attestation exists - cite it | | UNATTESTED | the practice is contracted, no record covers this scope | | STALE | a record exists but its scope or expiry has passed |
Never PRESENT, never PASSED. Those words imply a machine verdict this practice cannot produce.
Report alongside: who attested, against what scope, the stated limitations, and - for release decisions - which contracted human practices have no record at all. That last list is usually the most useful sentence in a go/no-go pack.
./resources/attestation-register.md - the register format, worked entries per practice, expiry and staleness rules, and how attestations feed a release packderiving-a-quality-contract - where practices are marked manual-attestation and their exit criteria are setplanning-exploratory-testing - do the exploratory work; this skill records itauditing-accessibility - do the accessibility pass; this skill records itverifying-acceptance-criteria - the evidence a UAT attestation points atcode-review-advanced - the review whose outcome gets attestedassessing-comprehension-debt - uses per-change attestation as one of its inputsassessing-release-readiness - consumes the register as release evidencegoverning-quality-waivers - when a human practice will not happen at all, that is a waiver, not an absent attestationThis skill is complete when:
manual-attestation practice in the contract has a stated exit criterion, an eligible attester role, and a scope unittesting
Tests the customization assets themselves - skills, prompts, custom agents, instructions - the way a product is tested: activation cases that check an asset fires when it should and stays quiet when it should not, output-contract cases, safety cases, collision cases between assets competing for the same trigger, a weighted rubric scored blind, and a baseline-versus-candidate gate before an edit ships. Use when a skill is edited and nobody knows whether behaviour changed, when two skills fight over the same request, when a description is being tuned for discoverability, when a collection has grown past manual spot-checking, or when the request mentions skill evals, prompt regression, or "does this skill actually work".
development
Shapes QA output for the person who has to act on it: result and blocker in the first two lines, one decision per report, findings ordered by what they cost, the long artifact in a file and the decisions in the message, and magnitude stated in units the reader can count. Use when a report is accurate but nobody acts on it, when a finding set is too long to read under time pressure, when the same findings must be retold for a developer, a release manager, and an on-call engineer, or when the request mentions "too long", "make this readable", "just tell me what to do", "so what", or "summarize this for stakeholders". Pairs with unslop-answers, which makes the same report honest.
testing
Verifies that the lines and branches a change actually touched are executed by tests, using LCOV or Cobertura diff coverage instead of whole-repo percentages, and escalates uncovered high-risk changes into a blocking finding. Use when a pull request needs a coverage gate that unrelated tests cannot satisfy, when total coverage looks healthy but the diff is untested, when wiring diff coverage into CI, or when someone claims a change is covered because the suite is green.
development
Cuts AI tells from test code: tests that pass without proving anything, tautological assertions, mock-only tests, hardcoded waits, coverage theater, vague names, swallowed errors, retries used as fixes. Use whenever test code is written, changed, or reviewed, including tests produced as a side effect of a feature task, and when the request mentions "review these tests", "are these tests any good", "this test always passes", "this suite is flaky", or "clean up these tests". Must always apply to test code.