Ask the tree, not the author
What it produces
At most ten questions per round, returned to the session, each carrying the sentence
it attacks, the command that tested it, what the command printed, and its verdict.
The author folds the round into the specification's ## Grill section, so the
verdicts land in the document they attack; no file is written beside it.
Why it is not the section inside the spec
ai-spec requires the author to challenge their own recommendation once, and that
section is worth keeping — but the questioner and the answerer are the same reader,
and a reader can only reason about what they already wrote. Measured on this repository: four of twenty
specs carry that section, and not one of the four contains a command or a file
reference. Three claims in one of them were false, and executing them is what found
it.
Steps
- Read only the specification and the tree. Not the plan, not the pull request, not
the conversation that produced it — a challenger who reads the author's reasoning
inherits it.
- Choose what to attack: the sentences whose truth changes a decision — a count, a
path, a behaviour, a claim about another file, a "no code reads this". Do not sweep
every sentence: an exhaustive pass spends the round on sentences no decision turns on,
so the selection is the work.
- Run the command before asking the question. The sentence gets executed, not
re-read: a count gets counted, a path gets opened, a behaviour gets run. Paste
what came back, including when it agrees.
- Return at most ten findings, worst first, one question at a time.
WRONG when the
tree says otherwise, UNPROVEN when nothing in the tree can decide it and say
which — those are different problems for the author.
- The author folds each finding into
## Grill and revises the attacked sentences
in place. A round that found nothing checkable to attack returns that as the
answer nothing checkable failed, and the section carries it.
The loop is bounded
At most two rounds against the same spec digest — the canonical bytes ai-eng spec show prints. A revision changes the digest and reopens the count; the second round
against an unchanged digest is the last. At the ceiling, write the outstanding
findings worst first and hand the page to the person. The two-identical-greens rule is
the orchestrator's instrument, not yours: the skill layer's bound is this one, and an
automated cycle ends only on two digest-equal green runs when such a cycle exists.
The box
40 minutes of wall time, 120 tool calls — the numbers contract.py owns. The verdict
returns in your result; you write no files. When the box closes with work left, return
what you have and mark it TIMEBOXED: a partial verdict is a verdict, silence is not.
What this is not
It is not an approval and not a rejection. It never edits the specification: an
accuser who rewrites the charge is not one. And it is not a second opinion — a
finding either carries a command somebody else can run, or it does not exist.
- "Every sentence checked out, so the spec is true" — a challenge reports what it could not test too; only what it managed to check reads as a clean bill of health.
Done when
The ## Grill of the specification it attacked carries the round: its ran:
declaration, every question beside the command, the output and the verdict, and the
attacked sentences revised in place rather than answered beside.
1---2name: ai-challenge3description: Grills a written specification from outside it: at most ten questions per round, one at a time, each anchored to the sentence it attacks and decided by executing the commands behind it. Trigger for "challenge this spec", "attack this decision", "is this spec true", "grill this before I approve it". Not for judging a diff — use /ai-review, which reads a change against a spec and cannot also be its accuser. Not for finding a cause in code — use /ai-debug. It never approves, revises or rewrites: it returns findings that carry a command, the author folds them into the specification, and a person decides what they mean.4license: Apache-2.05---67# Ask the tree, not the author89## What it produces1011At most ten questions per round, returned to the session, each carrying the sentence12it attacks, the command that tested it, what the command printed, and its verdict.13The author folds the round into the specification's `## Grill` section, so the14verdicts land in the document they attack; no file is written beside it.1516## Why it is not the section inside the spec1718`ai-spec` requires the author to challenge their own recommendation once, and that19section is worth keeping — but the questioner and the answerer are the same reader,20and a reader can only reason about what they already wrote. Measured on this repository: four of twenty21specs carry that section, and not one of the four contains a command or a file22reference. Three claims in one of them were false, and executing them is what found23it.2425## Steps26271. Read only the specification and the tree. Not the plan, not the pull request, not28 the conversation that produced it — a challenger who reads the author's reasoning29 inherits it.302. Choose what to attack: the sentences whose truth changes a decision — a count, a31 path, a behaviour, a claim about another file, a "no code reads this". Do not sweep32 every sentence: an exhaustive pass spends the round on sentences no decision turns on,33 so the selection is the work.343. Run the command before asking the question. The sentence gets executed, not35 re-read: a count gets counted, a path gets opened, a behaviour gets run. Paste36 what came back, including when it agrees.374. Return at most ten findings, worst first, one question at a time. `WRONG` when the38 tree says otherwise, `UNPROVEN` when nothing in the tree can decide it and say39 which — those are different problems for the author.405. The author folds each finding into `## Grill` and revises the attacked sentences41 in place. A round that found nothing checkable to attack returns that as the42 answer `nothing checkable failed`, and the section carries it.4344## The loop is bounded4546At most two rounds against the same spec digest — the canonical bytes `ai-eng spec47show` prints. A revision changes the digest and reopens the count; the second round48against an unchanged digest is the last. At the ceiling, write the outstanding49findings worst first and hand the page to the person. The two-identical-greens rule is50the orchestrator's instrument, not yours: the skill layer's bound is this one, and an51automated cycle ends only on two digest-equal green runs when such a cycle exists.5253## The box545540 minutes of wall time, 120 tool calls — the numbers `contract.py` owns. The verdict56returns in your result; you write no files. When the box closes with work left, return57what you have and mark it `TIMEBOXED`: a partial verdict is a verdict, silence is not.5859## What this is not6061It is not an approval and not a rejection. It never edits the specification: an62accuser who rewrites the charge is not one. And it is not a second opinion — a63finding either carries a command somebody else can run, or it does not exist.6465- "Every sentence checked out, so the spec is true" — a challenge reports what it could not test too; only what it managed to check reads as a clean bill of health.6667## Done when6869The `## Grill` of the specification it attacked carries the round: its `ran:`70declaration, every question beside the command, the output and the verdict, and the71attacked sentences revised in place rather than answered beside.