Repository navigation
v2.30.0
Approve only what needs judging (ADR-0028, which replaces ADR-0023).
Existing installs must re-run amont-agent install --write: the
evidence gate needs the new PostToolUse hook on ExitPlanMode.
Added
push-preview: a plan can declare the preview's evidence. When the
plan a branch landed was approved throughExitPlanModeand its body has
a## Previewsection whose first line isevidence: <reason>, a UI push
passes with no question (rulework.preview-unless-planned-evidence).- The approval record. A new
PostToolUsehook onExitPlanMode
writes the approved plan's canonical body sha to
~/.claude/amont-agent/plan-approved/<sha>, hashed from
planFilePathwhen the hook runs. Only the approve shape counts
(tool_responsean object carryingplan). - The check. The first plan the branch adds under
docs/plans/since
the merge base with the default branch, read at the commit that added
it, must have an approved sha and the declaration. A picked mockup, a
pointer plan, a plan already onmain, a section added later and a
missing base ref are held as before. - Audit. Every pass is journalled
evidence, with the plan, the
commit and the sha; every recordplan-approved.
- The approval record. A new
preview registerprintsquestion_prefix:[preview <id>] <label>,
what the marked question starts with, verbatim. A refusal to bind quotes
it.implementation-reviewcounts a resumed review. A reviewer resumed
withSendMessageon a new block is a review of that tree: the message's
tois a reviewer'sagentId, its result'sresumedAgentIdmatches, and
the round's structured notification names that SendMessage and agent.
The plan-review panel still counts fresh launches alone.
Changed
- A marked question approves by id.
Approveon a question whose
[preview …]marker lists a pending registration approves it; the
repo@sha7label is no longer required (the id starts with the sha7).
The "bound NOTHING" answer and itsunlistedjournal line are gone. - A chained register binds.
preview registeronly has to be the last
clause of its line, joined by&∨; the JSON is read from the last
non-empty line of stdout. APreToolUsestamp
(previews/registers/<tool_use_id>, swept after a day) and an id, page
and mtime check keep a line an earlier clause printed from passing as
the register's. No stamp: not bound. A register that is followed,
piped, redirected or substituted stays unbound. - The vendored decisions pack carries ADR-0028.
Fixed
- The person was asked twice for one preview (2026-10-08): a question
carrying the id but no label bound nothing.
What's Changed
- feat: approve only what needs judging (2.30.0) by @fredericrous in #84
Full Changelog: v2.29.1...v2.30.0