v0.32.0
Expert mode carries its method. Until now the launched session received a capability list —
what agentic-board can do — while the seven-phase loop and the research-before-deciding protocol
lived in a reference document it was never handed. This release folds the method into the brief
itself, makes the protocol the response to an error rather than a footnote, lets a run escalate to
an epic when the work outgrows its issue, and adds the first check that can tell whether a run
actually recorded its evidence instead of merely saying so. Plan #526, tasks #527 · #528 · #531 ·
#532.
Measured while shipping it, and worth stating plainly: all four autonomous runs in this plan
produced work that CI approved and external review rejected. Three silently deleted an instruction
while rewriting a sentence inFormat-AutoBrief; one added a component wired to nothing. All four
reported their work done while owing evidence they had never recorded. The cause is structural —
that function's text is not documentation about the run, it is the whole of what the run is
told, so editing prose there is editing behaviour and no syntax check can see it. Autonomous work
in this repo is not mergeable without external review; a green gate measures syntax, not judgement.
Added
-
Expert-RunVerify.ps1— a completion check that proves a run used the tool instead of
asserting it did (#532, part of #526). A run is considered COMPLETE only when all three
evidence artifacts exist and carry the[abios-evidence]marker: the versioned
evidence/<issue>.mdfile, the PR body block, and an issue comment. A run that skipped any
of them is reported INCOMPLETE, and the check names which artifact is missing — an
actionable gap, not a bare verdict.The check fails closed: null, empty, or whitespace content is treated as missing, never as
present. A PR body of"Closes #532"(the exact body the first autonomous runs left, per
evidence/527.mdandevidence/528.md) has no marker and is therefore missing. Ordinary PR
chatter in the comment list does not satisfy the comment requirement.Verified by 16 Pester tests. Each guard was confirmed by reintroducing its exact defect and
watching the matching tests go red, then restoring and returning to 16/16:Defect reintroduced Tests that went red Evidence-file check removed 4 — "names the evidence file", "null is missing", "whitespace is missing", "lists all three" PR-body check removed 3 — "names the PR body block", "non-empty body without marker is missing", "lists all three" Issue-comment check removed 4 — "names the issue comment", "chatter is not evidence", "null-propagated array is no comments", "lists all three" — restored — 16 passed, 0 failed The check is wired, and the wiring is the point.
/board expert verify <issue> <pr>is a verb
on the command surface, and phase 7 of the autonomous brief now requires the run to execute it and
quote its verdict in the final report. It is the one claim in that report the run does not get
to make about itself.Caught by external review before merging — two P1 findings, and the first is the founding defect
again. The first cut wired the check to nothing: it was referenced only by its own file and its
own test, so a run could still report "evidence recorded" with no mechanical check ever running.
The gap #532 exists to close was left open by the change closing it — the same shape the 0.31.0
notes record for the identity resolver. Fixed by the command verb and the phase-7 instruction
above, both asserted on the rendered brief.The second: the evidence file was resolved by walking three directories above
$PSScriptRoot.
That holds only in this checkout — installed, the script lives in the plugin cache, so
evidence/<issue>.mdwas looked up inside the cache and never found. A check that always answers
INCOMPLETE is as useless as one that always answers COMPLETE. The root now comes from
git rev-parse --show-toplevel, falling back to the working directory, with tests forbidding the
script-relative walk.Proven on real runs, not only on fixtures. Against #527 / PR #553, whose three artifacts were
written by hand:COMPLETE, exit 0. Against #531 / PR #558, where the autonomous run wrote
nothing:INCOMPLETE, exit 1, naming all three missing artifacts. Three consecutive runs in this
plan reported their work done having recorded no evidence at all; this is the check that makes
that state visible instead of invisible.
Changed
-
The autonomous brief now carries the seven-phase loop and the decision protocol, not a
capability list (#527, part of #526).Format-AutoBriefused to emit a bullet list of
agentic-board capabilities; the 7-phase method lived inauto-loop.md, a file the launched
session was never handed. The session had no phases, no sequence, and no instruction to
research before deciding — only "an in-scope problem: fix it in the loop and continue" as its
sole heuristic.The brief now includes the full phase sequence (Ingest → Become the expert → Execute →
Verify + evidence → Self-heal → Loop until done → Report) and an explicit decision protocol:
when you hit an error, an unexpected state, or a fork in the path, research before deciding —
do NOT act first. Steps in order: Research (check prior-art, register via/knowledge),
Register (log findings — read-and-forget is not research), Decide (then choose the path).
The capability map is retained as a lookup table inside the same section, subordinate to the
phases rather than their replacement.Verified by five tests that assert on the rendered brief text, not on the source documents: the
seven numbered phases are present, "research before deciding" appears explicitly, the
Research-Register-Decide ordering holds inside the protocol section, "read-and-forget" is called
out, and the no-improvise guard survives. Each was confirmed by reintroducing the defect and
watching the matching test go red.Caught by external review before merging, and worth recording. The rewrite replaced the old
headingtotal self-use of agentic-board (do NOT improvise your own tooling)and never restated
it. Since this function composes the only text the launched session ever receives, deleting that
line deleted the instruction — a capability map lists options, it does not forbid inventing one.
The plan's own founding principle, dropped by the change meant to strengthen it. The guard is back
in the section heading and is now asserted.Review also found the ordering test measuring the first occurrence of Research / Register /
Decide across the whole brief. "Research" already appears in phase 2, so the test could stay green
with the protocol steps scrambled — a test that reported a guarantee it did not hold. It is now
scoped to the decision-protocol section, and the phase test matches the numbered markers rather
than bare words ("verify" and "report" also occur in the capability map, so the loose match
survived deleting the phases). -
Autonomous brief now instructs the run to escalate to an epic + sub-issues when the work
outgrows its issue (#531, part of #526). A run that discovered six tasks had one move: drop six
loosediscoveredissues on the board with no parent and no order.Board-Plan.ps1already
created epics + native sub-issues for humans; it was unreachable from inside an autonomous run.Format-AutoBriefnow includes a Self-planning — escalating to an epic section that:- tells the run to use
/board planrather than filing loose issues, - caps the sub-issues of the created epic by the existing
boardSelfDrive.cap(same limit as
discoveredissues, so self-planning stays bounded), and - requires linking the new epic back to the originating issue for traceability.
Verified by six tests that assert on the rendered brief text, each confirmed by reintroducing its
defect and watching the matching test go red.Caught by external review before merging — two defects, both known shapes. The first cut told
the run to useBoard-Plan.ps1and pinned that with a test asserting the script name. The brief
travels to runs working in any repository, where a plugin script name resolves to nothing — the
defect #480 and #494 are already open on, reintroduced and then locked in by its own test. It now
names/board plan, and the test asserts the command and forbids the script name.The cap was read as
if ($Contract.boardSelfDrive.cap). In PowerShell0is falsy, so a contract
settingcap = 0— create nothing — was read as absent and the run was told it could create
ten. Presence is now tested, not truthiness, with a test constructing exactly thecap = 0
contract. The same fail-open shape this project keeps finding: the safe reading of a missing
value is not the permissive one. - tells the run to use
-
Phase 5 self-heal now explicitly invokes the decision protocol, replacing fix-it-and-continue
(#528, part of #526). After #527 added the decision protocol to the brief, Phase 5 still said
"fix it (after researching first)" — a parenthetical that reads as act-first with a research note,
not as research-first with an act-later decision. Phase 5 now reads: "when you hit an error, a
fork, or an unexpected state — apply the decision protocol (research → register → decide); do
NOT act first." The protocol section below it (Research → Register → Decide) is now the named
authority that self-heal defers to, rather than a separate section that contradicts the phase's
framing. Verified by five tests scoped to Phase 5 text, each confirmed by reintroducing its defect
and watching the matching test go red.Caught by external review before merging — the same defect two PRs running. The first cut
reframed the phase around the protocol and, in doing so, deletedin-scope problem -> fix it. A
phase named Self-heal that never says to heal: the protocol ends at "decide", so a run hitting an
in-scope bug was left holding a decision with no instruction to act on it. #527 lost the
no-improvise guard the same way, in the same function, one PR earlier. Rewriting a sentence in
Format-AutoBriefdeletes behaviour, because that text is not documentation about the run — it
is the whole of what the run is told. Phase 5 now orders both: protocol first, then act on what was
decided (in-scope → fix and continue; out-of-scope → file adiscoveredissue). Two tests hold the
pair: one that the fix instruction exists, one that the protocol still precedes it, so restoring
the action cannot quietly restore act-first ordering.