# Discovery scope and endpoint diagnostics Read for ambiguous/missing endpoints, CU/model handoff confusion, unusual RG names or selector/readback errors. Metadata only; no setup or billable probes. ## Separate dependency selections CU extraction uses `content_understanding.endpoint` / `aiServices.uri`; source vectors use `embedding.endpoint` / `embeddingModel.azureOpenAIParameters.resourceUri`. Retain each role's account ID, observed origin and selected deployment separately. The CU key/identity is not evidence of embedding access. For example, CU account A can have no embedding deployment while model account B already hosts a suitable one. Leave A selected for CU; start unresolved `purpose: embedding` discovery in the agreed scope without A's account/name/endpoint. The returned model candidates include `OpenAI` and `AIServices` accounts. A Foundry resource is an `AIServices` model-hosting account, not another mandatory resource. Choose a model account before listing its deployments. An account-list result is not a deployment search; one empty deployment list does not exhaust the scope. Keep the shortlist and choose another candidate, not repeated reads of A. An explicit embedding deployment fixes its own parent account; never overwrite that binding with CU's. Same-account reuse remains valid when both roles are independently verified. Carry the selected embedding origin/deployment unchanged into the source plan; never rewrite hosts or substitute the CU origin. Prefer compatible existing deployments. If the completed agreed search finds none suitable, propose a deployment in a compatible existing account before a new account, with separate approval and model/SKU/quota/access/cost checks. An explicitly selected target failure, denial, timeout or incomplete inventory remains unresolved: no automatic scope expansion, creation or silent fallback. ## Resource groups are not account names `Microsoft.Resources/resourcegroups` permits 1-90 characters: underscores, hyphens, periods, parentheses, and Unicode categories Lu/Ll/Lt/Lm/Lo/Nd (letters or decimal digits). No final period. No alphanumeric-first requirement: `_shared-ai`, `.shared` and `(ops)` are valid. Combining marks, nondecimal numeric characters, whitespace, slashes, percent escapes and controls are not allowed. Use literal names in selectors/ARM IDs, not URL-encoded strings. The helper uses one RG predicate for supplied groups, account/deployment IDs and observed IDs, before filtering account kinds. Thus an unrelated Speech account in a valid RG does not poison a model listing; malformed/foreign scope still blocks the entire result, never silently skips a row. Account/deployment name rules remain separate. Unicode case handling must not merge distinct groups through multi-character folds. Only HTTP paths are UTF-8 percent-encoded. Returned IDs and selection inputs stay literal. Continuations must decode to the same collection and retain the exact ARM host/API and allowed skip-token parameters; they are sent on the validated encoded path. No context change, broader listing or Unicode transliteration. ## Purpose-specific observed origins | Purpose | Accepted suffixes | |---|---| | `embedding` | `openai.azure.com`, `services.ai.azure.com`, `cognitiveservices.azure.com` | | `chat` | Same model origins, independently checked against the KB consumer | | `cu` | Only `services.ai.azure.com`; no model-host substitution | Require `https://