# Craft Verdict

> The committed verdict. Severity, one row per finding, and how the loop ends.

- Skill: `attac-t/craft-verdict` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add attac-t/craft-verdict`
- Raw SKILL.md: https://api.skillmd.com/api/skills/attac-t/craft-verdict/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: attac-t (https://skillmd.com/u/attac-t)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/attac-t/craft-verdict

---


# Skill: Craft Verdict

> "What can be said in one word must not take three."

## Severity

| Sev | Means | Blocks |
|-----|-------|--------|
| `C` Critical | Correctness, security, architecture violation | **yes** |
| `W` Warning | Debt, maintainability | no — residual risk |
| `N` Nitpick | Style, preference | no |

A failing oracle blocks regardless. Two oracles disagreeing is a **stop** — escalate, don't pick one.

## A Finding Is A Row

```markdown
| Sev | Where | Issue | Change | Principle |
|-----|-------|-------|--------|-----------|
| C | craft-spec:30 | ":30 forbids self-run gates, :34 shows how | scope it to solo walks | Law 1 |
```

`Where` is `file:line`. Everything else is one clause.

**Risk is not a column.** Severity carries it — a Critical *is* "this breaks." Add one only when
severity fails to convey it: *"passes single-threaded, fails under load."*

**Principle is not optional.** It is the only thing separating a verdict from taste.

## Budget

| Section | Limit |
|---------|-------|
| Findings | one row each |
| What's Good | 3 bullets — only what a refactor would *lose* |
| Promote | one line each |
| Anything else | doesn't exist |

Over ~40 lines is itself a finding. **Candidate oracle:** `wc -l` against a threshold.

## Read The History First

Prior verdicts are input, not archive. Before forming a finding, read `verdicts/`:

- Raised **3 times** → `Promote` candidate, not a fourth finding.
- Approved over **3 times** → no longer residual. Raise the accumulation, not the instance.
- Already settled → don't re-raise unless it worsened.

Slop is invisible in one diff and obvious across forty. A judge that can't see forty can't see slop.

## What The Convener Runs

That read answers recurrence. It cannot say which round you are on, and no judge can ask — the
toolset is `Read`, `Glob`, `Grep`. So everything mechanical runs here, in the parent session, before
a judge is spawned. The gates, and the chain:

```sh
# which round this review is on
sh "${CLAUDE_PLUGIN_ROOT}/bin/verdicts.sh" round <dir> <review>

# the record before it — exit 1 when nothing stamps one
sh "${CLAUDE_PLUGIN_ROOT}/bin/verdicts.sh" prior <dir> <round> <review>
```

**That `bin/` is Panel's, never the project you are reviewing.** Installed, your working directory
is the user's repository, and a bare `bin/verdicts.sh` finds their script or none. Unset, the
variable leaves `/bin/verdicts.sh` and exit 127 — loud, which is the point.

Hand over the round, and that record in full. On round one, word that this review has stamped none.
**A path is not a handoff:** a judge sent to go and look has been told its history.

Hand over each gate too: its name, its exit code, and what it printed. **A gate nobody ran is not a
gate that passed.** Name the ones you skipped, or the judge records that box unticked — and it
should.

`bin/brief.sh` does all this for a judge on another host. It refuses to print a brief when the chain
cannot answer. **Nothing refuses you here.** Forget it and the judge refuses instead, which is the
whole of the enforcement. **Refuse when the gap makes a verdict wrong; say so and carry on when it
only makes one smaller.**

## Deeper

| | |
|---|---|
| [artifact](artifact.md) | the files a review leaves, and the verdict template |
| [ending](ending.md) | SPLIT, the bar and the ratchet, and DEADLOCK's two triggers |

## The Anti-Patterns

| Don't | Do |
|-------|----|
| Verdict in chat | Verdict in git |
| Everything Critical | Use the bar |
| New nitpicks in round three | Ratchet |
| Approve without recording risks | Record them |
| "Recording what held…", "That is the point:", "Worth noting" | Delete. Meta-narration. |
| Restate the table in prose below it | The table said it |

