-
v3.5.2 - one reader, one transport
StableAll checks were successfultest / node-test (git, 22) (push) Successful in 26stest / node-test (git, 24) (push) Successful in 23stest / node-test (other, 22) (push) Successful in 20stest / node-test (other, 24) (push) Successful in 19stest / node-test (planning, 22) (push) Successful in 1m14stest / node-test (planning, 24) (push) Successful in 1m13stest / node-test (prose, 22) (push) Successful in 35stest / node-test (prose, 24) (push) Successful in 28stest / node-test (review, 22) (push) Successful in 18stest / node-test (review, 24) (push) Successful in 17stest / node-test (routing, 22) (push) Successful in 27stest / node-test (routing, 24) (push) Successful in 31stest / self-verify (push) Successful in 14stest / typecheck (push) Successful in 17sreleased this
2026-08-16 16:41:44 +00:00 | 655 commits to main since this releaseTwo surfaces where the tree already conceded the correct rule in one place and
prescribed the wrong one somewhere else. Neither is a bug anyone hit yet. Both
came out of an external deep dive againstv3.3.0.Fixed
-
The pre-flight overlap gate could admit a plan pair the commit-time
enforcement would then refuse to separate.plan-overlapandlease-check
each carried their own comparison over declared paths, so they disagreed about
what a directory lease covers. Plan 1 declaringfiles: [src/]beside plan 2
declaringfiles: [src/auth.js]passed the parallel-safety check, and then the
executor's own lease gate refused the commit. Same forsrc/against
src/auth/.Containment now has exactly one definition.
cadence-core/bin/lib/lease-grammar.mjs
exportscovers,intersectsandisRefusedSpelling, and both readers ask it.
A census test inhelper-census.test.mjsgoes red if the comparison is pasted
back anywhere undercadence-core/bin/, test files included, which is the live
failure mode in this tree rather than a hypothetical one.cadence-core/references/plan-frontmatter.mdnow states the trailing-slash
directory-prefix form and says outright thatsrc/authdoes not license
src/authority.js.
Added
-
A file-path transport for every seam flag that carries caller-derived free
text. A capture item, a UAT reply or a milestone label holding$(...)or a
backtick could not ride safely in a double-quoted shell word.planning.mjs
already said so in one place and eleven other sites did it anyway.Five new flags, one reader behind all of them
(cadence-core/bin/lib/text-flag-file.mjs, four refusals: valueless flag,
unreadable path, empty file, both forms given):trace append|close --detail-filetrace append --read-fileuat record --fields-filemilestone-prune --label-filecursor set --next-file
The rule is stated once, in
cadence-core/references/conventions.mdunder
## Caller-derived text, and a committed 36-row register
(cadence-core/bin/lib/text-transport.mjs) records every site with its verdict,
20 caller-derived and 16 out of scope with a reason each.self-verifycheck 19
text-transportreads that register, so a seventeenth inline site is refused
rather than noticed later. 13 prose surfaces acrossworkflows/,references/
andskills/moved onto the transport, and the tag site now uses
git tag -a <version> -F <path>. -
./a.txtandsrc//a.txtare refused with a namedredundant-path-segment
diagnostic at both declaration doors, the frontmatterfiles:list and a
- **Files:**task line. The diagnostic reachesplan-overlap's
frontmatter_issuesand the spelling reaches neither reader. Note that a
refused declaration drops out of the set, solease-check'sdeclaredcount
falls by one for each, with the diagnostic beside it naming why.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-