App contract
app/mainrender is always required; handle is required when events can arrive; resolve is required when non-timer capability requests can complete.
The entry module returns one instance from App.compose. Initial render describes the screen without side effects; later handle or resolve calls update module state, then Luastra renders again.
Implement handle before declaring controls, timers, lifecycle behavior, history, or media-state events. Implement resolve before starting Host, Server, or Media requests. Timer acknowledgements do not enter resolve; timer expiry enters handle.
Keep app.render deterministic: describe UI from current state, and start timers, storage, media, or server work from initialization or event logic—not as a render side effect.