Repository navigation
v0.6.0
Added
edda reviewin the product — the review lifecycle moves from shell scripts into the CLI:edda review(#872), the union-gate window check (edda review gate, GH-769), the writing half with labels and theIndependent Reviewstatus (edda review deliver, GH-1030), and the response trigger with the resume layer (edda review due, GH-763)- Typed ratification —
--evidence pr#N@shaand--by-rule cited-authoritygive decisions cited, machine-checkable authority (GH-764, GH-761) edda fleet order— a deterministic health-gated dispatch queue with per-file collision detection and in-product freshness (GH-1015)edda fleet health— product-share/mechanism-rate health gate with GREEN/YELLOW/RED exit codes (GH-1014)- ACP dispatch in the CLI — edda-conductor dispatches through ACP with offline fake evidence for tests (GH-800)
- Thin TypeScript and Python SDKs over MCP/HTTP with a shared task-action surface and a complete MCP client contract (GH-611)
- Cross-machine decision import —
edda-ledgerimports committed-mirror decisions across machines (GH-671) - Skill-less controller loop —
next-issue.sh,next-review.sh, and the pi controller runbook (GH-899) - L0 rule runner runs every marked REVIEW.md check block as one pass (#915)
- Brief tooling —
brief-from-issuerenders the invariant brief skeleton from an issue body (GH-885) and a dry-run validator applies AUTHORED STEPS in a throwaway worktree at the pinned SHA before any lane launch (#945) - Issue freshness gate —
next-issue.shre-derives issue applicability at dispatch time (#938) - Canary calibration runner scripts the README recipe (GH-881); shadow-review compare script (GH-887)
- SessionStart renders the rail task this session holds (GH-793)
- Pre-push guard ships in the git-native installer: reads the remote ref and refuses tag moves (#976)
- Operator daily digest gains a clock (GH-765)
Changed
- SDK packages are made publishable (GH-611, #990)
- Fleet rules R22–R27 codify engine authority, verdict shape, readiness, policy carrier, origin-first work, and transport (#921); the judgement tag is left to R2 with brief v2 and calibration v1 (GH-884)
- Direct review is the default path; the watcher lane is the flash tier and the independence source (#1051)
Fixed
- The dispatch claim guard gets its own window and one shared rule, bounds bare-CLI claims in time, and reconciles attempts by lease while preparing worktrees outside the workspace lock (GH-1018, GH-1047)
merge-reviewed-pr.shasks the union gate, not the latest review (GH-1057); the review gate window sees renames with--no-renameson both diffs (GH-1062)- The Claude bridge's SessionStart writeback teaches the rule-based binding path instead of operator-only authority (GH-1063)
- OpenClaw bridge redacts durable bridge event data (#876)
- Verdict publication posts the report only; the watcher rejects transcript dumps, skips non-open PRs, and writes
Independent Reviewonly when the verdict engine is authoritative for the PR surface (R22, #947, #961) mergeStateStatusis no longer treated as a readiness signal — a stacked PR with zero verdicts no longer reports CLEAN (GH-946)- The SDK contract is pinned to
SPEC_PIN.jsonand red on spec drift (#973); pre-push guard and capability canaries hardened (#900, #929) - Review lane terminal lifecycle finished (#867); the release dry-run watches the whole
crates/tree (#900)
Docs
- The implementable adapter contract is published (#873); rules and runbooks updated (R22–R27, pi-controller-runbook)
What's Changed
- fix(release): compare the native canary's version core and document the ruleset-gated release procedure by @fagemx in #894
- fix: publish dry-run watches the whole crates/ tree; capability probes accept comma-separated flag aliases by @fagemx in #900
- fix(fleet): finish review lane terminal lifecycle by @fagemx in #867
- feat(bridge): SessionStart renders the rail task this session holds (GH-793) by @fagemx in #901
- docs(bridges): publish implementable adapter contract by @fagemx in #873
- fix(openclaw): redact durable bridge event data by @fagemx in #876
- feat(fleet): brief-from-issue renders the invariant brief skeleton from the issue body by @fagemx in #895
- docs(fleet): rules R22–R27 — engine authority, verdict shape, readiness, policy carrier, origin-first work, transport by @fagemx in #921
- feat(fleet): L0 rule runner runs every marked REVIEW.md check block as one pass (GH-882) by @fagemx in #915
- docs(evidence): re-measure GH-810 dev profile on the pinned 1.98.1 toolchain by @fagemx in #911
- feat(fleet): skill-less controller loop — next-issue.sh, next-review.sh, and the pi controller runbook by @fagemx in #899
- fix(fleet): capability canaries read DISPATCH_EXIT and report every case by @fagemx in #929
- feat(review): add product review command by @fagemx in #872
- feat(fleet): add shadow-review compare script (GH-887 slice A) by @fagemx in #907
- feat(sdk): GH611 thin TS/Python SDKs over MCP/HTTP, shared task actions, complete MCP client contract by @fagemx in #865
- feat(edda-conductor): wire ACP dispatch into edda CLI with offline fake evidence (GH-800) by @fagemx in #909
- feat(fleet): canary calibration runner scripts the README recipe (GH-881) by @fagemx in #916
- docs(fleet): R2 leaves the judgement tag — brief v2, severity table, calibration v1 (GH-884) by @fagemx in #942
- feat(fleet): issue freshness gate — next-issue.sh re-derives applicability at dispatch time by @fagemx in #938
- fix(fleet): validate the machine/assignee identity shape in next-issue.sh before sh -c by @fagemx in #939
- feat(fleet): brief dry-run validator — apply AUTHORED STEPS in a throwaway worktree at the pinned SHA before any lane launch by @fagemx in #945
- fix(fleet): brief-from-issue renders failing steps 6/24 when --task-id is omitted (task=none) by @fagemx in #944
- fix(fleet): no pre-push guard — the window's force-push prohibition is prose only, and a force push is the one operation that can destroy the tree a SHA-pinned verdict describes by @fagemx in #943
- fix(fleet): mergeStateStatus is not a readiness signal — a stacked PR with zero verdicts reports CLEAN, and the digest's blocked-PR filter skips it, so #899 was reported complete on a stale SHA by @fagemx in #946
- fix(fleet): review-l0 pre-push pass cannot run U1/C5/R3 without a PR number; oneline() truncates mid-character by @fagemx in #954
- fix(fleet): issue-freshness gate precision — delivery via closing references, bare names resolve, proposals skipped by @fagemx in #955
- fix(fleet): verdict publication posts the report only, heading first; watcher rejects transcript dumps and skips non-open PRs by @fagemx in #947
- chore(repo): .gitattributes + renormalize CRLF blobs — git diff --check is a false gate on docs/fleet/rules.md by @fagemx in #956
- fix(fleet): pin the lane worktree-prep command in rendered briefs — step 2 expects ...origin/main but lane-prepare.ps1 creates branches with no upstream by @fagemx in #960
- fix(fleet): review-pr.sh opt-in pi arm — EDDA_REVIEW_AGENT=pi with the read-only allowlist, Anthropic models refused on pi, pi-dispatch capability canaries (GH-880) by @fagemx in #890
- fix(fleet): pr-review-watch.sh writes Independent Review only when the verdict engine is authoritative for the PR surface (rules.md R22); SHADOW otherwise by @fagemx in #961
- feat(fleet): add 4090 manager-tick v0 by @fagemx in #908
- fix(fleet): the claim guard is advisory — nothing forces a lane through it, so #887 was claimed by two machines and built twice into incompatible PRs by @fagemx in #967
- fix(sdk): contract is red on main — #872's review_verdict schema drifted spec/ from the SHA sdk/SPEC_PIN.json pins, and neither PR's CI could see it by @fagemx in #973
- docs(specs): three pointers still name reviewer-brief-template-v1 as the current template by @fagemx in #977
- docs(fleet): pi-controller-runbook — a flash controller must route STOP to needs-operator, not fix the brief by @fagemx in #979
- fix(fleet): the calibration runner accepts a verdict whose model_observed came from PI_MODEL — six of six did (#884 calibration v1) by @fagemx in #982
- test(fleet): run scripts/fleet/test-*.sh in a CI gate (GH-896) by @fagemx in #910
- fix(edda-conductor): the gate redispatch budget is per attempt, as its rationale always claimed by @fagemx in #981
- fix(fleet): readiness follow-ups — shared PR limit, R24's third field, a jq-applying digest stub, a declared L0 gate marker by @fagemx in #980
- fix(fleet): pre-push guard reads the remote ref, refuses tag moves, and ships in the git-native installer by @fagemx in #976
- fix(fleet): -Owns is one comma-separated argument, and next-issue.sh passes it by @fagemx in #974
- chore(sdk): make the TypeScript and Python packages publishable (GH-611) by @fagemx in #990
- fix(edda-cli): edda review brief names the engine's R22 qualification for the PR surface; authoritative engines close D5 and can exit 0 (GH-999) by @fagemx in #1021
- feat(fleet): give the operator's daily digest a clock (GH-765) by @fagemx in #991
- fix(fleet): the collision-scan test asserts on a task name the launcher never registers by @fagemx in #995
- fix(fleet): review-pr.sh publishes an unqualified-LGTM (exit 3) round instead of discarding its payload by @fagemx in #1023
- test(fleet): gate the scripts/test-*.sh glob and the fleet .ps1 tests by @fagemx in #1020
- feat(fleet): verdict-label names a SHADOW round instead of resolving it to a verdict (GH-887) by @fagemx in #988
- feat(cli): edda fleet health — path-classified merge/issue mix with ledger thresholds; RED freezes mechanism dispatch by @fagemx in #1022
- feat(edda-cli): typed ratification — --evidence pr#N@sha and --by-rule cited-authority by @fagemx in #1016
- feat(cli): edda fleet order — deterministic health-gated queue, per-file collision, in-product freshness (GH-1015) by @fagemx in #1040
- feat(edda-ledger): import committed-mirror decisions across machines (GH-671 carrier half) by @fagemx in #1017
- fix(edda-cli): review resolves its subject from a private ref, not FETCH_HEAD (GH-997) by @fagemx in #1046
- fix(edda-cli): dispatch claim guard bounds bare-CLI claims in time (GH-1018) by @fagemx in #1045
- fix(fleet): review-l0.sh reports ERROR for a block that refused to run (GH-950) by @fagemx in #1052
- fix(fleet): review-pr.sh matches the doneWhen heading case-insensitively (GH-953) by @fagemx in #1053
- docs(fleet): direct review is the default path; the watcher lane is the flash tier and the independence source by @fagemx in #1051
- feat(edda-cli): edda review gate — union rule and window check in the product (GH-769) by @fagemx in #1055
- fix(edda-cli): give the claim guard its own window and one shared rule (GH-1018) by @fagemx in #1060
- feat(edda-cli): edda review due — the trigger policy in the product (GH-763) by @fagemx in #1070
- fix(edda-cli): edda review due — the response trigger, and the resume layer's tests (GH-763 follow-up) by @fagemx in #1074
- fix(edda-bridge-claude): the SessionStart writeback teaches the rule-based binding path, not operator-only authority (GH-1063) by @fagemx in #1076
- fix(edda-cli): reconcile claims attempts by lease and prepares worktrees outside the workspace lock (GH-1047) by @fagemx in #1065
- feat(edda-cli): read §7 verdict comments in the product — the parsing half of edda review deliver (GH-1030) by @fagemx in #1077
- feat(edda-cli): edda review deliver — the writing half: verdict comment, labels, Independent Review status (GH-1030) by @fagemx in #1081
- chore(fleet): retire the review shell branch (GH-1061) by @fagemx in #1082
- fix(edda-cli): review gate window sees renames — --no-renames on both diffs (GH-1062) by @fagemx in #1083
- fix(fleet): merge-reviewed-pr.sh asks the union gate, not the latest review (GH-1057) by @fagemx in #1084
- chore(release): prepare v0.6.0 by @fagemx in #1087
Full Changelog: v0.5.0...v0.6.0