-
released this
2026-08-09 19:54:07 +00:00 | 1058 commits to main since this releaseThe reconciliation cycle.
2.5.0closed early and handed this release its
deferred half, so nothing here is new construction: it is the queue nobody could
read, the friction you hit by hand every session, the defects Cadence's own
seams hit on other people's projects, and the first honest measurement of what a
phase costs. 73 commits across five phases.Three of the five phases were scoped by running Cadence against real projects
rather than by reading its own source. A parser pass planned from reading
planning-files.mjswas cut when running that parser over every plan file in
five live projects produced zero issues, and the two things the same survey found
actually broken took its place.Added
-
Per-role token accounting.
trace appendtakes--tokens,--roleand
--readon lifecycle events, andplanning.mjs trace renderand
/cad-progress --traceprint what each role cost and how many dispatches it
took. A role that ran without a token figure reports anunrecordeddispatch
count beside its total rather than a zero, because those are different claims.
All five phase-scoped dispatch sites now bracket their workers, held in place
by a per-file census in the test suite. Before this, 71% of subagent spend
happened at sites nothing was measuring: 206,901 tokens for the assumptions
analyzer, 346,882 for planner plus checker plus revision, 219,068 for two
reviewers, against 310,503 for the only two sites that were bracketed. -
A runaway-loop bound on every dispatched agent. All 19 rung files carry
maxTurns: 400. A spike ran first to establish what the host actually returns
at the cap, because shipping a value that converts a long executor run into a
failed dispatch would have been worse than no bound at all. -
CADENCE-DEBTmarkers and a harvest seam. A deliberate corner-cut carries
a marker at its location naming its ceiling and the trigger that should prompt
revisiting it, andplanning.mjs debt-harvestcollects them into
.planning/CAPTURE.md. Idempotent, with its own regression test, because the
queue is a regenerable view and the marker in tracked code is the record. -
A committed doc-claim ledger.
.planning/DOCS-CLAIMS.mdholds every claim
a/cad-docs-verifysweep raised with its verdict and its resolution, so the
next cycle re-verifies a fixed set of ids instead of re-extracting from scratch
and calling the difference progress. -
docs/EVIDENCE.md. Turn-one bytes for all 23 commands, eager against
reachable for the ten heaviest, dispatch bytes for all 19 rung agents, each
table printed beside the exactweight.mjscommand that regenerates it.
Changed
-
The verify walk runs what it can before it asks you anything.
/cad-verify
now states the bar out loud: an item is a human check only when the model
cannot execute it, meaning irreversible against real data, or outside its reach
(credentials, a GUI, hardware, another machine). Everything else is executed
and cited as a results table. A walk of nine read-only commands and one
destructive one ends the turn asking about one item, not ten. Model-executed
results carry their own provenance, distinct from a user's answer and from a
verifier's. -
The capture queue stops being append-only. 213 open items became 28
current-cycle items each carrying a dated, tree-backed verdict, with the 185
historical ones moved under a single dated## Archiveblock that
planning.mjs recallcannot see. That file is the input to every planning
dispatch's recall, so its noise was being paid for on every one. -
Phase directories are numeric-only, and Cadence says so.
08-meteogram-legend
is not a phase directory,/cad-healthreports one as a violation, and a
numeric-prefix collision produces a named diagnostic instead of one directory
silently shadowing the other. This is a breaking change for a project using
named directories, taken deliberately: the seams were already unusable there,
and an honest refusal beats a clean wrong answer.
Fixed
-
A blocking review can no longer re-arm without bound on its own fix. The
cap is one round, written once in the consequence gate every fire site shares,
so it reaches/cad-execute,/cad-task,/cad-debug,/cad-verifyand the
git guard rather than one of them. Exceeding it hands the remainder to you with
a named reason. -
A planning-doc version the project already published is caught at the ship
gate./cad-auditemits a verdict-movingversion_driftbreak, compared
against the repo's own git tags rather than the plugin manifest, which resolves
relative to the script and would have compared your milestone against Cadence's
version in any project that is not this one. That is issue #87's failure mode,
which happened on this repo in July. -
A project Cadence creates keeps its run record out of git.
execute.mdasserted.planning/trace.jsonl"is gitignored" as the reason a
worktree's trace cannot ride a merge back, and nothing in Cadence wrote that
line. It held here only because it was added by hand. Every other Cadence
project was committing its routing, provider and worker events on the next
git add .planning. -
--phasecarries the string you typed, at every seam that takes it.
--phase 1.10was readingphases/1.1and answering about a different phase. -
REQ_ID_EXACTadmits2FA-01. A requirement id whose category does not
start with a letter was refused, a regression from1.4.0. -
18 stale claims across
README.md,METHOD.md,INTERNALS.md,
CONTRIBUTING.mdand six workflow files. A full sweep of the doc surface
checked 547 claims against the live code: 509 accurate, 18 stale, 20 that
cannot be settled mechanically. Every stale one is corrected against its own
evidence or recorded as a divergence with the reason it stands. Four turned out
to describe real defects rather than stale prose and are filed as their own
requirements instead of being reworded away, including a wiring-table row that
was the single source of four separate wrong claims, and two literal NUL bytes
inlib/trace.mjsthat makegrepskip that file without-a.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-