97a8034dfd
Three helpers each re-derived part of the same decision: which backend serves profile P, and does its REST path need a `?profile=` scope. profileUsesPrimaryBackend answered the first half, pathWithGlobalRemoteProfile answered the second, and ensureBackend re-checked globalRemoteActive() around both. Splitting one table across three predicates is how the global-remote case ended up registering reapable pool entries for a backend it never owned. resolveProfileBackendRoute() states the four routes in one place and returns the backend, the descriptor scope, and whether the path needs a query parameter. The call sites read the answer instead of recomputing it. One behavior change falls out: `hermes:api` now passes the primary profile through, so the primary no longer sends itself a redundant `?profile=<self>` on a global remote that already serves it.