# v0.3.3 **Released:** 2026-06-11 Changes since v0.3.2 (`f38b687`..`456344b`). ## Features - **Version label in the UI** (PR #95 by @CaTeIM, closes #94): The running FrankMD version is now visible in two places — a muted `v0.3.3` under the tagline in the **About** dialog, and a centered `FrankMD v0.3.3` footer at the bottom of the **Explorer** sidebar. Useful for bug reports, deciding when to `fed-update`, and general trust signal. Source of truth is `lib/frankmd/version.rb` (`FrankMD::VERSION`), exposed to views via `ApplicationHelper#app_version`. ## Infrastructure - **Version-tag drift guard** (PR #95): A new `.github/workflows/version-guard.yml` runs on every `v*` tag push and asserts that `FrankMD::VERSION` matches the pushed tag. If you forget to bump the constant before tagging, the workflow fails with a clear error message instead of silently shipping a mislabeled image. Lives in its own workflow file so it does not couple to `ci.yml` / `docker-publish.yml`. ## Release Flow Cutting a release now involves two file edits in the same commit: 1. Bump `lib/frankmd/version.rb` to the target version. 2. Add `releases/vX.Y.Z.md` with the changelog. Then tag (`git tag -a vX.Y.Z -m vX.Y.Z`) and push the tag — the publish workflow builds and pushes the multi-arch image; the version guard verifies the constant matches the tag. ## Test Coverage - 450 Ruby tests (+1), 1,393 JavaScript tests (1,843 total).