chore(release): 0.0.27 (leaves the alpha rail, magic_notifications ^0.3.0) - #129
chore(release): 0.0.27 (leaves the alpha rail, magic_notifications ^0.3.0)#129anilcancakir wants to merge 2 commits into
Conversation
|
Ordering note, from the session working #128. This release does not contain #128, which adds the half of the push identity the package was missing: Cutting 0.0.27 first bakes that gap into the version that leaves the alpha rail, which is the one adopters will reach for. #128 is green (1424 tests, analyzer and format clean) and has answered its kodizm round; it is waiting on re-review only. There is also a mechanical conflict either way: #128 adds a CHANGELOG entry under No action needed from you if the plan was already to take #128 first. Flagging because the two PRs were opened within minutes of each other by different sessions. |
|
Follow-up to my ordering note: #128 merged as It will want a rebase. #128 added its changelog entry under Two things worth knowing for the release itself, neither a blocker:
|
The floor moves for reachability rather than for compilation. A caret raises the minor whenever the major is zero, so ^0.2.0 reads >=0.2.0 <0.3.0, and an app asking for magic_notifications ^0.3.0 alongside this package leaves pub no intersection to satisfy. Pub does not report that as a conflict: it walks magic_starter back to an older release that fits and exits zero, so an adopter upgrading notifications on their own gets a silently downgraded starter. The same shape cost magic_example two starter releases before anybody noticed. The install stub gains the five notifications.* keys the package's own screens ask the host for. bulk_title and bulk_description arrive with 0.3.0's bulk card; delete, delete_failed and channel_sms have been missing since the 0.2.0 floor landed in alpha.26, and Translator.get answers a missing key with the key itself, so all three render as visible machine text today. Also carries the version sweep #126 left half done: CLAUDE.md, README.md and doc/getting-started/installation.md still said alpha.26 against a pubspec at alpha.27.
Twenty-six releases arrived as prereleases of a 0.0.1 that never shipped, which is not what the suffix means: each was the current release, pub.dev showed the package as having no stable version, and flutter pub add magic_starter refused to take it without an explicit prerelease pin. The counter is carried rather than reset, so 0.0.27 follows 0.0.1-alpha.26 and the history stays monotonic. An existing ^0.0.1-alpha.26 pin already covers it: a caret on a zero major ends at 0.1.0. Seven version sites move together: pubspec.yaml, CHANGELOG.md, CLAUDE.md, README.md, doc/getting-started/installation.md, the magicStarterVersion constant the starter:* banners print, and the issue template placeholder. Also fixes the constraint starter:install writes into the host pubspec. It had not moved since the notification screens lived here: ^0.0.1-alpha.1 ends at 0.1.0, while this package's own floor has required 0.1.0 or later since alpha.25, so enabling notifications at install time left pub no intersection and it answered by walking magic_starter back to an older release. The literal is now magicNotificationsConstraint, and a test reads it against the floor in pubspec.yaml so the two cannot drift apart again.
9e50c45 to
62462ed
Compare
Cuts the release that
mainhas been carrying untagged as0.0.1-alpha.27, and takes the package off the alpha rail while doing it. Replaces #127, which carried the first two commits under the old version number.Draft on purpose: this must not merge before
magic_notifications0.3.0 is on pub.dev. That release is merged and dated on its own master and waiting for a tag. Until it existsflutter pub getcannot resolve^0.3.0, so thePublished graphjob is red anddart pub publish --dry-runcannot be clean. TheSibling working treesjob is red for a second, separate reason, and it is the cross-repo gate working as designed: it clonesmagicatmaster, whereplugin-starter.mdis still stampedv0.0.1-alpha.27, soskill_reference_stamp_test.dartfails (1418 passed, 1 failed). fluttersdk/magic#155 is the stamp move; merging it turns that job green on a re-run. Locally, against the sibling checkout carrying that branch, all 1448 pass.The rail
0.0.1-alpha.26is followed by0.0.27. Twenty-six releases arrived as prereleases of a0.0.1that never shipped, which is not what the suffix means: every one of them was the current release, pub.dev showed the package as having no stable version, and a plainflutter pub add magic_starterrefused to take it without an explicit prerelease pin. The counter is carried rather than reset, so the history stays monotonic and a package with 27 releases of surface does not go out labelled0.0.1.No adopter action. A caret raises the MINOR whenever the major is zero, so an existing
^0.0.1-alpha.26reads>=0.0.1-alpha.26 <0.1.0and takes 0.0.27 on the nextpub upgrade.Seven version sites move together:
pubspec.yaml,CHANGELOG.md,CLAUDE.md,README.md,doc/getting-started/installation.md, themagicStarterVersionconstant behind thestarter:*banners, and the issue template placeholder. The sibling half is fluttersdk/magic#155, which movesplugin-starter.md's stamp:test/skill_reference_stamp_test.dartcompares the two whenever a sibling checkout exists.A constraint that was writing a conflict into consumer pubspecs
starter:installwrotemagic_notifications: ^0.0.1-alpha.1into the host's pubspec when the notifications feature was on. That literal had not moved since the notification screens lived in this package. It ends at0.1.0, while this package's own floor has required0.1.0or later since alpha.25, so the two described one dependency with no intersection, and pub answers that by walkingmagic_starterback to a release that fits rather than by failing. Enabling notifications at install time silently scaffolded the app onto an older starter.It is now
magicNotificationsConstraint, and a new test reads it against the floor inpubspec.yaml. Written red first: it failed to compile on the missing constant, then failed on the value, and passes on^0.3.0.The rest, carried from #127
magic_notificationsfloor^0.2.0to^0.3.0. A reachability move, not a compilation one:^0.2.0reads>=0.2.0 <0.3.0, so an app asking for 0.3.0 alongside this package leaves pub no intersection and gets a silently downgraded starter.magic_examplelost two starter releases to exactly this (Make the boilerplate resolve the packages it claims, and rename in one command magic_example#13).notifications.*keys into the install stub.bulk_titleandbulk_descriptionarrive with 0.3.0's bulk card;delete,delete_failedandchannel_smshave been missing since the 0.2.0 floor landed in alpha.26 and render as their own key today.doc/basics/notifications.mddocuments the bulk card, the batch request shape it needs, and all five keys.Verification
Run with a temporary, gitignored
pubspec_overrides.yamlpointingmagic_notificationsat the sibling checkout at its 0.3.0 master, because that release is not published yet.magicresolved hosted at 0.0.10.flutter test: 1448 passed (rebased ontomainat Release the push identity only once the vault agrees #132, which brought the push-identity work with it)dart analyze: no issuesdart format --output=none --set-exit-if-changed .: 0 of 332 changeddart pub publish --dry-run: has to be re-run clean once 0.3.0 is live, which is part of undrafting this.Rebased on 2026-09-11
Three commits landed on
mainafter this branch opened (#130, #131, #132: thestarter:doctorprefix report, the push identity declared offAuth.stateNotifier, and the docs pass). All three wrote into the same unreleased section, so they are part of this release and now sit under[0.0.27]beside the entries below. The rebase was clean, no conflict.Merge order
magic_notifications0.3.0 and let it publish.0.0.27frommainper.claude/commands/release.md, tag0.0.27with novprefix and no--prereleaseflag this time.Author: Anılcan Çakır anilcan.cakir@gmail.com