v0.35.0
The trust release: what a run says now has to be what happened. Two days of dogfooding — the
expert fleet clearing its own board — converged on one theme: closing every gap between what the
tool reports and what it did. Deliverable claims now pass a verification gate (#479), a braked run
proves post-run that it never touched main (#440), role selection stops guessing from one keyword
(#474), triage can no longer write to the wrong issue on multi-repo boards (#506), the 85
field-measured silent failures get real messages (#485), and every flow can close with the same
four-block summary a non-programmer reads at a glance (#492).
Fixed
-
/expert autotwo remaining gaps from #440: no self-inspection and two launch-time footguns.
After PR #468 armed the irreversible brake in the launch briefing, three problems were still
open:-
No post-run compliance report (problem 2). When the run ended — cleanly, in violation, or
over budget — nothing checked whether the brake had held and nothing told the human. The brief
now embeds the default-branch SHA recorded at launch and instructs the session to compare the
current SHA against it before recording Fleet-Findings.Assert-BrakeCompliance(pure,
testable) decides compliant / violated;Format-ComplianceReportwrites the verdict as an
[abios-evidence]comment that surfaces to the human immediately. -
Token scope footgun (problem 3a).
Expert-Auto.ps1unconditionally overwrote
GH_TOKENwith the registry PAT even when the ambientghlogin was better-scoped. If the
PAT lackedprojectscope while the ambient session had it, every board operation inside the
launched run failed withINSUFFICIENT_SCOPES. Now:Test-GhScope(pure, injectable
$StatusText) checks the ambient login first; the registry PAT is used only as a fallback
when the ambient login lacksprojectscope; if neither has it, a warning with a recovery
command (gh auth refresh -s project) is emitted before launch. -
Stale HEAD footgun (problem 3b). Before launching,
git fetch originruns explicitly
and the local default-branch SHA is compared to the remote. If they differ, a targeted
warning tells the human their local view is stale (the worktree is still cut from
origin/<default>— the base is safe; only the local clone is behind).
24 new test cases covering the three new pure functions and the updated
Format-AutoBrief
signature. -
Fixed
- Board-Triage now works correctly on multi-repo boards — cross-repo items visible, number collisions refused (#506).
Two silent defects on boards that hold issues from several repositories: (1)-Pendingsorted and
displayed items by bare#numberwith no repo context, making cross-repo items indistinguishable
and colliding numbers invisible; (2) a bare-Issue <n>matched against the first item with that
number — which was always the linked repo's — so triage writes landed on the wrong issue with a
success message naming a completely different title. Three new pure functions fix this:Resolve-IssueRef
parses-Issueas a bare number OR a qualifiedowner/repo#n;Find-TriageItemsmatches by
repo+number when qualified, or returns ALL same-number candidates when bare;Format-ItemRef
renders the canonicalowner/repo#numberreference. The-Pendingdisplay now groups items by
repo and shows the full reference for every item. When a bare-Issue <n>would write to more
than one board item, the script refuses and lists the candidates — silent writes to the wrong issue
are structurally impossible. A new-Repoparameter lets callers qualify a bare number without
rewriting existing scripts that already pass plain integers. 11 new Pester tests cover
Resolve-IssueRef(bare, qualified, -Repo, conflict detection),Find-TriageItems(single-repo,
multi-repo, collision, not-found), andFormat-ItemRef(with and without repo).
Fixed
/board expert autorole selection is now score-based, not first-keyword-wins (#474).
Get-DomainFromPlanpreviously returned on the first keyword hit, scanning roles in catalog order.
powerbi-reportis the first factory role and ownsvisual,chart,dashboard,report—
four ordinary English words — so one generic word anywhere in a plan text handed the entire task
to the Power BI toolset. A VS Code debugging task that mentioned the word "visual" drew 40 Power
BI authoring skills and zero debugging skills; the mislabel was silent because a large hook count
looks healthy from the outside. Fix: all roles are now scored (sum of matched keyword lengths;
longer, more specific keywords outweigh short ones), and the highest-scoring role wins. Ties
preserve catalog order (local-before-factory). A vscode+extension+plugin+CLI plan now correctly
resolves toextensioneven when it also mentionsdashboardorchart. The four regression
sentences from the issue all resolve correctly, and a genuine Deneb visual plan still resolves
topowerbi-report. Second defect fixed in the same pass:Get-HookedSkillsused substring
matching for skill patterns, so the bareskillpattern inextension.skillshooked
marketplaces:example-skill(suffix match — wrong). Skill patterns now use prefix matching
(the leaf must start with the pattern), and theextensionrole's pattern was tightened from
"skill"to"skills"so it hooksskills-auditand similar but notexample-skillor
skill-development.roles whynow reports runner-up roles and their scores alongside the
winner, making a wrong pick visible without reading the catalog. 11 new Pester tests cover all
four acceptance sentences, the regression guard, suffix prevention, and runner-up output.
Added
-
Claims verification gate for expert deliverables — the evidence contract now covers external facts, not just tests (#479).
An autonomous/expert autorun could produce fully green DoD evidence while every factual claim
in its deliverable was invented: five fabrications (package name, auth mechanism, CLI flag, two
API tools) reachedmainoncsalcedodatabi.combecause the evidence block recorded that tests
passed, not whether the claimed facts existed.Expert-ClaimsGate.ps1closes that gap: when a
deliverable asserts external facts, each claim is registered as verified (looked up; records how
and what was found), unverified (explicitly acknowledged as unchecked — visible, not hidden), or
not-applicable (the deliverable makes no external claims).Test-ClaimsGatefails the gate when
a verified claim does not resolve (correct=$false);Format-ClaimsSectionrenders three distinct
status labels (PASS / FAIL / UNVERIFIED) that never collapse. The expert brief now includes the
claims requirement: a document is a deliverable, and a deliverable needs a gate. The common case
(a code-only run, no external-claim deliverable) incurs no added friction — the gate is
not-applicable and costs nothing. 22 Pester tests cover all five issue tests including a
regression fixture from the five fabrications above: each one is caught. -
A closing summary every flow can end with — four blocks, always the same four (#492, epic #491).
Reported first-hand by the product owner, a BI professional and not a programmer: every command
ends however its author felt like ending it, so there is no fixed place to look for the only four
things a user wants to know — what I found · what I did · what is left · what I need from you.
Board-Summary.ps1renders exactly those, in that order, whatever order the caller passes them
in. Two rules make it readable rather than merely present: an empty block says so out loud
(a blank "what I need from you" is indistinguishable from a summary that was cut off, so it
renders "Nada — esto quedo listo."), and the order never changes, because the point of a
fixed shape is that the eye stops reading and starts scanning. Two renderings from one source:
plain text for the terminal, and markdown carrying an[abios-summary]marker for PR bodies and
issue comments. 14 tests pin the contract; threading it through the command surfaces is #493.