Repository navigation
Add a What's new sheet after updating - #213
Closed
claude[bot] wants to merge 1 commit into
Closed
claude[bot] wants to merge 1 commit into
claude[bot] wants to merge 1 commit into
Conversation
The first launch after an update opens on the new version's release notes, and Help > What's New in Blurt reopens them. The notes come from a hand-written CHANGELOG.md at the repo root, copied into the app bundle by a build phase and parsed by the engine's Changelog. - Changelog / ChangelogEntry: the CHANGELOG.md format (version + date heading, up to 3 headline features with an optional SF Symbol, a Fixes list), newest first. - Changelog.whatsNewAtLaunch: the launch decision. Shows every entry since the last version seen; a fresh install records its version without showing anything; an install from before this feature (no version stored, but an update check has completed) shows the current notes once. - LastSeenVersionStore, on a new DefaultsKey case, so Reset covers it. - project.yml: a "Bundle CHANGELOG.md" post-compile script phase. - AGENTS.md: add the CHANGELOG entry before a release bump. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Collaborator
|
Implemented in #214 |
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.
What & why
Before: after updating, nothing in Blurt says what changed. The only release notes are the auto-generated list of PR titles on the GitHub release.
After: the first launch after an update opens a sheet with the new version's highlights from
CHANGELOG.md(up to three features, each with an SF Symbol, title and one sentence, then a Fixes list). "See all releases" links to GitHub Releases, and Return / Continue dismisses it. Help → What's New in Blurt reopens it for the running version, or the newest entry before it.How: the rules live in the engine, as value types with tests:
ChangelogparsesCHANGELOG.md(format documented in a comment at the top of the file).Changelog.whatsNewAtLaunch(current:lastSeen:isConfigured:hasRunBefore:)decides what to show and whether to record the version.LastSeenVersionStorestores the version on a newDefaultsKey.lastSeenVersion, so Reset Blurt clears it.AppDelegate, and rendersWhatsNewSheet. The sheet follows theAPIKeyEditorSheetlayout: 440 pt wide, 20 pt padding,glassButtonStyleCompat(prominent: true), which is.borderedProminent.Bundling: a
postCompileScriptsphase inproject.yml("Bundle CHANGELOG.md") copies the repo-root file into the app's Resources. Its inputs and outputs are declared, so it only re-runs when the file changes. I didn't use a resource entry because the file sits outside the target's sources, and a resource entry would add a repo-root group whose name depends on the checkout directory.About the
.pbxprojchange: I couldn't run xcodegen here, so I did not regenerate the project. I wrote the.pbxprojchanges by hand to match what xcodegen produces: the new source file plus the new phase. The object IDs come from XcodeProj's own deterministic reference algorithm, which I checked against existing IDs in this project. The xcodegen drift check on CI is what confirms the result is byte-identical. If you'd rather, runningxcodegen generatelocally should produce no diff.Fresh install vs. upgrade:
LastUpdateCheckStore). If one has, the sheet shows the current version's entry once, since the previous version isn't known. If not, it only records.Because v0.1.57 is already out, anyone updating to the next build sees the 0.1.57 notes, unless that release adds its own entry first. AGENTS.md now says to add the entry before the bump.
How it was tested
This was written in a Linux sandbox with no Swift toolchain, so nothing Swift was built or run locally. CI on macos-26 is the authority on whether it builds and the tests pass.
Locally I ran:
scripts/check-invariants.shand its--self-test: pass.scripts/check.sh --portable: passes; swift-format, SwiftLint, actionlint, zizmor, shellcheck and shfmt were not installed, so those were skipped.CHANGELOG.md,AGENTS.mdandproject.yml: pass.New engine suites:
ChangelogTests(including a parse of the realCHANGELOG.md),WhatsNewLaunchTests(one test per launch case) andLastSeenVersionStoreTests.PersistedSettingsTestsnow covers the new key. The sheet itself hasn't been looked at on a Mac yet.scripts/check.shpasses (or CI will, if I'm not on a Mac)🤖 Generated with Claude Code