Skip to content

chore(release): 0.0.4 - #16

Merged
anilcancakir merged 2 commits into
masterfrom
chore/release-0.0.4
Aug 25, 2026
Merged

chore(release): 0.0.4#16
anilcancakir merged 2 commits into
masterfrom
chore/release-0.0.4

Conversation

@anilcancakir

Copy link
Copy Markdown
Contributor

What

magic_devtools 0.0.3 to 0.0.4, shipping MagicPerfIntegration (#14), and raising the four sibling dependency floors to what the code actually needs.

The floors were all too low

Every one of the four pins sat below the release that introduced an API MagicPerfIntegration calls:

Dependency Was Now Because
magic ^0.0.6 ^0.0.7 MagicController.onRefreshUI
fluttersdk_dusk ^0.0.9 ^0.0.12 the four perf_readers.dart pointers
fluttersdk_telescope ^0.0.4 ^0.0.5 FramePerfWatcher, TelescopeStore.recentFramePerf / clearFramePerf
fluttersdk_wind ^1.2.1 ^1.5.0 WindPerfCounters, Wind.installPerfResolver()

A caret range resolves to the newest version available, so a fresh resolution always picked up the right siblings and CI stayed green. A consumer whose own constraints hold one of them back would not: pub reports the graph as satisfiable and the build then fails on undefined symbols.

That is not hypothetical. It is what this branch's own CI did while ^1.2.1 was still resolving wind 1.4.1: 18 errors, every one naming WindPerfCounters or installPerfResolver. The run only went green after wind 1.5.0 reached pub.dev, which is the accident these floors were relying on.

What ships in it

MagicPerfIntegration assembles the performance-diagnostic data path across four packages, which can only happen here: dusk's frozen dependency contract forbids it from importing any of the packages whose data it reports, so the pointer assignment has nowhere else to live.

It sets MagicController.onRefreshUI to a counter keyed by controller runtime type, registers a NavigatorObserver that times each route push to the first post-frame callback after the new route builds, installs wind's perf resolver and telescope's FramePerfWatcher, and assigns dusk's four reader and session-hook pointers.

installPre() is where it goes, and it is no longer safe to call late: MagicRouter.addObserver throws once the router has been built. That throw is deliberate, because a swallowed one would produce a report with no route transitions and nothing to explain their absence.

Release gate, against the published graph

Verified with pubspec_overrides.yaml moved aside, so this is the graph an adopter gets:

  • resolves magic 0.0.8, fluttersdk_dusk 0.0.13, fluttersdk_telescope 0.0.5, fluttersdk_wind 1.5.0
  • dart analyze no issues
  • dart format --output=none --set-exit-if-changed lib test clean
  • flutter test 110 passing
  • dart pub publish --dry-run 0 warnings

Publish

Merge, then git tag 0.0.4 && git push origin 0.0.4.

This is the last unpublished work in the ecosystem. Every other package's pub.dev version already matches its default branch.

MagicPerfIntegration, the performance data path assembled in the one package
that can see dusk, telescope, wind and magic at once.

Also raises the four sibling floors to what the code actually needs. They were
magic ^0.0.6, dusk ^0.0.9, telescope ^0.0.4 and wind ^1.2.1, and every one sat
below the release that introduced an API this package calls: onRefreshUI in
magic 0.0.7, the perf_readers pointers in dusk 0.0.12, FramePerfWatcher in
telescope 0.0.5, WindPerfCounters in wind 1.5.0.

A caret resolves to the newest available, so a fresh resolution always picked
the right siblings and CI stayed green. A consumer holding one back would have
had pub call the graph satisfiable and the build then fail on undefined
symbols, which is exactly what this branch's CI did while ^1.2.1 still resolved
wind 1.4.1.

Verified against the published graph with no local overrides: resolves magic
0.0.8, dusk 0.0.13, telescope 0.0.5, wind 1.5.0; analyze clean, format clean,
110 tests green.
@kodizm

kodizm Bot commented Aug 25, 2026

Copy link
Copy Markdown

Note

Kodizm (AI-generated). May contain mistakes; verify before acting.

Correct release bump, and the four raised floors verified as both real and sufficient; the one gap is that README.md's install snippet still advertises the old pins, which now cannot resolve against 0.0.4.

Major

README.md:44 — The install snippet is stale in a way this very release makes fatal: magic_devtools: ^0.0.2 is >=0.0.2 <0.0.3, so a copy-paste cannot pull 0.0.4 at all, and fluttersdk_dusk: ^0.0.9 (>=0.0.9 <0.0.10) plus fluttersdk_telescope: ^0.0.4 (>=0.0.4 <0.0.5) conflict outright with the new floors ^0.0.12 and ^0.0.5, so pub fails resolution rather than merely failing on undefined symbols. This is the same class of problem the changelog entry sets out to fix, and 0.0.3's own changelog states the README snippet pins the versions actually shipped, so the snippet is expected to move with the floors. (correctness/docs)

Minor

CHANGELOG.md:10 — The heading is dated 2026-08-26, one day ahead of today, while the publish step is "merge, then tag". Either it lands a day early or the stamp is wrong; earlier entries are same-day.

Tests

test/perf_integration_test.dart covers the shipped MagicPerfIntegration (110 tests total). Nothing tests the dependency floors themselves, which is inherent: only a resolution at the floors can, and I ran that by hand below.

Checks I ran

  • flutter pub get: resolves magic 0.0.8, fluttersdk_dusk 0.0.13, fluttersdk_telescope 0.0.5, fluttersdk_wind 1.5.0.
  • flutter analyze --no-fatal-infos: No issues found.
  • dart format --output=none --set-exit-if-changed lib test: 0 changed.
  • flutter test: 110 passing.
  • dart pub publish --dry-run: 0 warnings.
  • Floor existence check: fetched magic-0.0.7, fluttersdk_dusk-0.0.12, fluttersdk_telescope-0.0.5, fluttersdk_wind-1.5.0 archives from pub.dev; each contains the API the changelog attributes to it (onRefreshUI, perfSessionEndHook, FramePerfWatcher, installPerfResolver).
  • Floor sufficiency check: in a scratch copy with the four deps pinned to the exact floors (magic 0.0.7, dusk 0.0.12, telescope 0.0.5, wind 1.5.0), flutter pub get resolved, flutter analyze reported no issues and flutter test passed 110. The floors are neither too low nor too high.

…ainst

0.0.3's changelog states the snippet pins the versions actually shipped, "so a
copy-paste resolves to the combination this package is tested against". It had
stopped doing that: magic_devtools ^0.0.2, dusk ^0.0.9, telescope ^0.0.4
against a release that ships 0.0.4, 0.0.13 and 0.0.5.

Not a resolution failure, which is worth being precise about since the review
that raised this read the constraints as `>=0.0.2 <0.0.3` and so on. A caret on
a 0.0.x raises the MINOR for its upper bound, so `^0.0.2` is `>=0.0.2 <0.1.0`
and admits 0.0.4; `^0.0.9` admits 0.0.13 and `^0.0.4` admits 0.0.5, none of
them conflicting with the new floors. Checked with pub_semver rather than
recalled. The snippet was stale against its own stated contract, which is
reason enough.

Changelog heading moved from 2026-08-26 to 2026-08-25, matching the five
sibling releases tagged in this same batch and the UTC day the commits carry.
@anilcancakir

Copy link
Copy Markdown
Contributor Author

Both addressed in 8bcfa9b, and thank you for the floor-sufficiency check: pinning the four deps to the exact floors and getting a clean resolve, analyze and 110 tests is the one verification I could not get from a normal run, since a caret always drifts upward to the newest.

On the Major: the action is right, the mechanism is not. The README snippet was stale and I have refreshed it, but it would not have failed resolution.

A caret on a 0.0.x raises the MINOR for its upper bound, not the patch: Version.nextBreaking branches on major == 0 alone, so 0.0.2 maps to 0.1.0. Checked with pub_semver rather than recalled:

^0.0.2 allows 0.0.4  -> true
^0.0.9 allows 0.0.13 -> true
^0.0.4 allows 0.0.5  -> true
nextBreaking(0.0.2)  =  0.1.0

So ^0.0.2 is >=0.0.2 <0.1.0 and a copy-paste does pull 0.0.4, and neither ^0.0.9 nor ^0.0.4 conflicts with the new ^0.0.12 / ^0.0.5 floors. This is a sticky misreading (it is the same one I corrected in a magic_starter pubspec comment earlier today), which is why I am spelling it out rather than just fixing the line.

What is correct in the finding is the part that matters: 0.0.3's own changelog says the snippet "pins the versions actually shipped, so a copy-paste resolves to the combination this package is tested against", and it had stopped doing that. Now magic_devtools: ^0.0.4, fluttersdk_dusk: ^0.0.13, fluttersdk_telescope: ^0.0.5.

On the Minor: taken. Moved to 2026-08-25, which matches the UTC day these commits carry and the five sibling releases tagged in the same batch (wind 1.5.0, magic 0.0.8, dusk 0.0.13, magic_social_auth 0.0.3, magic_starter 0.0.1-alpha.21). My local clock had rolled past midnight.

On the red CI: infrastructure, not this branch. The run failed in Set up job before Flutter was installed, on Failed to download action 'subosito/flutter-action' with Name or service not known (internal-api.service.iad.github.net:443) after three retries, which is a GitHub-side DNS failure. Re-running.

@codecov

codecov Bot commented Aug 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@kodizm

kodizm Bot commented Aug 25, 2026

Copy link
Copy Markdown

Note

Kodizm (AI-generated). May contain mistakes; verify before acting.

Both earlier findings are addressed in 8bcfa9b and nothing new is introduced; the incremental change is two documentation lines and it is correct.

Since de3f757: the README install snippet moved to magic_devtools: ^0.0.4, fluttersdk_dusk: ^0.0.13, fluttersdk_telescope: ^0.0.5, and the changelog heading moved from 2026-08-26 to 2026-08-25. No code, test or pubspec change.

Your correction on caret semantics stands and my Major overstated the mechanism: ^0.0.2 is >=0.0.2 <0.1.0, so the stale snippet would have resolved rather than failed. The stale-versus-tested-combination point is what the fix was for, and the new pins match what this release resolves against (^0.0.13 sits inside the package's own ^0.0.12 floor, so a consumer applying both gets a satisfiable graph).

Tests

Unchanged by this commit; the 110 passing tests I ran on de3f757 still cover the shipped MagicPerfIntegration.

Checks I ran

  • mcp__kodizm__read_pull_request_diff with since_sha: scope: incremental, 2 files, CHANGELOG.md (+1/-1) and README.md (+3/-3), both read in full.
  • grep over README.md for the old pins (^0.0.2, ^0.0.9, ^0.0.4): only the intended magic_devtools: ^0.0.4 remains, no stale pin left elsewhere in the file.
  • No analyze/format/test run this round: the incremental diff touches only Markdown, so the results from the previous review still hold.

@anilcancakir
anilcancakir merged commit fa692c6 into master Aug 25, 2026
3 checks passed
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