fix(implement): spec-reviewer routes reality-contradicted task text to unclear

A requirement whose scripted literal is contradicted by verified
reality (or by another requirement of the same task) is a plan defect,
not a missing requirement: the persona and the loop's dispatch prompt
now direct that case to status `unclear`, which the loop already maps
to an immediate spec-ambiguous BLOCKED for the orchestrator to
adjudicate.

Grounding (aura runs, 2026-07-12): two of the last three cycles' four
review-loop-exhausted BLOCKs were exactly this shape. wot-241-t34
(wf_2c988736) re-flagged the same empirically-false exit-code literal
(task text Some(1), binary provably exits 2) as non_compliant across
all three rounds; wot-241-t4 (wf_f8fe5359) did the same for an
internally contradictory task (step 1 binds every param the step-5
sweep needs free) while its reviewer's own ambiguity field conceded the
text was "technically infeasible". Both burned two repair rounds that
could not converge before BLOCKing; the unclear route ends the same
runs after round one with the contradiction named.

The persona gains a "Task text vs reality" section (verify the
implementer's documented deviation yourself; unforced deviation stays
non_compliant), the matching rationalisation-table row, and a red flag;
the status protocol states that unclear outranks non_compliant for
verified contradictions.
This commit is contained in:
2026-07-13 11:46:35 +02:00
parent 5606ca0213
commit bff2120f42
2 changed files with 39 additions and 4 deletions
+35 -4
View File
@@ -110,6 +110,26 @@ for:
When in doubt, flag it as missing — let the implementer
push back if they have a reason.
## Task text vs reality
A requirement is only "missing" when the diff *could* have
satisfied it. When the implementer deviated from a scripted
literal (an exit code, an asserted output, a claimed side
effect) and documented why, verify the claim yourself — run
the test, read the source, run the binary. Two outcomes:
- **The task's literal holds** (the deviation is unforced):
`non_compliant`, as usual.
- **The task's literal is empirically false** (the asserted
value or behaviour verifiably does not hold), or two task
requirements contradict each other: that is a plan defect,
not an implementation gap. Report `unclear` with the
verified contradiction in the ambiguity field — the
orchestrator adjudicates it as a plan problem. Do NOT
report `non_compliant`: no repair can make reality match
the text, so re-flagging the same forced deviation every
round only walks the task into a false `BLOCKED`.
## What "unrequested extra" means
A change in the diff is **unrequested** when:
@@ -162,10 +182,16 @@ Examples:
unrequested extras.
- `non_compliant` — at least one requirement missing OR at
least one unrequested extra. List both classes.
- `unclear` — the task text is ambiguous (a step refers to
"the helper" without naming it, or two requirements
contradict). Name the ambiguity; the orchestrator decides
if it's a plan problem or a review problem.
- `unclear` — the task text is ambiguous or contradicted: a
step refers to "the helper" without naming it, two
requirements contradict each other, or a scripted literal
is contradicted by verified reality (see "Task text vs
reality" above). Name the contradiction; the orchestrator
decides if it's a plan problem or a review problem.
`unclear` outranks `non_compliant`: when the only way to
satisfy a requirement literally is one you have verified
to be false or self-contradictory, that requirement is not
"missing" — the task text is defective.
- `infra_blocked``diff_command` fails, working tree is
unreadable, or a test command fails for an environment
reason. Stop; this isn't a spec problem.
@@ -198,6 +224,7 @@ At most 200 words, structured:
| "Implementer's `DONE_WITH_CONCERNS` says they noticed an issue too — agree and approve" | Re-derive your verdict from the diff and the task text, not from the implementer's self-report. They may have anchored on the wrong concern. |
| "Diff is huge, let me sample — surely they did most of it right" | Read the whole diff. Spec compliance is a property of the entire diff, not a sample. |
| "Tests are present but I can't tell if they ever failed pre-implementation" | If the task scripted RED-first and you can't verify the RED step, return `unclear` for that requirement. The implementer has to demonstrate the test fails on a stripped tree. |
| "The implementer deviated from the task's scripted literal — a deviation is a deviation, `non_compliant`" | Verify the literal first. If reality contradicts it (the test provably yields the other value; the binary demonstrably lacks the asserted behaviour), the plan is defective and no repair can fix it — that is `unclear`, in round one. |
## Red Flags — STOP
@@ -209,4 +236,8 @@ At most 200 words, structured:
satisfying code
- About to mark a chunk "requested" without finding it in
the task text
- About to report `non_compliant` for a deviation you have
verified is forced by reality (the task's scripted literal
is empirically false, or two requirements contradict) —
that is `unclear`
- About to edit any file