Somewhere in your backlog is a ticket that says "tighten up the release checks." A colleague can execute that — they will ask what you meant. An agent dispatched at two in the morning into a repo it has never seen will not ask, and will close the ticket with a confident report you should not take at face value. What form must a unit of work take for one stranger to execute it and a second stranger to check it — with nobody relying on anybody's account of what happened?

Our answer is the brief: one markdown file, one scope, one definition of done, written as a contract. Our tree currently carries 366 of them. The whole format falls out of one design rule, and it is the sentence to keep: every line of a brief is either executable by a stranger or auditable by a reviewer — nothing rests on the author's word. Scope is exact file paths. Risk is four recorded answers. Done is a table of commands with expected output. The rest is that rule unpacked, through one real brief — a fail-closed lint that stops the toolkit's own shipped prose from making claims the house has ruled out, such as calling its output an assurance opinion. Call it the claims-lint brief.

written for a stranger who cannot ask

The self-containment rule is blunt: a single agent must be able to execute a brief without reading the rest of the plan. Everything the implementer needs is in the file: the exact paths they will touch, and the three-to-five project facts required to execute, as key-value pairs — prose drifts and cannot be parsed. Knowledge from another brief is a typed dependency, not a paragraph.

The frontmatter of the claims-lint brief, abridged (its stream carries an internal name; the label here is generic):

brief: claims-lint/lint
          title: Prohibited-claims lint — fail-closed scan of shipped prose
          wave: 1
          depends: ["claims-lint/manifest"]
          effort: M
          gate: model
          risk: {regulatory: no, customer: no, irreversible: no, sensitive-data: no}
          schema: brief-v1
          authored: 2026-08-06 by the authoring session
          sources: ["scoping doc §3.2",
                    "freshness-checked 2026-08-06 @ 822d896 (no claims lint exists)"]

Every field earns its place. sources is provenance — an empty list is "a gap a reviewer bounces, not a shortcut": nobody can later tell why the work exists or whether a newer finding invalidated it. The freshness check is dated and pinned to a commit: "this doesn't already exist" is a claim, and claims get timestamps. Even the standing ground rules are about strangers: the implementer stops at implemented, never advancing their own work to verified, and an implementer who finds the brief contradicting repo state reports that and stops — a stranger who guesses is executing a contract nobody reviewed.

the gate is a conclusion, not an opinion

The frontmatter contains no chosen review gate. It contains four risk answers — regulatory, customer-facing, irreversible, sensitive-data — and the gate is derived from them. All four no: a model may review. Any single yes: the gate is human, and closing it later requires a sign-off naming a person; a model's approval does not count, however strong the model.

The point of recording the answers instead of the verdict is auditability. A reviewer confronted with gate: model on a risky-looking brief does not argue about the gate — they audit the four answers, which are concrete claims about the work. A wrong answer is a findable defect; a wrong opinion is a negotiation. The design rule again: the gate line is not a judgment to trust but a computation anyone can re-run, from inputs a reviewer can attack.

done is a table, and the table can fail

The heart of a brief is its Verify table: literal commands with expected output, runnable from the repo root by someone who did not do the work. The template states the standard: a row with no literal command and no expected exit or output "is a hope, not a check." The claims-lint brief carries 14; here is the row worth staring at:

# Command Expect
3 POSITIVE CONTROL: /tmp/cg -root . -list-claims > /tmp/claims.txt; read -r c < /tmp/claims.txt; printf '\nThis release is %s.\n' "$c" >> README.md; /tmp/cg -root . > /tmp/cg3.out; rc=$?; git checkout -- README.md; test "$rc" -eq 1 && grep -q 'CLAIM README.md:' /tmp/cg3.out exit 0 — the lint exited 1 and named README.md with the claim, and the mutation was reverted

The row plants a prohibited claim in the README, demands the lint go red and name the file, then reverts the damage — one command whose own exit code is the verdict. The house rule behind it: a brief that adds a check must include a mutation-test row, because a green check you have never watched fail is indistinguishable from a check wired to nothing. In one measured sweep of our instrument failures, six of eight would have been caught in minutes by a row of this kind.

The rules also draw a line the table cannot cross on its own. For prose deliverables, executable rows are presence gates — a section exists, a token appears — and the brief must say so honestly, because a grep passes a confidently wrong document exactly as it passes a true one. The measurement that forced this into a rule: a setup guide shipped with eight Verify rows, every one a presence count; all eight passed, and the guide was factually wrong in four places, one load-bearing. So a deliverable that makes checkable factual claims must carry at least one dereferencing row — fetch the link and inspect what it serves, run the documented command and compare its real output — a row capable of failing on a wrong-but-well-formed document. Quality still belongs to the human review gate; the table's job is to keep that gate from standing alone.

dependencies are edges, not sentences

depends and unblocks take typed IDs only — claims-lint/manifest, never "after the manifest brief" — because a typed ID survives a rename and a script can follow the graph. The scheduler computes what is dispatchable purely from those edges, which has a corollary: an ordering constraint that lives only in prose — "no X before Y" in a README — is invisible to it, and the worker pool dispatches straight past it. That is the most dangerous blocker class — every consumer of the queue is blind to it — so a lint flags gate-shaped prose carrying no matching edge. Mid-flight changes route by the same spine: does the tweak change the Verify table? No — just do it; a brief is a contract, not a keystroke script. Yes — amend the brief in the same commit and demote it so it re-gates, because changing the table changes what done means.

the discipline is a fossil record

Behind the template sits a rules file: each rule stated with the failure that forced it, numbered append-only because rules are cited by number elsewhere. The deepest stratum is row-runner discipline: command shapes that make a Verify row report a verdict it never measured. A grep alternation without -E treats the pipe as a literal character; one brief's table returned 1,1,1,1,1,1,1 against thresholds of 3,3,1,3,2,3,3 — every row green, every row matching only itself. go run flattens every non-zero exit into 1, so a row asserting "exit 2" passes on a tree that does not even compile. A comparison based on a moving branch ref returned different verdicts on consecutive runs with nothing under test changed. Each shape shares one property: the harness silently substitutes its own answer for the one under test, and the row goes green either way. None is discoverable from a passing run — which is why they are lint rules, not reviewer vigilance.

one brief, start to finish

Thread the claims-lint brief through its life. Authored 2026-08-06 with a pinned freshness check. Implemented in an isolated worktree; on 2026-08-13 the implementer ran all 14 rows and appended a witness table — command, exit, observed output, date, runner — then a section titled "what a clean run here does NOT establish": the matcher is literal, so a reworded claim slips it. The board row stayed at implemented: the implementer's own run does not verify. On 2026-08-20 a non-implementing identity re-ran the whole table against merged main. Rows 1 through 12 passed as written. Rows 13 and 14 could not run — the tree had evolved out from under a tool they invoked — and the verifier recorded them as could-not-check with a re-baseline filed, not as passes, because an instrument that could not look does not get to answer. Both runs sit in the file, dated and attributed. That is the contract doing its job: not one flawless green, but a record two strangers built independently and a third could re-derive.

what the contract does not prove

State the claim at its honest strength. A Verify table is a check a stranger can run — it is not proof the work is correct. A behavioral row proves the behaviors someone thought to demand, not the ones nobody imagined; a presence row proves less still. The risk answers are self-reported, so a wrong no mis-derives the gate; the mitigation is that they are claims a reviewer audits, not that they are reliably right. Completeness is an authoring judgment throughout — the tooling corroborates what was written and says on every run that an omitted entry is invisible to it. The format narrows the gap between claimed and checkable. It does not close the gap between checkable and true; the review gate, the independent re-run, and the human on the merge button live in that gap on purpose.

the install

None of this needs our tooling. A brief is a markdown file; the Verify table is shell commands; the gate derivation is an if-statement over four recorded answers. Write your next agent-bound task as one file a stranger could execute: exact paths, the facts required, provenance for why it exists. Record the risk answers and derive the gate. Then write done as commands with expected output — including one row that must go red when the work is broken, so you have seen the check fail before you believe it passing. That is the whole discipline: every line either executable by a stranger or auditable by a reviewer, and nothing resting on the author's word.

What happens to a brief after implemented — the evidence log, the compiled board, the desks passing work between identities — is the wider loop, and we walked it in "Introduction to Assay."

Explainer video

No video for this article yet. An explainer script ships in the bundle (SCRIPT.md); a video link can be back-filled into the metadata later.