Skip to content

feat(meta): What's New panel after upgrades + admin update indicator#134

Merged
bndct-devops merged 1 commit into
feat/timeline-polishfrom
feat/whats-new
Jul 19, 2026
Merged

feat(meta): What's New panel after upgrades + admin update indicator#134
bndct-devops merged 1 commit into
feat/timeline-polishfrom
feat/whats-new

Conversation

@bndct-devops

Copy link
Copy Markdown
Owner

Overnight run PR 3/12 — stacked on #133; merge in order.

What

  • What's New panel: GET /api/meta/whats-new parses CHANGELOG.md for the section matching the running version ([Unreleased] fallback on dev builds). The frontend shows a one-time dismissible overlay when the server's version differs from the last version this browser saw (tome_seen_version). Fresh browsers baseline silently — a first login never opens with a modal. CHANGELOG.md is now copied into the Docker image.
  • Update indicator: GET /api/meta/update-check (admin-only) compares the running version to the latest GitHub release — in-memory cache, 24h TTL (1h after network failures), 5s timeout. Settings → About renders a quiet "vX.Y.Z available" link only when something is newer; nothing pops up. TOME_UPDATE_CHECK=false disables the outbound lookup entirely (air-gapped installs); nothing else phones home.

Notes

  • The panel portals to document.body — it's mounted from the app header, whose backdrop-blur makes it a containing block for fixed elements; without the portal the overlay centered on the header bar (caught during visual verification, geometry re-measured after: panel exactly centered).
  • Versioning: backend.__version__ reads package metadata, which tracks pyproject.toml's version — bumped at release, so the panel fires exactly on release upgrades. Dev quirk: a stale editable-install can report an old version locally; irrelevant in Docker where pip install . runs at build.

Verification

  • 9 new backend tests: changelog parsing (version match, Unreleased fallback, bold-lead split, continuation folding), update-check availability/parity/caching/network-failure/env-gate/admin-only.
  • End-to-end in the browser: seeded an old tome_seen_version → panel appears with release entries; "Got it" stores the version; measured centered geometry post-portal-fix.
  • Frontend build/typecheck clean.

GET /api/meta/whats-new parses CHANGELOG.md for the running version's
section (Unreleased fallback for dev builds); the frontend shows a one-time
dismissible panel when the server version differs from the last one this
browser saw. Fresh browsers baseline silently — first login never opens
with a modal. Panel portals to <body>: the header that mounts it has
backdrop-blur, which would otherwise contain the fixed overlay.

GET /api/meta/update-check (admin-only) compares against the latest GitHub
release, cached in memory 24h (1h after failures), gated by
TOME_UPDATE_CHECK (default true). Settings -> About shows a quiet
"vX.Y.Z available" link only when something is newer.

CHANGELOG.md is now copied into the Docker image for the panel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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