Start by confirming which deployment mode you are running:
| Mode | Fabric expectation |
|---|---|
mcp-only |
Fabric is skipped. Fabric and combined Fabric live checks should return offline replay. |
byo-fabric |
fabric.workspace_id and fabric.ontology_id must be provided in the ignored YAML ledger. |
full |
LiveKS creates Fabric sample assets before azd up, then connects the generated IDs to Azure AI Search. |
Generated diagnostics are written under ignored paths:
.deployment/
.liveks/<env>.lock.json
deployments/<env>/deployment-summary.md
deployments/<env>/test-report.md
deployments/<env>/e2e-report.json
Start with machine-readable diagnostics:
./liveks doctor --env <environment> --format json
./liveks plan --env <environment> --format json- Confirm the YAML has
version: 2and matchingprofileanddeployment.modevalues. - Remove unknown fields or use the canonical names in
config/schema.yaml. - Keep raw secrets out of YAML; use
user_search_token: {env: FABRIC_USER_SEARCH_TOKEN}. byo-fabricrequires both GUIDs.fullrejects both GUIDs.- Azure Developer CLI must be 1.27.0 or newer and Node.js must be 22 or newer.
plancan create ignored local build artifacts, but a cloud-state change indicates a bug and should be reported.
- Confirm
SEARCH_API_VERSIONis2026-05-01-previewor later when required by the preview. - Confirm the source kind is supported in your search service region.
- Confirm API key or RBAC permissions are valid.
- Confirm GUID fields are valid GUIDs.
- Confirm the MCP server is reachable over HTTPS by Azure AI Search.
- Confirm the tool name in the knowledge source matches the remote MCP server.
- Confirm output parsing is compatible with the tool response.
- Increase
maxRuntimeInSecondsif the tool is slow. - Use query-time header passthrough for per-user credentials.
- Confirm the Fabric workspace ID and ontology ID.
- Confirm the user can access the Fabric workspace and ontology.
- Confirm
x-ms-query-source-authorizationis present in retrieve calls. - Confirm the end-user access token is scoped for Azure AI Search:
https://search.azure.com/.default. - Use
includeReferenceSourceDataduring validation.
- Confirm the subscription has Fabric capacity quota in
FABRIC_LOCATION. - If F2 capacity creation fails, choose another
fabric.locationin the YAML after confirming quota, or usebyo-fabric. - Confirm the capacity admin value is a valid user principal for the target tenant.
- Confirm the Lakehouse CSV load completed before ontology and GraphModel validation.
- A newly created Lakehouse can briefly report that OneLake details are unavailable. LiveKS retries this propagation window automatically; if it still fails, retain the report, run
down, and start a freshuprather than copying generated IDs into YAML. - A fresh full run clears generated Fabric IDs from the selected
azdenvironment and resolves assets by their derived names. YAML remains the ownership ledger; generated IDs are transient deployment state. - If retrieve fails with
GraphIsNotLoaded,GraphNotRefreshable, or natural-language processing errors, wait for GraphModel readiness or rerun the full path after cleanup. - Full mode provisions Fabric before
azd upso long GraphModel readiness does not break the Azure Developer CLI postprovision hook.
- In
mcp-only, this is expected. - In
byo-fabricorfull, live retrieve requires both Fabric IDs and an end-user Search access token for source authorization. - Provide
FABRIC_USER_SEARCH_TOKENserver-side only for private demos, or paste a transient raw end-user token in the app. - The token must be scoped to
https://search.azure.com/.defaultand must not include aBearerprefix. - If the token expires, MCP live can still work while Fabric and combined views fall back to replay.
- The default path uses Azure Static Web Apps with managed Functions API to avoid App Service Plan quota issues.
- If Static Web Apps is unavailable in your Azure region, set
AZURE_STATIC_WEB_APP_LOCATIONto a supported region such aseastus2. - If you opt into the optional App Service path and hit
Microsoft.Web/serverFarmsquota errors, use Static Web Apps or request App Service quota. - Browser code must never receive Search admin keys, Azure OpenAI keys, or long-lived user tokens. Keep retrieve calls behind the server-side API.
FAILmeans the required behavior for the selected mode did not complete.SKIPis acceptable only when the selected mode explicitly does not require that path, such as Fabric checks inmcp-only.- For
byo-fabric, missing Fabric IDs should fail during configuration resolution, before deployment starts. - For
full, missing Fabric IDs are acceptable only if the greenfield Fabric provisioning step produced generated IDs. - Separate MCP and Fabric checks prove both live paths. A combined KB check passes with recognized live evidence from one or both because the Knowledge Base planner chooses which attached source to call for each query.
- Cleanup must pass for release rehearsal runs. Use
--keep-resourcesonly while debugging.
- Read the ownership check in the
downoutput and the redacted.liveks/<env>.lock.json. - BYO Fabric assets must remain untouched even when Azure cleanup fails.
- For full mode, Azure cleanup continues after a Fabric cleanup warning.
- Every live cleanup must pass
resource-group-absent. A full run that created capacity must also passfabric-capacity-resource-group-absentandfabric-capacity-absent. - If an absence check is still pending, wait for ARM deletion propagation and rerun
liveks down --env <environment> --yes --format jsonbefore deleting anything manually. - Before manually deleting a Fabric capacity resource group, list its contents and verify in Fabric that no shared workspace is assigned.
- Return code
4means cleanup needs explicit follow-up; do not report the rehearsal as complete.