Skip to content

1.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 12:41
· 8 commits to develop since this release
bb89385

Added

  • WindPerfResolver abstract class (lib/fluttersdk_wind_diagnostics_contracts.dart): a second, separate contract alongside WindDebugResolver, with a single method Map<String, Object?> stats(). Where WindDebugResolver.resolve(Element) resolves per-Element widget state, WindPerfResolver.stats() resolves process-wide performance counters that have no single Element to attach to. The returned map's key set is pinned as the cross-repo contract read by fluttersdk_dusk's performance snapshot, all int: cacheHits, cacheMisses, cacheBypasses, cacheSize, wDivBuilds, wTextBuilds. Additive-growth rule applies: new keys are a minor bump, renaming or removing a key is a major bump.

  • WindDebugRegistry perf slot: a second, distinct static slot mirroring the existing debug-resolver triad. WindDebugRegistry.currentPerf (getter, null when unregistered), WindDebugRegistry.registerPerf(resolver) (canonical install path, idempotent, most-recent-call wins). resetForTesting() now clears both slots. Registering a perf resolver never touches the debug slot and vice versa.

  • WindDebugRegistry.registerPerfForTesting: the sibling of registerForTesting, and it exists for the same reason. registerPerf is documented as wind's canonical install path, so a consumer's test installing a fake through it reads as production wiring at the call site.

  • 6 contract tests (test/fluttersdk_wind_diagnostics_contracts_test.dart): null-when-unregistered, register stores + lookup via stats(), resetForTesting clears the perf slot, registering a perf resolver leaves the debug slot untouched, registerPerf idempotency (most-recent-call wins), and registerPerfForTesting touching only the perf slot.

Changed

  • The coverage gate is no longer balanced on a single line. WindDebugRegistry._() is a private constructor whose only job is to stop this static-only registry being instantiated, so no test can reach it, and it was one of only five executable lines in the package: coverage sat at exactly 80.00% (LH=4, LF=5) against an 80% floor, and one new uncovered line anywhere would have failed CI. It now carries // coverage:ignore-line with the reason above it, which takes the count to 100.00% (LH=4, LF=4). This adds no test; it stops counting a line that cannot be tested. Verified that flutter test --coverage honours the pragma in this toolchain rather than assuming it. (lib/fluttersdk_wind_diagnostics_contracts.dart)

Fixed

  • analysis_options.yaml now carries the analyzer.exclude block that the Flutter tool's migrator writes, so the migrator is a no-op and a CI checkout stays clean. The migrator runs on every flutter pub get, which is the first step of both ci.yml and publish.yml, and flutter pub publish --dry-run later in the same job then reported 1 checked-in file is modified in git and exited 65. Nothing had caught it because the last CI run here predates the migrator (2026-05-21); the next run on any branch would have failed, and the publish workflow shares the step, so it would have blocked a release too. Verified by reproducing the exit 65 and then confirming a second pub get leaves the tree clean with the explanatory comment intact. The same fix landed in fluttersdk_wind as #178.