The platform's app process entry over its launch declarations: OpenApp(input)
at the edge, where input is the logged-in declaration's launch input. The
declarations are 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 opens the platform's declared logged-out screen through
the core launch edge and returns its handle in LoggedOut
(LoggedOut.screen), or, with no logged-out declaration, is
LoggedOut straight away and sends nothing (the session scope is the
one derivation of "a user session exists"). The logged-out declaration takes
no launch input. Its screen opens once per process: a second logged-out
launch before a session exists is AppAlreadyStartedError and sends
nothing, so the pre-session burst goes out once; once the login in this
process created a session the logged-in launch below is the process's first
and is allowed. A logged-in one needs the platform's launch declaration first
— known before any request, so a missing one dies with
ScreenLaunchNotDeclaredError, nothing sent — and the
declaration's screen must be in the runtime's screen set
(ScreenLaunchScreenNotInCatalogError, a defect too: both are facts
of the build, not of the server or the caller, so no typed channel carries
them). A process the entry already started is the typed
AppAlreadyStartedError; a launch that runs meanwhile is
ScreenEnterConcurrentError. All stop before touching the process.
The rest is one transition and one transaction on the process stack: the
stack starts over (a logged-out process's login frames leave, and the
launched first screen is the process's root, so a trail taken after the login
starts from it; a new process has none), a user session begins
(BeginSessionNavigation: the foreground surface trail starts empty while the
process's chain stays as it is, so a process that holds none takes ordinal 1
on the first screen and a launch inside a running process continues its chain
until the burst restarts it),
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 its launch declarations: OpenApp(input)
at the edge, where input is the logged-in declaration's launch input. The
declarations are 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 opens the platform's declared logged-out screen through
the core launch edge and returns its handle in LoggedOut
(LoggedOut.screen), or, with no logged-out declaration, is
LoggedOut straight away and sends nothing (the session scope is the
one derivation of "a user session exists"). The logged-out declaration takes
no launch input. Its screen opens once per process: a second logged-out
launch before a session exists is AppAlreadyStartedError and sends
nothing, so the pre-session burst goes out once; once the login in this
process created a session the logged-in launch below is the process's first
and is allowed. A logged-in one needs the platform's launch declaration first
— known before any request, so a missing one dies with
ScreenLaunchNotDeclaredError, nothing sent — and the
declaration's screen must be in the runtime's screen set
(ScreenLaunchScreenNotInCatalogError, a defect too: both are facts
of the build, not of the server or the caller, so no typed channel carries
them). A process the entry already started is the typed
AppAlreadyStartedError; a launch that runs meanwhile is
ScreenEnterConcurrentError. All stop before touching the process.
The rest is one transition and one transaction on the process stack: the
stack starts over (a logged-out process's login frames leave, and the
launched first screen is the process's root, so a trail taken after the login
starts from it; a new process has none), a user session begins
(BeginSessionNavigation: the foreground surface trail starts empty while the
process's chain stays as it is, so a process that holds none takes ordinal 1
on the first screen and a launch inside a running process continues its chain
until the burst restarts it),
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 its launch declarations: OpenApp(input)
at the edge, where input is the logged-in declaration's launch input. The
declarations are 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 opens the platform's declared logged-out screen through
the core launch edge and returns its handle in LoggedOut
(LoggedOut.screen), or, with no logged-out declaration, is
LoggedOut straight away and sends nothing (the session scope is the
one derivation of "a user session exists"). The logged-out declaration takes
no launch input. Its screen opens once per process: a second logged-out
launch before a session exists is AppAlreadyStartedError and sends
nothing, so the pre-session burst goes out once; once the login in this
process created a session the logged-in launch below is the process's first
and is allowed. A logged-in one needs the platform's launch declaration first
— known before any request, so a missing one dies with
ScreenLaunchNotDeclaredError, nothing sent — and the
declaration's screen must be in the runtime's screen set
(ScreenLaunchScreenNotInCatalogError, a defect too: both are facts
of the build, not of the server or the caller, so no typed channel carries
them). A process the entry already started is the typed
AppAlreadyStartedError; a launch that runs meanwhile is
ScreenEnterConcurrentError. All stop before touching the process.
The rest is one transition and one transaction on the process stack: the
stack starts over (a logged-out process's login frames leave, and the
launched first screen is the process's root, so a trail taken after the login
starts from it; a new process has none), a user session begins
(BeginSessionNavigation: the foreground surface trail starts empty while the
process's chain stays as it is, so a process that holds none takes ordinal 1
on the first screen and a launch inside a running process continues its chain
until the burst restarts it),
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 its launch declarations:
OpenApp(input)at the edge, whereinputis the logged-in declaration's launch input. The declarations are 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 opens the platform's declared logged-out screen through the core launch edge and returns its handle in LoggedOut (
LoggedOut.screen), or, with no logged-out declaration, is LoggedOut straight away and sends nothing (the session scope is the one derivation of "a user session exists"). The logged-out declaration takes no launch input. Its screen opens once per process: a second logged-out launch before a session exists is AppAlreadyStartedError and sends nothing, so the pre-session burst goes out once; once the login in this process created a session the logged-in launch below is the process's first and is allowed. A logged-in one needs the platform's launch declaration first — known before any request, so a missing one dies with ScreenLaunchNotDeclaredError, nothing sent — and the declaration's screen must be in the runtime's screen set (ScreenLaunchScreenNotInCatalogError, a defect too: both are facts of the build, not of the server or the caller, so no typed channel carries them). A process the entry already started is the typed AppAlreadyStartedError; a launch that runs meanwhile is ScreenEnterConcurrentError. All stop before touching the process.The rest is one transition and one transaction on the process stack: the stack starts over (a logged-out process's login frames leave, and the launched first screen is the process's root, so a trail taken after the login starts from it; a new process has none), a user session begins (
BeginSessionNavigation: the foreground surface trail starts empty while the process's chain stays as it is, so a process that holds none takes ordinal 1 on the first screen and a launch inside a running process continues its chain until the burst restarts it), 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.