Skip to content

chore(release): complete the 0.86.0 changelog and drop the phantom 0.85.1 - #619

Merged
padak merged 2 commits into
mainfrom
claude/version-0-86-0-release-f260eb
Aug 20, 2026
Merged

chore(release): complete the 0.86.0 changelog and drop the phantom 0.85.1#619
padak merged 2 commits into
mainfrom
claude/version-0-86-0-release-f260eb

Conversation

@padak

@padak padak commented Aug 20, 2026

Copy link
Copy Markdown
Member

What

Release-metadata only. The version bump to 0.86.0 already landed on main (#615); this completes the release notes it generates and removes a version that never shipped.

Rebased onto main after #617 and #618 merged — see "Interaction with #617 / #618" below.

Why

1. Three merged PRs had no changelog entry

git log v0.85.0..main is eight commits. Three were unannounced:

PR What Was in changelog
#616 kbagent token list, POST/PATCH no longer retried on 5xx, exceptionId surfaced no
#556 / #606 merge-request endpoints (Layer 3 client namespace) no
#610 winget release job disabled no

#616 is the notable one — its own commit message says "No version bump: this lands in a stack of PRs released as one version. The (since v0.86.0) doc tags assume 0.86.0 and the bump PR must confirm that." The bump PR did not. The (since v0.86.0) tags in keboola-expert.md and gotchas.md were already correct; only the changelog was missing, so kbagent changelog and the GitHub release body would both have shipped without it.

make changelog-check cannot catch this — it verifies that every published GitHub release has an entry, not that every merged PR has a note.

The retry-policy change in particular is user-visible behaviour that deserves an announcement: a failed POST/PATCH is no longer retried, and a 500 on an unretried write now reports retryable=false.

2. 0.85.1 is a phantom version

pyproject.toml went 0.85.00.85.1 (#614) → 0.86.0 (#615) with no tag in between. There is no v0.85.1 tag, no GitHub release, no wheel — nobody is running it.

format_whats_new() shows the notes of the target version only, not intermediate ones. So every user upgrading 0.85.00.86.0 would have silently missed four fixes that were sitting in the 0.85.1 bucket: the Azure KBC::ProjectSecureKV:: prefix (#607), the parameters wrapper (#605), GCP/Azure ciphertext in sync diff (#612), and the encrypt values docs correction (#613).

The bucket is folded into 0.86.0 verbatim — no wording changed, only the parent key.

3. The phantom leaked into the agent-facing version gates

This is the worse half, and exactly the silent-drift class CLAUDE.md convention #17 warns about:

  • plugins/kbagent/agents/keboola-expert.md told users to "Upgrade to 0.85.1+" — a version they cannot install
  • four gotchas.md entries were tagged (since v0.85.1)
  • two source comments in sync/secrets.py and services/data_app_service.py dated behaviour to 0.85.1

All retagged to 0.86.0.

Interaction with #617 / #618

Both landed on main while this was open; this branch is rebased on top of them.

Notes

Three of the new entries had to be rewritten to lead with a shorter opening sentence: test_newest_release_notes_are_not_truncated enforces that a note's first sentence — which is what the post-update banner and kbagent changelog render as the headline — fits in 160 chars.

keboola-expert.md stays at 61999 bytes, one byte under the 62000 cap (the retag is length-neutral).

Verification

  • make check — green (5691 passed, 12 skipped) after the rebase
  • make changelog-check — all 45 stable releases have entries
  • make version-check — pyproject / plugin.json / marketplace.json / uv.lock all at 0.86.0
  • uv run python scripts/gen_release_notes.py --version 0.86.0 — renders 14 entries, no --released catch-up flag needed now that the phantom bucket is gone

No behaviour change.

@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 2 potential issues.

Open in Devin Review

Comment thread src/keboola_agent_cli/changelog.py Outdated
Comment thread src/keboola_agent_cli/changelog.py
…85.1

The version bump to 0.86.0 already landed on main (#615), but the release
notes it produces were incomplete in two ways.

Missing entries. PR #616 (`token list`, plus the retry-policy and
exceptionId changes) carried no changelog note at all -- its commit message
says "No version bump: this lands in a stack of PRs released as one version.
The (since v0.86.0) doc tags assume 0.86.0 and the bump PR must confirm
that", and the bump PR did not. `make changelog-check` cannot catch this: it
verifies every published GitHub release has an entry, not that every merged
PR has a note. #556/#606 (merge-request endpoints, Layer 3) and #610
(winget job disabled) were likewise unannounced. All four are added.

Phantom 0.85.1. pyproject went 0.85.0 -> 0.85.1 (#614) -> 0.86.0 (#615)
without a tag in between, so 0.85.1 exists only as a changelog bucket -- no
release, no artifact, nobody running it. `format_whats_new` shows the notes
of the *target* version only, so every user upgrading 0.85.0 -> 0.86.0 would
have silently missed those four fixes (Azure ciphertext prefix, the
`parameters` wrapper, GCP/Azure sync ciphertext, the encrypt-values docs).
The bucket is folded into 0.86.0 verbatim.

The same phantom leaked into the agent-facing version gates, which is the
worse half: `keboola-expert.md` told users to "upgrade to 0.85.1+" and four
gotchas.md entries were tagged `(since v0.85.1)` -- a version nobody can
install. Retagged to 0.86.0, along with two source comments.

Three of the new notes had to lead with a shorter sentence to satisfy
`test_newest_release_notes_are_not_truncated` (the headline is the note's
first sentence, capped at 160 chars).

No behaviour change; documentation and release metadata only.
@padak
padak force-pushed the claude/version-0-86-0-release-f260eb branch from 490eac7 to 9a66796 Compare August 20, 2026 03:52
…recognised prefix

Two findings from Devin's review of this PR, plus one they could not see.

The serve route for `token list` was cited as `GET /tokens/{project}`. Both
halves are wrong: the router carries `prefix="/token"` (singular) and the
operation is registered at `/{project}/list`, so the real path is
`GET /token/{project}/list` -- confirmed against the runtime OpenAPI schema,
not the source, because that is what a caller actually hits. Worth noting the
review's proposed correction (`/tokens/{project}/list`) is itself wrong on the
prefix; taking it verbatim would have swapped one 404 for another.

`CI:` is not a recognised note prefix. `_PREFIX_STYLES` / `_PREFIX_RE` in
commands/changelog.py define the set, the module docstring states the contract,
and an unrecognised label renders unhighlighted. Retitled to `Note:`, which
also reads better: the winget job being disabled has a user-facing consequence
(WinGet users stay on the last published version), so burying it under a dim
`Internal:` would understate it.

The finding Devin could not report: the four notification notes carried by
#615/#618 have no prefix at all. They were outside this PR's diff, so no
reviewer looking at the diff would flag them -- but they ship in the same
release block and break the same contract, leaving half of v0.86.0 rendering
flat. Prefixed `New:` / `Note:` with no change of meaning. Every 0.86.0 note
now matches `_PREFIX_RE`, verified by asserting over the live CHANGELOG rather
than by reading.

Each replacement is written to disk on its own. Running several in one script
means a later failed assert discards the earlier successful writes, which is
precisely how #618's stale "server-side ?event=" claim survived its own fix
pass.
@padak
padak merged commit d8f7a7b into main Aug 20, 2026
4 checks passed
@padak
padak deleted the claude/version-0-86-0-release-f260eb branch August 20, 2026 04:00
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