attesting-manual-verification
Skill118 starsChanged 2 months agoMITView on GitHub
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.
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 4 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 10
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 …
- Very specific: line 51
Use ./resources/attestation-register.md.
- Distinctive: line 74
Do not use a PR comment as the record: squash-merge discards it and reviews get deleted.
- Distinctive: line 86
Never PRESENT, never PASSED.
- Very specific: line 120
every manual-attestation practice in the contract has a stated exit criterion, an eligible attester role, and a scope unit
- Distinctive: line 122
no attestation has been derived from tooling or from the existence of a process
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Attesting Manual Verification
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.
When to Use
- a contract contains
manual-attestationpractices: code review, exploratory testing, UAT, manual accessibility, UX review, observability readiness, groundedness review - a gap matrix shows a human practice and the honest state is neither PRESENT nor MISSING
- release sign-off evidence lives in chat threads and closed tickets
- an audit or handover asks who verified what, against which build
- a team wants credit for real manual work that no tool can see
Operating Principles
- An attestation names a person, not a process. "Reviewed by @maria on 2026-08-19" is an attestation. "We do code review" is a policy.
- It is scoped to a build or a change range. An attestation with no scope drifts forward forever and quietly covers work nobody looked at.
- Evidence, or it is an opinion. Session notes, a charter, a recording, a defect list, a screenshot set, a sign-off message. A link is fine; nothing is not.
- Never derive an attestation from tooling. Branch protection requiring one approval is evidence of a process, not of a specific change being understood. Deriving one is the failure mode this practice exists to prevent.
- Absence is a state, not a failure. "Unattested" is reportable and honest. It is not the same as "not done", and it is not a blocker unless the contract says so.
- Findings from an attested practice cap below blocking. Unattested high-risk work is worth a nudge, not a red build - a gate that blocks on an unprovable property gets switched off, and then nothing is recorded at all.
- Attest before merge, not after release. An attestation collected at sign-off time is a memory exercise.
- An expired attestation is unattested. A UAT sign-off from three releases ago does not cover this build.
Workflow
Phase 1: Identify what needs attesting
From 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:
- What counts as done - the exit criterion from the contract, in words a verifier can act on
- Who can attest - a role, then a name. A tester attests exploratory testing; a business owner attests UAT; the developer who wrote the change cannot attest their own review
- What scope one attestation covers - a release, a feature, a change range, a specific flow
Phase 2: Do the work, then record it
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.
Phase 3: Record it where it survives
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.
Phase 4: Report the state
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.
Common Failure Modes
- Deriving attestation from tooling. Branch protection reported as code review done; a merged PR reported as reviewed. The most common and most misleading error.
- Team-alias attestation. "@qa-team verified" means nobody did.
- Unscoped records. An attestation with no build or range silently covers everything that came after.
- No limitations field. Turns a partial check into an implied full one.
- Attesting at sign-off. Reconstructing a week later produces a record of what people remember, not what happened.
- Self-attestation on review. The author cannot attest their own change was reviewed.
- Blocking on unattested work. Makes the practice a bureaucratic obstacle, and the register empties out within a month.
- A register nobody reads. Attestations need a consumer - the release pack or the gap matrix - or they become filing for its own sake.
Resource Map
./resources/attestation-register.md- the register format, worked entries per practice, expiry and staleness rules, and how attestations feed a release pack
Related Skills
deriving-a-quality-contract- where practices are markedmanual-attestationand 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 attestation
Definition of Done
This skill is complete when:
- every
manual-attestationpractice in the contract has a stated exit criterion, an eligible attester role, and a scope unit - each record names a person, a scope, a date, evidence, an outcome, limitations, and an expiry
- no attestation has been derived from tooling or from the existence of a process
- the gap matrix reports ATTESTED / UNATTESTED / STALE, never PRESENT or PASSED
- unattested contracted practices are listed explicitly for the release decision
- findings from unattested work are capped below blocking, and that ceiling is stated
In this repository51 other files it gives its agents.
- analyzing-quality-metricsSkill
- analyzing-regression-scopeSkill
- api-playwright-test-developerSkill
- assessing-comprehension-debtSkill
- assessing-release-readinessSkill
- auditing-accessibilitySkill
- code-review-advancedSkill
- code-reviewSkill
- communicating-quality-findingsSkill
- creating-custom-agentsSkill
- creating-hooksSkill
- creating-instructionsSkill
- creating-orchestration-packsSkill
- creating-pluginsSkill
- creating-promptsSkill
- creating-skillsSkill
- deriving-a-quality-contractSkill
- designing-functional-testsSkill
- designing-test-dataSkill
- documenting-test-suitesSkill
- generating-quality-gate-workflowsSkill
- governing-quality-waiversSkill
- handling-sensitive-test-dataSkill
- migrating-tests-to-playwrightSkill
- mocking-network-and-timeSkill
- planning-exploratory-testingSkill
- prd-generatorSkill
- recording-change-intentSkill
- reporting-bugsSkill
- requirements-test-coverage-mapperSkill
- reviewing-ai-output-groundednessSkill
- running-visual-regression-testsSkill
- scoping-change-relevanceSkill
- static-code-analysis-typescriptSkill
- tech-debt-analysisSkill
- test-driven-development-quickSkill
- test-driven-developmentSkill
- testing-agent-skillsSkill
- testing-api-contractsSkill
- testing-application-securitySkill
- testing-llm-featuresSkill
- testing-llm-guardrailsSkill
- testing-performance-and-loadSkill
- tracing-requirements-to-codeSkill
- tracking-quality-trendsSkill
- unslop-answersSkill
- unslop-testsSkill
- verifying-acceptance-criteriaSkill
- verifying-change-coverageSkill
- writing-unit-tests-quickSkill
- writing-unit-testsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

