Service route hostnames are derived through lossy normalization, so distinct configured names can map to the same host. In openScriptAsync, the new PTY is inserted into state.running before
outes.register can throw on that collision; the failure path does not close the PTY or remove the running entry. Reproduce by starting two services whose names normalize to the same hostname. The second start reports failure but leaves a running entry/process behind and cannot be retried normally. Validate/reserve the route before spawning, or roll back both the route and process state on failure.
Service route hostnames are derived through lossy normalization, so distinct configured names can map to the same host. In openScriptAsync, the new PTY is inserted into state.running before
outes.register can throw on that collision; the failure path does not close the PTY or remove the running entry. Reproduce by starting two services whose names normalize to the same hostname. The second start reports failure but leaves a running entry/process behind and cannot be retried normally. Validate/reserve the route before spawning, or roll back both the route and process state on failure.