The screens of a platform, from one value typed by its screen registry
(screenSet<AndroidScreens>('android', { SerpTop: Serp, … }): each
definition under its own ScreenId, every screen of the registry, the same
registry the platform's screenEdges are typed by).
layer installs the ScreenCatalog the process needs: the platform (a
trail names it, a retrace checks it) and the screens by id, which the
edges open.
retrace(trail) takes the trail again from the screen the launch opened
(OpenApp first; the screen on top must be the trail's root, opened with
the same input, else ScreenTrailMismatchError): each step's edge, from
the screen the previous step reached — from its item found again by its
identity key in fresh data (ScreenRetraceItemMissingError when it is
gone) — recomputed over the fresh state, so fresh requests go out with
fresh tokens and the navigation is emitted anew. It succeeds with the
screen on top, typed as the union of these screens' handles, told apart by
id (switch (screen.id)); a trail this process wrote narrows it. Its
errors and services are the screens' own: a failing open is
ScreenRetraceStepError with the screen's typed error. A screen on top the
set does not hold is ScreenTrailUnsupportedError, before anything is
sent. A drift of the app version is allowed. A retrace is a transition and
a transaction: when it fails, the stack and the navigation are what they
were before it.
The screens of a platform, from one value typed by its screen registry (
screenSet<AndroidScreens>('android', { SerpTop: Serp, … }): each definition under its ownScreenId, every screen of the registry, the same registry the platform'sscreenEdgesare typed by).layerinstalls theScreenCatalogthe process needs: the platform (a trail names it, a retrace checks it) and the screens by id, which the edges open.retrace(trail)takes the trail again from the screen the launch opened (OpenAppfirst; the screen on top must be the trail's root, opened with the same input, elseScreenTrailMismatchError): each step's edge, from the screen the previous step reached — from its item found again by its identity key in fresh data (ScreenRetraceItemMissingErrorwhen it is gone) — recomputed over the fresh state, so fresh requests go out with fresh tokens and the navigation is emitted anew. It succeeds with the screen on top, typed as the union of these screens' handles, told apart byid(switch (screen.id)); a trail this process wrote narrows it. Its errors and services are the screens' own: a failing open isScreenRetraceStepErrorwith the screen's typed error. A screen on top the set does not hold isScreenTrailUnsupportedError, before anything is sent. A drift of the app version is allowed. A retrace is a transition and a transaction: when it fails, the stack and the navigation are what they were before it.The platform exports
retracenext to itsOpenApp.