cfbef45feb
Nexus and Praxis were the same HTTP client written twice: build the request, stamp the headers, send it, check the status, decode the body, and wrap each failure in an ecosystemError. They differ only in the service name and the version header, so both now embed ecosystemHTTP and call getJSON or postJSON. setEcosystemHeaders took a context beside the request it was stamping. It now reads req.Context(), which is the same value, so a caller cannot pass a context the request never carried. No behaviour change. Same headers, same statuses, same error types. One error changed shape: a malformed base URL used to come back from Nexus resolve as a plain wrapped error and is now an ecosystemError like every other failure on that path. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>