A challenge screen's handle: the server brought it over the screen in front,
so it is reached from nothing and has no back (the person cannot leave a
challenge without answering it; an in-challenge "back" is the screen's own
server action where the challenge offers one).
The union of every challenge screen reads each through the challenge screen
declaration (ChallengeHandleOf<ChallengeScreens[K]>), so screens that lead
to each other type without a cycle: an action's declared answer names this
union, and the union names each definition through the declaration.
A challenge screen's handle: the server brought it over the screen in front, so it is reached from nothing and has no
back(the person cannot leave a challenge without answering it; an in-challenge "back" is the screen's own server action where the challenge offers one).The union of every challenge screen reads each through the challenge screen declaration (
ChallengeHandleOf<ChallengeScreens[K]>), so screens that lead to each other type without a cycle: an action's declared answer names this union, and the union names each definition through the declaration.