0.5.0
Correctness release for everything back-button-adjacent, driven by an adversarial audit of 0.4.0.
Highlights:
- System back routes innermost-first everywhere — tabs and nested displays now give dialogs, sheets, and a screen's PopScope/ConfirmPopScope first refusal before the stack pops (per-tab navigatorKeys + maybePop + live NavigationNotification tracking).
- Browser back/forward restores the full typed stack — every history entry carries a full-stack snapshot (RouteInformation.state), so history hops restore in-app depth the URL can't express. Automatic with links/restoreWith.
- AsyncRedirect: gates + hold + fail-closed — declare what's protected with gates:; gated navigation is held off screen while check runs (no flash of protected content), and a throwing check drops the navigation instead of allowing it.
- Core: a redirect no longer breaks pushForResult — the redirect result now reconciles against the proposed entries, keeping the pushed entry's id and awaiter.
- Tabs observers replaced with observersFor — a NavigatorObserver belongs to one Navigator; per-tab factories fix a guaranteed debug crash.
- Memoized pages now rebuild on Theme/locale/media-query changes; unmapped runtime links keep the app where it is; restoration and web-history docs made accurate.
Type-level breaking change: the delegates' Router config type is now NavRouteInformation (uri + state) instead of Uri; BackStackApp/BackStackTabsApp users are unaffected.
Full details in the CHANGELOG.