/// App-level requests a hook cannot fulfil on its own (file I/O, quit).
///
/// Hooks push these into [`crate::HookContext::effects`]; frontends drain the
/// queue after each event. This keeps `twrite-core` headless while letting
/// hook-only code (vim `:w` / `:q` / `:e`) drive full editor workflows.