Skip to content
Back to skills

Verdict Protocol

ASecurity

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.

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 1, 2026
developmentgoreactcode-review

Security analysis

A100/100

Scanned September 1, 2026

npx -y skills add AppVerk/av-marketplace --skill verdict-protocol --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verdict Protocol?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verdict Protocol
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/appverk-verdict-protocol/badge)](https://www.skillsdirectory.com/skills/appverk-verdict-protocol)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.