Skip to content

v0.32.0

Choose a tag to compare

@github-actions github-actions released this 03 Aug 22:40
837ed6e

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 in Format-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>.md file, 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.md and evidence/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>.md was 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-AutoBrief used to emit a bullet list of
    agentic-board capabilities; the 7-phase method lived in auto-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
    heading total 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
    loose discovered issues on the board with no parent and no order. Board-Plan.ps1 already
    created epics + native sub-issues for humans; it was unreachable from inside an autonomous run.

    Format-AutoBrief now includes a Self-planning — escalating to an epic section that:

    • tells the run to use /board plan rather than filing loose issues,
    • caps the sub-issues of the created epic by the existing boardSelfDrive.cap (same limit as
      discovered issues, 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 use Board-Plan.ps1 and 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 PowerShell 0 is falsy, so a contract
    setting cap = 0create 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 the cap = 0
    contract. The same fail-open shape this project keeps finding: the safe reading of a missing
    value is not the permissive one.

  • 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, deleted in-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-AutoBrief deletes 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 a discovered issue). 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.