verification-before-completion
Decide the smallest sufficient proof set before closeout for TypeScript/Node backend work. Use whenever the question is whether a change is actually ready, what must be verified before completion, whi
SKILL.md.claude/skills/verification-before-completion/SKILL.md
GitHubVerification Before Completion
Purpose
Use this skill to decide what proof is actually needed before a backend change should be treated as ready.
This skill is a narrow workflow-meta specialist. It does not own design,
implementation, or full test-plan authorship. Its job is to turn a closeout
question into:
- a small set of proof obligations
- the smallest convincing checks for those obligations
- a clear readiness verdict
- an explicit list of what is still unproven
When used from a project agent, let the agent own scope, handoffs, and final decisions. This skill owns proof selection and readiness discipline only.
Expert Standard
Do not spend time restating generic closeout advice.
This skill is not here to repeat normal engineering hygiene. It should create a durable expert delta over a competent baseline answer by being narrower, deeper, and more discriminating about proof:
- name the exact claim that needs proof before asking for checks
- identify the seam that actually owns that claim
- choose the smallest check that can actually falsify that claim
- distinguish fresh direct evidence from partial, stale, or irrelevant signals
- explain why the chosen layer is sufficient and why smaller or broader layers lose
- refuse to let broad reassurance stand in for missing seam-specific proof
- say "not yet verified" when a material claim still lacks evidence
- keep the answer compact enough to drive the next closeout step immediately
If the answer would still look good after replacing the concrete task with "some backend change," it is too generic for this skill.
Read These References When You Need Them
references/proof-selection-workflow.mdUse by default when deciding what actually needs proof before closeout.references/seam-activation-matrix.mdUse when deciding which shared topic seams the current change really activates.references/readiness-claim-bar.mdUse before endorsing a readiness claim or when existing evidence feels thin.references/proof-layer-matrix.mdUse when several plausible checks exist and the hard part is choosing the narrowest honest proof layer.references/stack-specific-proof-anchors.mdUse when the proof method is mostly clear but exact stack semantics could still make the chosen check misleading or insufficient.references/proof-smells.mdUse when the proposed checks sound broad, theatrical, stale, or poorly matched to the changed risk.
Relationship To Shared Research
Start with the local method and references in this skill.
This skill should not own a separate umbrella deep-research prompt.
Load references/proof-selection-workflow.md by default.
Load references/seam-activation-matrix.md before pulling in shared topic
packs.
Load references/readiness-claim-bar.md before calling something ready, or
when the honest answer might be conditional or "not yet verified."
Load references/proof-layer-matrix.md when choosing between unit, service,
route, contract, integration, migration-preflight, targeted runtime, or
workflow-recovery proof.
Load references/stack-specific-proof-anchors.md when proof sufficiency turns
on exact Fastify, schema, Prisma/Postgres, Redis, workflow-state, or Vitest
semantics rather than on method alone.
Load references/proof-smells.md when the first proof set feels too broad,
too indirect, or too stale.
Then load only the shared topic files that match the changed claim:
../_shared-hyperresearch/deep-researches/api-contract.mdUse for request or response schema, validation, serialization, content-type, OpenAPI/publication, or compatibility-sensitive claims.../_shared-hyperresearch/deep-researches/fastify-runtime.mdUse for hooks, decorators, plugin order, reply ownership, startup, shutdown, streaming, or lifecycle-sensitive runtime claims.../_shared-hyperresearch/deep-researches/prisma-postgresql.mdUse for schema changes, migrations, constraints, transactions, query shape, and real database semantics.../_shared-hyperresearch/deep-researches/redis-runtime.mdUse for TTL, Lua/script, guard, reconnect, readiness, coordination, or replay-sensitive Redis claims.../_shared-hyperresearch/deep-researches/runtime-workflow-state-machines.mdUse for legal transitions, waits, timers, cancellation, recovery, and re-entry-sensitive workflow claims.../_shared-hyperresearch/deep-researches/vitest-qa.mdUse when the hard part is choosing the proof layer, harness realism, isolation discipline, or the smallest convincing test shape.
Do not load all topics by default. Start with the changed seam plus only the adjacent seam that would materially change the proof choice.
Scope
- decide what proof is materially required before closeout
- map each changed claim to the smallest honest check
- inventory what is already proven, partially proven, stale, or still missing
- decide whether a readiness claim is supported, conditional, or unsupported
- name the residual risk when full proof is unavailable
Boundaries
Do not:
- turn the task into design review or architecture critique
- write the full implementation or test plan unless the task is explicitly redirected
- default to the broadest test layer "just to be safe"
- treat compile-time green checks as proof of changed runtime, data, or state behavior
- treat stale CI, previous runs, or generic manual notes as fresh closeout evidence
- endorse readiness while a material claim remains unproven
- load every shared topic "for completeness"
Escalate When
Escalate if:
- the underlying design is still unsettled, so proof cannot be chosen honestly
- the change portfolio is large enough to need a dedicated test-plan skill
- the current evidence surface is too thin to produce even a conditional verdict
- the main question is test quality review, design quality review, or root cause analysis rather than closeout proof
Relationship To Neighbor Skills
- Use
technical-design-reviewwhen the main question is whether the design itself is sound, not whether the current proof is sufficient. - Use
typescript-coder-plan-specwhen the main task is execution sequencing rather than closeout verification. - Use
vitest-qa-tester-specwhen the proving surface is large enough to need a dedicated test strategy or test-plan artifact. - Use
vitest-qa-reviewwhen the main question is whether existing tests are any good, rather than what proof is still needed before closeout. - Use
typescript-systematic-debuggingwhen the main question is root-cause isolation rather than readiness proof.
Input Sufficiency
Before answering, identify the minimum known facts:
- what changed
- what is being claimed as safe, complete, or ready
- which seams are actually touched: contract, runtime, data, Redis/state, workflow state, testing
- what fresh evidence already exists
- what the biggest wrong-closeout risk would be if the claim is false
- what execution surfaces are available: focused test file, route inject, real DB/Redis integration, startup/shutdown check, contract diff, migration preflight, manual probe
If those facts are missing, say so explicitly and lower confidence. Do not invent test coverage, infra realism, or command results.
Core Defaults
- Every readiness claim is claim-by-claim, not vibe-based.
- Fresh direct evidence beats broad historical reassurance.
- The smallest honest check is better than the broadest possible suite.
- Wider realism is justified only when lower layers cannot prove the claim.
- Stale, indirect, or neighboring evidence does not close a proof obligation.
- If one material claim is still open, the honest output may be conditional or not-ready.
- Residual risk should be stated explicitly, not hidden inside a positive verdict.
Workflow
- Normalize the closeout claim.
- What changed?
- What exactly is being claimed ready?
- What would regress if that claim is wrong?
- Activate only the touched seams.
- Use
references/seam-activation-matrix.md. - Pull in only the shared topics that change the proof choice.
- Use
- List the proof obligations.
- Name the concrete claims that need evidence: contract integrity, runtime lifecycle correctness, migration safety, Redis/state semantics, workflow-transition correctness, or test-layer sufficiency.
- Inventory current evidence.
- Classify each evidence item as:
fresh direct,partial,stale,indirect, ormissing. - Keep facts separate from interpretations.
- Classify each evidence item as:
- Choose the smallest proof set.
- For each open obligation, choose the smallest check that can genuinely falsify the risky claim.
- Use
references/proof-layer-matrix.mdwhen the honest layer is non-obvious. - Use
references/stack-specific-proof-anchors.mdwhen a tempting proof layer might be invalidated by concrete stack semantics. - Common examples:
- focused typecheck or no new test for a structure-only change with no runtime risk
app.inject()or route-level proof for request validation, serialization, headers, and in-process HTTP behavior- targeted startup, shutdown, or real
listen()proof wheninject()cannot cover the changed runtime behavior - real Postgres integration or migration preflight for constraints, transactions, backfills, and query semantics
- real Redis proof for TTL, Lua, guard, reconnect, or coordination semantics
- persisted transition and recovery checks for workflow-state claims
vitest-qaguidance when the honest proof layer is non-obvious
- Remove proof theater.
- Drop checks that do not change the verdict.
- Drop broader layers when a narrower layer already proves the same claim.
- Decide the readiness verdict.
verified readyconditionally readynot yet verifiedUsereferences/readiness-claim-bar.mdbefore choosing.
- Report what remains unproven.
- Name the exact unsupported claim or missing check.
- If risk is being accepted, say so explicitly instead of implying proof.
Reasoning Obligations
For any non-trivial closeout question, force all of these before endorsing a verdict:
Claim- What exact behavior or guarantee is being treated as ready?
Risk If Wrong- What user-visible, operator-visible, or data-visible failure would escape?
Current Evidence- What is directly observed versus inferred?
Smallest Honest Check- What is the narrowest check that could still falsify the claim?
Why This Layer- Why is a smaller layer insufficient, or why is a broader layer unnecessary?
Residual Gap- What would still remain unproven even if the chosen check passes?
Verdict Discipline- Does the current evidence justify
verified ready, onlyconditionally ready, ornot yet verified?
- Does the current evidence justify
If a claimed point cannot survive those passes, demote it or drop it.
Deliverable Shape
Return closeout work in this order:
Verification VerdictProof ObligationsSmallest Proof SetUnsupported Or Unproven ClaimsResidual Risk / Confidence
For each item in Proof Obligations or Smallest Proof Set, include:
ClaimWhy It MattersEvidence StatusChosen CheckWhy This Is Enough
Quality Bar
Keep a point only if all are true:
- the changed claim is specific
- the chosen check could actually falsify that claim
- the evidence status is honest
- the proof layer matches the real seam being changed
- the verdict does not quietly rely on unrun checks or stale results
- the residual unproven area is explicit
- the reasoning is narrower and more discriminating than generic closeout advice would be
Reject these weak patterns:
- "run the suite"
- "CI was green earlier"
- "lint and typecheck passed, so we are done"
- "manual smoke looked fine"
- "add an integration test" without naming the claim it proves
- "probably ready" with no explicit unsupported claim list