ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running
fix(mihomo): start core synchronously on first apply; poll in smoke
ApplyConfigDeferredRestart returned before Start() when core was down, so
smoke (and UI) saw running=false right after creating the first listener.
- First start: still synchronous (fail the API if core cannot start)
- Already running: keep async restart for responsive create/update
- smoke-runtime: brief poll for mihomo/status.running