Skip to content

fix(changelog): stop two 0.84.0 notes from being shown cut off mid-clause - #591

Merged
padak merged 2 commits into
mainfrom
claude/fix-changelog-headlines
Aug 14, 2026
Merged

fix(changelog): stop two 0.84.0 notes from being shown cut off mid-clause#591
padak merged 2 commits into
mainfrom
claude/fix-changelog-headlines

Conversation

@padak

@padak padak commented Aug 14, 2026

Copy link
Copy Markdown
Member

Caught by Devin on #590, after that PR had already merged — worth fixing before the 0.84.0 tag, since it is what users will read.

The problem

A note's first sentence becomes its one-line summary in kbagent changelog (the default, non---full view) and in the post-update "What's new" banner, truncated at CHANGELOG_HEADLINE_MAX_CHARS = 160. Two 0.84.0 notes opened with a longer sentence, so the cut landed mid-clause:

New: a `kbagent-promotion-pipeline` skill that generates a from-scratch GitHub
Actions setup promoting configurations from a SOURCE project (dev) to a …

The destination project and the PR gate — the actual point — are gone. The auth login-password note spent its entire budget on the flag signature before saying what the command does.

The fix

Both notes now lead with a short, self-contained sentence and carry the detail in later ones. Nothing is dropped, only reordered:

before after
login-password 156 chars, cut 113 chars, complete
promotion-pipeline 152 chars, cut 117 chars, complete

The test, and its deliberate scope

TestLiveChangelogHeadlines checks the newest version only. That is not laziness: 241 of 588 historical entries (41%) are cut the same way. Rewriting already-published release notes to satisfy a test is not worth it, and a test that fails on history gets suppressed rather than fixed. The entries an author can still change are the ones worth guarding.

It runs against the live CHANGELOG, unlike its neighbours in that file, which use synthetic entries on purpose so they stay green as notes change — this one is checking the authoring contract, not the renderer, so it has to read the real thing. Verified A/B: it fails on the pre-fix notes naming both, passes after.

Note this is the same shape as #585 — an invariant stated in prose (module docstring, CONTRIBUTING "Releasing a new version" step 2) that nothing enforced.


Open in Devin Review

…ause

Each note's first sentence becomes its one-line summary in `kbagent changelog`
and in the post-update "What's new" banner, capped at 160 chars. Two 0.84.0
notes opened with a sentence longer than that, so the summary broke off before
the point of the change -- the promotion-pipeline note ended at "from a SOURCE
project (dev) to a …", losing the destination and the PR gate, and the
login-password note spent its whole budget on the flag signature.

Both now lead with a short, self-contained sentence and carry the detail in
later ones. No information is dropped; only the order changes.

A test guards the newest version's notes, and only those: roughly 40% of the
historical entries are cut the same way, and rewriting already-published
release notes to satisfy a test is not worth it. The entries an author can
still fix are the ones worth guarding, and nothing else checks this -- every
other test treats a note as an opaque string.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Open in Devin Review

Comment thread src/keboola_agent_cli/changelog.py
….84.0

The command is not in any released version. It merged after v0.82.0 was cut
and ships in 0.84.0, but fifteen places across CLAUDE.md, the agent prompt,
the plugin CLAUDE.md and the skill references advertised it as 0.81.0+.

That is the failure convention #17 exists to prevent: the agent prompt's
VERSION GATE reads those numbers to decide whether a command is available, so
a user on 0.81.0 or 0.82.0 would be told to run something their install does
not have -- and the gate is meant to be the thing that stops exactly that.

Verified against the tag rather than the changelog: `git grep login_password
v0.82.0 -- src/` finds nothing, while main has it in six files. The
mcp_tool_tasks doctor check, which also claims 0.81.0, is left alone -- it is
present at v0.82.0 (three files), so its number is right.
@padak
padak merged commit 0ff5390 into main Aug 14, 2026
4 checks passed
@padak
padak deleted the claude/fix-changelog-headlines branch August 14, 2026 10:36
padak added a commit that referenced this pull request Aug 14, 2026
#591 added a test asserting the newest version's release notes are not shown truncated. #589 was written and CI'd before that test existed and was never re-run against the newer main, so both PRs were green and merging them in order produced a red main.

Its Tests note opened with a 161-character sentence, one over CHANGELOG_HEADLINE_MAX_CHARS, so the summary broke off at '... and CI stayed green …'. One dash becomes a period: same words, 161 -> 99 chars.

This is the failure mode issue #585 describes -- CI checks the merge commit but only recomputes it when the PR is updated, so a branch that sits while main moves reports green for a merge that no longer exists. Second occurrence today; #560 hit it earlier at 33 commits stale and was caught only because the merge was simulated by hand.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant