• v2.3.0 24b723f5c6

    v2.3.0 — where the bytes live
    All checks were successful
    test / node-test (22) (push) Successful in 49s
    test / node-test (24) (push) Successful in 50s
    test / self-verify (push) Successful in 13s
    test / typecheck (push) Successful in 17s
    Stable

    john released this 2026-08-05 17:35:11 +00:00 | 1213 commits to main since this release

    Signed by john
    GPG key ID: 693AB15F91734B0C

    A context-efficiency cycle, grounded in a burnrate measurement: ~108.5k resident context per assistant turn against 565 tokens of output, with cache reads alone at 62.7% of spend. When cost is context multiplied by turns, carrying less is where the money is.

    Transport-only by default. It moves bytes and changes when they load, and removes no review, gate, rung or guardrail.

    Subagent output leaves the parent context

    cad-executor writes its report to .planning/phases/<N>/reports/plan-<k>.md and returns a five-field digest, so a PLAN PARTIAL or timeout continuation is rebuilt from the file and cannot re-run a task already listed complete. cad-verifier writes one findings file under a narrow Write grant, with Edit and MultiEdit still denied on all four rungs, and /cad-verify --deep pipes it straight into uat merge with no hand-transcription left. Reviewers receive refs valid in their own working tree, or --payload <file>, rather than an inlined diff.

    References load where they are used

    references/git.md is split into git-guard.md (rails 1, 2, 4) and git-publish.md (rail 3), so the four skills that only need the guard stop loading publish policy. The review triage gate moves into references/triage-gate.md, and its adjudicated arm is now an AskUserQuestion multi-select you tap rather than a paragraph asking you to answer in prose. All 17 conventions.md parentheticals are inlined at their use sites, leaving that file @-included nowhere in the plugin.

    One behavior fix rode along: the git.auto_close carve-out that suppresses the triage prompt was sitting in the generic adjudicated arm, so opting into the unattended land close suppressed it at every adjudicated gate, including ones where nothing was left to halt on the discarded findings. It is now scoped to pre_ship inside /cad-land.

    The always-on surfaces, and the ratchet that watches them

    23 skill and 19 agent description: lines are cut to one routing line each, 8,550 bytes down to 5,397, with zero trigger words dropped and nine gained. Those bytes ride the system prompt of every session in every project, whether or not you ever run a Cadence command.

    cadence-core/references/** and templates/** come under the weight budget as 23 exact-byte entries. That needed the measurement fixed first: both directory walkers wrapped one recursive readdirSync, so a single unreadable descendant returned nothing for the whole subtree, and self-verify named a directory that read fine with the errno of a different failure. Both now recurse per entry. A symlinked directory met during a walk is no longer descended, which makes a long-standing claim in the module header true for the first time.

    Measured

    Before After
    Twelve commands, turn-one load 231,422 B 199,687 B
    /cad-pause 18,523 B 8,197 B
    /cad-land 36,235 B 31,016 B
    Always-on descriptions 8,550 B 5,397 B

    Stated rather than netted away: the plugin's own weighed total went up over the same stretch, because moving a rule out of a shared reference and into the workflow that uses it puts those bytes on a measured surface for the first time. The win is in what a turn loads, not in what the repository weighs. And five of the twelve commands ended up slightly heavier, because their workflow files grew when guidance moved inline, which a forty-byte description cut was never going to pay for.

    Gates

    11/11 requirements traced, 20/20 acceptance criteria covered, 1156 tests passing, self-verify clean across 16 checks, tsc exit 0, budgets exact across all 92 weighed surfaces.

    Full detail in CHANGELOG.md.

    Downloads