Every animation runs the same four checks on every commit.
No vibes. The verifier formats, analyzes, builds for web, and leak-tests each main.dart against a pinned Flutter SDK. Anything red gets pulled from the catalog until it's fixed.
A snippet that "looks right" can ship a leaking controller, a Hero tag collision, or a Paint allocated inside a 60fps callback. Linting won't catch any of those. The verifier does.
Our hierarchy of trust:
1unsourced claim· "I heard it leaks"
2sourced claim· link to a github issue or doc page
3provable· a test that fails on the wrong version
4machine-verified· CI runs the test, every month, on a pinned stable SDK
counter-example · bad.dart
⨯ fails leakTest
// Every entry ships a bad.dart that fails the same checks.// Proof the pitfall is real, not theoretical.class_RotatingStateextendsState<Rotating>
withSingleTickerProviderStateMixin {
latefinalAnimationController ctrl
= AnimationController(
vsync: this,
duration: Duration(seconds: 1),
)..repeat();
// ⨯ forgot dispose() — Ticker leaks on rebuild@overrideWidget build(BuildContext ctx) =>
RotationTransition(turns: ctrl, child: ...);
}
flutter test --enable-leak-tracking catches this and refuses to publish the entry until main.dart calls ctrl.dispose().
▸Verification status (JSON)— machine-readable, for agents