v3.1.4 Jacobean Released #877
waleedkadous
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
v3.1.4 Jacobean
Released: 2026-05-27
A patch on the Jacobean line, driven mostly by porch-discipline findings from real adopter use. Three substantive ships: a CI fix from the v3.1.3 cleanup fallout, the porch consultation-policy correction that fixes a multi-iteration over-eagerness, and the canonical
pr_ready_for_humansignal that closes the BUGFIX gap in the Needs Attention surface introduced in v3.1.3.CI:
verify-installprobesafxinstead of removedaf(PR #851, fixes #848)Fallout from v3.1.3's
codev afxwrapper removal.packages/codev/scripts/verify-install.mjswas still probing theafbin in its post-install verification list. CI onmainhas been red since the v3.1.3 merge.One-line change:
['codev', 'af', 'porch', 'consult']→['codev', 'afx', 'porch', 'consult']. The script itself is the CI verification test — changing the list is the regression guard. CMAP-3 unanimous APPROVE.Out-of-scope nit raised by all three reviewers: the script still doesn't probe
teamorgenerate-image(also in the bin map). Not addressed; separate ticket if it becomes relevant.Porch: COMMENT and REQUEST_CHANGES treated asymmetrically (PR #871, fixes #870)
The reporter (an external Codev adopter's architect) flagged that porch was treating
COMMENTandREQUEST_CHANGESsymmetrically — both triggered re-iter — and the dead-codegetMaxIterationshelper was never wired into the verdict-handling flow. A natural experiment over 21 review iterations on a real in-flight SPIR project showed a per-N iteration cap was the wrong abstraction: real bugs hide in deep iterations (one phase had four consecutive iters each catching a new correctness bug), and a count-based cap would have shipped critical bugs.The fix lands the architect's superseding policy:
REQUEST_CHANGESthis round (allAPPROVE-or-COMMENT).allApprove()already counted COMMENT as approve; this PR adds an explicit regression test so future refactors can't silently regress the asymmetry.REQUEST_CHANGES(no count limit in normal flow). The rebuttal-exists branch now incrementsstate.iterationand clearsbuild_completeso the nextporch nextemits a fresh build task carrying the previous reviews + rebuttal as context.max_iterations— kept only as runaway-prevention. Default raised from1to8in both protocol-parsing andgetMaxIterations()fallback; per-phase override stays available.A new
force_advancedfield onProjectStaterecords when the safety ceiling fires —{phase, iteration, max_iterations, rebuttal_file, at}— and the next phase's first task gets a "ceiling notice" prefix so the architect/builder sees the context.Notable nuance: PIR's
prphase keepsmax_iterations: 1explicitly. Under the old code that was meaningless (porch ignored it); under the new code it correctly enforces PIR's documented single-pass advisory CMAP —REQUEST_CHANGESat iter-1 force-advances with audit trail, exactly what PIR's CLAUDE.md contract promises.5 new tests cover the policy (COMMENT-only advances, REQUEST_CHANGES re-iter, force_advanced fires at ceiling, audit trail correctness). CMAP-3 unanimous APPROVE / HIGH on iter-1 and iter-2.
Dashboard: canonical
pr_ready_for_humansignal closes BUGFIX gap (PR #874, fixes #872)The v3.1.3 Needs Attention filter (introduced in PR #845) gated PR inclusion on
b.blocked === 'PR review'— the gate label for porch'sprgate, which SPIR / ASPIR / PIR / AIR all carry but BUGFIX does not. BUGFIX'sprphase is terminal with no gate, so the builder transitions cleanly fromprtoverifiedafter CMAP without ever blocking. Result: every open BUGFIX PR was silently invisible in Needs Attention since v3.1.3 shipped. Found by reviewing an in-flight BUGFIX PR that the dashboard wasn't surfacing.The fix moves the "is this PR ready for human review" decision from a protocol-specific derivation to a canonical state-machine signal.
What changed
pr_ready_for_human: booleanfield onProjectState, written by porch at the three transition points that fire across all five protocols:handleVerifyApproved(next.ts) — SPIR / ASPIR / PIR review (build_verify, gate=pr): set true at pr-gate-pendingdone()(index.ts) at pr-gate auto-request — AIR pr (once, gate=pr): set true at gate-requestedadvanceProtocolPhase()(index.ts) onpr→verifiedtransition — BUGFIX (once, no gate, terminal): set true at phase advanceREQUEST_CHANGES) and onprgate approval / rollbackgate === 'pr' || consultation.on === 'review'. The narrowconsultation.on === 'review'check matters — bare consultation presence would mis-flag RESEARCH'sinvestigate/critiquephases as PR-creatingOverviewBuilder.prReadyfield on@cluesmith/codev-types(consumer-facing; TypeScript change worth flagging)derivePrReadyhelper inoverview.tsreads the canonical field if present, falls back to the v3.1.3 derived logic for in-flight projects (blocked === 'PR review' || (phase === 'verified' && protocol === 'bugfix')) so the BUGFIX gap closes for both new and pre-existing buildersNeedsAttentionList.tsx'sbuildItemsnow gates onb.prReady. The builder fallback loop checksprReadybefore the!b.blockedearly-out — this is critical because BUGFIX builders haveblocked: null, so the old skip-on-not-blocked path would drop them. Fallback tob.startedAtfor the waiting-since chip whenblockedSinceis null.Process notes
This fix is itself a v3.1.2-style dual-CMAP success. The builder's own CMAP-3 was unanimous APPROVE on iter-1, but the architect-side CMAP-3 caught two real bugs both other reviewers missed individually: (a)
isPrCreatingPhaseover-matched RESEARCH's non-PR consultation phases (Codex caught it), and (b) the NeedsAttentionList builder fallback dropped BUGFIX builders before the prReady check (Gemini caught it). Both blockers were addressed in iter-2 with unanimous APPROVE / HIGH and zero residual issues.Lesson reinforced: running the architect-side CMAP independently from the builder-side CMAP catches the things either reviewer alone misses. Saved in the architect's working memory.
Related issue closed as superseded
Issue #873 (the "fast-fix filter-side patch" alternative to this canonical signal) was closed as superseded — the fallback path in
derivePrReadycovers the same BUGFIX gap as a side-effect of the v3.1.3-compat shim.Breaking changes
OverviewBuilder.prReady: booleanis now a required field on@cluesmith/codev-types. Consumers that destructure overview-builder objects may want to either consume the new field or treat it as optional in their own types until they catch up. This mirrors the v3.1.1 pattern forspawnedByArchitect.Install
npm install -g @cluesmith/codev@3.1.4 afx tower stop && afx tower startMulti-workspace adopters: no migration needed. The new
pr_ready_for_humanfield is automatically set on porch transitions; existing in-flight projects without the field fall back toderivePrReady's v3.1.3-compat logic (which also closes the BUGFIX gap).Contributors
Beta Was this translation helpful? Give feedback.
All reactions