Problem. Reconnect tasks spawn into a bare JoinSet<()> created in main; there is no injectable executor and no typed task handle, and open_block_streams/open_log_streams are async fn that never .await before spawning.
Change. Define trait TaskExecutor { fn spawn(&self, fut) -> TaskHandle; } with a TokioExecutor default, replace the &mut JoinSet params with &dyn TaskExecutor, add an explicit task-exit reason, and drop the vestigial async.
Files. runtime/event_loop.rs, new runtime/task.rs, bootstrap.rs, supervisor/tests.rs.
Risk / size. Medium; signature change on three fns plus a supervisor test. Size: M.
Depends on. the hoisted launch body.
Problem. Reconnect tasks spawn into a bare
JoinSet<()>created inmain; there is no injectable executor and no typed task handle, andopen_block_streams/open_log_streamsareasync fnthat never.awaitbefore spawning.Change. Define
trait TaskExecutor { fn spawn(&self, fut) -> TaskHandle; }with aTokioExecutordefault, replace the&mut JoinSetparams with&dyn TaskExecutor, add an explicit task-exit reason, and drop the vestigialasync.Files.
runtime/event_loop.rs, newruntime/task.rs,bootstrap.rs,supervisor/tests.rs.Risk / size. Medium; signature change on three fns plus a supervisor test. Size: M.
Depends on. the hoisted launch body.