Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 09 Sep 02:40
· 101 commits to main since this release
20a2dbc

Added

  • edda review in 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 the Independent Review status (edda review deliver, GH-1030), and the response trigger with the resume layer (edda review due, GH-763)
  • Typed ratification — --evidence pr#N@sha and --by-rule cited-authority give 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-ledger imports 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-issue renders 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.sh re-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.sh asks the union gate, not the latest review (GH-1057); the review gate window sees renames with --no-renames on 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 Review only when the verdict engine is authoritative for the PR surface (R22, #947, #961)
  • mergeStateStatus is 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.json and 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