Repository navigation
0.15.0 - 2026-07-01
Release Notes
Added
-
A regression harness for the auto-review Stop hook loop,
scripts/verify-auto-review-hook-loop.sh. It drives the real hook scripts
end-to-end in hermetic temp dirs and asserts all four contract states against
the concrete.claude/hooks/rdm-review-on-finalize.sh— fires
{"decision":"block",...}when an item isneeds-reviewon the current
branch, stays silent on an unrelated branch, stays silent under the
stop_hook_activeloop guard, and stays silent once the item isreviewed—
plus the shippedrdm-core/src/templates/hook-review-on-finalize.sh's
previously-untested loop-guard and reviewed-cleared cases. Auto-picked-up by
the existingscripts/verify-*.shCI glob. -
phase update/task update --status needs-reviewnow warns on stderr when
HEAD carries no committed changes worth reviewing, surfacing items that would
otherwise be silently stranded inneeds-reviewwith nothing to review. For a
phase, the baseline is the previous finalized phase in the same roadmap (so the
long-livedroadmap/<slug>branch in the one-worktree-per-roadmap model is
handled correctly): it warns when HEAD has not advanced past that phase's
committed work. For the first phase of a roadmap and for standalone tasks, the
baseline is the configureddefault_branch: it warns when HEAD has no commits
beyond it. The transition is not blocked and the check fails open on any git
error — this is a non-destructive data-integrity nicety, not a gate. -
rdm review restamprefreshesreview_sha/review_branchon every in-scope
needs-reviewitem to the current source-repo HEAD and branch. Run it after
amending or rebasing a commit while an item is stillneeds-review: the
original stamp would otherwise point at a now-dangling commit and the item
could silently drop out ofrdm review pendingscope (via the
SHA-reachability fallback), suppressing the auto-review reprompt. Scope
matchesreview pendingexactly, and it is idempotent (items already stamped
at the current HEAD/branch are left untouched). The Claude Stop hook, the Pi
agent_endextension, the generatedhook-review-on-finalize.shtemplate,
and the shipped.claude/hooks/rdm-review-on-finalize.shnow call it
automatically before checkingreview pending, so this self-heals
transparently in the normal finalize → review loop. -
rdm worktree pruneremoves every worktree whose plan item is alreadydone
in one command. Resolves each rdm-managed worktree's item status (phase, task,
or whole roadmap) and removes the done ones; dirty worktrees are skipped unless
--force,--delete-branchalso deletes their merged branches, and
--dry-runreports what would be removed without changing anything. See
docs/landing.md. -
rdm agent-config --skillsnow emits anrdm-landskill (CLI and MCP
variants) that lands arevieweditem tomainwith linear history
(rebase ontomain, thengit merge --ff-only— never a merge commit),
re-running the CI-equivalent checks on the rebased branch first. The
fast-forward flips the item todonevia the existing post-commit hook, and
the skill then cleans up the worktree (rdm worktree remove --delete-branch,
orrdm worktree prunefor batch cleanup). On rebase conflict or failing
checks it aborts cleanly and escalates perdocs/escalation-protocol.md
instead of force-merging. Landing runs only on explicit invocation (or
autopilot's opt-in--land); it never auto-lands. See
docs/landing.md. -
rdm-autopilotagent skill (shipped byrdm agent-config --skills, in both
CLI and MCP variants). It drives one named roadmap fromnot-startedto
reviewedunattended: each iteration asksrdm nextfor the next actionable
phase, estimates it (rdm-estimate) if needed, dispatches it on its model
tier throughrdm-dispatch-phase(plan gate, implementation,rdm-review),
interprets thereviewed/rework/escalatedoutcome, and advances —
parking a phaseblockedwhen its rework budget is exhausted so the loop
steps past it. Decisions and blockers are batched, not raised mid-run
(review them withrdm review blocked), and the run is bounded by a global
step budget. Opt-in--land(default OFF —mainis never touched without
it) and bounded--plan-only/--max-phasesdry-run modes. See
docs/autonomous-loop.md.
Fixed
rdm worktree prune --delete-branchnow reports partial success when a done
item's worktree is removed but its branch is retained because the branch is not
merged into HEAD (and--forcewas not passed). Previously the whole operation
was reported asfailedeven though the worktree removal succeeded, so the
removed/failedcounts misled and the orphaned branch could not be
re-cleaned by a later prune. There is now a distinctremoved-branch-kept
action with a per-resultreason, a top-levelbranch_keptcount in
--format json, and a matchingN branch keptfigure andremoved, branch kept (…)note in the text summary.rdm worktree prunenow reports a worktree that became dirty between the
initial scan and its removal asskipped-dirtyrather thanfailed.rdm worktree add/list/removenow work when the project's canonical repo
is bare (no working tree of its own) — whether invoked from a linked
worktree of the bare repo or from inside the bare directory itself. Previously
every subcommand failed with "not inside a git repository". Sibling worktrees
are placed under<parent>/<repo-name>__worktrees/, with any.git/.bare
suffix stripped from the anchor name so the layout matches the normal-repo
case.rdm worktreecommands run against a working directory that does not exist (or
is not a directory) now report an actionable "directory does not exist" error
instead of the misleading "git is not installed".
Changed
- The
rdm-do,rdm-review, andrdm-dispatch-phaseskills emitted byrdm agent-config(CLI and MCP variants) now describe the splitDone:line as a
single deferred two-stage protocol. The finalize step says theDone:line is
withheld YET becauserdm-reviewadds it on a passing review, and the review
gate'sgit commit --amendstep says it is completing that deferred
directive — so neither stage reads as contradicting the other. This stops
auto-mode agent permission classifiers from denying the review-time amend as a
violation of the finalize-time "noDone:line" instruction. - The
rdm-reviewskill emitted byrdm agent-confignow runs the full
find → verify → filter → report → act → gate pipeline: an adaptive review
fleet (base AC-compliance + correctness agents, plus conditional agents gated
on what the diff touches), a per-finding adversarial refute/verify pass where
the agent that finds an issue is never the one that confirms it, and a
confidence filter that drops refuted or low-confidence findings before
anything is fixed or filed. This brings the generated skill to parity with the
in-repo dogfoodingrdm-reviewskill (previously it shipped an older
fixed-two-agent find → report → act flow). Both the CLI and MCP flavors are
updated. - The
rdm-reviewskill emitted byrdm agent-confignow escalates a review to
a BLOCKED verdict when any surviving finding isblocking, matching the
in-repo skill. It adds an explicit severity scale, a strict verdict-order
(BLOCKED → FAIL → PASS WITH CONCERNS → PASS), and a gate that routes a BLOCKED
phase toblockedand a BLOCKED task toin-progress(tasks have noblocked
status) instead of silently downgrading blockers to "pass with concerns". Both
the CLI and MCP flavors are updated.
Install rdm-cli 0.15.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/edpaget/rdm/releases/download/v0.15.0/rdm-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install edpaget/rdm/rdm-cliInstall prebuilt binaries into your npm project
npm install @edpaget/rdm@0.15.0Download rdm-cli 0.15.0
| File | Platform | Checksum |
|---|---|---|
| rdm-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| rdm-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| rdm-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| rdm-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying Signatures
All release artifacts are signed with Sigstore cosign using keyless signing. To verify an artifact:
cosign verify-blob <artifact> \
--bundle <artifact>.bundle \
--certificate-identity-regexp "https://github\.com/edpaget/rdm/\.github/workflows/sign-release\.yml@refs/tags/.*" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"