• v3.5.2 babde6638a

    v3.5.2 - one reader, one transport
    All checks were successful
    test / node-test (git, 22) (push) Successful in 26s
    test / node-test (git, 24) (push) Successful in 23s
    test / node-test (other, 22) (push) Successful in 20s
    test / node-test (other, 24) (push) Successful in 19s
    test / node-test (planning, 22) (push) Successful in 1m14s
    test / node-test (planning, 24) (push) Successful in 1m13s
    test / node-test (prose, 22) (push) Successful in 35s
    test / node-test (prose, 24) (push) Successful in 28s
    test / node-test (review, 22) (push) Successful in 18s
    test / node-test (review, 24) (push) Successful in 17s
    test / node-test (routing, 22) (push) Successful in 27s
    test / node-test (routing, 24) (push) Successful in 31s
    test / self-verify (push) Successful in 14s
    test / typecheck (push) Successful in 17s
    Stable

    john released this 2026-08-16 16:41:44 +00:00 | 655 commits to main since this release

    Signed by john
    GPG key ID: 693AB15F91734B0C

    Two 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 against v3.3.0.

    Fixed

    • The pre-flight overlap gate could admit a plan pair the commit-time
      enforcement would then refuse to separate.
      plan-overlap and lease-check
      each carried their own comparison over declared paths, so they disagreed about
      what a directory lease covers. Plan 1 declaring files: [src/] beside plan 2
      declaring files: [src/auth.js] passed the parallel-safety check, and then the
      executor's own lease gate refused the commit. Same for src/ against
      src/auth/.

      Containment now has exactly one definition. cadence-core/bin/lib/lease-grammar.mjs
      exports covers, intersects and isRefusedSpelling, and both readers ask it.
      A census test in helper-census.test.mjs goes red if the comparison is pasted
      back anywhere under cadence-core/bin/, test files included, which is the live
      failure mode in this tree rather than a hypothetical one.

      cadence-core/references/plan-frontmatter.md now states the trailing-slash
      directory-prefix form and says outright that src/auth does 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-file
      • trace append --read-file
      • uat record --fields-file
      • milestone-prune --label-file
      • cursor set --next-file

      The rule is stated once, in cadence-core/references/conventions.md under
      ## 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-verify check 19
      text-transport reads that register, so a seventeenth inline site is refused
      rather than noticed later. 13 prose surfaces across workflows/, references/
      and skills/ moved onto the transport, and the tag site now uses
      git tag -a <version> -F <path>.

    • ./a.txt and src//a.txt are refused with a named redundant-path-segment
      diagnostic at both declaration doors
      , the frontmatter files: list and a
      - **Files:** task line. The diagnostic reaches plan-overlap's
      frontmatter_issues and the spelling reaches neither reader. Note that a
      refused declaration drops out of the set, so lease-check's declared count
      falls by one for each, with the diagnostic beside it naming why.

    Downloads