The platform's app process entry over one launch declaration: OpenApp(input)
at the edge, where input is the declaration's launch input. The
declaration is installed by the platform and read here; a platform that has
none yet passes undefined, which the first overload types without erasing
anything — the declared overload is read from declareLaunch's inference, so
a real declaration always brings its screen's data, actions and services and
its burst's.
A logged-out process is LoggedOut straight away and sends nothing (the session scope is the one derivation of "a user session exists"). A logged-in one needs the platform's launch declaration first — known before any request, so a missing one is ScreenLaunchNotDeclaredError with nothing sent — and the declaration's screen must be in the runtime's screen set (ScreenLaunchScreenNotInCatalogError). A process the entry already started is AppAlreadyStartedError; a launch that runs meanwhile is ScreenEnterConcurrentError. All refuse before touching the process.
The rest is one transition and one transaction on the process stack: the
session navigation starts (BeginSessionNavigation, so the first screen's
navigate takes ordinal 1; the screen in front stays — a new process has
none, and a process that just logged in keeps the screen the user logged in
from until the first screen comes, as the Android 448 recording shows), the
declaration's burst runs — the first screen opens through the core launch
edge (enterRoot) at its firstScreen mark — and the launch flag is set. A failed launch restores the navigation and the stack it found
(root included) and what was sent stays sent. The launch flag is set at the
mark, after the first screen entered: a burst failing before the mark
leaves the process unlaunched and a retry is allowed, one failing after it
is refused on the next call with AppAlreadyStartedError; a refused
one changed nothing.
The platform's app process entry over one launch declaration:
OpenApp(input)at the edge, whereinputis the declaration's launch input. The declaration is installed by the platform and read here; a platform that has none yet passesundefined, which the first overload types without erasing anything — the declared overload is read fromdeclareLaunch's inference, so a real declaration always brings its screen's data, actions and services and its burst's.A logged-out process is LoggedOut straight away and sends nothing (the session scope is the one derivation of "a user session exists"). A logged-in one needs the platform's launch declaration first — known before any request, so a missing one is ScreenLaunchNotDeclaredError with nothing sent — and the declaration's screen must be in the runtime's screen set (ScreenLaunchScreenNotInCatalogError). A process the entry already started is AppAlreadyStartedError; a launch that runs meanwhile is ScreenEnterConcurrentError. All refuse before touching the process.
The rest is one transition and one transaction on the process stack: the session navigation starts (
BeginSessionNavigation, so the first screen'snavigatetakes ordinal 1; the screen in front stays — a new process has none, and a process that just logged in keeps the screen the user logged in from until the first screen comes, as the Android 448 recording shows), the declaration's burst runs — the first screen opens through the core launch edge (enterRoot) at itsfirstScreenmark — and the launch flag is set. A failed launch restores the navigation and the stack it found (root included) and what was sent stays sent. The launch flag is set at the mark, after the first screen entered: a burst failing before the mark leaves the process unlaunched and a retry is allowed, one failing after it is refused on the next call with AppAlreadyStartedError; a refused one changed nothing.