Repository navigation
feat(kaizen): 5.1.0 — three ideas from Compound Engineering, approvals "ask" fixes - #48
Merged
Merged
Conversation
The reviewer contract's intent check now runs both ways: a public surface the plan's Out of scope or units rule out, and a new package the standard library or an existing helper already covers (both quoted). correctness owns it, so small diffs get it too. Adapted from Compound Engineering 3.30.5 (#1852). Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
…ts on it A learning's retirement condition now names the external change and a check that runs without changing the repo. prune-learnings runs it itself (learnings list --retire): met while the workaround is still in the code keeps the learning and recommends removing the workaround, never removes it. validate refuses a retire_when that is not one string. Adapted from Compound Engineering 3.29.0 (#1772). Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
New pr overlap --base <ref> (local git): PR files the base modified, moved or deleted since the merge-base, folders the base removed under a path the PR adds, and a PR whose patches the base already carries. When it overlaps, watch-pr judges Update, Rework (smallest rework, then stops) or Close (evidence, never closes the PR) before the first cycle and again when the base moved. Path overlap, never age. Adapted from Compound Engineering 3.33.0 (#1909). Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
…ering 3.33.2, release 5.1.0 Positioning: Spec Kit's ecosystem (extensions, presets, bundles, workflows, governance presets), Compound Engineering's cross-model opinions, simplify and babysit, and what Kaizen 5.1.0 took back (and why cross-model review is left out). CHANGELOG 5.1.0. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
… it absorbed git diff without -z quotes non-ASCII paths, so a folder like docs/é looked removed from the base. An empty git cherry (stale checkout, merge-only head) no longer counts as absorbed. Review findings on this branch. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
…de's pushes The review hook only matched the literal kaizen.mjs confirm, so the documented node "$K" confirm <code> never reached Claude Code's prompt and confirm always refused. Every confirm call is now seen and must run alone with the code written out, so a declined prompt's mark cannot be reused by another visible call and confirm … && git push no longer slips a push past the gate. In "ask" mode the git pre-push hook now refuses a push from Claude Code (CLAUDECODE set) that the review hook did not put to the user, and lets the prompted one through once; pushes from the user's terminal still only remind. The review hook also sees /usr/bin/git push and global options before push. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
…es once friction no longer double-counts an "ask" push (the git hook only logs pushes from the user's terminal), reports pushed_without_review and counts it in the waiver share. approvals.mjs reuses pendingWaiver/pendingDeploy instead of copying their lifetimes; JSON state helpers move to lib.mjs, and reading the state no longer creates .kaizen/state/. The push gates read checkPush's ask; status uses approvalMode. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Kaizen 5.1.0. Three ideas from the latest Compound Engineering releases (3.29–3.33), adapted to Kaizen's gates. A refreshed comparison with Spec Kit 1.2.5 and Compound Engineering 3.33.2. And fixes for what the review of this branch found in the 5.0.0
approvals: "ask"flow. No breaking change.Added / changed
The review flags what nobody asked for (CE #1852). The reviewer contract's intent check now runs in both directions:
Each finding must be quoted, and
correctnessowns the check, so small diffs get it too.retire_whennames a check that runs without changing the repo (CE #1772)./kaizen:prune-learningsruns that check itself. If the condition is met but the workaround is still in the code, the learning stays and the report recommends removing the workaround; Kaizen never removes it on its own. Also:learnings validaterefuses aretire_whenthat is not a single string, andlearnings list --retirelists the learnings that declare one.watch-prasks whether an old PR still belongs (CE #1909). The newkaizen pr overlap --base <ref>reports, from local git:watch-prthen gives one verdict: Update, Rework or Close. It never closes the PR itself and never rebases.Docs:
positioning.mdrefreshed;pr-watch.svgregenerated fromdiagrams.mjs.Fixed (5.0.0
approvals: "ask")node "$K" confirm <code>now reaches Claude Code's prompt. The hook only matched the literalkaizen.mjs confirm, so the documented call always failed. The hook now sees everyconfirmcall. It requiresconfirmto run on its own, with the code written out. As a result:confirm … && git pushcan no longer slip a push through.pre-pushhook guards Claude's pushes in"ask"mode.CLAUDECODEset), it only lets through the push the review hook just put to the user: same branch and commit, within 10 min, once./usr/bin/git pushand global options beforepush.frictionmetrics in"ask"mode:pushed_without_review(counted in the waiver share) andunreviewed_from_terminal.approvals.mjsreusespendingWaiver/pendingDeployinstead of copying their lifetimes. JSON state helpers are shared inlib.mjs, and reading the state no longer creates.kaizen/state/. The push gates readcheckPush'saskfield;statususesapprovalMode.pr overlap:-z), so non-ASCII folders are compared correctly;git cherryno longer counts as "absorbed".Test plan
node --test plugins/kaizen/tests/*.test.mjs plugins/kaizen-ops/tests/*.test.mjs: 228 pass, with and withoutCLAUDECODEconfirmforms (prompted, refused when the code is in a variable or the call is chained);frictionin"ask"mode;learnings validate/list --retire;pr overlap(non-ASCII folder, absorbed PR, empty cherry)diagrams.test.mjspasses after regenerating the SVGs; I openedpr-watch.svgto check the render🤖 Generated with Claude Code
https://claude.ai/code/session_01HajgyyYNKjohDErB6g1YMt