Skip to content

v5.35.0

Choose a tag to compare

@github-actions github-actions released this 18 Aug 21:39
· 6 commits to main since this release
9fed866

v5.35.0 -- 2026-08-18

Summary

  • The generation unit is now the section, and it has a contract.
    python -m src.draft unit says exactly what one section is generated
    from -- its slice of the outline, the sources it is grounded in, and
    (from the next release) the registry excerpts -- and hashes those inputs
    so an unchanged unit costs nothing to re-run.
  • Acceptance is recorded rather than asserted. unit accept writes a
    record only after the project's one gate has passed on the draft, and
    unit status re-derives every digest, so a book's state is a fact on
    disk rather than a memory.
  • Second piece of the book-scale track (#135), on top of v5.34.0's outline.

What's Changed

  • Fix the generation unit at the section, with a hashed input contract by @prasadtalasila in #250

Full Changelog: v5.34.0...v5.35.0

In Detail

python -m src.draft unit contract content/drafts/twins sec-model --source smith_2024
python -m src.draft unit accept   content/drafts/twins sec-model --source smith_2024
python -m src.draft unit status   content/drafts/twins
  • The input digest covers the inputs only -- never the unit's own prose,
    its sign-off state, or its path. A digest that moved when the output moved
    could not answer "does this need regenerating?", which is the only question
    it exists for.
  • accept invokes the citation gate; it is not a second gate. A unit the
    gate refuses cannot be accepted, and nothing new blocks a write.
    python -m src.draft gate remains the only gate in the project.
  • status tells five states apart -- unwritten, drafted, accepted,
    stale: inputs changed, stale: draft changed since accepted -- each
    re-derived rather than trusted, and an unreadable record reads as
    drafted.

Records live at content/specs/<book>/units/<unit-id>.json and carry no
timestamp, so accepting an unchanged unit twice is byte-identical.

Upgrading

Nothing to do. The new command is additive and writes only under
content/specs/.