The validating, credential-injecting request pipeline: match -> policy -> resolve -> validate -> credentials -> execute -> normalize.
Policy comes before the store read, deliberately: matching and the read-only check both read the registry's cached index, so a request this tool is not allowed to make is refused without touching the spec store.
Requests come from the sandbox as JSON-shaped maps (string keys). Errors
return %{phase: atom, message: String.t()} — phase-tagged so tool-layer
error messages can say what failed without leaking internals.
Error messages crossing back to the sandbox are fixed strings wherever the
underlying detail could embed a credential (transport failures, resolver
reasons). The detail goes to Logger instead.
A 401 from the upstream gets one reactive refresh: if the host's resolver
implements OapiCodemode.Credentials.unauthorized/4, the identical
request is re-sent once with whatever credential it hands back.