Use when writing or reviewing the definition of a reporting agent or command (a review, audit, verification, or test-run agent), before its closing contract is finalized.
Scanned 9/1/2026
Install to Claude Code
npx -y skills add AppVerk/av-marketplace --skill verdict-protocol --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Verdict Protocol?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/appverk-verdict-protocol)More formats (shields.io, HTML) on the badges page.
---
name: verdict-protocol
description: Use when writing or reviewing the definition of a reporting agent or command (a review, audit, verification, or test-run agent), before its closing contract is finalized.
---
# Verdict Protocol
## What this is, and when to invoke it
The closing contract of a reporting agent is the last line its consumer parses — and the first thing that silently rots into free text. This skill sets the bar for that contract **at authoring time**: invoke it when writing or reviewing an agent's or command's *definition*, not during an ordinary review run.
Boundary: this skill owns the closing contract (verdict line, predicate, triage axis). The pre-report process — the self-falsification battery and its "Rejected after verification" / "Doctrine-gap candidates" sections — is owned by `finding-falsification` in this plugin; reference those sections, never redefine them.
## The minimum bar (MUST)
1. **Closed vocabulary.** The definition declares an enumerated verdict set (e.g. `APPROVED | NEEDS_FIXES | BLOCKED`); free-text verdicts are invalid — a consumer cannot route prose.
2. **Verdict is computed, not chosen.** Each value declares its deciding predicate over finding categories (e.g. APPROVED ⇔ zero Required findings; BLOCKED — exhaustion — takes priority over NEEDS_FIXES). An agent cannot hand-pick APPROVED while Required findings stand.
3. **Exhaustion semantics.** Bounded-round agents declare what round exhaustion yields (e.g. BLOCKED after N rounds without progress) — distinct from success and from failure; "ran out of budget" must never read as either.
4. **Caveated verdicts.** A pass scoped to what was verifiable ("complete as far as statically verifiable") must route its unverifiable remainder onward explicitly.
5. **Consumer routing.** For every verdict value, the consumer's reaction is defined at authoring time; a verdict nobody routes is dead weight.
6. **Triage vs severity.** Findings carry a **Required / Advised / Optional** axis (does this block?) distinct from severity (how bad is it?). *(Rider — prescribes beyond every current reference: no marketplace agent carries this axis today; adopt when authoring new contracts.)*
7. **Machine-locatable.** The verdict is one line, fixed vocabulary; a verdict without cited findings/evidence is invalid.
## Anti-patterns
- **The prose closer** — "overall this looks mostly fine" — unparseable, unfalsifiable, unroutable.
- **The chosen verdict** — APPROVED handed out while Required findings stand.
- **Exhaustion laundered as an outcome** — budget-out reported as failure (or worse, success).
- **The unrouted value** — a verdict no consumer reacts to.
- **Axis collapse** — inferring "does this block?" from severity alone.
- **Transcribing another contract's enum into your doc** — cite by pointer; a transcribed enumeration is exactly the drift `docs-fact-registry` exists to catch.
## Reference points — cited by pointer, never transcribed
No in-repo agent implements the full closed-verdict-with-predicate contract today; the worked example below is *(Prospective)*. Partial references:
- `plugins/code-review/agents/challenger.md`, **Output Format** section — a closed three-value per-finding disposition vocabulary (see the file for exact tokens): closed (bar item 1) but *per-finding*, not agent-closing. A contrast case, like qa's per-scenario PASS/FAIL/SKIP.
- If the qa plugin is installed: `plugins/qa/commands/loop.md`, Step 5.2 "Loop Summary" template, the `**Result:**` line — a closed four-value final vocabulary including an explicit budget-exhaustion value (see the file for exact tokens) (bar items 1 + 3).
- Boundary: qa's `report-format` skill (if installed) owns the report *file* — structure, QA-XXX IDs, severity table, parser compatibility. This skill owns the agent's *closing contract* only.
## Worked example *(Prospective)*
A verification agent's definition declares:
```markdown
Verdict set: APPROVED | NEEDS_FIXES | BLOCKED
- APPROVED ⇔ zero Required findings (Advised/Optional may remain — list them)
- NEEDS_FIXES ⇔ ≥1 Required finding and fix rounds remain
- BLOCKED ⇔ Required findings stand after 3 rounds without progress
Routing: APPROVED → proceed; NEEDS_FIXES → dispatch fixer, re-verify; BLOCKED → human escalation.
Closing line: `Verdict: <value> — <n> Required / <n> Advised / <n> Optional (evidence: <IDs>)`
```
## Review checklist
Paste into any reporting-contract review:
- [ ] 1. Verdict set enumerated and closed
- [ ] 2. Every value carries a deciding predicate over finding categories
- [ ] 3. Exhaustion outcome declared, distinct from success and failure
- [ ] 4. Caveated passes route their unverified remainder
- [ ] 5. Every value has a defined consumer reaction
- [ ] 6. Required/Advised/Optional triage axis present *(rider: new contracts)*
- [ ] 7. One-line, fixed-vocabulary verdict, evidence-backed
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!