v0.15.0
The verified-learning loop can no longer silently mislead. An onboarding audit
adversarially traced the loop end to end and found several ways it reported
success while doing nothing, or quietly poisoned its own ranking. This release
closes them and makes the loop's own health visible.
Fixed
outcome reconcile --applyno longer marks a skillpromotedwhen the physical install fails. The forward-only ratchet never re-emits install for apromotedartifact, so a false promotion was permanent and invisible; a failed install now keeps the skill acandidate(with cooldown) so a laterskills inbox accept+ reconcile retries.--applyoutput surfaces the execution result so it is never byte-identical to a dry-run that did nothing, and a skill missing from the registry reportsinstall-skipped: not in registry. Cards (status-only promotion) are unaffected.- A verify command rejected by Brigade's own parser (shell metacharacters, a high-risk executable, an unresolvable binary) is recorded with status
rejected, notfailed. Invalid input is neutral (0) tooutcome capture, never a verified regression (-1). The overall receipt isfailedonly when a command actually ran and failed or timed out. outcomeno longer collapses distinct manual signals. A record written without--evidencecannot be proven a duplicate, so it counts as its own signal instead of merging into one, and manualfriction/learningsproducers can reach the install threshold. Records that carry anevidence_refstill dedup as before.
Added
brigade work verify run --capture <id> [--capture-kind skill|card]captures the run's outcome in the same command, so the loop closes without a separate manualoutcome capturestep.brigade work briefreportsoutcome_loophealth: verify-run, record, scored, and promoted counts, plus a warning when verify runs exist but the ledger is empty (loop half-fed) or neither exists (loop dormant).outcome capturewarns when the artifact id is not a known installed skill or memory card, naming what is available, so a hallucinated id stops silently poisoning the ranking (the record is still written)..brigade/work/verify-runs/is capped (newest 50 retained) so receipts and raw command logs no longer grow without bound.
Changed
- The
brigade-workskill, README, and QUICKSTART teach the daily loop directly: capture against an id you actually have (a real skill, a memory card, orbrigade-workitself), the one-step--captureform, and the registry-accept prerequisite for autonomous promotion.