Six defects in the release/changelog seam #231
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#231
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Six defects in the release/changelog seam, all reproduced by execution against
the current tree. They were filed between 2026-08-05 and 2026-08-08, archived
unread in
.planning/CAPTURE.md, and re-verified live on 2026-08-22.This is the seam
v3.5.8rewrote. Item 6 below and the open item phase 2 filedagainst
release-decision.mjs's JSDoc code set are the same defect class in thesame subsystem, filed two weeks apart, neither aware of the other.
1.
skip/no-version-fieldis a silent no-op no halt coverslib/release-decision.mjs:198-200returnsaction:'skip', code:'no-version-field'rather than a refusal. Running
release-bump.mjs bumpon a manifest with noversionfield and a valid--versionreturns{"ok":true,"action":"skip","reason":"no-version-field"}.workflows/milestone.md:65-85enumerates exactly four halts and none fires on this, so a close continues over a
manifest that was never bumped.
2.
promoteUnreleasedsection bounding is fence-blindsectionEnd(lib/release-decision.mjs:383-389) tests/^## /with no fencetracking, so a
##line inside a fenced code block reads as a section boundary.Observed: the promotion truncates, stranding the fence-close and the trailing
bullet under the
## [Unreleased]stub.3. Scaffold-only bodies defeat
section_emptyreleaseSectionEmpty(lib/release-decision.mjs:391-405) flags any non-blankline, a bare
### Addedincluded. A changelog carrying### Addedand### Fixedwith no bullets returns
sectionEmpty:false, so the close's fourth halt passesover a heading with nothing under it.
4. An absent CHANGELOG.md is indistinguishable from a clean run
release-bump.mjs:335keeps absence aschanged:false, ok:true. A run against adirectory with no
CHANGELOG.mdreturns"changelog":{"changed":false}with nosection_emptyand nomissingkey, andworkflows/milestone.mdnames no suchstate. The caller cannot tell "nothing to do" from "the file is gone".
5. A body-final link-ref definition strands under the Unreleased stub
sectionEnd's backward-scan branch (lib/release-decision.mjs:385-388) strips atrailing
[#NN]: urlline as the trailing ref block. With## [Unreleased]asthe last section, the bullet promotes into the dated section while
[#42]: https://...stays behind under the stub.6. The seam header under-documents its verdict codes
release-bump.mjs:101-103names 4 of the 7 codes, missingunparseable-version,downgradeandnot-an-upgrade. Separately,--version vreturns{"ok":false,"reason":"no-target-version","target":""}becausenormalizeTargetVersion(lib/release-decision.mjs:37-42) strips thevto anempty string rather than returning null.