Move-only completion handle for a task submitted to `run_thread`. Mirrors the slim subset of `std::thread` the engine actually uses (`join` / `joinable` / `detach` / `get_id`) without exposing the `std::future` implementation detail to callers, so storage sites can declare a `fo::thread` member instead of leaking the future type. Unlike `std::thread`, the destructor does NOT call `std::terminate`
source not stored for this graph (policy: none)
no outgoing calls