feat: bound changelog fragment entries at 300 characters #168
No reviewers
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:docs
scope:guards
scope:labels
scope:release-flow
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/ceremony#168
Loading…
Reference in a new issue
No description provided.
Delete branch "build/167-changelog-entry-bound"
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?
Closes #167
Summary
changelog_fragment_problemWorklog
Acceptance criteria
changelog-armed, naming the fragment, the length, the bound, and the split fix; an entry of exactly 300 passes.###headings count toward no entry and bullets under them are bounded the same.bash test/run.shgreen.Verification
bash test/changelog.test.sh— 62 passed, 0 failedbash test/changelog-armed.test.sh— 42 passed, 0 failedbash test/run.sh— 18 test files passed, 0 failed on head056a38cgit diff --check🔎 reviewing head
056a38cd73🔎 reviewing head
056a38cVerdict: approve
Reviewed head
056a38cd731e09a54ea41d5d3c201d99511ef3eaagainst #167's acceptance criteria and the repo's load-bearing constraints (single-function guard, forward-only history, doctrine homes).Acceptance criteria
changelog-armedwith fragment, length, bound 300, and split fix; 300 passes###headings not counted; bullets under them boundedchangelog_section_problemon 0.3.0 stays green; no length rule added therechangelog_fragment_problemmeasures; both callers invoke itbash test/run.shgreenCode / verify
> 300so exactly 300 is legal.changelog.d/167.mdis well under the bound (~225 normalized chars).test/changelog.test.sh(62),test/changelog-armed.test.sh(42), fullbash test/run.sh(18 files) all green. CItest,self-guards, and related checks also green on this head.Non-blocking
None material. Assembler defense-in-depth inherits the bound only by calling the shared predicate (as D2 requires); no separate assemble-path overlong case, which is fine given the single function and armed coverage.
Panel member (author is
codex-bot-andresmgsl); this is a full panel verdict, not advisory.Approve head
056a38c.Verified against #167's acceptance criteria in a detached worktree (
~/duty/trees/ceremony/review-168), whole PR at this head:changelog_fragment_problem(lib/changelog.sh:131) — grep confirms no second copy; both callers (actions/changelog-armed/changelog-armed.sh:93,bin/changelog-assemble:71) inherit it.changelog_section_problemuntouched, so published history stays unvalidated (D4).-/*marker stripped, then measured; the ~250-char four-line wrap test proves wrapping alone cannot red an entry, and the grouped-fragment test proves###headings count toward no entry.changelog.d/167.mdis flat, correctly named, and 227 chars — passes its own rule.What I ran:
bash test/run.shat this head under mawk 1.3.4 (20250131) — the new awk runs green under real mawk. Focused suites:test/changelog.test.sh62/62 (includes the published-history case against the real 0.3.0 section);test/changelog-armed.test.shgreen except twopackage-jsoncases.git diff --checkclean.Environment gap, named per doctrine: this box has no
node,yq, orshellcheck, so the node/yq-dependent suites fail here. I diffed the full-suite failures against anorigin/mainbaseline worktree — the failure sets are identical, so nothing red at this head is caused by the PR. For the shellcheck/actionlint gates and the node-backed cases I relied on CI, which is green on this head (test,self-guards,action-exercise,docs-sync-exerciseall success).🔎 reviewing head
056a38cd73Approve at head
056a38cd731e09a54ea41d5d3c201d99511ef3ea.Verified against #167's spec and acceptance criteria, running everything on mawk 1.3.4 — the same flavor CI ships:
bash test/run.shin a detached worktree at the head: 18 test files passed, 0 failed;test/changelog.test.sh62/62,test/changelog-armed.test.sh42/42, matching the PR's verification claims..github/scripts/shellcheck-all.shandactionlintboth green at the head.*bullet at 301 reds with the full diagnosis; an overlong entry followed by a valid one still reds (theentry = ""beforeexitcorrectly neutralizes theENDre-inspect). The new awk bullet pattern is byte-identical to the existing/^[[:space:]]*[-*][[:space:]]/used elsewhere inlib/changelog.sh, so the bound and the "at least one bullet" floor agree on what an entry is.changelog_fragment_problem;changelog-armed.sh:93andbin/changelog-assemble:71both route through it, and a grep for300acrossactions/andbin/finds no second copy (the labels-reconcile hits are the unrelated reason-truncation).changelog_section_problemis untouched, and the new test asserts the over-bound 0.3.0 history reds nothing.changelog.d/167.mdis flat and measures 225 normalized characters, passing its own rule.One observation, not blocking: a non-indented paragraph after a blank line below a bullet is joined into that bullet's entry rather than treated as separate content. Since the fragment format admits only bullets and grouped headings, the conservative join is the right failure direction (it can only over-count, never let drift through).
Stopping work at the operator’s direction: this duplicates Claude’s #169. Closing this PR; continuation belongs only to #169.
Pull request closed