-
v3.5.3 - bounds not stated, costs not counted
StableAll checks were successfultest / node-test (git, 22) (push) Successful in 29stest / node-test (git, 24) (push) Successful in 26stest / node-test (other, 22) (push) Successful in 23stest / node-test (other, 24) (push) Successful in 23stest / node-test (planning, 22) (push) Successful in 1m14stest / node-test (planning, 24) (push) Successful in 1m11stest / node-test (prose, 22) (push) Successful in 29stest / node-test (prose, 24) (push) Successful in 28stest / node-test (review, 22) (push) Successful in 17stest / node-test (review, 24) (push) Successful in 17stest / node-test (routing, 22) (push) Successful in 26stest / node-test (routing, 24) (push) Successful in 28stest / self-verify (push) Successful in 13stest / typecheck (push) Successful in 17sreleased this
2026-08-18 09:34:44 +00:00 | 533 commits to main since this releaseCadence asserted controls it did not hold. The review path stated bounds it
never enforced, the run record claimed to price a run it could not see, and
three controls that already existed and were already correct never reached the
path that needed them. Five phases, thirteen requirements, all of it argued off
this repo's own trace rather than off a guess.Added
-
Turns on the record, and a spend figure that names what it excludes.
trace closenow persists the tool-call count its return already carried, and
trace renderreports turns per dispatch and per role beside a
turns_unrecordedcounter of their own, so a dispatch that reported tokens but
no turns stays distinguishable from one that reported the reverse. The three
surfaces that priced a run from worker-return tokens (/cad-report,
trace suggest,/cad-progress --trace) now name the three sources that
figure leaves out - the orchestrator's own turns, cross-model provider calls,
and figureless returns - instead of presenting it as the run's cost.
SPEND_EXCLUDESis a frozen export, so the list cannot drift into three
versions of itself. -
A dispatch window budgeted off the run record. Six
workflow.max_dispatch_tokens.<role>ceilings, each defaulted to that role's
75th-percentile terminal window on this repo's own record rounded up to the
next 25,000, plusplanning.mjs trace window [--phase <N>]to apply them. The
ceiling is READ after the fact and never enforced at dispatch time, because
nothing can resize or cancel a dispatch already running, and the report says so
rather than implying a bound that does not exist. -
A direction and a target on every retune suggestion.
trace suggestused
to return a bare config key, so/cad-suggestcould print
workflow.max_plan_tasksand no more. Each keyed suggestion now carries the
direction to move it, the value it holds now, and a target where one can be
READ - stepped down the gate ladderroute-table.jsonstates, or taken off the
rung the record shows a role's escalated resolves landing on. A rule that
cannot price a target omits it rather than guessing, and a target that would
name no actual change is omitted too./cad-suggestpresents the tweaks in a
heading of their own with the receipts below, and ends by offering to route the
change to/cad-configrather than by declining to have an apply arm. -
A bulk-output transport, and a register that holds it. Bulk tool output
rides a scratch file at the five sites that prescribed it inline, the rule is
stated once inreferences/conventions.md, and a 17-row register plus
self-verify check 20 refuses an eighteenth inline site.
Fixed
-
The coordinator figure counted hours that were not the coordinator's. The
residue accumulators were keyed on phase number, so one run's last marker
closed at a different run's last event whenever a phase number spanned several
runs. Keyed oncorrinstead, phase 2's reported residue over the live record
falls from 366,716,303 ms to 3,508,747 ms, and the largest single window from
280,613,472 ms to 1,081,370 ms. The name stays: a corr-scoped gap between
worker brackets is time this coordinator held the run. -
The provider response had no ceiling Cadence owned.
request()now
enforces a 4 MiB response limit with its ownover-responsereason, distinct
fromtransport, onreview,consultanddetect-modelsalike; the failure
envelope carries a sanitized 1024-byte excerpt rather than the whole body. A
credential sanitizer sits beside the URL one, coveringBearerechoes,
name=valuepairs in four spellings, quoted multi-word values and camelCase
keys. -
Local validation admitted findings the canonical schema refuses.
FINDING_SCHEMAnow carries the constraintsvalidateFindingsenforces -
minimum,minLength,maxLength,maxItems- and an 18-fixture agreement
table runs both sides and compares verdicts, so the schema and the validator
cannot disagree silently.cadence-core/bin/lib/schema-eval.mjsis a
keyword-limited, zero-dep evaluator. -
The recovery arm named a timeout the dispatch path cannot produce.
execute.mdnow saysturn cap or unusable return, in those words, held
there by a standing prose-agreement check.maxTurns: 200is named where the
default reviewer claims exemption, checked against the rung files' own
frontmatter rather than a literal. -
Three controls that existed, were correct, and never reached their path.
A milestone close now distills its pruned phases into.planning/ARCHIVE.md
before the directories go, so the recall corpus survives the close.
risk-check statusgains anunfiredrow state and refuses a fired range
carrying no receipt for that range, and every blocking fire writes
--plan --base --shaso a receipt names the range it settles rather than
clearing every later one.references/execute-parallel.mdreaches the
sequential branch's detector, fire and status sequence by pointing at it
instead of copying it. -
The plan-task ceiling re-decided, and left where it was.
workflow.max_plan_taskswas argued against both of its forces - cold-prefix
cost and context risk - and lands on 8 unchanged, with the arithmetic written
down indesign-notes/dd-plan-task-ceiling.mdwhere a milestone close cannot
prune it.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-