Overhaul changelog system into a single source of truth - #235
Merged
Conversation
changelog.json is now the hand-authored source of truth for both app and server release notes and versions; android/CHANGELOG.md and backend/CHANGELOG.md are generated from it (scripts/generate_changelog.py), reversing the previous flow where a fragile markdown parser regenerated changelog.json at Docker build time and silently discarded hand edits. - app.changelog: loads the two versioned arrays and derives the merged releases list + latest-version fields at load time, so they can't drift. - get_server_version()/get_android_version() now read changelog.json directly instead of build.gradle.kts, fixing a dev/prod mismatch (the Android source tree was never copied into the container). - release_notes replaces the single discord_md field with three audience-specific snippets (discord, play_store, github), read by the new release-notes skill. - generate_changelog.py --check (wired into CI) fails if the generated markdown is stale or if build.gradle.kts versionName disagrees with the newest app_releases entry. - Removed sync_changelog.py, the Docker build-time sync step, and the redundant root CHANGELOG.md/VERSION files. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
android.89be56d7/ was a leftover artifact directory from another tool; PROD_DEPLOYMENT_GUIDE.md is being retired as documentation. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Reconciles the pending build.gradle.kts version bump (1.6.22 -> 1.6.23) with a changelog entry covering what actually shipped since 1.6.22: server-side isIgnored/isWhitelisted computation (fixing item-group filtering and per-game hint scoping), and the collapsed whitelist/ignore sub-menu on the history item detail sheet. Drafted with the new release-notes skill; generate_changelog.py --check now passes clean. Also removes poller.py's own unused, buggy copy of get_app_version() (read build.gradle.kts directly, never called) -- the canonical version lives in app/changelog.py via app.utils now. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Documents the backend half of 3c1b760 (already merged): filtering_service.py and the isIgnored/isWhitelisted fields on history/hint responses. Discord notes are intentionally left blank since the user-facing effect was already announced in the app v1.6.23 release notes; the GitHub notes cover the backend implementation for contributors. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
/api/whats_new grew unbounded as releases accumulate; add an optional ?limit=N param (backward compatible, no cap when omitted). The landing page now requests limit=5 and links to GitHub Releases for full history, which is already the project's de facto complete changelog (used for APK distribution since v1.6.10). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The changelog pipeline had drifted:
backend/app/data/changelog.jsonwas gitignored and regenerated fromandroid/CHANGELOG.md/backend/CHANGELOG.mdat Docker build time by a fragile regex parser, while also being hand-edited directly — so committed edits were silently discarded on every build, and version resolution differed between dev (readsbuild.gradle.kts) and prod (gradle file isn't in the container). This flips the flow:changelog.jsonis now the single hand-authored source of truth, and bothCHANGELOG.mdfiles are derived from it.backend/app/changelog.py(new): loads the two version-independent arrays (app_releases,server_releases) and derives the mergedreleaseslist +*_latest_versionfields at load time, so they can't drift from what's authored.get_server_version()/get_android_version()now readchangelog.jsondirectly instead ofbuild.gradle.kts, fixing the dev/prod version mismatch.release_notesreplaces the singlediscord_mdfield with three audience-specific snippets (discord,play_store,github) — Play Store has a hard 500-char cap the others don't.scripts/generate_changelog.py(new, replacessync_changelog.py): generates bothCHANGELOG.mdfiles fromchangelog.json;--checkmode (wired into CI) fails if the markdown is stale or ifbuild.gradle.ktsversionNamedisagrees with the newestapp_releasesentry.sync_changelog.py, and the redundant rootCHANGELOG.md/VERSIONfiles.release-notesskill (local-only, not part of this PR per this user's global.claude/gitignore convention) now drafts new entries collaboratively in chat.android.89be56d7/) and retiredPROD_DEPLOYMENT_GUIDE.md.Known follow-up:
android/app/build.gradle.ktsis already bumped to1.6.23locally (uncommitted, pre-existing) with no matching changelog entry yet — intentionally left out of this PR since committing it now would fail the new--checkCI gate. It'll land in a follow-up once the 1.6.23 release notes are drafted.Test plan
backend/tests/test_whats_new.py— all 6 tests passpython scripts/generate_changelog.py— regenerates bothCHANGELOG.mdfiles correctly from the new schemapython scripts/generate_changelog.py --check— passes except for the known, expected1.6.23gradle/changelog gapget_server_version()/get_android_version()resolve consistently fromchangelog.json(no more dev/prod split)🤖 Generated with Claude Code