Skip to content

fix(update): warn when the cumulative changelog could not be fully loaded (v1.38.3) - #67

Merged
iscarelli merged 1 commit into
mainfrom
fix/update-notes-fallback-notice
Jul 28, 2026
Merged

fix(update): warn when the cumulative changelog could not be fully loaded (v1.38.3)#67
iscarelli merged 1 commit into
mainfrom
fix/update-notes-fallback-notice

Conversation

@iscarelli

Copy link
Copy Markdown
Owner

Why

/admin/update shows the notes of every version between the installed one and the latest release (since v1.38.0). When the raw CHANGELOG.md fetch or the slicing fails, cumulative_release_notes() falls back to the last release's body — silently. A truncated history was indistinguishable from a complete one, so someone several versions behind would believe nothing else had changed.

What changed

  • cumulative_release_notes() now returns (notes, complete)complete is True only when the CHANGELOG was really sliced, False on every fallback path (no tag, fetch raised, slice matched nothing). The fail-open behaviour is unchanged: it still never raises and never blanks the card.
  • New notes_incomplete_warning(complete, current, latest) decides whether the warning is worth showing. It stays quiet for a single patch bump directly above the installed version, where the last release's notes already are the whole story.
  • /admin/update renders a discreet text-muted warning inside the existing collapse, with a link to the GitHub releases page.
  • New strings translated in _EN and _ES.

Verify

.\run-tests.ps1179 passed. New coverage: the fallback path still returns the last-good notes and reports complete=False; the happy path reports True with more than one version section; three unit tests for the warning rule; two rendering tests on /admin/update (warning present when the fallback is forced, absent when the slicing works).

Note for future test authors

routes/admin.py does from app import current_version — a plain-name import bound at import time. monkeypatch.setattr(app_module, "current_version", ...) therefore does not change what the route sees. The new rendering tests use the real VERSION value instead of faking it.

🤖 Generated with Claude Code

…aded

The update page slices every CHANGELOG section between the installed version
and the latest release. When that fetch or slice fails it falls back to the
last release's notes alone — silently, so an incomplete history looked exactly
like a complete one.

cumulative_release_notes() now reports whether the notes were really sliced,
and the page shows a discreet warning (with a link to the GitHub releases) when
they were not. The warning is suppressed for a single patch bump directly above
the installed version, where the last release's notes already are the whole
story.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@iscarelli
iscarelli merged commit 6a8d1db into main Jul 28, 2026
4 checks passed
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