[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-fabriciq-ontology-consumption-cli":3,"mdc-wyo974-key":34,"related-repo-microsoft-fabriciq-ontology-consumption-cli":4645,"related-org-microsoft-fabriciq-ontology-consumption-cli":4756},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"fabriciq-ontology-consumption-cli","explore and summarize Fabric IQ ontologies","Explore Fabric IQ Ontology (preview) items (read-only) from the CLI to ground an agent before it queries data. Explore, describe, and summarize what an ontology exposes — its entity types, keys, relationships, and the bindings that map each concept onto a lakehouse or Eventhouse source — then route the underlying data query to the matching per-datasource consumption skill (eventhouse-consumption-cli, spark-consumption-cli, sqldw-consumption-cli). Read-only discovery via Get Item Definition; never writes to or alters an ontology. Use to explore or summarize an ontology, describe its schema and data lineage, build agent grounding context, or run an ontology-backed query over the source records. Triggers: \"query fabric ontology\", \"explore fabric ontology\", \"list ontology entities\", \"enumerate ontology entity types\", \"describe ontology\", \"ontology grounding context\", \"ground query with ontology\", \"query ontology entity data\", \"fabric iq ontology consumption\", \"ontology-backed query\", \"ontology entity bindings\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Ontology","ontology","tag",{"name":17,"slug":18,"type":15},"CLI","cli",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Microsoft Fabric","microsoft-fabric",858,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric","2026-07-07T06:52:56.792055",null,237,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"A collection of skills and MCP systems to enable users of CLI, VSCode, Claude to operate over Microsoft Fabric","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills-for-fabric\u002Ftree\u002FHEAD\u002Fplugins\u002Ffabric-skills\u002Fskills\u002Ffabriciq-ontology-consumption-cli","---\nname: fabriciq-ontology-consumption-cli\ndescription: >\n  Explore Fabric IQ Ontology (preview) items (read-only) from the CLI to ground an agent before it\n  queries data. Explore, describe, and summarize what an ontology exposes — its entity types, keys,\n  relationships, and the bindings that map each concept onto a lakehouse or Eventhouse source — then\n  route the underlying data query to the matching per-datasource consumption skill\n  (eventhouse-consumption-cli, spark-consumption-cli, sqldw-consumption-cli). Read-only discovery via\n  Get Item Definition; never writes to or alters an ontology. Use to explore or summarize an ontology,\n  describe its schema and data lineage, build agent grounding context, or run an ontology-backed\n  query over the source records.\n  Triggers: \"query fabric ontology\", \"explore fabric ontology\", \"list ontology entities\",\n  \"enumerate ontology entity types\", \"describe ontology\", \"ontology grounding context\",\n  \"ground query with ontology\", \"query ontology entity data\", \"fabric iq ontology consumption\",\n  \"ontology-backed query\", \"ontology entity bindings\"\n---\n\n> **Update Check — ONCE PER SESSION (mandatory)**\n> The first time this skill is used in a session, run the **check-updates** skill before proceeding.\n> - **GitHub Copilot CLI \u002F VS Code**: invoke the `check-updates` skill (e.g., `\u002Ffabric-skills:check-updates`).\n> - **Claude Code \u002F Cowork \u002F Cursor \u002F Windsurf \u002F Codex**: read the local `package.json` version, then compare against remote via `git fetch origin main --quiet && git show origin\u002Fmain:package.json` (or the GitHub API). If remote is newer, show the changelog and update instructions.\n> - Skip if the check was already performed earlier in this session.\n\n> **CRITICAL NOTES**\n> 1. Ontology is **preview**. The item type value is `Ontology`. Wire format and limitations may change; validate against the current docs before production use.\n> 2. This skill is **read-only**. It never calls `createItem` or `updateDefinition`. For schema changes, delegate to **`fabriciq-ontology-authoring-cli`**.\n> 3. This skill does **not** query source data directly. It enumerates ontology grounding context, then **delegates** the actual data read to the per-datasource consumption skill that matches the binding source kind (see [Query Routing](#query-routing)).\n> 4. Projections (a semantic query layer over ontology entities) are **not yet GA**. Until they ship, all data queries run against the **source** table (`LakehouseTable` or `KustoTable`) using the columns declared in the binding's `propertyBindings[]`.\n> 5. To find the workspace details (including its ID) from workspace name: list all workspaces and use JMESPath filtering.\n> 6. To find the ontology item ID from workspace ID and item name: list all items of type `Ontology` in that workspace and use JMESPath filtering.\n\n# fabriciq-ontology-consumption-cli — Fabric Ontology Consumption via CLI\n\n## Table of Contents\n\n| Task                                             | Reference                                                                                                                    | Notes                                                             |\n| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |\n| Finding Workspaces and Items in Fabric           | [COMMON-CLI.md § Finding Workspaces and Items in Fabric](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#finding-workspaces-and-items-in-fabric)  | **Mandatory** — resolve workspace\u002Fitem IDs before enumerating     |\n| Fabric Topology & Key Concepts                   | [COMMON-CORE.md § Fabric Topology & Key Concepts](..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#fabric-topology--key-concepts)                 | Workspace → Item hierarchy                                        |\n| Authentication & Token Acquisition               | [COMMON-CORE.md § Authentication & Token Acquisition](..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#authentication--token-acquisition)         | Use `https:\u002F\u002Fapi.fabric.microsoft.com` audience for control plane |\n| Core Control-Plane REST APIs                     | [COMMON-CORE.md § Core Control-Plane REST APIs](..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#core-control-plane-rest-apis)                    | Get Item Definition                                               |\n| Long-Running Operations (LRO)                    | [COMMON-CORE.md § Long-Running Operations (LRO)](..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#long-running-operations-lro)                    | `getDefinition` returns an LRO                                    |\n| Rate Limiting & Throttling                       | [COMMON-CORE.md § Rate Limiting & Throttling](..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#rate-limiting--throttling)                         |                                                                   |\n| Authentication Recipes                           | [COMMON-CLI.md § Authentication Recipes](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#authentication-recipes)                                  | `az login`; token acquisition                                     |\n| Fabric Control-Plane API via `az rest`           | [COMMON-CLI.md § Fabric Control-Plane API via az rest](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#fabric-control-plane-api-via-az-rest)      | **Always** pass `--resource https:\u002F\u002Fapi.fabric.microsoft.com`     |\n| Long-Running Operations (LRO) Pattern            | [COMMON-CLI.md § Long-Running Operations (LRO) Pattern](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#long-running-operations-lro-pattern)      | Poll `operations\u002F{x-ms-operation-id}` until `Succeeded`          |\n| Gotchas & Troubleshooting (CLI-Specific)         | [COMMON-CLI.md § Gotchas & Troubleshooting (CLI-Specific)](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#gotchas--troubleshooting-cli-specific) | Token audience, shell escaping                                    |\n| Definition Envelope (parts, payloadType)         | [ITEM-DEFINITIONS-CORE.md § Definition Envelope](..\u002F..\u002Fcommon\u002FITEM-DEFINITIONS-CORE.md#definition-envelope)                  | `InlineBase64` parts pattern — the ontology returns this shape    |\n| Ontology Definition Tree                         | [ONTOLOGY-AUTHORING-CORE.md § Definition Tree](..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#definition-tree)                      | Authoritative file\u002Ffolder layout of parts you will decode         |\n| EntityType & EntityTypeProperty schema           | [ONTOLOGY-AUTHORING-CORE.md § EntityType file](..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#entitytype-file--entitytypesiddefinitionjson) | `valueType` catalog, key \u002F display-name contracts                 |\n| DataBinding schema + source-type mapping         | [ONTOLOGY-AUTHORING-CORE.md § DataBinding file](..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#databinding-file--entitytypesiddatabindingsguidjson) | `LakehouseTable` vs `KustoTable`; `propertyBindings[]` shape       |\n| RelationshipType + Contextualization             | [ONTOLOGY-AUTHORING-CORE.md § RelationshipType file](..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#relationshiptype-file--relationshiptypesiddefinitionjson) | Source\u002Ftarget + linking-table contract                            |\n| Connection Fundamentals (EH source queries)      | [EVENTHOUSE-CONSUMPTION-CORE.md § Connection Fundamentals](..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md#connection-fundamentals) | Cluster URI + DB discovery for `KustoTable` bindings              |\n| Performance Best Practices (EH source queries)   | [EVENTHOUSE-CONSUMPTION-CORE.md § Performance Best Practices](..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md#performance-best-practices) | Time filters, `has` vs `contains`                                 |\n| Spark consumption patterns (Lakehouse sources)   | [SPARK-CONSUMPTION-CORE.md](..\u002F..\u002Fcommon\u002FSPARK-CONSUMPTION-CORE.md)                                                          | For `LakehouseTable` bindings, delegate read                      |\n| SQL consumption patterns (SQL endpoint \u002F DW)     | [SQLDW-CONSUMPTION-CORE.md](..\u002F..\u002Fcommon\u002FSQLDW-CONSUMPTION-CORE.md)                                                          | For `LakehouseTable` SQL-endpoint reads and Warehouse reads       |\n| Ontology Concepts                                | [SKILL.md § Ontology Consumption Concepts](#ontology-consumption-concepts)                                                   | Entity \u002F relationship \u002F binding \u002F grounding context               |\n| Tool Stack                                       | [SKILL.md § Tool Stack](#tool-stack)                                                                                         |                                                                   |\n| Connection                                       | [SKILL.md § Connection](#connection)                                                                                         | Discover workspace, ontology ID; Get Item Definition              |\n| Consumption Scope                                | [SKILL.md § Consumption Scope](#consumption-scope)                                                                           | What this skill does \u002F does not do                                |\n| Grounding Context Extraction (deep reference)    | [grounding-extraction.md](references\u002Fgrounding-extraction.md)                                                                | Decode parts → grounding JSON for agents                          |\n| Query Routing (deep reference)                   | [routing.md](references\u002Frouting.md)                                                                                          | Binding kind → per-datasource skill + query shape                 |\n| Worked Examples                                  | [examples.md](references\u002Fexamples.md)                                                                                        | End-to-end bash recipes (enumerate → route → query)               |\n| Graph Walks (N-hop neighborhood from anchor)     | [graph-walks.md](references\u002Fgraph-walks.md)                                                                                  | Anchor entity + hop budget → composed inline reads, no scripts    |\n| Snappy-Response Discipline                       | [SKILL.md § Snappy-Response Discipline](#snappy-response-discipline)                                                         | Inline-first; script only when stateful or re-runnable            |\n| Must \u002F Prefer \u002F Avoid \u002F Troubleshooting          | [SKILL.md § Must \u002F Prefer \u002F Avoid \u002F Troubleshooting](#must--prefer--avoid--troubleshooting)                                  | LLM decision rules                                                |\n| Agentic Workflows                                | [SKILL.md § Agentic Workflows](#agentic-workflows)                                                                           | Ground-then-query loop, schema-aware query generation             |\n| Agent Integration Notes                          | [SKILL.md § Agent Integration Notes](#agent-integration-notes)                                                               | How this skill composes with authoring \u002F per-datasource skills    |\n\n---\n\n## Ontology Consumption Concepts\n\nA Fabric Ontology item carries its schema as a **tree of JSON files** inside the item definition (same shape as authoring). `Get Item Definition` returns the parts as base64-encoded payloads; the consumption flow is always: **fetch → decode → parse → ground → delegate**.\n\n| Concept | Definition part | What it tells an agent |\n|---|---|---|\n| Entity type | `EntityTypes\u002F{entityTypeId}\u002Fdefinition.json` | Logical type name, key properties (`entityIdParts`), display-name property, static `properties[]`, `timeseriesProperties[]`, value-type catalog |\n| Data binding | `EntityTypes\u002F{entityTypeId}\u002FDataBindings\u002F{guid}.json` | Which physical table backs this entity type, the source kind (`LakehouseTable` \u002F `KustoTable`), `dataBindingType` (`NonTimeSeries` \u002F `TimeSeries`), column-to-property map, and — for timeseries — the timestamp column |\n| Relationship type | `RelationshipTypes\u002F{relTypeId}\u002Fdefinition.json` | Link between two entity types (source\u002Ftarget); name; cardinality hints |\n| Contextualization | `RelationshipTypes\u002F{relTypeId}\u002FContextualizations\u002F{guid}.json` | Which Lakehouse linking table holds the (source key, target key) pairs to realize the relationship |\n\n**Grounding context** = the flattened, agent-ready projection of that tree: a JSON summary an LLM can read to decide *which entity type to query*, *which column holds the key*, *which table to hit*, and *which consumption skill to invoke*. Full shape + extraction recipe: [grounding-extraction.md](references\u002Fgrounding-extraction.md).\n\nProperty `valueType` allowed values (exact): `String`, `Boolean`, `DateTime`, `Object`, `BigInt`, `Double`. Integers are `BigInt` (not `Int64`); GUIDs are modelled as `String`. See [ONTOLOGY-AUTHORING-CORE.md § EntityTypeProperty](..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#entitytypeproperty) for the full source-column → `valueType` mapping.\n\n---\n\n## Tool Stack\n\nOntology consumption uses the same Fabric control-plane tool stack as every other CLI skill — see [COMMON-CLI.md § Tool Selection Rationale](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#tool-selection-rationale) for the canonical list (install commands, prerequisite checks, base64 helpers, JSON tooling) and [COMMON-CLI.md § Authentication Recipes](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#authentication-recipes) for `az login` + token acquisition.\n\nPer-datasource reads are delegated — you do **not** need the Kusto, Spark, or SQL CLI tools installed to use this skill for enumeration. They are only needed if you also invoke the downstream consumption skill in the same session.\n\n---\n\n## Connection\n\nOntology consumption targets the Fabric control plane. You need the **workspace ID** and the **ontology item ID**; everything else (entity types, bindings, source tables, cluster URIs) is recovered by decoding the definition.\n\n- Sign in + acquire the Fabric control-plane token → [COMMON-CLI.md § Authentication Recipes](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#authentication-recipes) (always `--resource https:\u002F\u002Fapi.fabric.microsoft.com`).\n- Resolve workspace ID by `displayName` and the ontology item ID via `GET \u002Fv1\u002Fworkspaces\u002F{WS_ID}\u002Fitems?type=Ontology` filtered by `displayName` → [COMMON-CLI.md § Finding Workspaces and Items in Fabric](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#finding-workspaces-and-items-in-fabric) (covers pagination + JMESPath filtering).\n- Generic `az rest` invocation template → [COMMON-CLI.md § Fabric Control-Plane API via az rest](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#fabric-control-plane-api-via-az-rest).\n\n### Fetching the definition (Ontology-preview LRO gotcha)\n\n`Get Item Definition` is Long-Running-Operation-capable. Depending on tenant\u002FSKU, the POST may return the definition envelope inline (`200 OK`) **or** return `202 Accepted` with an `x-ms-operation-id` header; for the 202 case, poll `https:\u002F\u002Fapi.fabric.microsoft.com\u002Fv1\u002Foperations\u002F{operationId}` until `Succeeded`, then GET `…\u002Foperations\u002F{operationId}\u002Fresult` to receive the `parts[]` array. The generic LRO recipe (capture `x-ms-operation-id`, poll, fetch result) is in [COMMON-CLI.md § Long-Running Operations (LRO) Pattern](..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#long-running-operations-lro-pattern).\n\n> **Ontology-preview gotcha — prefer polling the `operations\u002F{id}` endpoint over the `Location` header.** The public Fabric LRO contract supports either, but on this Ontology LRO the `Location` header has been observed redirecting to an `*.analysis.windows.net` host; polling it with a Fabric-audience token is flaky (intermittent `401\u002F403`). Poll `https:\u002F\u002Fapi.fabric.microsoft.com\u002Fv1\u002Foperations\u002F{operationId}` on the Fabric host instead. If you must follow `Location`, use the audience required by that URL. If a poll ever returns a non-2xx, **read the operation `.error` and stop — never blind-retry the POST**.\n\nThe full fetch-and-decode flow for this skill (LRO capture + part decode + tree reconstruction, Bash + PowerShell + Python helpers) lives in [grounding-extraction.md § Fetch and Decode](references\u002Fgrounding-extraction.md#fetch-and-decode-an-ontology-definition). The sibling `fabriciq-ontology-authoring-cli` documents the same redirect-host workaround in its [LRO Header Capture section](..\u002Ffabriciq-ontology-authoring-cli\u002FSKILL.md#lro-header-capture-with-az-rest) — keep the two in sync if you change one.\n\n### Source-data connections (delegated)\n\nRunning the data query itself (KQL \u002F Spark SQL \u002F T-SQL) uses the connection patterns owned by the sibling consumption skills:\n\n- **Eventhouse** (`KustoTable` bindings) → [EVENTHOUSE-CONSUMPTION-CORE.md § Connection Fundamentals](..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md#connection-fundamentals) + `eventhouse-consumption-cli`\n- **Lakehouse** (`LakehouseTable` bindings) → `sqldw-consumption-cli` (default, SQL analytics endpoint) or `spark-consumption-cli` (only when user explicitly wants PySpark \u002F DataFrame work)\n- **Warehouse bindings** → ❓ not documented in the current shared ontology schema (`LakehouseTable` and `KustoTable` only); if encountered, surface to user rather than silently assuming `sqldw-consumption-cli`\n\nThe `clusterUri`, `databaseName`, `workspaceId`, and `itemId` your delegate needs are all already inside the decoded binding payload — do **not** rediscover them via the item APIs.\n\n---\n\n## Consumption Scope\n\n| Operation | This skill | Delegate to |\n|---|---|---|\n| Enumerate entity types, properties, keys, display names | ✅ | — |\n| Enumerate bindings (source kind, target item, property map, timestamp) | ✅ | — |\n| Enumerate relationships and contextualizations | ✅ | — |\n| Produce an LLM-facing grounding JSON | ✅ | — |\n| Decode the full definition tree for diff \u002F review | ✅ | — |\n| Query ontology-backed **data** in an Eventhouse | Route | `eventhouse-consumption-cli` |\n| Query ontology-backed **data** in a Lakehouse via SQL endpoint (default) | Route | `sqldw-consumption-cli` |\n| Query ontology-backed **data** in a Lakehouse via Spark (explicit Spark ask only) | Route | `spark-consumption-cli` |\n| Query ontology-backed **data** in a Warehouse | Surface (❓ binding shape not in shared schema) | — |\n| Create \u002F alter \u002F rebind entity types \u002F relationships | ❌ | `fabriciq-ontology-authoring-cli` |\n| Refresh an ontology's indexed state | ❌ | Not in preview CLI scope |\n\n> Until projections ship, all data reads are **source queries** — they run against the physical `LakehouseTable` or `KustoTable` using the columns listed in `propertyBindings[]`. Semantic features (inferred joins, derived measures) that require projections are **not available** from this skill; flag them to the user and proceed with source-level filtering.\n\n---\n\n## Grounding Context\n\nDeep recipe + full JSON shape: [grounding-extraction.md](references\u002Fgrounding-extraction.md). Quick index:\n\n| Topic | Reference |\n|---|---|\n| Fetch + LRO + decode parts | [grounding-extraction.md § Fetch and Decode](references\u002Fgrounding-extraction.md#fetch-and-decode-an-ontology-definition) |\n| Reconstruct the definition tree in memory | [grounding-extraction.md § Tree Reconstruction](references\u002Fgrounding-extraction.md#tree-reconstruction) |\n| Produce a grounding JSON summary (entities + bindings + relationships) | [grounding-extraction.md § Grounding Summary Schema](references\u002Fgrounding-extraction.md#grounding-summary-schema) |\n| Diff two ontology versions | [grounding-extraction.md § Diff Two Ontologies](references\u002Fgrounding-extraction.md#diff-two-ontologies) |\n\n**Grounding JSON contract** — the authoritative shape lives in [grounding-extraction.md § Grounding Summary Schema](references\u002Fgrounding-extraction.md#grounding-summary-schema). Routing decisions read these fields per binding:\n\n- `source.kind` (`LakehouseTable` | `KustoTable`) — picks the delegate family.\n- `source.workspaceId` + `source.itemId` — **read from the binding, not the ontology** (cross-workspace bindings are legal).\n- `source.sourceSchema` + `source.sourceTableName` — Lakehouse-only has schema.\n- `source.clusterUri` + `source.databaseName` — Kusto-only.\n- `dataBindingType` (`NonTimeSeries` | `TimeSeries`) + `timestampColumnName` — required for TS routing.\n- `propertyBindings[].sourceColumnName` — the ontology-property → physical-column remap; applied before any query is composed.\n- `relationshipTypes[].contextualizations[].sourceKeyRefBindings[]` \u002F `targetKeyRefBindings[]` — **arrays**; composite keys are legal. Join on **all** entries.\n\nHand a trimmed subset of this JSON (not the raw base64 `definition.parts[]`) to downstream skills.\n\n---\n\n## Query Routing\n\nDeep recipe + per-skill invocation templates: [routing.md](references\u002Frouting.md). Quick decision table:\n\n| Binding source kind | `dataBindingType` | Delegate (default \u002F alternate) | Query shape |\n|---|---|---|---|\n| `LakehouseTable` | `NonTimeSeries` | `sqldw-consumption-cli` (default, SQL endpoint) — `spark-consumption-cli` only when user explicitly wants PySpark \u002F DataFrames | `SELECT \u003CpropertyColumns> FROM \u003Cschema>.\u003CsourceTableName> WHERE \u003CkeyColumn> = \u003Cvalue>` |\n| `LakehouseTable` | `TimeSeries` | `sqldw-consumption-cli` (default) — `spark-consumption-cli` for Spark-only features | `SELECT ..., \u003CtimestampColumn> FROM \u003Cschema>.\u003CsourceTableName> WHERE \u003CkeyColumn> = \u003Cv> AND \u003CtimestampColumn> >= DATEADD(hour,-1,SYSUTCDATETIME())` |\n| `KustoTable` | `TimeSeries` | `eventhouse-consumption-cli` | `\u003CsourceTableName> \\| where \u003CkeyColumn> == \"\u003Cv>\" \\| where \u003CtimestampColumn> > ago(1h) \\| project \u003CpropertyColumns>` |\n| `KustoTable` | `NonTimeSeries` | **Invalid** — preview forbids this | Reject and tell the user the ontology is mis-bound |\n| Any relationship contextualization | — | `sqldw-consumption-cli` (default; linking tables are Lakehouse, joins cleaner in T-SQL) — `spark-consumption-cli` alternate | `SELECT \u003CtargetKeyColumns> FROM \u003ClinkTable> WHERE \u003CsourceKeyColumns> = \u003Csource-values>` then join target-side bindings in a follow-up call |\n\n**Invocation contract when handing off** — this skill resolves the source metadata and **composes the query in the target dialect**, then hands both to the delegate. The delegate (sibling skill) owns the actual connection + execution.\n\n- **Eventhouse delegate** → resolved connection (`clusterUri`, `databaseName`) + **composed KQL text** targeting `sourceTableName` with `timestampColumnName` filter + key predicate.\n- **SQL endpoint delegate** (default for Lakehouse) → resolved connection (`workspaceId`, `itemId`, `sourceSchema`) + **composed T-SQL text**.\n- **Spark delegate** (alternate for Lakehouse) → same resolved connection + **composed Spark SQL text** — use Spark-native time functions (`current_timestamp() - INTERVAL 1 HOUR`); do **not** emit T-SQL `DATEADD` \u002F `SYSUTCDATETIME` to Spark.\n- **Always** translate ontology property names → `propertyBindings[].sourceColumnName` inside the composed query text. The delegate sees only physical columns and will not resolve ontology identifiers.\n- **Always** pass composite `sourceKeyRefBindings[]` \u002F `targetKeyRefBindings[]` — join on **every** element, not just the first.\n\n> Because projections are not yet GA (see Critical Note #4), always translate the **ontology property names** the user mentions back into **physical source column names** (via `propertyBindings[]`) before composing the delegate query. Do not pass ontology property names to the sibling skill — it will not resolve them.\n\n---\n\n## Must \u002F Prefer \u002F Avoid \u002F Troubleshooting\n\n### Must\n\n- **Require explicit ontology context before routing here** — the prompt must mention an \"ontology\" (or reference an ontology item by ID\u002Fname). Generic \"Fabric IQ\" or report\u002Fdataset prompts without ontology context are **not** ontology tasks; defer those to the matching data skill (e.g. `powerbi-consumption-cli` for Power BI reports). This keeps the shared \"Fabric IQ\" brand from over-triggering this skill.\n- **Clarify before routing ambiguous prompts** — if the user asks \"show me aircraft readings\" and multiple entity types bind to aircraft-like tables, ask which entity type \u002F binding to use. Silent guessing produces wrong data.\n- **Resolve `WS_ID` and `ONT_ID` before fetching the definition** — hardcoded GUIDs are a top failure mode.\n- **Follow the LRO pattern on `getDefinition`** — a `202` with `x-ms-operation-id` is normal; do not treat it as success. Poll `operations\u002F{operationId}` until `Succeeded`, then GET `…\u002Foperations\u002F{operationId}\u002Fresult`. Prefer `operations\u002F{operationId}` over raw `Location` polling (analysis.windows.net redirect can be flaky with a Fabric-audience token); if you follow `Location`, use the audience required by that URL. On a Failed\u002Fnon-2xx poll, read `.error` and stop — never blind-retry.\n- **Decode every relevant part before answering** — never respond from a cached partial view of the ontology. The caller may have added \u002F altered entity types since you last read.\n- **Translate ontology property names → source column names via `propertyBindings[]`** before generating any KQL \u002F Spark SQL \u002F T-SQL. The sibling consumption skills see only physical columns.\n- **Respect the binding type** — `TimeSeries` requires a time filter on `timestampColumnName`. Omitting it is a full scan and often rejected by the downstream skill.\n- **Preserve `workspaceId` + `itemId` per binding** — ontology bindings can reference source items in **different workspaces** from the ontology itself; do not assume collocation.\n- **Consult the in-memory grounding before issuing metadata calls** — once the grounding JSON is decoded for the session, every subsequent walk \u002F query reads source-column names, linking-table names, item GUIDs, `clusterUri`, and `databaseName` **from grounding**, not from a fresh `list items` \u002F `get eventhouse` round trip. Re-fetching metadata you already have is the #1 cause of bloated call counts.\n- **Use GUIDs, not friendly names, in source URLs** — many tenants run with `FriendlyNameSupportDisabled`, which silently rejects names like `MyLakehouse.Lakehouse` in OneLake DFS \u002F Fabric REST URLs. Always pull the GUID from grounding and substitute it into the URL.\n\n### Prefer\n\n- **`az rest` with `--body @file.json`** for any downstream KQL \u002F SQL payload that contains `|`, `\"`, or newlines. Inline `--body` breaks under shell escaping — see [EVENTHOUSE-CONSUMPTION-CORE.md](..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md).\n- **Grounding summary JSON** (see schema above) over raw `definition.json` dumps when handing context to another agent.\n- **`take 100` \u002F `TOP 100`** on first read of any entity's data, then refine.\n- **Inline `az rest` \u002F `curl` over Python scripts** for read-only consumption work — graph walks, single-entity lookups, and ad-hoc fan-out reads should compose ≤ ~15 REST calls in the shell. Reach for a script only when the work is **stateful** (envelope assembly, ID maps, LROs that the user wants re-runnable). See [Snappy-Response Discipline](#snappy-response-discipline) and [graph-walks.md](references\u002Fgraph-walks.md).\n- **Cache the decoded definition for the life of one session** — the ontology definition is orders of magnitude smaller than the source data and rarely changes mid-task. Refetch if the user mentions authoring activity.\n- **`project` \u002F `SELECT` only the bound source columns**, not the full physical table — ontology bindings imply an explicit column whitelist.\n\n### Avoid\n\n- **Querying the source table using ontology property names** — those do not exist in the physical schema. Always go through `propertyBindings[]`.\n- **Dropping `where \u003CtimestampColumn> > ago(...)`** on `TimeSeries` \u002F `KustoTable` reads — full scans on streaming tables are the #1 query failure.\n- **Joining across datasource kinds in one delegate call** — if a relationship's two sides live in different source kinds, the delegate cannot express the join. Fetch both sides separately and join in the agent.\n- **Mutating the ontology** from this skill — route all schema changes to `fabriciq-ontology-authoring-cli`.\n- **Passing raw base64 parts to downstream skills \u002F models** — always decode and reshape into a grounding JSON first.\n- **Silently ignoring unknown part paths** — a new preview release may add part kinds; log-and-continue is fine but surface the new part name to the user.\n\n### Troubleshooting\n\n| Symptom | Fix |\n|---|---|\n| `az rest` returns `401 Unauthorized` | `az login`; confirm `--resource \"https:\u002F\u002Fapi.fabric.microsoft.com\"` on the control-plane call (and the matching downstream audience when delegating — `https:\u002F\u002Fkusto.kusto.windows.net` for EH). |\n| `getDefinition` returns 202 with no body | Expected — follow the LRO pattern; capture `x-ms-operation-id` and poll `operations\u002F{operationId}` until `Succeeded`, then GET `…\u002Foperations\u002F{operationId}\u002Fresult`. Prefer `operations\u002F{operationId}`; if polling `Location`, use the audience required by that URL (analysis.windows.net redirects can fail with a Fabric-audience token). |\n| `403 Forbidden` on `getDefinition` | Ontology requires **Contributor** or **Reader on the ontology item** plus workspace access. Ask for role assignment. |\n| `definition.parts[]` is empty | The item was created but no entity types were added. Tell the user and suggest running `fabriciq-ontology-authoring-cli` first. |\n| Downstream KQL returns 0 rows but source table has data | Check the binding's `sourceTableName` casing and that `clusterUri` \u002F `databaseName` in the binding match the live cluster. Casing mismatches cause silent empty results. |\n| `SELECT \u003CpropertyName>` fails with \"invalid column\" | You passed an ontology property name, not a source column name. Remap via `propertyBindings[].sourceColumnName`. |\n| Relationship traversal returns unexpectedly few rows | Contextualization's `sourceTableName` (Lakehouse linking table) may be empty or stale; inspect via `sqldw-consumption-cli` before blaming the ontology. |\n| Mismatched `itemId` \u002F `clusterUri` between binding and live Eventhouse | The backing Eventhouse was recreated; the ontology needs an authoring update. Hand off to `fabriciq-ontology-authoring-cli`. |\n| Base64 decode produces binary junk | Part payload was not `InlineBase64`; check `payloadType`. If it's `VsixPackage` or an unknown kind, skip and warn. |\n\n---\n\n## Agentic Workflows\n\n### Snappy-Response Discipline\n\nConsumption is read-only and should *feel* fast. The default mode is **inline composition** in the shell — not a Python wrapper. Use this checklist before reaching for a script:\n\n| Situation | Inline (`az rest` \u002F `curl`) | Python \u002F shell script |\n|---|:-:|:-:|\n| Single-entity lookup | ✅ | ❌ |\n| Time-series window read | ✅ | ❌ |\n| Graph walk, hop ≤ 2 (see [graph-walks.md](references\u002Fgraph-walks.md)) | ✅ | ❌ |\n| Cross-source relationship traversal (LH keys → KQL fan-out) | ✅ | ❌ |\n| Grounding-JSON extraction (one-shot) | ✅ | ❌ |\n| LRO `getDefinition` poll loop the user wants to re-run | ➖ | ✅ |\n| Ontology authoring \u002F mutation (35-part envelope, ID cross-refs) | ❌ | ✅ (handoff to `fabriciq-ontology-authoring-cli`) |\n| Long-lived seeding \u002F batch loads with retry & checkpoint | ❌ | ✅ |\n\n**Inline-first principles**\n\n1. **Compose, don't script.** Each REST call is independently meaningful; chain with `&&` \u002F `|` \u002F `jq` rather than wrapping in a `.py`.\n2. **Parallelize fan-out.** Independent reads (linking-table queries, per-entity-type IN-list reads) go in `&` with `wait`, not sequential `for` loops.\n3. **One round trip per group.** `WHERE id IN (...)` not N×`WHERE id = '...'`.\n4. **Cache the grounding JSON** for the session — it does not change between queries, and refetching it doubles every walk's latency.\n5. **Stream early.** Show the anchor row and first neighbor group as soon as they return; don't block presentation on the full walk.\n6. **No script unless asked.** If the user says \"save this for later\" or \"re-run nightly\", *then* package as a script. Otherwise keep the work in chat-replayable shell.\n\nIf a task starts to look like it needs > ~20 REST calls, > 2 hops, or persistent state across calls, surface this to the user before scripting — it usually means the question should be narrowed, not automated.\n\n### \"Ground then Query\" Sequence\n\nWhen the user asks to query data through an ontology lens:\n\n```text\nStep 1 → Resolve WS_ID + ONT_ID (list workspaces, list items type=Ontology)\nStep 2 → getDefinition (LRO) → decode all parts → reconstruct tree\nStep 3 → Build grounding JSON (entities, properties, bindings, relationships)\nStep 4 → Disambiguate with the user if multiple entity types \u002F bindings could satisfy the intent\nStep 5 → For the chosen entity type + binding:\n           a. Remap ontology property names → source column names\n           b. Compose the source query (KQL \u002F Spark SQL \u002F T-SQL)\n           c. Hand off to the matching sibling consumption skill with minimal fields\nStep 6 → Post-process results back into ontology-property naming for the user (optional but helpful)\n```\n\n### Schema-Aware Query Generation\n\nAfter a grounding pass, generate queries using the physical columns recorded in `propertyBindings[]`, never the ontology names:\n\n```text\nEntity type \"Aircraft\" with binding:\n  source kind = KustoTable\n  sourceTableName = \"AircraftReadings\"\n  timestampColumnName = \"PreciseTimestamp\"\n  propertyBindings: { AltitudeFt → SourceColumn \"Temp_C\", TailNumber → SourceColumn \"AssetId\" }\n\nUser intent: \"show altitude excursions on aircraft N42ZA in the last hour\"\n\nGenerated KQL (delegated to eventhouse-consumption-cli):\n  AircraftReadings\n  | where AssetId == \"N42ZA\"\n  | where PreciseTimestamp > ago(1h)\n  | project PreciseTimestamp, Temp_C\n  | where Temp_C > 80\n```\n\n### Relationship Traversal\n\n```text\nRelationship \"operates\" (Airline → Aircraft)\nContextualization: LakehouseTable \"HubAircraftAssignment\" with (AirlineId, TailNumber) columns\n  AND two entity-type bindings (Airline on LakehouseTable \"Airlines\", Aircraft on KustoTable \"AircraftReadings\")\n\nUser intent: \"which aircraft does Airline 'ZA' operate and what's their latest reading?\"\n\nStep 1: sqldw-consumption-cli → SELECT TailNumber FROM HubAircraftAssignment WHERE AirlineId = 'ZA'\nStep 2: eventhouse-consumption-cli → AircraftReadings | where AssetId in (\u003CTankIds>) | summarize arg_max(PreciseTimestamp, *) by AssetId\nStep 3: Merge results in the agent; present with ontology-level column names.\n```\n\nFull end-to-end bash recipes (enumerate → ground → route → query) live in [examples.md](references\u002Fexamples.md). For \"show me everything related to X\" prompts, jump straight to the N-hop walk in [graph-walks.md](references\u002Fgraph-walks.md).\n\n### Graph Walks (N-hop from an anchor)\n\nWhen the user gives an instance (\"Panel7\", \"aircraft N42ZA\", \"customer 1234\") and asks for *its neighborhood* — not a single column — use the dedicated **graph walk** pattern instead of inventing a recipe per question.\n\n```text\nAnchor → relationships touching anchor (from grounding JSON, in-memory)\n       → linking-table reads (parallel, one per relationship)\n       → IN-list reads of neighbor entities (one per EntityType)\n       → optional KustoTable telemetry sweep (one per EntityType with TS binding)\n```\n\nFor hop=1 this is typically ≤ 10 round trips and stays inline. Full algorithm, fan-out template, hop budget, and a worked Panel7 example live in [graph-walks.md](references\u002Fgraph-walks.md).\n\n---\n\n## Examples\n\nEnd-to-end worked examples (enumerate an ontology → build grounding JSON → route a source-table query to the correct sibling consumption skill → traverse a relationship across Lakehouse + Eventhouse) live in [examples.md](references\u002Fexamples.md). N-hop neighborhood walks from an anchor instance (Panel7-style) live in [graph-walks.md](references\u002Fgraph-walks.md). Complete fetch-and-decode scripts live in [grounding-extraction.md](references\u002Fgrounding-extraction.md). Per-binding-type invocation templates live in [routing.md](references\u002Frouting.md).\n\n---\n\n## Agent Integration Notes\n\n- This skill is **read-only** on the ontology item. All authoring operations (create, alter, rebind, rename) belong to **`fabriciq-ontology-authoring-cli`** — delegate there.\n- This skill **does not execute data queries itself**. It produces grounding context and a routing decision; the actual source query runs inside the per-datasource consumption skill you delegate to.\n- Supported downstream skills (preview): **`eventhouse-consumption-cli`**, **`spark-consumption-cli`**, **`sqldw-consumption-cli`**. A standalone graph consumption skill does **not** yet exist — if the user asks for a graph-shaped query over relationships, surface that limitation and fall back to per-edge joins via Lakehouse \u002F SQL.\n- Orchestrator agents should hand this skill the **workspace name \u002F ID** and the **ontology display name \u002F ID**; it will return a grounding JSON they can reuse for subsequent delegate calls without re-fetching the definition.\n- When authoring activity is suspected mid-session (e.g., the user runs `fabriciq-ontology-authoring-cli` and then comes back to query), **re-run the grounding pass** — the cached definition is stale.\n- If a **Fabric KQL MCP server** is configured in the user's environment, it can substitute for `az rest` on the Eventhouse delegate leg. The repo's default `mcp-setup\u002Fmcp-config-template.json` does **not** register a `fabric-kql` server, so do not assume that name exists. Either way it does **not** cover ontology control-plane calls, so the fetch \u002F grounding step still uses `az rest`.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,126,284,291,298,1129,1133,1139,1164,1340,1382,1474,1477,1482,1508,1519,1522,1527,1546,1617,1624,1707,1787,1815,1821,1826,1917,1957,1960,1965,2212,2254,2257,2263,2274,2361,2377,2537,2550,2553,2558,2569,2804,2821,2995,3024,3027,3032,3038,3326,3332,3498,3504,3598,3604,3942,3945,3950,3955,3974,4163,4171,4306,4311,4317,4322,4334,4340,4352,4361,4367,4376,4392,4398,4417,4426,4436,4439,4445,4473,4476,4481],{"type":40,"tag":41,"props":42,"children":43},"element","blockquote",{},[44,64],{"type":40,"tag":45,"props":46,"children":47},"p",{},[48,55,57,62],{"type":40,"tag":49,"props":50,"children":51},"strong",{},[52],{"type":53,"value":54},"text","Update Check — ONCE PER SESSION (mandatory)",{"type":53,"value":56},"\nThe first time this skill is used in a session, run the ",{"type":40,"tag":49,"props":58,"children":59},{},[60],{"type":53,"value":61},"check-updates",{"type":53,"value":63}," skill before proceeding.",{"type":40,"tag":65,"props":66,"children":67},"ul",{},[68,95,121],{"type":40,"tag":69,"props":70,"children":71},"li",{},[72,77,79,85,87,93],{"type":40,"tag":49,"props":73,"children":74},{},[75],{"type":53,"value":76},"GitHub Copilot CLI \u002F VS Code",{"type":53,"value":78},": invoke the ",{"type":40,"tag":80,"props":81,"children":83},"code",{"className":82},[],[84],{"type":53,"value":61},{"type":53,"value":86}," skill (e.g., ",{"type":40,"tag":80,"props":88,"children":90},{"className":89},[],[91],{"type":53,"value":92},"\u002Ffabric-skills:check-updates",{"type":53,"value":94},").",{"type":40,"tag":69,"props":96,"children":97},{},[98,103,105,111,113,119],{"type":40,"tag":49,"props":99,"children":100},{},[101],{"type":53,"value":102},"Claude Code \u002F Cowork \u002F Cursor \u002F Windsurf \u002F Codex",{"type":53,"value":104},": read the local ",{"type":40,"tag":80,"props":106,"children":108},{"className":107},[],[109],{"type":53,"value":110},"package.json",{"type":53,"value":112}," version, then compare against remote via ",{"type":40,"tag":80,"props":114,"children":116},{"className":115},[],[117],{"type":53,"value":118},"git fetch origin main --quiet && git show origin\u002Fmain:package.json",{"type":53,"value":120}," (or the GitHub API). If remote is newer, show the changelog and update instructions.",{"type":40,"tag":69,"props":122,"children":123},{},[124],{"type":53,"value":125},"Skip if the check was already performed earlier in this session.",{"type":40,"tag":41,"props":127,"children":128},{},[129,137],{"type":40,"tag":45,"props":130,"children":131},{},[132],{"type":40,"tag":49,"props":133,"children":134},{},[135],{"type":53,"value":136},"CRITICAL NOTES",{"type":40,"tag":138,"props":139,"children":140},"ol",{},[141,160,199,226,267,272],{"type":40,"tag":69,"props":142,"children":143},{},[144,146,151,153,158],{"type":53,"value":145},"Ontology is ",{"type":40,"tag":49,"props":147,"children":148},{},[149],{"type":53,"value":150},"preview",{"type":53,"value":152},". The item type value is ",{"type":40,"tag":80,"props":154,"children":156},{"className":155},[],[157],{"type":53,"value":13},{"type":53,"value":159},". Wire format and limitations may change; validate against the current docs before production use.",{"type":40,"tag":69,"props":161,"children":162},{},[163,165,170,172,178,180,186,188,197],{"type":53,"value":164},"This skill is ",{"type":40,"tag":49,"props":166,"children":167},{},[168],{"type":53,"value":169},"read-only",{"type":53,"value":171},". It never calls ",{"type":40,"tag":80,"props":173,"children":175},{"className":174},[],[176],{"type":53,"value":177},"createItem",{"type":53,"value":179}," or ",{"type":40,"tag":80,"props":181,"children":183},{"className":182},[],[184],{"type":53,"value":185},"updateDefinition",{"type":53,"value":187},". For schema changes, delegate to ",{"type":40,"tag":49,"props":189,"children":190},{},[191],{"type":40,"tag":80,"props":192,"children":194},{"className":193},[],[195],{"type":53,"value":196},"fabriciq-ontology-authoring-cli",{"type":53,"value":198},".",{"type":40,"tag":69,"props":200,"children":201},{},[202,204,209,211,216,218,225],{"type":53,"value":203},"This skill does ",{"type":40,"tag":49,"props":205,"children":206},{},[207],{"type":53,"value":208},"not",{"type":53,"value":210}," query source data directly. It enumerates ontology grounding context, then ",{"type":40,"tag":49,"props":212,"children":213},{},[214],{"type":53,"value":215},"delegates",{"type":53,"value":217}," the actual data read to the per-datasource consumption skill that matches the binding source kind (see ",{"type":40,"tag":219,"props":220,"children":222},"a",{"href":221},"#query-routing",[223],{"type":53,"value":224},"Query Routing",{"type":53,"value":94},{"type":40,"tag":69,"props":227,"children":228},{},[229,231,236,238,243,245,251,252,258,260,266],{"type":53,"value":230},"Projections (a semantic query layer over ontology entities) are ",{"type":40,"tag":49,"props":232,"children":233},{},[234],{"type":53,"value":235},"not yet GA",{"type":53,"value":237},". Until they ship, all data queries run against the ",{"type":40,"tag":49,"props":239,"children":240},{},[241],{"type":53,"value":242},"source",{"type":53,"value":244}," table (",{"type":40,"tag":80,"props":246,"children":248},{"className":247},[],[249],{"type":53,"value":250},"LakehouseTable",{"type":53,"value":179},{"type":40,"tag":80,"props":253,"children":255},{"className":254},[],[256],{"type":53,"value":257},"KustoTable",{"type":53,"value":259},") using the columns declared in the binding's ",{"type":40,"tag":80,"props":261,"children":263},{"className":262},[],[264],{"type":53,"value":265},"propertyBindings[]",{"type":53,"value":198},{"type":40,"tag":69,"props":268,"children":269},{},[270],{"type":53,"value":271},"To find the workspace details (including its ID) from workspace name: list all workspaces and use JMESPath filtering.",{"type":40,"tag":69,"props":273,"children":274},{},[275,277,282],{"type":53,"value":276},"To find the ontology item ID from workspace ID and item name: list all items of type ",{"type":40,"tag":80,"props":278,"children":280},{"className":279},[],[281],{"type":53,"value":13},{"type":53,"value":283}," in that workspace and use JMESPath filtering.",{"type":40,"tag":285,"props":286,"children":288},"h1",{"id":287},"fabriciq-ontology-consumption-cli-fabric-ontology-consumption-via-cli",[289],{"type":53,"value":290},"fabriciq-ontology-consumption-cli — Fabric Ontology Consumption via CLI",{"type":40,"tag":292,"props":293,"children":295},"h2",{"id":294},"table-of-contents",[296],{"type":53,"value":297},"Table of Contents",{"type":40,"tag":299,"props":300,"children":301},"table",{},[302,326],{"type":40,"tag":303,"props":304,"children":305},"thead",{},[306],{"type":40,"tag":307,"props":308,"children":309},"tr",{},[310,316,321],{"type":40,"tag":311,"props":312,"children":313},"th",{},[314],{"type":53,"value":315},"Task",{"type":40,"tag":311,"props":317,"children":318},{},[319],{"type":53,"value":320},"Reference",{"type":40,"tag":311,"props":322,"children":323},{},[324],{"type":53,"value":325},"Notes",{"type":40,"tag":327,"props":328,"children":329},"tbody",{},[330,358,380,410,432,460,480,508,547,583,605,633,655,683,724,746,775,810,839,867,889,909,931,953,975,997,1019,1041,1063,1085,1107],{"type":40,"tag":307,"props":331,"children":332},{},[333,339,348],{"type":40,"tag":334,"props":335,"children":336},"td",{},[337],{"type":53,"value":338},"Finding Workspaces and Items in Fabric",{"type":40,"tag":334,"props":340,"children":341},{},[342],{"type":40,"tag":219,"props":343,"children":345},{"href":344},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#finding-workspaces-and-items-in-fabric",[346],{"type":53,"value":347},"COMMON-CLI.md § Finding Workspaces and Items in Fabric",{"type":40,"tag":334,"props":349,"children":350},{},[351,356],{"type":40,"tag":49,"props":352,"children":353},{},[354],{"type":53,"value":355},"Mandatory",{"type":53,"value":357}," — resolve workspace\u002Fitem IDs before enumerating",{"type":40,"tag":307,"props":359,"children":360},{},[361,366,375],{"type":40,"tag":334,"props":362,"children":363},{},[364],{"type":53,"value":365},"Fabric Topology & Key Concepts",{"type":40,"tag":334,"props":367,"children":368},{},[369],{"type":40,"tag":219,"props":370,"children":372},{"href":371},"..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#fabric-topology--key-concepts",[373],{"type":53,"value":374},"COMMON-CORE.md § Fabric Topology & Key Concepts",{"type":40,"tag":334,"props":376,"children":377},{},[378],{"type":53,"value":379},"Workspace → Item hierarchy",{"type":40,"tag":307,"props":381,"children":382},{},[383,388,397],{"type":40,"tag":334,"props":384,"children":385},{},[386],{"type":53,"value":387},"Authentication & Token Acquisition",{"type":40,"tag":334,"props":389,"children":390},{},[391],{"type":40,"tag":219,"props":392,"children":394},{"href":393},"..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#authentication--token-acquisition",[395],{"type":53,"value":396},"COMMON-CORE.md § Authentication & Token Acquisition",{"type":40,"tag":334,"props":398,"children":399},{},[400,402,408],{"type":53,"value":401},"Use ",{"type":40,"tag":80,"props":403,"children":405},{"className":404},[],[406],{"type":53,"value":407},"https:\u002F\u002Fapi.fabric.microsoft.com",{"type":53,"value":409}," audience for control plane",{"type":40,"tag":307,"props":411,"children":412},{},[413,418,427],{"type":40,"tag":334,"props":414,"children":415},{},[416],{"type":53,"value":417},"Core Control-Plane REST APIs",{"type":40,"tag":334,"props":419,"children":420},{},[421],{"type":40,"tag":219,"props":422,"children":424},{"href":423},"..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#core-control-plane-rest-apis",[425],{"type":53,"value":426},"COMMON-CORE.md § Core Control-Plane REST APIs",{"type":40,"tag":334,"props":428,"children":429},{},[430],{"type":53,"value":431},"Get Item Definition",{"type":40,"tag":307,"props":433,"children":434},{},[435,440,449],{"type":40,"tag":334,"props":436,"children":437},{},[438],{"type":53,"value":439},"Long-Running Operations (LRO)",{"type":40,"tag":334,"props":441,"children":442},{},[443],{"type":40,"tag":219,"props":444,"children":446},{"href":445},"..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#long-running-operations-lro",[447],{"type":53,"value":448},"COMMON-CORE.md § Long-Running Operations (LRO)",{"type":40,"tag":334,"props":450,"children":451},{},[452,458],{"type":40,"tag":80,"props":453,"children":455},{"className":454},[],[456],{"type":53,"value":457},"getDefinition",{"type":53,"value":459}," returns an LRO",{"type":40,"tag":307,"props":461,"children":462},{},[463,468,477],{"type":40,"tag":334,"props":464,"children":465},{},[466],{"type":53,"value":467},"Rate Limiting & Throttling",{"type":40,"tag":334,"props":469,"children":470},{},[471],{"type":40,"tag":219,"props":472,"children":474},{"href":473},"..\u002F..\u002Fcommon\u002FCOMMON-CORE.md#rate-limiting--throttling",[475],{"type":53,"value":476},"COMMON-CORE.md § Rate Limiting & Throttling",{"type":40,"tag":334,"props":478,"children":479},{},[],{"type":40,"tag":307,"props":481,"children":482},{},[483,488,497],{"type":40,"tag":334,"props":484,"children":485},{},[486],{"type":53,"value":487},"Authentication Recipes",{"type":40,"tag":334,"props":489,"children":490},{},[491],{"type":40,"tag":219,"props":492,"children":494},{"href":493},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#authentication-recipes",[495],{"type":53,"value":496},"COMMON-CLI.md § Authentication Recipes",{"type":40,"tag":334,"props":498,"children":499},{},[500,506],{"type":40,"tag":80,"props":501,"children":503},{"className":502},[],[504],{"type":53,"value":505},"az login",{"type":53,"value":507},"; token acquisition",{"type":40,"tag":307,"props":509,"children":510},{},[511,522,531],{"type":40,"tag":334,"props":512,"children":513},{},[514,516],{"type":53,"value":515},"Fabric Control-Plane API via ",{"type":40,"tag":80,"props":517,"children":519},{"className":518},[],[520],{"type":53,"value":521},"az rest",{"type":40,"tag":334,"props":523,"children":524},{},[525],{"type":40,"tag":219,"props":526,"children":528},{"href":527},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#fabric-control-plane-api-via-az-rest",[529],{"type":53,"value":530},"COMMON-CLI.md § Fabric Control-Plane API via az rest",{"type":40,"tag":334,"props":532,"children":533},{},[534,539,541],{"type":40,"tag":49,"props":535,"children":536},{},[537],{"type":53,"value":538},"Always",{"type":53,"value":540}," pass ",{"type":40,"tag":80,"props":542,"children":544},{"className":543},[],[545],{"type":53,"value":546},"--resource https:\u002F\u002Fapi.fabric.microsoft.com",{"type":40,"tag":307,"props":548,"children":549},{},[550,555,564],{"type":40,"tag":334,"props":551,"children":552},{},[553],{"type":53,"value":554},"Long-Running Operations (LRO) Pattern",{"type":40,"tag":334,"props":556,"children":557},{},[558],{"type":40,"tag":219,"props":559,"children":561},{"href":560},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#long-running-operations-lro-pattern",[562],{"type":53,"value":563},"COMMON-CLI.md § Long-Running Operations (LRO) Pattern",{"type":40,"tag":334,"props":565,"children":566},{},[567,569,575,577],{"type":53,"value":568},"Poll ",{"type":40,"tag":80,"props":570,"children":572},{"className":571},[],[573],{"type":53,"value":574},"operations\u002F{x-ms-operation-id}",{"type":53,"value":576}," until ",{"type":40,"tag":80,"props":578,"children":580},{"className":579},[],[581],{"type":53,"value":582},"Succeeded",{"type":40,"tag":307,"props":584,"children":585},{},[586,591,600],{"type":40,"tag":334,"props":587,"children":588},{},[589],{"type":53,"value":590},"Gotchas & Troubleshooting (CLI-Specific)",{"type":40,"tag":334,"props":592,"children":593},{},[594],{"type":40,"tag":219,"props":595,"children":597},{"href":596},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#gotchas--troubleshooting-cli-specific",[598],{"type":53,"value":599},"COMMON-CLI.md § Gotchas & Troubleshooting (CLI-Specific)",{"type":40,"tag":334,"props":601,"children":602},{},[603],{"type":53,"value":604},"Token audience, shell escaping",{"type":40,"tag":307,"props":606,"children":607},{},[608,613,622],{"type":40,"tag":334,"props":609,"children":610},{},[611],{"type":53,"value":612},"Definition Envelope (parts, payloadType)",{"type":40,"tag":334,"props":614,"children":615},{},[616],{"type":40,"tag":219,"props":617,"children":619},{"href":618},"..\u002F..\u002Fcommon\u002FITEM-DEFINITIONS-CORE.md#definition-envelope",[620],{"type":53,"value":621},"ITEM-DEFINITIONS-CORE.md § Definition Envelope",{"type":40,"tag":334,"props":623,"children":624},{},[625,631],{"type":40,"tag":80,"props":626,"children":628},{"className":627},[],[629],{"type":53,"value":630},"InlineBase64",{"type":53,"value":632}," parts pattern — the ontology returns this shape",{"type":40,"tag":307,"props":634,"children":635},{},[636,641,650],{"type":40,"tag":334,"props":637,"children":638},{},[639],{"type":53,"value":640},"Ontology Definition Tree",{"type":40,"tag":334,"props":642,"children":643},{},[644],{"type":40,"tag":219,"props":645,"children":647},{"href":646},"..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#definition-tree",[648],{"type":53,"value":649},"ONTOLOGY-AUTHORING-CORE.md § Definition Tree",{"type":40,"tag":334,"props":651,"children":652},{},[653],{"type":53,"value":654},"Authoritative file\u002Ffolder layout of parts you will decode",{"type":40,"tag":307,"props":656,"children":657},{},[658,663,672],{"type":40,"tag":334,"props":659,"children":660},{},[661],{"type":53,"value":662},"EntityType & EntityTypeProperty schema",{"type":40,"tag":334,"props":664,"children":665},{},[666],{"type":40,"tag":219,"props":667,"children":669},{"href":668},"..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#entitytype-file--entitytypesiddefinitionjson",[670],{"type":53,"value":671},"ONTOLOGY-AUTHORING-CORE.md § EntityType file",{"type":40,"tag":334,"props":673,"children":674},{},[675,681],{"type":40,"tag":80,"props":676,"children":678},{"className":677},[],[679],{"type":53,"value":680},"valueType",{"type":53,"value":682}," catalog, key \u002F display-name contracts",{"type":40,"tag":307,"props":684,"children":685},{},[686,691,700],{"type":40,"tag":334,"props":687,"children":688},{},[689],{"type":53,"value":690},"DataBinding schema + source-type mapping",{"type":40,"tag":334,"props":692,"children":693},{},[694],{"type":40,"tag":219,"props":695,"children":697},{"href":696},"..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#databinding-file--entitytypesiddatabindingsguidjson",[698],{"type":53,"value":699},"ONTOLOGY-AUTHORING-CORE.md § DataBinding file",{"type":40,"tag":334,"props":701,"children":702},{},[703,708,710,715,717,722],{"type":40,"tag":80,"props":704,"children":706},{"className":705},[],[707],{"type":53,"value":250},{"type":53,"value":709}," vs ",{"type":40,"tag":80,"props":711,"children":713},{"className":712},[],[714],{"type":53,"value":257},{"type":53,"value":716},"; ",{"type":40,"tag":80,"props":718,"children":720},{"className":719},[],[721],{"type":53,"value":265},{"type":53,"value":723}," shape",{"type":40,"tag":307,"props":725,"children":726},{},[727,732,741],{"type":40,"tag":334,"props":728,"children":729},{},[730],{"type":53,"value":731},"RelationshipType + Contextualization",{"type":40,"tag":334,"props":733,"children":734},{},[735],{"type":40,"tag":219,"props":736,"children":738},{"href":737},"..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#relationshiptype-file--relationshiptypesiddefinitionjson",[739],{"type":53,"value":740},"ONTOLOGY-AUTHORING-CORE.md § RelationshipType file",{"type":40,"tag":334,"props":742,"children":743},{},[744],{"type":53,"value":745},"Source\u002Ftarget + linking-table contract",{"type":40,"tag":307,"props":747,"children":748},{},[749,754,763],{"type":40,"tag":334,"props":750,"children":751},{},[752],{"type":53,"value":753},"Connection Fundamentals (EH source queries)",{"type":40,"tag":334,"props":755,"children":756},{},[757],{"type":40,"tag":219,"props":758,"children":760},{"href":759},"..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md#connection-fundamentals",[761],{"type":53,"value":762},"EVENTHOUSE-CONSUMPTION-CORE.md § Connection Fundamentals",{"type":40,"tag":334,"props":764,"children":765},{},[766,768,773],{"type":53,"value":767},"Cluster URI + DB discovery for ",{"type":40,"tag":80,"props":769,"children":771},{"className":770},[],[772],{"type":53,"value":257},{"type":53,"value":774}," bindings",{"type":40,"tag":307,"props":776,"children":777},{},[778,783,792],{"type":40,"tag":334,"props":779,"children":780},{},[781],{"type":53,"value":782},"Performance Best Practices (EH source queries)",{"type":40,"tag":334,"props":784,"children":785},{},[786],{"type":40,"tag":219,"props":787,"children":789},{"href":788},"..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md#performance-best-practices",[790],{"type":53,"value":791},"EVENTHOUSE-CONSUMPTION-CORE.md § Performance Best Practices",{"type":40,"tag":334,"props":793,"children":794},{},[795,797,803,804],{"type":53,"value":796},"Time filters, ",{"type":40,"tag":80,"props":798,"children":800},{"className":799},[],[801],{"type":53,"value":802},"has",{"type":53,"value":709},{"type":40,"tag":80,"props":805,"children":807},{"className":806},[],[808],{"type":53,"value":809},"contains",{"type":40,"tag":307,"props":811,"children":812},{},[813,818,827],{"type":40,"tag":334,"props":814,"children":815},{},[816],{"type":53,"value":817},"Spark consumption patterns (Lakehouse sources)",{"type":40,"tag":334,"props":819,"children":820},{},[821],{"type":40,"tag":219,"props":822,"children":824},{"href":823},"..\u002F..\u002Fcommon\u002FSPARK-CONSUMPTION-CORE.md",[825],{"type":53,"value":826},"SPARK-CONSUMPTION-CORE.md",{"type":40,"tag":334,"props":828,"children":829},{},[830,832,837],{"type":53,"value":831},"For ",{"type":40,"tag":80,"props":833,"children":835},{"className":834},[],[836],{"type":53,"value":250},{"type":53,"value":838}," bindings, delegate read",{"type":40,"tag":307,"props":840,"children":841},{},[842,847,856],{"type":40,"tag":334,"props":843,"children":844},{},[845],{"type":53,"value":846},"SQL consumption patterns (SQL endpoint \u002F DW)",{"type":40,"tag":334,"props":848,"children":849},{},[850],{"type":40,"tag":219,"props":851,"children":853},{"href":852},"..\u002F..\u002Fcommon\u002FSQLDW-CONSUMPTION-CORE.md",[854],{"type":53,"value":855},"SQLDW-CONSUMPTION-CORE.md",{"type":40,"tag":334,"props":857,"children":858},{},[859,860,865],{"type":53,"value":831},{"type":40,"tag":80,"props":861,"children":863},{"className":862},[],[864],{"type":53,"value":250},{"type":53,"value":866}," SQL-endpoint reads and Warehouse reads",{"type":40,"tag":307,"props":868,"children":869},{},[870,875,884],{"type":40,"tag":334,"props":871,"children":872},{},[873],{"type":53,"value":874},"Ontology Concepts",{"type":40,"tag":334,"props":876,"children":877},{},[878],{"type":40,"tag":219,"props":879,"children":881},{"href":880},"#ontology-consumption-concepts",[882],{"type":53,"value":883},"SKILL.md § Ontology Consumption Concepts",{"type":40,"tag":334,"props":885,"children":886},{},[887],{"type":53,"value":888},"Entity \u002F relationship \u002F binding \u002F grounding context",{"type":40,"tag":307,"props":890,"children":891},{},[892,897,906],{"type":40,"tag":334,"props":893,"children":894},{},[895],{"type":53,"value":896},"Tool Stack",{"type":40,"tag":334,"props":898,"children":899},{},[900],{"type":40,"tag":219,"props":901,"children":903},{"href":902},"#tool-stack",[904],{"type":53,"value":905},"SKILL.md § Tool Stack",{"type":40,"tag":334,"props":907,"children":908},{},[],{"type":40,"tag":307,"props":910,"children":911},{},[912,917,926],{"type":40,"tag":334,"props":913,"children":914},{},[915],{"type":53,"value":916},"Connection",{"type":40,"tag":334,"props":918,"children":919},{},[920],{"type":40,"tag":219,"props":921,"children":923},{"href":922},"#connection",[924],{"type":53,"value":925},"SKILL.md § Connection",{"type":40,"tag":334,"props":927,"children":928},{},[929],{"type":53,"value":930},"Discover workspace, ontology ID; Get Item Definition",{"type":40,"tag":307,"props":932,"children":933},{},[934,939,948],{"type":40,"tag":334,"props":935,"children":936},{},[937],{"type":53,"value":938},"Consumption Scope",{"type":40,"tag":334,"props":940,"children":941},{},[942],{"type":40,"tag":219,"props":943,"children":945},{"href":944},"#consumption-scope",[946],{"type":53,"value":947},"SKILL.md § Consumption Scope",{"type":40,"tag":334,"props":949,"children":950},{},[951],{"type":53,"value":952},"What this skill does \u002F does not do",{"type":40,"tag":307,"props":954,"children":955},{},[956,961,970],{"type":40,"tag":334,"props":957,"children":958},{},[959],{"type":53,"value":960},"Grounding Context Extraction (deep reference)",{"type":40,"tag":334,"props":962,"children":963},{},[964],{"type":40,"tag":219,"props":965,"children":967},{"href":966},"references\u002Fgrounding-extraction.md",[968],{"type":53,"value":969},"grounding-extraction.md",{"type":40,"tag":334,"props":971,"children":972},{},[973],{"type":53,"value":974},"Decode parts → grounding JSON for agents",{"type":40,"tag":307,"props":976,"children":977},{},[978,983,992],{"type":40,"tag":334,"props":979,"children":980},{},[981],{"type":53,"value":982},"Query Routing (deep reference)",{"type":40,"tag":334,"props":984,"children":985},{},[986],{"type":40,"tag":219,"props":987,"children":989},{"href":988},"references\u002Frouting.md",[990],{"type":53,"value":991},"routing.md",{"type":40,"tag":334,"props":993,"children":994},{},[995],{"type":53,"value":996},"Binding kind → per-datasource skill + query shape",{"type":40,"tag":307,"props":998,"children":999},{},[1000,1005,1014],{"type":40,"tag":334,"props":1001,"children":1002},{},[1003],{"type":53,"value":1004},"Worked Examples",{"type":40,"tag":334,"props":1006,"children":1007},{},[1008],{"type":40,"tag":219,"props":1009,"children":1011},{"href":1010},"references\u002Fexamples.md",[1012],{"type":53,"value":1013},"examples.md",{"type":40,"tag":334,"props":1015,"children":1016},{},[1017],{"type":53,"value":1018},"End-to-end bash recipes (enumerate → route → query)",{"type":40,"tag":307,"props":1020,"children":1021},{},[1022,1027,1036],{"type":40,"tag":334,"props":1023,"children":1024},{},[1025],{"type":53,"value":1026},"Graph Walks (N-hop neighborhood from anchor)",{"type":40,"tag":334,"props":1028,"children":1029},{},[1030],{"type":40,"tag":219,"props":1031,"children":1033},{"href":1032},"references\u002Fgraph-walks.md",[1034],{"type":53,"value":1035},"graph-walks.md",{"type":40,"tag":334,"props":1037,"children":1038},{},[1039],{"type":53,"value":1040},"Anchor entity + hop budget → composed inline reads, no scripts",{"type":40,"tag":307,"props":1042,"children":1043},{},[1044,1049,1058],{"type":40,"tag":334,"props":1045,"children":1046},{},[1047],{"type":53,"value":1048},"Snappy-Response Discipline",{"type":40,"tag":334,"props":1050,"children":1051},{},[1052],{"type":40,"tag":219,"props":1053,"children":1055},{"href":1054},"#snappy-response-discipline",[1056],{"type":53,"value":1057},"SKILL.md § Snappy-Response Discipline",{"type":40,"tag":334,"props":1059,"children":1060},{},[1061],{"type":53,"value":1062},"Inline-first; script only when stateful or re-runnable",{"type":40,"tag":307,"props":1064,"children":1065},{},[1066,1071,1080],{"type":40,"tag":334,"props":1067,"children":1068},{},[1069],{"type":53,"value":1070},"Must \u002F Prefer \u002F Avoid \u002F Troubleshooting",{"type":40,"tag":334,"props":1072,"children":1073},{},[1074],{"type":40,"tag":219,"props":1075,"children":1077},{"href":1076},"#must--prefer--avoid--troubleshooting",[1078],{"type":53,"value":1079},"SKILL.md § Must \u002F Prefer \u002F Avoid \u002F Troubleshooting",{"type":40,"tag":334,"props":1081,"children":1082},{},[1083],{"type":53,"value":1084},"LLM decision rules",{"type":40,"tag":307,"props":1086,"children":1087},{},[1088,1093,1102],{"type":40,"tag":334,"props":1089,"children":1090},{},[1091],{"type":53,"value":1092},"Agentic Workflows",{"type":40,"tag":334,"props":1094,"children":1095},{},[1096],{"type":40,"tag":219,"props":1097,"children":1099},{"href":1098},"#agentic-workflows",[1100],{"type":53,"value":1101},"SKILL.md § Agentic Workflows",{"type":40,"tag":334,"props":1103,"children":1104},{},[1105],{"type":53,"value":1106},"Ground-then-query loop, schema-aware query generation",{"type":40,"tag":307,"props":1108,"children":1109},{},[1110,1115,1124],{"type":40,"tag":334,"props":1111,"children":1112},{},[1113],{"type":53,"value":1114},"Agent Integration Notes",{"type":40,"tag":334,"props":1116,"children":1117},{},[1118],{"type":40,"tag":219,"props":1119,"children":1121},{"href":1120},"#agent-integration-notes",[1122],{"type":53,"value":1123},"SKILL.md § Agent Integration Notes",{"type":40,"tag":334,"props":1125,"children":1126},{},[1127],{"type":53,"value":1128},"How this skill composes with authoring \u002F per-datasource skills",{"type":40,"tag":1130,"props":1131,"children":1132},"hr",{},[],{"type":40,"tag":292,"props":1134,"children":1136},{"id":1135},"ontology-consumption-concepts",[1137],{"type":53,"value":1138},"Ontology Consumption Concepts",{"type":40,"tag":45,"props":1140,"children":1141},{},[1142,1144,1149,1151,1156,1158,1163],{"type":53,"value":1143},"A Fabric Ontology item carries its schema as a ",{"type":40,"tag":49,"props":1145,"children":1146},{},[1147],{"type":53,"value":1148},"tree of JSON files",{"type":53,"value":1150}," inside the item definition (same shape as authoring). ",{"type":40,"tag":80,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":53,"value":431},{"type":53,"value":1157}," returns the parts as base64-encoded payloads; the consumption flow is always: ",{"type":40,"tag":49,"props":1159,"children":1160},{},[1161],{"type":53,"value":1162},"fetch → decode → parse → ground → delegate",{"type":53,"value":198},{"type":40,"tag":299,"props":1165,"children":1166},{},[1167,1188],{"type":40,"tag":303,"props":1168,"children":1169},{},[1170],{"type":40,"tag":307,"props":1171,"children":1172},{},[1173,1178,1183],{"type":40,"tag":311,"props":1174,"children":1175},{},[1176],{"type":53,"value":1177},"Concept",{"type":40,"tag":311,"props":1179,"children":1180},{},[1181],{"type":53,"value":1182},"Definition part",{"type":40,"tag":311,"props":1184,"children":1185},{},[1186],{"type":53,"value":1187},"What it tells an agent",{"type":40,"tag":327,"props":1189,"children":1190},{},[1191,1237,1296,1318],{"type":40,"tag":307,"props":1192,"children":1193},{},[1194,1199,1208],{"type":40,"tag":334,"props":1195,"children":1196},{},[1197],{"type":53,"value":1198},"Entity type",{"type":40,"tag":334,"props":1200,"children":1201},{},[1202],{"type":40,"tag":80,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":53,"value":1207},"EntityTypes\u002F{entityTypeId}\u002Fdefinition.json",{"type":40,"tag":334,"props":1209,"children":1210},{},[1211,1213,1219,1221,1227,1229,1235],{"type":53,"value":1212},"Logical type name, key properties (",{"type":40,"tag":80,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":53,"value":1218},"entityIdParts",{"type":53,"value":1220},"), display-name property, static ",{"type":40,"tag":80,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":53,"value":1226},"properties[]",{"type":53,"value":1228},", ",{"type":40,"tag":80,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":53,"value":1234},"timeseriesProperties[]",{"type":53,"value":1236},", value-type catalog",{"type":40,"tag":307,"props":1238,"children":1239},{},[1240,1245,1254],{"type":40,"tag":334,"props":1241,"children":1242},{},[1243],{"type":53,"value":1244},"Data binding",{"type":40,"tag":334,"props":1246,"children":1247},{},[1248],{"type":40,"tag":80,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":53,"value":1253},"EntityTypes\u002F{entityTypeId}\u002FDataBindings\u002F{guid}.json",{"type":40,"tag":334,"props":1255,"children":1256},{},[1257,1259,1264,1266,1271,1273,1279,1281,1287,1288,1294],{"type":53,"value":1258},"Which physical table backs this entity type, the source kind (",{"type":40,"tag":80,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":53,"value":250},{"type":53,"value":1265}," \u002F ",{"type":40,"tag":80,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":53,"value":257},{"type":53,"value":1272},"), ",{"type":40,"tag":80,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":53,"value":1278},"dataBindingType",{"type":53,"value":1280}," (",{"type":40,"tag":80,"props":1282,"children":1284},{"className":1283},[],[1285],{"type":53,"value":1286},"NonTimeSeries",{"type":53,"value":1265},{"type":40,"tag":80,"props":1289,"children":1291},{"className":1290},[],[1292],{"type":53,"value":1293},"TimeSeries",{"type":53,"value":1295},"), column-to-property map, and — for timeseries — the timestamp column",{"type":40,"tag":307,"props":1297,"children":1298},{},[1299,1304,1313],{"type":40,"tag":334,"props":1300,"children":1301},{},[1302],{"type":53,"value":1303},"Relationship type",{"type":40,"tag":334,"props":1305,"children":1306},{},[1307],{"type":40,"tag":80,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":53,"value":1312},"RelationshipTypes\u002F{relTypeId}\u002Fdefinition.json",{"type":40,"tag":334,"props":1314,"children":1315},{},[1316],{"type":53,"value":1317},"Link between two entity types (source\u002Ftarget); name; cardinality hints",{"type":40,"tag":307,"props":1319,"children":1320},{},[1321,1326,1335],{"type":40,"tag":334,"props":1322,"children":1323},{},[1324],{"type":53,"value":1325},"Contextualization",{"type":40,"tag":334,"props":1327,"children":1328},{},[1329],{"type":40,"tag":80,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":53,"value":1334},"RelationshipTypes\u002F{relTypeId}\u002FContextualizations\u002F{guid}.json",{"type":40,"tag":334,"props":1336,"children":1337},{},[1338],{"type":53,"value":1339},"Which Lakehouse linking table holds the (source key, target key) pairs to realize the relationship",{"type":40,"tag":45,"props":1341,"children":1342},{},[1343,1348,1350,1356,1357,1362,1363,1368,1370,1375,1377,1381],{"type":40,"tag":49,"props":1344,"children":1345},{},[1346],{"type":53,"value":1347},"Grounding context",{"type":53,"value":1349}," = the flattened, agent-ready projection of that tree: a JSON summary an LLM can read to decide ",{"type":40,"tag":1351,"props":1352,"children":1353},"em",{},[1354],{"type":53,"value":1355},"which entity type to query",{"type":53,"value":1228},{"type":40,"tag":1351,"props":1358,"children":1359},{},[1360],{"type":53,"value":1361},"which column holds the key",{"type":53,"value":1228},{"type":40,"tag":1351,"props":1364,"children":1365},{},[1366],{"type":53,"value":1367},"which table to hit",{"type":53,"value":1369},", and ",{"type":40,"tag":1351,"props":1371,"children":1372},{},[1373],{"type":53,"value":1374},"which consumption skill to invoke",{"type":53,"value":1376},". Full shape + extraction recipe: ",{"type":40,"tag":219,"props":1378,"children":1379},{"href":966},[1380],{"type":53,"value":969},{"type":53,"value":198},{"type":40,"tag":45,"props":1383,"children":1384},{},[1385,1387,1392,1394,1400,1401,1407,1408,1414,1415,1421,1422,1428,1429,1435,1437,1442,1444,1450,1452,1457,1459,1465,1467,1472],{"type":53,"value":1386},"Property ",{"type":40,"tag":80,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":53,"value":680},{"type":53,"value":1393}," allowed values (exact): ",{"type":40,"tag":80,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":53,"value":1399},"String",{"type":53,"value":1228},{"type":40,"tag":80,"props":1402,"children":1404},{"className":1403},[],[1405],{"type":53,"value":1406},"Boolean",{"type":53,"value":1228},{"type":40,"tag":80,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":53,"value":1413},"DateTime",{"type":53,"value":1228},{"type":40,"tag":80,"props":1416,"children":1418},{"className":1417},[],[1419],{"type":53,"value":1420},"Object",{"type":53,"value":1228},{"type":40,"tag":80,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":53,"value":1427},"BigInt",{"type":53,"value":1228},{"type":40,"tag":80,"props":1430,"children":1432},{"className":1431},[],[1433],{"type":53,"value":1434},"Double",{"type":53,"value":1436},". Integers are ",{"type":40,"tag":80,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":53,"value":1427},{"type":53,"value":1443}," (not ",{"type":40,"tag":80,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":53,"value":1449},"Int64",{"type":53,"value":1451},"); GUIDs are modelled as ",{"type":40,"tag":80,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":53,"value":1399},{"type":53,"value":1458},". See ",{"type":40,"tag":219,"props":1460,"children":1462},{"href":1461},"..\u002Ffabriciq-ontology-authoring-cli\u002Freferences\u002FONTOLOGY-AUTHORING-CORE.md#entitytypeproperty",[1463],{"type":53,"value":1464},"ONTOLOGY-AUTHORING-CORE.md § EntityTypeProperty",{"type":53,"value":1466}," for the full source-column → ",{"type":40,"tag":80,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":53,"value":680},{"type":53,"value":1473}," mapping.",{"type":40,"tag":1130,"props":1475,"children":1476},{},[],{"type":40,"tag":292,"props":1478,"children":1480},{"id":1479},"tool-stack",[1481],{"type":53,"value":896},{"type":40,"tag":45,"props":1483,"children":1484},{},[1485,1487,1493,1495,1499,1501,1506],{"type":53,"value":1486},"Ontology consumption uses the same Fabric control-plane tool stack as every other CLI skill — see ",{"type":40,"tag":219,"props":1488,"children":1490},{"href":1489},"..\u002F..\u002Fcommon\u002FCOMMON-CLI.md#tool-selection-rationale",[1491],{"type":53,"value":1492},"COMMON-CLI.md § Tool Selection Rationale",{"type":53,"value":1494}," for the canonical list (install commands, prerequisite checks, base64 helpers, JSON tooling) and ",{"type":40,"tag":219,"props":1496,"children":1497},{"href":493},[1498],{"type":53,"value":496},{"type":53,"value":1500}," for ",{"type":40,"tag":80,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":53,"value":505},{"type":53,"value":1507}," + token acquisition.",{"type":40,"tag":45,"props":1509,"children":1510},{},[1511,1513,1517],{"type":53,"value":1512},"Per-datasource reads are delegated — you do ",{"type":40,"tag":49,"props":1514,"children":1515},{},[1516],{"type":53,"value":208},{"type":53,"value":1518}," need the Kusto, Spark, or SQL CLI tools installed to use this skill for enumeration. They are only needed if you also invoke the downstream consumption skill in the same session.",{"type":40,"tag":1130,"props":1520,"children":1521},{},[],{"type":40,"tag":292,"props":1523,"children":1525},{"id":1524},"connection",[1526],{"type":53,"value":916},{"type":40,"tag":45,"props":1528,"children":1529},{},[1530,1532,1537,1539,1544],{"type":53,"value":1531},"Ontology consumption targets the Fabric control plane. You need the ",{"type":40,"tag":49,"props":1533,"children":1534},{},[1535],{"type":53,"value":1536},"workspace ID",{"type":53,"value":1538}," and the ",{"type":40,"tag":49,"props":1540,"children":1541},{},[1542],{"type":53,"value":1543},"ontology item ID",{"type":53,"value":1545},"; everything else (entity types, bindings, source tables, cluster URIs) is recovered by decoding the definition.",{"type":40,"tag":65,"props":1547,"children":1548},{},[1549,1566,1600],{"type":40,"tag":69,"props":1550,"children":1551},{},[1552,1554,1558,1560,1565],{"type":53,"value":1553},"Sign in + acquire the Fabric control-plane token → ",{"type":40,"tag":219,"props":1555,"children":1556},{"href":493},[1557],{"type":53,"value":496},{"type":53,"value":1559}," (always ",{"type":40,"tag":80,"props":1561,"children":1563},{"className":1562},[],[1564],{"type":53,"value":546},{"type":53,"value":94},{"type":40,"tag":69,"props":1567,"children":1568},{},[1569,1571,1577,1579,1585,1587,1592,1594,1598],{"type":53,"value":1570},"Resolve workspace ID by ",{"type":40,"tag":80,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":53,"value":1576},"displayName",{"type":53,"value":1578}," and the ontology item ID via ",{"type":40,"tag":80,"props":1580,"children":1582},{"className":1581},[],[1583],{"type":53,"value":1584},"GET \u002Fv1\u002Fworkspaces\u002F{WS_ID}\u002Fitems?type=Ontology",{"type":53,"value":1586}," filtered by ",{"type":40,"tag":80,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":53,"value":1576},{"type":53,"value":1593}," → ",{"type":40,"tag":219,"props":1595,"children":1596},{"href":344},[1597],{"type":53,"value":347},{"type":53,"value":1599}," (covers pagination + JMESPath filtering).",{"type":40,"tag":69,"props":1601,"children":1602},{},[1603,1605,1610,1612,1616],{"type":53,"value":1604},"Generic ",{"type":40,"tag":80,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":53,"value":521},{"type":53,"value":1611}," invocation template → ",{"type":40,"tag":219,"props":1613,"children":1614},{"href":527},[1615],{"type":53,"value":530},{"type":53,"value":198},{"type":40,"tag":1618,"props":1619,"children":1621},"h3",{"id":1620},"fetching-the-definition-ontology-preview-lro-gotcha",[1622],{"type":53,"value":1623},"Fetching the definition (Ontology-preview LRO gotcha)",{"type":40,"tag":45,"props":1625,"children":1626},{},[1627,1632,1634,1640,1642,1647,1649,1655,1657,1663,1665,1671,1672,1677,1679,1685,1687,1693,1695,1700,1702,1706],{"type":40,"tag":80,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":53,"value":431},{"type":53,"value":1633}," is Long-Running-Operation-capable. Depending on tenant\u002FSKU, the POST may return the definition envelope inline (",{"type":40,"tag":80,"props":1635,"children":1637},{"className":1636},[],[1638],{"type":53,"value":1639},"200 OK",{"type":53,"value":1641},") ",{"type":40,"tag":49,"props":1643,"children":1644},{},[1645],{"type":53,"value":1646},"or",{"type":53,"value":1648}," return ",{"type":40,"tag":80,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":53,"value":1654},"202 Accepted",{"type":53,"value":1656}," with an ",{"type":40,"tag":80,"props":1658,"children":1660},{"className":1659},[],[1661],{"type":53,"value":1662},"x-ms-operation-id",{"type":53,"value":1664}," header; for the 202 case, poll ",{"type":40,"tag":80,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":53,"value":1670},"https:\u002F\u002Fapi.fabric.microsoft.com\u002Fv1\u002Foperations\u002F{operationId}",{"type":53,"value":576},{"type":40,"tag":80,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":53,"value":582},{"type":53,"value":1678},", then GET ",{"type":40,"tag":80,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":53,"value":1684},"…\u002Foperations\u002F{operationId}\u002Fresult",{"type":53,"value":1686}," to receive the ",{"type":40,"tag":80,"props":1688,"children":1690},{"className":1689},[],[1691],{"type":53,"value":1692},"parts[]",{"type":53,"value":1694}," array. The generic LRO recipe (capture ",{"type":40,"tag":80,"props":1696,"children":1698},{"className":1697},[],[1699],{"type":53,"value":1662},{"type":53,"value":1701},", poll, fetch result) is in ",{"type":40,"tag":219,"props":1703,"children":1704},{"href":560},[1705],{"type":53,"value":563},{"type":53,"value":198},{"type":40,"tag":41,"props":1708,"children":1709},{},[1710],{"type":40,"tag":45,"props":1711,"children":1712},{},[1713,1734,1736,1741,1743,1749,1751,1757,1759,1764,1766,1771,1773,1786],{"type":40,"tag":49,"props":1714,"children":1715},{},[1716,1718,1724,1726,1732],{"type":53,"value":1717},"Ontology-preview gotcha — prefer polling the ",{"type":40,"tag":80,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":53,"value":1723},"operations\u002F{id}",{"type":53,"value":1725}," endpoint over the ",{"type":40,"tag":80,"props":1727,"children":1729},{"className":1728},[],[1730],{"type":53,"value":1731},"Location",{"type":53,"value":1733}," header.",{"type":53,"value":1735}," The public Fabric LRO contract supports either, but on this Ontology LRO the ",{"type":40,"tag":80,"props":1737,"children":1739},{"className":1738},[],[1740],{"type":53,"value":1731},{"type":53,"value":1742}," header has been observed redirecting to an ",{"type":40,"tag":80,"props":1744,"children":1746},{"className":1745},[],[1747],{"type":53,"value":1748},"*.analysis.windows.net",{"type":53,"value":1750}," host; polling it with a Fabric-audience token is flaky (intermittent ",{"type":40,"tag":80,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":53,"value":1756},"401\u002F403",{"type":53,"value":1758},"). Poll ",{"type":40,"tag":80,"props":1760,"children":1762},{"className":1761},[],[1763],{"type":53,"value":1670},{"type":53,"value":1765}," on the Fabric host instead. If you must follow ",{"type":40,"tag":80,"props":1767,"children":1769},{"className":1768},[],[1770],{"type":53,"value":1731},{"type":53,"value":1772},", use the audience required by that URL. If a poll ever returns a non-2xx, ",{"type":40,"tag":49,"props":1774,"children":1775},{},[1776,1778,1784],{"type":53,"value":1777},"read the operation ",{"type":40,"tag":80,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":53,"value":1783},".error",{"type":53,"value":1785}," and stop — never blind-retry the POST",{"type":53,"value":198},{"type":40,"tag":45,"props":1788,"children":1789},{},[1790,1792,1798,1800,1805,1807,1813],{"type":53,"value":1791},"The full fetch-and-decode flow for this skill (LRO capture + part decode + tree reconstruction, Bash + PowerShell + Python helpers) lives in ",{"type":40,"tag":219,"props":1793,"children":1795},{"href":1794},"references\u002Fgrounding-extraction.md#fetch-and-decode-an-ontology-definition",[1796],{"type":53,"value":1797},"grounding-extraction.md § Fetch and Decode",{"type":53,"value":1799},". The sibling ",{"type":40,"tag":80,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":53,"value":196},{"type":53,"value":1806}," documents the same redirect-host workaround in its ",{"type":40,"tag":219,"props":1808,"children":1810},{"href":1809},"..\u002Ffabriciq-ontology-authoring-cli\u002FSKILL.md#lro-header-capture-with-az-rest",[1811],{"type":53,"value":1812},"LRO Header Capture section",{"type":53,"value":1814}," — keep the two in sync if you change one.",{"type":40,"tag":1618,"props":1816,"children":1818},{"id":1817},"source-data-connections-delegated",[1819],{"type":53,"value":1820},"Source-data connections (delegated)",{"type":40,"tag":45,"props":1822,"children":1823},{},[1824],{"type":53,"value":1825},"Running the data query itself (KQL \u002F Spark SQL \u002F T-SQL) uses the connection patterns owned by the sibling consumption skills:",{"type":40,"tag":65,"props":1827,"children":1828},{},[1829,1857,1888],{"type":40,"tag":69,"props":1830,"children":1831},{},[1832,1837,1838,1843,1845,1849,1851],{"type":40,"tag":49,"props":1833,"children":1834},{},[1835],{"type":53,"value":1836},"Eventhouse",{"type":53,"value":1280},{"type":40,"tag":80,"props":1839,"children":1841},{"className":1840},[],[1842],{"type":53,"value":257},{"type":53,"value":1844}," bindings) → ",{"type":40,"tag":219,"props":1846,"children":1847},{"href":759},[1848],{"type":53,"value":762},{"type":53,"value":1850}," + ",{"type":40,"tag":80,"props":1852,"children":1854},{"className":1853},[],[1855],{"type":53,"value":1856},"eventhouse-consumption-cli",{"type":40,"tag":69,"props":1858,"children":1859},{},[1860,1865,1866,1871,1872,1878,1880,1886],{"type":40,"tag":49,"props":1861,"children":1862},{},[1863],{"type":53,"value":1864},"Lakehouse",{"type":53,"value":1280},{"type":40,"tag":80,"props":1867,"children":1869},{"className":1868},[],[1870],{"type":53,"value":250},{"type":53,"value":1844},{"type":40,"tag":80,"props":1873,"children":1875},{"className":1874},[],[1876],{"type":53,"value":1877},"sqldw-consumption-cli",{"type":53,"value":1879}," (default, SQL analytics endpoint) or ",{"type":40,"tag":80,"props":1881,"children":1883},{"className":1882},[],[1884],{"type":53,"value":1885},"spark-consumption-cli",{"type":53,"value":1887}," (only when user explicitly wants PySpark \u002F DataFrame work)",{"type":40,"tag":69,"props":1889,"children":1890},{},[1891,1896,1898,1903,1905,1910,1912],{"type":40,"tag":49,"props":1892,"children":1893},{},[1894],{"type":53,"value":1895},"Warehouse bindings",{"type":53,"value":1897}," → ❓ not documented in the current shared ontology schema (",{"type":40,"tag":80,"props":1899,"children":1901},{"className":1900},[],[1902],{"type":53,"value":250},{"type":53,"value":1904}," and ",{"type":40,"tag":80,"props":1906,"children":1908},{"className":1907},[],[1909],{"type":53,"value":257},{"type":53,"value":1911}," only); if encountered, surface to user rather than silently assuming ",{"type":40,"tag":80,"props":1913,"children":1915},{"className":1914},[],[1916],{"type":53,"value":1877},{"type":40,"tag":45,"props":1918,"children":1919},{},[1920,1922,1928,1929,1935,1936,1942,1943,1949,1951,1955],{"type":53,"value":1921},"The ",{"type":40,"tag":80,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":53,"value":1927},"clusterUri",{"type":53,"value":1228},{"type":40,"tag":80,"props":1930,"children":1932},{"className":1931},[],[1933],{"type":53,"value":1934},"databaseName",{"type":53,"value":1228},{"type":40,"tag":80,"props":1937,"children":1939},{"className":1938},[],[1940],{"type":53,"value":1941},"workspaceId",{"type":53,"value":1369},{"type":40,"tag":80,"props":1944,"children":1946},{"className":1945},[],[1947],{"type":53,"value":1948},"itemId",{"type":53,"value":1950}," your delegate needs are all already inside the decoded binding payload — do ",{"type":40,"tag":49,"props":1952,"children":1953},{},[1954],{"type":53,"value":208},{"type":53,"value":1956}," rediscover them via the item APIs.",{"type":40,"tag":1130,"props":1958,"children":1959},{},[],{"type":40,"tag":292,"props":1961,"children":1963},{"id":1962},"consumption-scope",[1964],{"type":53,"value":938},{"type":40,"tag":299,"props":1966,"children":1967},{},[1968,1989],{"type":40,"tag":303,"props":1969,"children":1970},{},[1971],{"type":40,"tag":307,"props":1972,"children":1973},{},[1974,1979,1984],{"type":40,"tag":311,"props":1975,"children":1976},{},[1977],{"type":53,"value":1978},"Operation",{"type":40,"tag":311,"props":1980,"children":1981},{},[1982],{"type":53,"value":1983},"This skill",{"type":40,"tag":311,"props":1985,"children":1986},{},[1987],{"type":53,"value":1988},"Delegate to",{"type":40,"tag":327,"props":1990,"children":1991},{},[1992,2010,2026,2042,2058,2074,2102,2127,2152,2174,2195],{"type":40,"tag":307,"props":1993,"children":1994},{},[1995,2000,2005],{"type":40,"tag":334,"props":1996,"children":1997},{},[1998],{"type":53,"value":1999},"Enumerate entity types, properties, keys, display names",{"type":40,"tag":334,"props":2001,"children":2002},{},[2003],{"type":53,"value":2004},"✅",{"type":40,"tag":334,"props":2006,"children":2007},{},[2008],{"type":53,"value":2009},"—",{"type":40,"tag":307,"props":2011,"children":2012},{},[2013,2018,2022],{"type":40,"tag":334,"props":2014,"children":2015},{},[2016],{"type":53,"value":2017},"Enumerate bindings (source kind, target item, property map, timestamp)",{"type":40,"tag":334,"props":2019,"children":2020},{},[2021],{"type":53,"value":2004},{"type":40,"tag":334,"props":2023,"children":2024},{},[2025],{"type":53,"value":2009},{"type":40,"tag":307,"props":2027,"children":2028},{},[2029,2034,2038],{"type":40,"tag":334,"props":2030,"children":2031},{},[2032],{"type":53,"value":2033},"Enumerate relationships and contextualizations",{"type":40,"tag":334,"props":2035,"children":2036},{},[2037],{"type":53,"value":2004},{"type":40,"tag":334,"props":2039,"children":2040},{},[2041],{"type":53,"value":2009},{"type":40,"tag":307,"props":2043,"children":2044},{},[2045,2050,2054],{"type":40,"tag":334,"props":2046,"children":2047},{},[2048],{"type":53,"value":2049},"Produce an LLM-facing grounding JSON",{"type":40,"tag":334,"props":2051,"children":2052},{},[2053],{"type":53,"value":2004},{"type":40,"tag":334,"props":2055,"children":2056},{},[2057],{"type":53,"value":2009},{"type":40,"tag":307,"props":2059,"children":2060},{},[2061,2066,2070],{"type":40,"tag":334,"props":2062,"children":2063},{},[2064],{"type":53,"value":2065},"Decode the full definition tree for diff \u002F review",{"type":40,"tag":334,"props":2067,"children":2068},{},[2069],{"type":53,"value":2004},{"type":40,"tag":334,"props":2071,"children":2072},{},[2073],{"type":53,"value":2009},{"type":40,"tag":307,"props":2075,"children":2076},{},[2077,2089,2094],{"type":40,"tag":334,"props":2078,"children":2079},{},[2080,2082,2087],{"type":53,"value":2081},"Query ontology-backed ",{"type":40,"tag":49,"props":2083,"children":2084},{},[2085],{"type":53,"value":2086},"data",{"type":53,"value":2088}," in an Eventhouse",{"type":40,"tag":334,"props":2090,"children":2091},{},[2092],{"type":53,"value":2093},"Route",{"type":40,"tag":334,"props":2095,"children":2096},{},[2097],{"type":40,"tag":80,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":53,"value":1856},{"type":40,"tag":307,"props":2103,"children":2104},{},[2105,2115,2119],{"type":40,"tag":334,"props":2106,"children":2107},{},[2108,2109,2113],{"type":53,"value":2081},{"type":40,"tag":49,"props":2110,"children":2111},{},[2112],{"type":53,"value":2086},{"type":53,"value":2114}," in a Lakehouse via SQL endpoint (default)",{"type":40,"tag":334,"props":2116,"children":2117},{},[2118],{"type":53,"value":2093},{"type":40,"tag":334,"props":2120,"children":2121},{},[2122],{"type":40,"tag":80,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":53,"value":1877},{"type":40,"tag":307,"props":2128,"children":2129},{},[2130,2140,2144],{"type":40,"tag":334,"props":2131,"children":2132},{},[2133,2134,2138],{"type":53,"value":2081},{"type":40,"tag":49,"props":2135,"children":2136},{},[2137],{"type":53,"value":2086},{"type":53,"value":2139}," in a Lakehouse via Spark (explicit Spark ask only)",{"type":40,"tag":334,"props":2141,"children":2142},{},[2143],{"type":53,"value":2093},{"type":40,"tag":334,"props":2145,"children":2146},{},[2147],{"type":40,"tag":80,"props":2148,"children":2150},{"className":2149},[],[2151],{"type":53,"value":1885},{"type":40,"tag":307,"props":2153,"children":2154},{},[2155,2165,2170],{"type":40,"tag":334,"props":2156,"children":2157},{},[2158,2159,2163],{"type":53,"value":2081},{"type":40,"tag":49,"props":2160,"children":2161},{},[2162],{"type":53,"value":2086},{"type":53,"value":2164}," in a Warehouse",{"type":40,"tag":334,"props":2166,"children":2167},{},[2168],{"type":53,"value":2169},"Surface (❓ binding shape not in shared schema)",{"type":40,"tag":334,"props":2171,"children":2172},{},[2173],{"type":53,"value":2009},{"type":40,"tag":307,"props":2175,"children":2176},{},[2177,2182,2187],{"type":40,"tag":334,"props":2178,"children":2179},{},[2180],{"type":53,"value":2181},"Create \u002F alter \u002F rebind entity types \u002F relationships",{"type":40,"tag":334,"props":2183,"children":2184},{},[2185],{"type":53,"value":2186},"❌",{"type":40,"tag":334,"props":2188,"children":2189},{},[2190],{"type":40,"tag":80,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":53,"value":196},{"type":40,"tag":307,"props":2196,"children":2197},{},[2198,2203,2207],{"type":40,"tag":334,"props":2199,"children":2200},{},[2201],{"type":53,"value":2202},"Refresh an ontology's indexed state",{"type":40,"tag":334,"props":2204,"children":2205},{},[2206],{"type":53,"value":2186},{"type":40,"tag":334,"props":2208,"children":2209},{},[2210],{"type":53,"value":2211},"Not in preview CLI scope",{"type":40,"tag":41,"props":2213,"children":2214},{},[2215],{"type":40,"tag":45,"props":2216,"children":2217},{},[2218,2220,2225,2227,2232,2233,2238,2240,2245,2247,2252],{"type":53,"value":2219},"Until projections ship, all data reads are ",{"type":40,"tag":49,"props":2221,"children":2222},{},[2223],{"type":53,"value":2224},"source queries",{"type":53,"value":2226}," — they run against the physical ",{"type":40,"tag":80,"props":2228,"children":2230},{"className":2229},[],[2231],{"type":53,"value":250},{"type":53,"value":179},{"type":40,"tag":80,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":53,"value":257},{"type":53,"value":2239}," using the columns listed in ",{"type":40,"tag":80,"props":2241,"children":2243},{"className":2242},[],[2244],{"type":53,"value":265},{"type":53,"value":2246},". Semantic features (inferred joins, derived measures) that require projections are ",{"type":40,"tag":49,"props":2248,"children":2249},{},[2250],{"type":53,"value":2251},"not available",{"type":53,"value":2253}," from this skill; flag them to the user and proceed with source-level filtering.",{"type":40,"tag":1130,"props":2255,"children":2256},{},[],{"type":40,"tag":292,"props":2258,"children":2260},{"id":2259},"grounding-context",[2261],{"type":53,"value":2262},"Grounding Context",{"type":40,"tag":45,"props":2264,"children":2265},{},[2266,2268,2272],{"type":53,"value":2267},"Deep recipe + full JSON shape: ",{"type":40,"tag":219,"props":2269,"children":2270},{"href":966},[2271],{"type":53,"value":969},{"type":53,"value":2273},". Quick index:",{"type":40,"tag":299,"props":2275,"children":2276},{},[2277,2292],{"type":40,"tag":303,"props":2278,"children":2279},{},[2280],{"type":40,"tag":307,"props":2281,"children":2282},{},[2283,2288],{"type":40,"tag":311,"props":2284,"children":2285},{},[2286],{"type":53,"value":2287},"Topic",{"type":40,"tag":311,"props":2289,"children":2290},{},[2291],{"type":53,"value":320},{"type":40,"tag":327,"props":2293,"children":2294},{},[2295,2310,2327,2344],{"type":40,"tag":307,"props":2296,"children":2297},{},[2298,2303],{"type":40,"tag":334,"props":2299,"children":2300},{},[2301],{"type":53,"value":2302},"Fetch + LRO + decode parts",{"type":40,"tag":334,"props":2304,"children":2305},{},[2306],{"type":40,"tag":219,"props":2307,"children":2308},{"href":1794},[2309],{"type":53,"value":1797},{"type":40,"tag":307,"props":2311,"children":2312},{},[2313,2318],{"type":40,"tag":334,"props":2314,"children":2315},{},[2316],{"type":53,"value":2317},"Reconstruct the definition tree in memory",{"type":40,"tag":334,"props":2319,"children":2320},{},[2321],{"type":40,"tag":219,"props":2322,"children":2324},{"href":2323},"references\u002Fgrounding-extraction.md#tree-reconstruction",[2325],{"type":53,"value":2326},"grounding-extraction.md § Tree Reconstruction",{"type":40,"tag":307,"props":2328,"children":2329},{},[2330,2335],{"type":40,"tag":334,"props":2331,"children":2332},{},[2333],{"type":53,"value":2334},"Produce a grounding JSON summary (entities + bindings + relationships)",{"type":40,"tag":334,"props":2336,"children":2337},{},[2338],{"type":40,"tag":219,"props":2339,"children":2341},{"href":2340},"references\u002Fgrounding-extraction.md#grounding-summary-schema",[2342],{"type":53,"value":2343},"grounding-extraction.md § Grounding Summary Schema",{"type":40,"tag":307,"props":2345,"children":2346},{},[2347,2352],{"type":40,"tag":334,"props":2348,"children":2349},{},[2350],{"type":53,"value":2351},"Diff two ontology versions",{"type":40,"tag":334,"props":2353,"children":2354},{},[2355],{"type":40,"tag":219,"props":2356,"children":2358},{"href":2357},"references\u002Fgrounding-extraction.md#diff-two-ontologies",[2359],{"type":53,"value":2360},"grounding-extraction.md § Diff Two Ontologies",{"type":40,"tag":45,"props":2362,"children":2363},{},[2364,2369,2371,2375],{"type":40,"tag":49,"props":2365,"children":2366},{},[2367],{"type":53,"value":2368},"Grounding JSON contract",{"type":53,"value":2370}," — the authoritative shape lives in ",{"type":40,"tag":219,"props":2372,"children":2373},{"href":2340},[2374],{"type":53,"value":2343},{"type":53,"value":2376},". Routing decisions read these fields per binding:",{"type":40,"tag":65,"props":2378,"children":2379},{},[2380,2404,2429,2447,2465,2495,2506],{"type":40,"tag":69,"props":2381,"children":2382},{},[2383,2389,2390,2395,2397,2402],{"type":40,"tag":80,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":53,"value":2388},"source.kind",{"type":53,"value":1280},{"type":40,"tag":80,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":53,"value":250},{"type":53,"value":2396}," | ",{"type":40,"tag":80,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":53,"value":257},{"type":53,"value":2403},") — picks the delegate family.",{"type":40,"tag":69,"props":2405,"children":2406},{},[2407,2413,2414,2420,2422,2427],{"type":40,"tag":80,"props":2408,"children":2410},{"className":2409},[],[2411],{"type":53,"value":2412},"source.workspaceId",{"type":53,"value":1850},{"type":40,"tag":80,"props":2415,"children":2417},{"className":2416},[],[2418],{"type":53,"value":2419},"source.itemId",{"type":53,"value":2421}," — ",{"type":40,"tag":49,"props":2423,"children":2424},{},[2425],{"type":53,"value":2426},"read from the binding, not the ontology",{"type":53,"value":2428}," (cross-workspace bindings are legal).",{"type":40,"tag":69,"props":2430,"children":2431},{},[2432,2438,2439,2445],{"type":40,"tag":80,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":53,"value":2437},"source.sourceSchema",{"type":53,"value":1850},{"type":40,"tag":80,"props":2440,"children":2442},{"className":2441},[],[2443],{"type":53,"value":2444},"source.sourceTableName",{"type":53,"value":2446}," — Lakehouse-only has schema.",{"type":40,"tag":69,"props":2448,"children":2449},{},[2450,2456,2457,2463],{"type":40,"tag":80,"props":2451,"children":2453},{"className":2452},[],[2454],{"type":53,"value":2455},"source.clusterUri",{"type":53,"value":1850},{"type":40,"tag":80,"props":2458,"children":2460},{"className":2459},[],[2461],{"type":53,"value":2462},"source.databaseName",{"type":53,"value":2464}," — Kusto-only.",{"type":40,"tag":69,"props":2466,"children":2467},{},[2468,2473,2474,2479,2480,2485,2487,2493],{"type":40,"tag":80,"props":2469,"children":2471},{"className":2470},[],[2472],{"type":53,"value":1278},{"type":53,"value":1280},{"type":40,"tag":80,"props":2475,"children":2477},{"className":2476},[],[2478],{"type":53,"value":1286},{"type":53,"value":2396},{"type":40,"tag":80,"props":2481,"children":2483},{"className":2482},[],[2484],{"type":53,"value":1293},{"type":53,"value":2486},") + ",{"type":40,"tag":80,"props":2488,"children":2490},{"className":2489},[],[2491],{"type":53,"value":2492},"timestampColumnName",{"type":53,"value":2494}," — required for TS routing.",{"type":40,"tag":69,"props":2496,"children":2497},{},[2498,2504],{"type":40,"tag":80,"props":2499,"children":2501},{"className":2500},[],[2502],{"type":53,"value":2503},"propertyBindings[].sourceColumnName",{"type":53,"value":2505}," — the ontology-property → physical-column remap; applied before any query is composed.",{"type":40,"tag":69,"props":2507,"children":2508},{},[2509,2515,2516,2522,2523,2528,2530,2535],{"type":40,"tag":80,"props":2510,"children":2512},{"className":2511},[],[2513],{"type":53,"value":2514},"relationshipTypes[].contextualizations[].sourceKeyRefBindings[]",{"type":53,"value":1265},{"type":40,"tag":80,"props":2517,"children":2519},{"className":2518},[],[2520],{"type":53,"value":2521},"targetKeyRefBindings[]",{"type":53,"value":2421},{"type":40,"tag":49,"props":2524,"children":2525},{},[2526],{"type":53,"value":2527},"arrays",{"type":53,"value":2529},"; composite keys are legal. Join on ",{"type":40,"tag":49,"props":2531,"children":2532},{},[2533],{"type":53,"value":2534},"all",{"type":53,"value":2536}," entries.",{"type":40,"tag":45,"props":2538,"children":2539},{},[2540,2542,2548],{"type":53,"value":2541},"Hand a trimmed subset of this JSON (not the raw base64 ",{"type":40,"tag":80,"props":2543,"children":2545},{"className":2544},[],[2546],{"type":53,"value":2547},"definition.parts[]",{"type":53,"value":2549},") to downstream skills.",{"type":40,"tag":1130,"props":2551,"children":2552},{},[],{"type":40,"tag":292,"props":2554,"children":2556},{"id":2555},"query-routing",[2557],{"type":53,"value":224},{"type":40,"tag":45,"props":2559,"children":2560},{},[2561,2563,2567],{"type":53,"value":2562},"Deep recipe + per-skill invocation templates: ",{"type":40,"tag":219,"props":2564,"children":2565},{"href":988},[2566],{"type":53,"value":991},{"type":53,"value":2568},". Quick decision table:",{"type":40,"tag":299,"props":2570,"children":2571},{},[2572,2601],{"type":40,"tag":303,"props":2573,"children":2574},{},[2575],{"type":40,"tag":307,"props":2576,"children":2577},{},[2578,2583,2591,2596],{"type":40,"tag":311,"props":2579,"children":2580},{},[2581],{"type":53,"value":2582},"Binding source kind",{"type":40,"tag":311,"props":2584,"children":2585},{},[2586],{"type":40,"tag":80,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":53,"value":1278},{"type":40,"tag":311,"props":2592,"children":2593},{},[2594],{"type":53,"value":2595},"Delegate (default \u002F alternate)",{"type":40,"tag":311,"props":2597,"children":2598},{},[2599],{"type":53,"value":2600},"Query shape",{"type":40,"tag":327,"props":2602,"children":2603},{},[2604,2649,2694,2730,2764],{"type":40,"tag":307,"props":2605,"children":2606},{},[2607,2615,2623,2640],{"type":40,"tag":334,"props":2608,"children":2609},{},[2610],{"type":40,"tag":80,"props":2611,"children":2613},{"className":2612},[],[2614],{"type":53,"value":250},{"type":40,"tag":334,"props":2616,"children":2617},{},[2618],{"type":40,"tag":80,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":53,"value":1286},{"type":40,"tag":334,"props":2624,"children":2625},{},[2626,2631,2633,2638],{"type":40,"tag":80,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":53,"value":1877},{"type":53,"value":2632}," (default, SQL endpoint) — ",{"type":40,"tag":80,"props":2634,"children":2636},{"className":2635},[],[2637],{"type":53,"value":1885},{"type":53,"value":2639}," only when user explicitly wants PySpark \u002F DataFrames",{"type":40,"tag":334,"props":2641,"children":2642},{},[2643],{"type":40,"tag":80,"props":2644,"children":2646},{"className":2645},[],[2647],{"type":53,"value":2648},"SELECT \u003CpropertyColumns> FROM \u003Cschema>.\u003CsourceTableName> WHERE \u003CkeyColumn> = \u003Cvalue>",{"type":40,"tag":307,"props":2650,"children":2651},{},[2652,2660,2668,2685],{"type":40,"tag":334,"props":2653,"children":2654},{},[2655],{"type":40,"tag":80,"props":2656,"children":2658},{"className":2657},[],[2659],{"type":53,"value":250},{"type":40,"tag":334,"props":2661,"children":2662},{},[2663],{"type":40,"tag":80,"props":2664,"children":2666},{"className":2665},[],[2667],{"type":53,"value":1293},{"type":40,"tag":334,"props":2669,"children":2670},{},[2671,2676,2678,2683],{"type":40,"tag":80,"props":2672,"children":2674},{"className":2673},[],[2675],{"type":53,"value":1877},{"type":53,"value":2677}," (default) — ",{"type":40,"tag":80,"props":2679,"children":2681},{"className":2680},[],[2682],{"type":53,"value":1885},{"type":53,"value":2684}," for Spark-only features",{"type":40,"tag":334,"props":2686,"children":2687},{},[2688],{"type":40,"tag":80,"props":2689,"children":2691},{"className":2690},[],[2692],{"type":53,"value":2693},"SELECT ..., \u003CtimestampColumn> FROM \u003Cschema>.\u003CsourceTableName> WHERE \u003CkeyColumn> = \u003Cv> AND \u003CtimestampColumn> >= DATEADD(hour,-1,SYSUTCDATETIME())",{"type":40,"tag":307,"props":2695,"children":2696},{},[2697,2705,2713,2721],{"type":40,"tag":334,"props":2698,"children":2699},{},[2700],{"type":40,"tag":80,"props":2701,"children":2703},{"className":2702},[],[2704],{"type":53,"value":257},{"type":40,"tag":334,"props":2706,"children":2707},{},[2708],{"type":40,"tag":80,"props":2709,"children":2711},{"className":2710},[],[2712],{"type":53,"value":1293},{"type":40,"tag":334,"props":2714,"children":2715},{},[2716],{"type":40,"tag":80,"props":2717,"children":2719},{"className":2718},[],[2720],{"type":53,"value":1856},{"type":40,"tag":334,"props":2722,"children":2723},{},[2724],{"type":40,"tag":80,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":53,"value":2729},"\u003CsourceTableName> | where \u003CkeyColumn> == \"\u003Cv>\" | where \u003CtimestampColumn> > ago(1h) | project \u003CpropertyColumns>",{"type":40,"tag":307,"props":2731,"children":2732},{},[2733,2741,2749,2759],{"type":40,"tag":334,"props":2734,"children":2735},{},[2736],{"type":40,"tag":80,"props":2737,"children":2739},{"className":2738},[],[2740],{"type":53,"value":257},{"type":40,"tag":334,"props":2742,"children":2743},{},[2744],{"type":40,"tag":80,"props":2745,"children":2747},{"className":2746},[],[2748],{"type":53,"value":1286},{"type":40,"tag":334,"props":2750,"children":2751},{},[2752,2757],{"type":40,"tag":49,"props":2753,"children":2754},{},[2755],{"type":53,"value":2756},"Invalid",{"type":53,"value":2758}," — preview forbids this",{"type":40,"tag":334,"props":2760,"children":2761},{},[2762],{"type":53,"value":2763},"Reject and tell the user the ontology is mis-bound",{"type":40,"tag":307,"props":2765,"children":2766},{},[2767,2772,2776,2793],{"type":40,"tag":334,"props":2768,"children":2769},{},[2770],{"type":53,"value":2771},"Any relationship contextualization",{"type":40,"tag":334,"props":2773,"children":2774},{},[2775],{"type":53,"value":2009},{"type":40,"tag":334,"props":2777,"children":2778},{},[2779,2784,2786,2791],{"type":40,"tag":80,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":53,"value":1877},{"type":53,"value":2785}," (default; linking tables are Lakehouse, joins cleaner in T-SQL) — ",{"type":40,"tag":80,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":53,"value":1885},{"type":53,"value":2792}," alternate",{"type":40,"tag":334,"props":2794,"children":2795},{},[2796,2802],{"type":40,"tag":80,"props":2797,"children":2799},{"className":2798},[],[2800],{"type":53,"value":2801},"SELECT \u003CtargetKeyColumns> FROM \u003ClinkTable> WHERE \u003CsourceKeyColumns> = \u003Csource-values>",{"type":53,"value":2803}," then join target-side bindings in a follow-up call",{"type":40,"tag":45,"props":2805,"children":2806},{},[2807,2812,2814,2819],{"type":40,"tag":49,"props":2808,"children":2809},{},[2810],{"type":53,"value":2811},"Invocation contract when handing off",{"type":53,"value":2813}," — this skill resolves the source metadata and ",{"type":40,"tag":49,"props":2815,"children":2816},{},[2817],{"type":53,"value":2818},"composes the query in the target dialect",{"type":53,"value":2820},", then hands both to the delegate. The delegate (sibling skill) owns the actual connection + execution.",{"type":40,"tag":65,"props":2822,"children":2823},{},[2824,2868,2903,2949,2965],{"type":40,"tag":69,"props":2825,"children":2826},{},[2827,2832,2834,2839,2840,2845,2846,2851,2853,2859,2861,2866],{"type":40,"tag":49,"props":2828,"children":2829},{},[2830],{"type":53,"value":2831},"Eventhouse delegate",{"type":53,"value":2833}," → resolved connection (",{"type":40,"tag":80,"props":2835,"children":2837},{"className":2836},[],[2838],{"type":53,"value":1927},{"type":53,"value":1228},{"type":40,"tag":80,"props":2841,"children":2843},{"className":2842},[],[2844],{"type":53,"value":1934},{"type":53,"value":2486},{"type":40,"tag":49,"props":2847,"children":2848},{},[2849],{"type":53,"value":2850},"composed KQL text",{"type":53,"value":2852}," targeting ",{"type":40,"tag":80,"props":2854,"children":2856},{"className":2855},[],[2857],{"type":53,"value":2858},"sourceTableName",{"type":53,"value":2860}," with ",{"type":40,"tag":80,"props":2862,"children":2864},{"className":2863},[],[2865],{"type":53,"value":2492},{"type":53,"value":2867}," filter + key predicate.",{"type":40,"tag":69,"props":2869,"children":2870},{},[2871,2876,2878,2883,2884,2889,2890,2896,2897,2902],{"type":40,"tag":49,"props":2872,"children":2873},{},[2874],{"type":53,"value":2875},"SQL endpoint delegate",{"type":53,"value":2877}," (default for Lakehouse) → resolved connection (",{"type":40,"tag":80,"props":2879,"children":2881},{"className":2880},[],[2882],{"type":53,"value":1941},{"type":53,"value":1228},{"type":40,"tag":80,"props":2885,"children":2887},{"className":2886},[],[2888],{"type":53,"value":1948},{"type":53,"value":1228},{"type":40,"tag":80,"props":2891,"children":2893},{"className":2892},[],[2894],{"type":53,"value":2895},"sourceSchema",{"type":53,"value":2486},{"type":40,"tag":49,"props":2898,"children":2899},{},[2900],{"type":53,"value":2901},"composed T-SQL text",{"type":53,"value":198},{"type":40,"tag":69,"props":2904,"children":2905},{},[2906,2911,2913,2918,2920,2926,2928,2932,2934,2940,2941,2947],{"type":40,"tag":49,"props":2907,"children":2908},{},[2909],{"type":53,"value":2910},"Spark delegate",{"type":53,"value":2912}," (alternate for Lakehouse) → same resolved connection + ",{"type":40,"tag":49,"props":2914,"children":2915},{},[2916],{"type":53,"value":2917},"composed Spark SQL text",{"type":53,"value":2919}," — use Spark-native time functions (",{"type":40,"tag":80,"props":2921,"children":2923},{"className":2922},[],[2924],{"type":53,"value":2925},"current_timestamp() - INTERVAL 1 HOUR",{"type":53,"value":2927},"); do ",{"type":40,"tag":49,"props":2929,"children":2930},{},[2931],{"type":53,"value":208},{"type":53,"value":2933}," emit T-SQL ",{"type":40,"tag":80,"props":2935,"children":2937},{"className":2936},[],[2938],{"type":53,"value":2939},"DATEADD",{"type":53,"value":1265},{"type":40,"tag":80,"props":2942,"children":2944},{"className":2943},[],[2945],{"type":53,"value":2946},"SYSUTCDATETIME",{"type":53,"value":2948}," to Spark.",{"type":40,"tag":69,"props":2950,"children":2951},{},[2952,2956,2958,2963],{"type":40,"tag":49,"props":2953,"children":2954},{},[2955],{"type":53,"value":538},{"type":53,"value":2957}," translate ontology property names → ",{"type":40,"tag":80,"props":2959,"children":2961},{"className":2960},[],[2962],{"type":53,"value":2503},{"type":53,"value":2964}," inside the composed query text. The delegate sees only physical columns and will not resolve ontology identifiers.",{"type":40,"tag":69,"props":2966,"children":2967},{},[2968,2972,2974,2980,2981,2986,2988,2993],{"type":40,"tag":49,"props":2969,"children":2970},{},[2971],{"type":53,"value":538},{"type":53,"value":2973}," pass composite ",{"type":40,"tag":80,"props":2975,"children":2977},{"className":2976},[],[2978],{"type":53,"value":2979},"sourceKeyRefBindings[]",{"type":53,"value":1265},{"type":40,"tag":80,"props":2982,"children":2984},{"className":2983},[],[2985],{"type":53,"value":2521},{"type":53,"value":2987}," — join on ",{"type":40,"tag":49,"props":2989,"children":2990},{},[2991],{"type":53,"value":2992},"every",{"type":53,"value":2994}," element, not just the first.",{"type":40,"tag":41,"props":2996,"children":2997},{},[2998],{"type":40,"tag":45,"props":2999,"children":3000},{},[3001,3003,3008,3010,3015,3017,3022],{"type":53,"value":3002},"Because projections are not yet GA (see Critical Note #4), always translate the ",{"type":40,"tag":49,"props":3004,"children":3005},{},[3006],{"type":53,"value":3007},"ontology property names",{"type":53,"value":3009}," the user mentions back into ",{"type":40,"tag":49,"props":3011,"children":3012},{},[3013],{"type":53,"value":3014},"physical source column names",{"type":53,"value":3016}," (via ",{"type":40,"tag":80,"props":3018,"children":3020},{"className":3019},[],[3021],{"type":53,"value":265},{"type":53,"value":3023},") before composing the delegate query. Do not pass ontology property names to the sibling skill — it will not resolve them.",{"type":40,"tag":1130,"props":3025,"children":3026},{},[],{"type":40,"tag":292,"props":3028,"children":3030},{"id":3029},"must-prefer-avoid-troubleshooting",[3031],{"type":53,"value":1070},{"type":40,"tag":1618,"props":3033,"children":3035},{"id":3034},"must",[3036],{"type":53,"value":3037},"Must",{"type":40,"tag":65,"props":3039,"children":3040},{},[3041,3065,3075,3100,3177,3187,3202,3225,3255,3300],{"type":40,"tag":69,"props":3042,"children":3043},{},[3044,3049,3051,3055,3057,3063],{"type":40,"tag":49,"props":3045,"children":3046},{},[3047],{"type":53,"value":3048},"Require explicit ontology context before routing here",{"type":53,"value":3050}," — the prompt must mention an \"ontology\" (or reference an ontology item by ID\u002Fname). Generic \"Fabric IQ\" or report\u002Fdataset prompts without ontology context are ",{"type":40,"tag":49,"props":3052,"children":3053},{},[3054],{"type":53,"value":208},{"type":53,"value":3056}," ontology tasks; defer those to the matching data skill (e.g. ",{"type":40,"tag":80,"props":3058,"children":3060},{"className":3059},[],[3061],{"type":53,"value":3062},"powerbi-consumption-cli",{"type":53,"value":3064}," for Power BI reports). This keeps the shared \"Fabric IQ\" brand from over-triggering this skill.",{"type":40,"tag":69,"props":3066,"children":3067},{},[3068,3073],{"type":40,"tag":49,"props":3069,"children":3070},{},[3071],{"type":53,"value":3072},"Clarify before routing ambiguous prompts",{"type":53,"value":3074}," — if the user asks \"show me aircraft readings\" and multiple entity types bind to aircraft-like tables, ask which entity type \u002F binding to use. Silent guessing produces wrong data.",{"type":40,"tag":69,"props":3076,"children":3077},{},[3078,3098],{"type":40,"tag":49,"props":3079,"children":3080},{},[3081,3083,3089,3090,3096],{"type":53,"value":3082},"Resolve ",{"type":40,"tag":80,"props":3084,"children":3086},{"className":3085},[],[3087],{"type":53,"value":3088},"WS_ID",{"type":53,"value":1904},{"type":40,"tag":80,"props":3091,"children":3093},{"className":3092},[],[3094],{"type":53,"value":3095},"ONT_ID",{"type":53,"value":3097}," before fetching the definition",{"type":53,"value":3099}," — hardcoded GUIDs are a top failure mode.",{"type":40,"tag":69,"props":3101,"children":3102},{},[3103,3113,3115,3121,3122,3127,3129,3135,3136,3141,3142,3147,3149,3154,3156,3161,3163,3168,3170,3175],{"type":40,"tag":49,"props":3104,"children":3105},{},[3106,3108],{"type":53,"value":3107},"Follow the LRO pattern on ",{"type":40,"tag":80,"props":3109,"children":3111},{"className":3110},[],[3112],{"type":53,"value":457},{"type":53,"value":3114}," — a ",{"type":40,"tag":80,"props":3116,"children":3118},{"className":3117},[],[3119],{"type":53,"value":3120},"202",{"type":53,"value":2860},{"type":40,"tag":80,"props":3123,"children":3125},{"className":3124},[],[3126],{"type":53,"value":1662},{"type":53,"value":3128}," is normal; do not treat it as success. Poll ",{"type":40,"tag":80,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":53,"value":3134},"operations\u002F{operationId}",{"type":53,"value":576},{"type":40,"tag":80,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":53,"value":582},{"type":53,"value":1678},{"type":40,"tag":80,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":53,"value":1684},{"type":53,"value":3148},". Prefer ",{"type":40,"tag":80,"props":3150,"children":3152},{"className":3151},[],[3153],{"type":53,"value":3134},{"type":53,"value":3155}," over raw ",{"type":40,"tag":80,"props":3157,"children":3159},{"className":3158},[],[3160],{"type":53,"value":1731},{"type":53,"value":3162}," polling (analysis.windows.net redirect can be flaky with a Fabric-audience token); if you follow ",{"type":40,"tag":80,"props":3164,"children":3166},{"className":3165},[],[3167],{"type":53,"value":1731},{"type":53,"value":3169},", use the audience required by that URL. On a Failed\u002Fnon-2xx poll, read ",{"type":40,"tag":80,"props":3171,"children":3173},{"className":3172},[],[3174],{"type":53,"value":1783},{"type":53,"value":3176}," and stop — never blind-retry.",{"type":40,"tag":69,"props":3178,"children":3179},{},[3180,3185],{"type":40,"tag":49,"props":3181,"children":3182},{},[3183],{"type":53,"value":3184},"Decode every relevant part before answering",{"type":53,"value":3186}," — never respond from a cached partial view of the ontology. The caller may have added \u002F altered entity types since you last read.",{"type":40,"tag":69,"props":3188,"children":3189},{},[3190,3200],{"type":40,"tag":49,"props":3191,"children":3192},{},[3193,3195],{"type":53,"value":3194},"Translate ontology property names → source column names via ",{"type":40,"tag":80,"props":3196,"children":3198},{"className":3197},[],[3199],{"type":53,"value":265},{"type":53,"value":3201}," before generating any KQL \u002F Spark SQL \u002F T-SQL. The sibling consumption skills see only physical columns.",{"type":40,"tag":69,"props":3203,"children":3204},{},[3205,3210,3211,3216,3218,3223],{"type":40,"tag":49,"props":3206,"children":3207},{},[3208],{"type":53,"value":3209},"Respect the binding type",{"type":53,"value":2421},{"type":40,"tag":80,"props":3212,"children":3214},{"className":3213},[],[3215],{"type":53,"value":1293},{"type":53,"value":3217}," requires a time filter on ",{"type":40,"tag":80,"props":3219,"children":3221},{"className":3220},[],[3222],{"type":53,"value":2492},{"type":53,"value":3224},". Omitting it is a full scan and often rejected by the downstream skill.",{"type":40,"tag":69,"props":3226,"children":3227},{},[3228,3246,3248,3253],{"type":40,"tag":49,"props":3229,"children":3230},{},[3231,3233,3238,3239,3244],{"type":53,"value":3232},"Preserve ",{"type":40,"tag":80,"props":3234,"children":3236},{"className":3235},[],[3237],{"type":53,"value":1941},{"type":53,"value":1850},{"type":40,"tag":80,"props":3240,"children":3242},{"className":3241},[],[3243],{"type":53,"value":1948},{"type":53,"value":3245}," per binding",{"type":53,"value":3247}," — ontology bindings can reference source items in ",{"type":40,"tag":49,"props":3249,"children":3250},{},[3251],{"type":53,"value":3252},"different workspaces",{"type":53,"value":3254}," from the ontology itself; do not assume collocation.",{"type":40,"tag":69,"props":3256,"children":3257},{},[3258,3263,3265,3270,3271,3276,3278,3283,3285,3291,3292,3298],{"type":40,"tag":49,"props":3259,"children":3260},{},[3261],{"type":53,"value":3262},"Consult the in-memory grounding before issuing metadata calls",{"type":53,"value":3264}," — once the grounding JSON is decoded for the session, every subsequent walk \u002F query reads source-column names, linking-table names, item GUIDs, ",{"type":40,"tag":80,"props":3266,"children":3268},{"className":3267},[],[3269],{"type":53,"value":1927},{"type":53,"value":1369},{"type":40,"tag":80,"props":3272,"children":3274},{"className":3273},[],[3275],{"type":53,"value":1934},{"type":53,"value":3277}," ",{"type":40,"tag":49,"props":3279,"children":3280},{},[3281],{"type":53,"value":3282},"from grounding",{"type":53,"value":3284},", not from a fresh ",{"type":40,"tag":80,"props":3286,"children":3288},{"className":3287},[],[3289],{"type":53,"value":3290},"list items",{"type":53,"value":1265},{"type":40,"tag":80,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":53,"value":3297},"get eventhouse",{"type":53,"value":3299}," round trip. Re-fetching metadata you already have is the #1 cause of bloated call counts.",{"type":40,"tag":69,"props":3301,"children":3302},{},[3303,3308,3310,3316,3318,3324],{"type":40,"tag":49,"props":3304,"children":3305},{},[3306],{"type":53,"value":3307},"Use GUIDs, not friendly names, in source URLs",{"type":53,"value":3309}," — many tenants run with ",{"type":40,"tag":80,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":53,"value":3315},"FriendlyNameSupportDisabled",{"type":53,"value":3317},", which silently rejects names like ",{"type":40,"tag":80,"props":3319,"children":3321},{"className":3320},[],[3322],{"type":53,"value":3323},"MyLakehouse.Lakehouse",{"type":53,"value":3325}," in OneLake DFS \u002F Fabric REST URLs. Always pull the GUID from grounding and substitute it into the URL.",{"type":40,"tag":1618,"props":3327,"children":3329},{"id":3328},"prefer",[3330],{"type":53,"value":3331},"Prefer",{"type":40,"tag":65,"props":3333,"children":3334},{},[3335,3385,3403,3424,3465,3475],{"type":40,"tag":69,"props":3336,"children":3337},{},[3338,3353,3355,3361,3362,3368,3370,3376,3378,3384],{"type":40,"tag":49,"props":3339,"children":3340},{},[3341,3346,3347],{"type":40,"tag":80,"props":3342,"children":3344},{"className":3343},[],[3345],{"type":53,"value":521},{"type":53,"value":2860},{"type":40,"tag":80,"props":3348,"children":3350},{"className":3349},[],[3351],{"type":53,"value":3352},"--body @file.json",{"type":53,"value":3354}," for any downstream KQL \u002F SQL payload that contains ",{"type":40,"tag":80,"props":3356,"children":3358},{"className":3357},[],[3359],{"type":53,"value":3360},"|",{"type":53,"value":1228},{"type":40,"tag":80,"props":3363,"children":3365},{"className":3364},[],[3366],{"type":53,"value":3367},"\"",{"type":53,"value":3369},", or newlines. Inline ",{"type":40,"tag":80,"props":3371,"children":3373},{"className":3372},[],[3374],{"type":53,"value":3375},"--body",{"type":53,"value":3377}," breaks under shell escaping — see ",{"type":40,"tag":219,"props":3379,"children":3381},{"href":3380},"..\u002F..\u002Fcommon\u002FEVENTHOUSE-CONSUMPTION-CORE.md",[3382],{"type":53,"value":3383},"EVENTHOUSE-CONSUMPTION-CORE.md",{"type":53,"value":198},{"type":40,"tag":69,"props":3386,"children":3387},{},[3388,3393,3395,3401],{"type":40,"tag":49,"props":3389,"children":3390},{},[3391],{"type":53,"value":3392},"Grounding summary JSON",{"type":53,"value":3394}," (see schema above) over raw ",{"type":40,"tag":80,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":53,"value":3400},"definition.json",{"type":53,"value":3402}," dumps when handing context to another agent.",{"type":40,"tag":69,"props":3404,"children":3405},{},[3406,3422],{"type":40,"tag":49,"props":3407,"children":3408},{},[3409,3415,3416],{"type":40,"tag":80,"props":3410,"children":3412},{"className":3411},[],[3413],{"type":53,"value":3414},"take 100",{"type":53,"value":1265},{"type":40,"tag":80,"props":3417,"children":3419},{"className":3418},[],[3420],{"type":53,"value":3421},"TOP 100",{"type":53,"value":3423}," on first read of any entity's data, then refine.",{"type":40,"tag":69,"props":3425,"children":3426},{},[3427,3446,3448,3453,3455,3459,3460,3464],{"type":40,"tag":49,"props":3428,"children":3429},{},[3430,3432,3437,3438,3444],{"type":53,"value":3431},"Inline ",{"type":40,"tag":80,"props":3433,"children":3435},{"className":3434},[],[3436],{"type":53,"value":521},{"type":53,"value":1265},{"type":40,"tag":80,"props":3439,"children":3441},{"className":3440},[],[3442],{"type":53,"value":3443},"curl",{"type":53,"value":3445}," over Python scripts",{"type":53,"value":3447}," for read-only consumption work — graph walks, single-entity lookups, and ad-hoc fan-out reads should compose ≤ ~15 REST calls in the shell. Reach for a script only when the work is ",{"type":40,"tag":49,"props":3449,"children":3450},{},[3451],{"type":53,"value":3452},"stateful",{"type":53,"value":3454}," (envelope assembly, ID maps, LROs that the user wants re-runnable). See ",{"type":40,"tag":219,"props":3456,"children":3457},{"href":1054},[3458],{"type":53,"value":1048},{"type":53,"value":1904},{"type":40,"tag":219,"props":3461,"children":3462},{"href":1032},[3463],{"type":53,"value":1035},{"type":53,"value":198},{"type":40,"tag":69,"props":3466,"children":3467},{},[3468,3473],{"type":40,"tag":49,"props":3469,"children":3470},{},[3471],{"type":53,"value":3472},"Cache the decoded definition for the life of one session",{"type":53,"value":3474}," — the ontology definition is orders of magnitude smaller than the source data and rarely changes mid-task. Refetch if the user mentions authoring activity.",{"type":40,"tag":69,"props":3476,"children":3477},{},[3478,3496],{"type":40,"tag":49,"props":3479,"children":3480},{},[3481,3487,3488,3494],{"type":40,"tag":80,"props":3482,"children":3484},{"className":3483},[],[3485],{"type":53,"value":3486},"project",{"type":53,"value":1265},{"type":40,"tag":80,"props":3489,"children":3491},{"className":3490},[],[3492],{"type":53,"value":3493},"SELECT",{"type":53,"value":3495}," only the bound source columns",{"type":53,"value":3497},", not the full physical table — ontology bindings imply an explicit column whitelist.",{"type":40,"tag":1618,"props":3499,"children":3501},{"id":3500},"avoid",[3502],{"type":53,"value":3503},"Avoid",{"type":40,"tag":65,"props":3505,"children":3506},{},[3507,3523,3552,3562,3578,3588],{"type":40,"tag":69,"props":3508,"children":3509},{},[3510,3515,3517,3522],{"type":40,"tag":49,"props":3511,"children":3512},{},[3513],{"type":53,"value":3514},"Querying the source table using ontology property names",{"type":53,"value":3516}," — those do not exist in the physical schema. Always go through ",{"type":40,"tag":80,"props":3518,"children":3520},{"className":3519},[],[3521],{"type":53,"value":265},{"type":53,"value":198},{"type":40,"tag":69,"props":3524,"children":3525},{},[3526,3537,3539,3544,3545,3550],{"type":40,"tag":49,"props":3527,"children":3528},{},[3529,3531],{"type":53,"value":3530},"Dropping ",{"type":40,"tag":80,"props":3532,"children":3534},{"className":3533},[],[3535],{"type":53,"value":3536},"where \u003CtimestampColumn> > ago(...)",{"type":53,"value":3538}," on ",{"type":40,"tag":80,"props":3540,"children":3542},{"className":3541},[],[3543],{"type":53,"value":1293},{"type":53,"value":1265},{"type":40,"tag":80,"props":3546,"children":3548},{"className":3547},[],[3549],{"type":53,"value":257},{"type":53,"value":3551}," reads — full scans on streaming tables are the #1 query failure.",{"type":40,"tag":69,"props":3553,"children":3554},{},[3555,3560],{"type":40,"tag":49,"props":3556,"children":3557},{},[3558],{"type":53,"value":3559},"Joining across datasource kinds in one delegate call",{"type":53,"value":3561}," — if a relationship's two sides live in different source kinds, the delegate cannot express the join. Fetch both sides separately and join in the agent.",{"type":40,"tag":69,"props":3563,"children":3564},{},[3565,3570,3572,3577],{"type":40,"tag":49,"props":3566,"children":3567},{},[3568],{"type":53,"value":3569},"Mutating the ontology",{"type":53,"value":3571}," from this skill — route all schema changes to ",{"type":40,"tag":80,"props":3573,"children":3575},{"className":3574},[],[3576],{"type":53,"value":196},{"type":53,"value":198},{"type":40,"tag":69,"props":3579,"children":3580},{},[3581,3586],{"type":40,"tag":49,"props":3582,"children":3583},{},[3584],{"type":53,"value":3585},"Passing raw base64 parts to downstream skills \u002F models",{"type":53,"value":3587}," — always decode and reshape into a grounding JSON first.",{"type":40,"tag":69,"props":3589,"children":3590},{},[3591,3596],{"type":40,"tag":49,"props":3592,"children":3593},{},[3594],{"type":53,"value":3595},"Silently ignoring unknown part paths",{"type":53,"value":3597}," — a new preview release may add part kinds; log-and-continue is fine but surface the new part name to the user.",{"type":40,"tag":1618,"props":3599,"children":3601},{"id":3600},"troubleshooting",[3602],{"type":53,"value":3603},"Troubleshooting",{"type":40,"tag":299,"props":3605,"children":3606},{},[3607,3623],{"type":40,"tag":303,"props":3608,"children":3609},{},[3610],{"type":40,"tag":307,"props":3611,"children":3612},{},[3613,3618],{"type":40,"tag":311,"props":3614,"children":3615},{},[3616],{"type":53,"value":3617},"Symptom",{"type":40,"tag":311,"props":3619,"children":3620},{},[3621],{"type":53,"value":3622},"Fix",{"type":40,"tag":327,"props":3624,"children":3625},{},[3626,3671,3728,3764,3789,3822,3847,3874,3906],{"type":40,"tag":307,"props":3627,"children":3628},{},[3629,3645],{"type":40,"tag":334,"props":3630,"children":3631},{},[3632,3637,3639],{"type":40,"tag":80,"props":3633,"children":3635},{"className":3634},[],[3636],{"type":53,"value":521},{"type":53,"value":3638}," returns ",{"type":40,"tag":80,"props":3640,"children":3642},{"className":3641},[],[3643],{"type":53,"value":3644},"401 Unauthorized",{"type":40,"tag":334,"props":3646,"children":3647},{},[3648,3653,3655,3661,3663,3669],{"type":40,"tag":80,"props":3649,"children":3651},{"className":3650},[],[3652],{"type":53,"value":505},{"type":53,"value":3654},"; confirm ",{"type":40,"tag":80,"props":3656,"children":3658},{"className":3657},[],[3659],{"type":53,"value":3660},"--resource \"https:\u002F\u002Fapi.fabric.microsoft.com\"",{"type":53,"value":3662}," on the control-plane call (and the matching downstream audience when delegating — ",{"type":40,"tag":80,"props":3664,"children":3666},{"className":3665},[],[3667],{"type":53,"value":3668},"https:\u002F\u002Fkusto.kusto.windows.net",{"type":53,"value":3670}," for EH).",{"type":40,"tag":307,"props":3672,"children":3673},{},[3674,3684],{"type":40,"tag":334,"props":3675,"children":3676},{},[3677,3682],{"type":40,"tag":80,"props":3678,"children":3680},{"className":3679},[],[3681],{"type":53,"value":457},{"type":53,"value":3683}," returns 202 with no body",{"type":40,"tag":334,"props":3685,"children":3686},{},[3687,3689,3694,3696,3701,3702,3707,3708,3713,3714,3719,3721,3726],{"type":53,"value":3688},"Expected — follow the LRO pattern; capture ",{"type":40,"tag":80,"props":3690,"children":3692},{"className":3691},[],[3693],{"type":53,"value":1662},{"type":53,"value":3695}," and poll ",{"type":40,"tag":80,"props":3697,"children":3699},{"className":3698},[],[3700],{"type":53,"value":3134},{"type":53,"value":576},{"type":40,"tag":80,"props":3703,"children":3705},{"className":3704},[],[3706],{"type":53,"value":582},{"type":53,"value":1678},{"type":40,"tag":80,"props":3709,"children":3711},{"className":3710},[],[3712],{"type":53,"value":1684},{"type":53,"value":3148},{"type":40,"tag":80,"props":3715,"children":3717},{"className":3716},[],[3718],{"type":53,"value":3134},{"type":53,"value":3720},"; if polling ",{"type":40,"tag":80,"props":3722,"children":3724},{"className":3723},[],[3725],{"type":53,"value":1731},{"type":53,"value":3727},", use the audience required by that URL (analysis.windows.net redirects can fail with a Fabric-audience token).",{"type":40,"tag":307,"props":3729,"children":3730},{},[3731,3746],{"type":40,"tag":334,"props":3732,"children":3733},{},[3734,3740,3741],{"type":40,"tag":80,"props":3735,"children":3737},{"className":3736},[],[3738],{"type":53,"value":3739},"403 Forbidden",{"type":53,"value":3538},{"type":40,"tag":80,"props":3742,"children":3744},{"className":3743},[],[3745],{"type":53,"value":457},{"type":40,"tag":334,"props":3747,"children":3748},{},[3749,3751,3756,3757,3762],{"type":53,"value":3750},"Ontology requires ",{"type":40,"tag":49,"props":3752,"children":3753},{},[3754],{"type":53,"value":3755},"Contributor",{"type":53,"value":179},{"type":40,"tag":49,"props":3758,"children":3759},{},[3760],{"type":53,"value":3761},"Reader on the ontology item",{"type":53,"value":3763}," plus workspace access. Ask for role assignment.",{"type":40,"tag":307,"props":3765,"children":3766},{},[3767,3777],{"type":40,"tag":334,"props":3768,"children":3769},{},[3770,3775],{"type":40,"tag":80,"props":3771,"children":3773},{"className":3772},[],[3774],{"type":53,"value":2547},{"type":53,"value":3776}," is empty",{"type":40,"tag":334,"props":3778,"children":3779},{},[3780,3782,3787],{"type":53,"value":3781},"The item was created but no entity types were added. Tell the user and suggest running ",{"type":40,"tag":80,"props":3783,"children":3785},{"className":3784},[],[3786],{"type":53,"value":196},{"type":53,"value":3788}," first.",{"type":40,"tag":307,"props":3790,"children":3791},{},[3792,3797],{"type":40,"tag":334,"props":3793,"children":3794},{},[3795],{"type":53,"value":3796},"Downstream KQL returns 0 rows but source table has data",{"type":40,"tag":334,"props":3798,"children":3799},{},[3800,3802,3807,3809,3814,3815,3820],{"type":53,"value":3801},"Check the binding's ",{"type":40,"tag":80,"props":3803,"children":3805},{"className":3804},[],[3806],{"type":53,"value":2858},{"type":53,"value":3808}," casing and that ",{"type":40,"tag":80,"props":3810,"children":3812},{"className":3811},[],[3813],{"type":53,"value":1927},{"type":53,"value":1265},{"type":40,"tag":80,"props":3816,"children":3818},{"className":3817},[],[3819],{"type":53,"value":1934},{"type":53,"value":3821}," in the binding match the live cluster. Casing mismatches cause silent empty results.",{"type":40,"tag":307,"props":3823,"children":3824},{},[3825,3836],{"type":40,"tag":334,"props":3826,"children":3827},{},[3828,3834],{"type":40,"tag":80,"props":3829,"children":3831},{"className":3830},[],[3832],{"type":53,"value":3833},"SELECT \u003CpropertyName>",{"type":53,"value":3835}," fails with \"invalid column\"",{"type":40,"tag":334,"props":3837,"children":3838},{},[3839,3841,3846],{"type":53,"value":3840},"You passed an ontology property name, not a source column name. Remap via ",{"type":40,"tag":80,"props":3842,"children":3844},{"className":3843},[],[3845],{"type":53,"value":2503},{"type":53,"value":198},{"type":40,"tag":307,"props":3848,"children":3849},{},[3850,3855],{"type":40,"tag":334,"props":3851,"children":3852},{},[3853],{"type":53,"value":3854},"Relationship traversal returns unexpectedly few rows",{"type":40,"tag":334,"props":3856,"children":3857},{},[3858,3860,3865,3867,3872],{"type":53,"value":3859},"Contextualization's ",{"type":40,"tag":80,"props":3861,"children":3863},{"className":3862},[],[3864],{"type":53,"value":2858},{"type":53,"value":3866}," (Lakehouse linking table) may be empty or stale; inspect via ",{"type":40,"tag":80,"props":3868,"children":3870},{"className":3869},[],[3871],{"type":53,"value":1877},{"type":53,"value":3873}," before blaming the ontology.",{"type":40,"tag":307,"props":3875,"children":3876},{},[3877,3895],{"type":40,"tag":334,"props":3878,"children":3879},{},[3880,3882,3887,3888,3893],{"type":53,"value":3881},"Mismatched ",{"type":40,"tag":80,"props":3883,"children":3885},{"className":3884},[],[3886],{"type":53,"value":1948},{"type":53,"value":1265},{"type":40,"tag":80,"props":3889,"children":3891},{"className":3890},[],[3892],{"type":53,"value":1927},{"type":53,"value":3894}," between binding and live Eventhouse",{"type":40,"tag":334,"props":3896,"children":3897},{},[3898,3900,3905],{"type":53,"value":3899},"The backing Eventhouse was recreated; the ontology needs an authoring update. Hand off to ",{"type":40,"tag":80,"props":3901,"children":3903},{"className":3902},[],[3904],{"type":53,"value":196},{"type":53,"value":198},{"type":40,"tag":307,"props":3907,"children":3908},{},[3909,3914],{"type":40,"tag":334,"props":3910,"children":3911},{},[3912],{"type":53,"value":3913},"Base64 decode produces binary junk",{"type":40,"tag":334,"props":3915,"children":3916},{},[3917,3919,3924,3926,3932,3934,3940],{"type":53,"value":3918},"Part payload was not ",{"type":40,"tag":80,"props":3920,"children":3922},{"className":3921},[],[3923],{"type":53,"value":630},{"type":53,"value":3925},"; check ",{"type":40,"tag":80,"props":3927,"children":3929},{"className":3928},[],[3930],{"type":53,"value":3931},"payloadType",{"type":53,"value":3933},". If it's ",{"type":40,"tag":80,"props":3935,"children":3937},{"className":3936},[],[3938],{"type":53,"value":3939},"VsixPackage",{"type":53,"value":3941}," or an unknown kind, skip and warn.",{"type":40,"tag":1130,"props":3943,"children":3944},{},[],{"type":40,"tag":292,"props":3946,"children":3948},{"id":3947},"agentic-workflows",[3949],{"type":53,"value":1092},{"type":40,"tag":1618,"props":3951,"children":3953},{"id":3952},"snappy-response-discipline",[3954],{"type":53,"value":1048},{"type":40,"tag":45,"props":3956,"children":3957},{},[3958,3960,3965,3967,3972],{"type":53,"value":3959},"Consumption is read-only and should ",{"type":40,"tag":1351,"props":3961,"children":3962},{},[3963],{"type":53,"value":3964},"feel",{"type":53,"value":3966}," fast. The default mode is ",{"type":40,"tag":49,"props":3968,"children":3969},{},[3970],{"type":53,"value":3971},"inline composition",{"type":53,"value":3973}," in the shell — not a Python wrapper. Use this checklist before reaching for a script:",{"type":40,"tag":299,"props":3975,"children":3976},{},[3977,4012],{"type":40,"tag":303,"props":3978,"children":3979},{},[3980],{"type":40,"tag":307,"props":3981,"children":3982},{},[3983,3988,4007],{"type":40,"tag":311,"props":3984,"children":3985},{},[3986],{"type":53,"value":3987},"Situation",{"type":40,"tag":311,"props":3989,"children":3991},{"align":3990},"center",[3992,3994,3999,4000,4005],{"type":53,"value":3993},"Inline (",{"type":40,"tag":80,"props":3995,"children":3997},{"className":3996},[],[3998],{"type":53,"value":521},{"type":53,"value":1265},{"type":40,"tag":80,"props":4001,"children":4003},{"className":4002},[],[4004],{"type":53,"value":3443},{"type":53,"value":4006},")",{"type":40,"tag":311,"props":4008,"children":4009},{"align":3990},[4010],{"type":53,"value":4011},"Python \u002F shell script",{"type":40,"tag":327,"props":4013,"children":4014},{},[4015,4031,4047,4068,4084,4100,4124,4147],{"type":40,"tag":307,"props":4016,"children":4017},{},[4018,4023,4027],{"type":40,"tag":334,"props":4019,"children":4020},{},[4021],{"type":53,"value":4022},"Single-entity lookup",{"type":40,"tag":334,"props":4024,"children":4025},{"align":3990},[4026],{"type":53,"value":2004},{"type":40,"tag":334,"props":4028,"children":4029},{"align":3990},[4030],{"type":53,"value":2186},{"type":40,"tag":307,"props":4032,"children":4033},{},[4034,4039,4043],{"type":40,"tag":334,"props":4035,"children":4036},{},[4037],{"type":53,"value":4038},"Time-series window read",{"type":40,"tag":334,"props":4040,"children":4041},{"align":3990},[4042],{"type":53,"value":2004},{"type":40,"tag":334,"props":4044,"children":4045},{"align":3990},[4046],{"type":53,"value":2186},{"type":40,"tag":307,"props":4048,"children":4049},{},[4050,4060,4064],{"type":40,"tag":334,"props":4051,"children":4052},{},[4053,4055,4059],{"type":53,"value":4054},"Graph walk, hop ≤ 2 (see ",{"type":40,"tag":219,"props":4056,"children":4057},{"href":1032},[4058],{"type":53,"value":1035},{"type":53,"value":4006},{"type":40,"tag":334,"props":4061,"children":4062},{"align":3990},[4063],{"type":53,"value":2004},{"type":40,"tag":334,"props":4065,"children":4066},{"align":3990},[4067],{"type":53,"value":2186},{"type":40,"tag":307,"props":4069,"children":4070},{},[4071,4076,4080],{"type":40,"tag":334,"props":4072,"children":4073},{},[4074],{"type":53,"value":4075},"Cross-source relationship traversal (LH keys → KQL fan-out)",{"type":40,"tag":334,"props":4077,"children":4078},{"align":3990},[4079],{"type":53,"value":2004},{"type":40,"tag":334,"props":4081,"children":4082},{"align":3990},[4083],{"type":53,"value":2186},{"type":40,"tag":307,"props":4085,"children":4086},{},[4087,4092,4096],{"type":40,"tag":334,"props":4088,"children":4089},{},[4090],{"type":53,"value":4091},"Grounding-JSON extraction (one-shot)",{"type":40,"tag":334,"props":4093,"children":4094},{"align":3990},[4095],{"type":53,"value":2004},{"type":40,"tag":334,"props":4097,"children":4098},{"align":3990},[4099],{"type":53,"value":2186},{"type":40,"tag":307,"props":4101,"children":4102},{},[4103,4115,4120],{"type":40,"tag":334,"props":4104,"children":4105},{},[4106,4108,4113],{"type":53,"value":4107},"LRO ",{"type":40,"tag":80,"props":4109,"children":4111},{"className":4110},[],[4112],{"type":53,"value":457},{"type":53,"value":4114}," poll loop the user wants to re-run",{"type":40,"tag":334,"props":4116,"children":4117},{"align":3990},[4118],{"type":53,"value":4119},"➖",{"type":40,"tag":334,"props":4121,"children":4122},{"align":3990},[4123],{"type":53,"value":2004},{"type":40,"tag":307,"props":4125,"children":4126},{},[4127,4132,4136],{"type":40,"tag":334,"props":4128,"children":4129},{},[4130],{"type":53,"value":4131},"Ontology authoring \u002F mutation (35-part envelope, ID cross-refs)",{"type":40,"tag":334,"props":4133,"children":4134},{"align":3990},[4135],{"type":53,"value":2186},{"type":40,"tag":334,"props":4137,"children":4138},{"align":3990},[4139,4141,4146],{"type":53,"value":4140},"✅ (handoff to ",{"type":40,"tag":80,"props":4142,"children":4144},{"className":4143},[],[4145],{"type":53,"value":196},{"type":53,"value":4006},{"type":40,"tag":307,"props":4148,"children":4149},{},[4150,4155,4159],{"type":40,"tag":334,"props":4151,"children":4152},{},[4153],{"type":53,"value":4154},"Long-lived seeding \u002F batch loads with retry & checkpoint",{"type":40,"tag":334,"props":4156,"children":4157},{"align":3990},[4158],{"type":53,"value":2186},{"type":40,"tag":334,"props":4160,"children":4161},{"align":3990},[4162],{"type":53,"value":2004},{"type":40,"tag":45,"props":4164,"children":4165},{},[4166],{"type":40,"tag":49,"props":4167,"children":4168},{},[4169],{"type":53,"value":4170},"Inline-first principles",{"type":40,"tag":138,"props":4172,"children":4173},{},[4174,4212,4245,4269,4279,4289],{"type":40,"tag":69,"props":4175,"children":4176},{},[4177,4182,4184,4190,4191,4196,4197,4203,4205,4211],{"type":40,"tag":49,"props":4178,"children":4179},{},[4180],{"type":53,"value":4181},"Compose, don't script.",{"type":53,"value":4183}," Each REST call is independently meaningful; chain with ",{"type":40,"tag":80,"props":4185,"children":4187},{"className":4186},[],[4188],{"type":53,"value":4189},"&&",{"type":53,"value":1265},{"type":40,"tag":80,"props":4192,"children":4194},{"className":4193},[],[4195],{"type":53,"value":3360},{"type":53,"value":1265},{"type":40,"tag":80,"props":4198,"children":4200},{"className":4199},[],[4201],{"type":53,"value":4202},"jq",{"type":53,"value":4204}," rather than wrapping in a ",{"type":40,"tag":80,"props":4206,"children":4208},{"className":4207},[],[4209],{"type":53,"value":4210},".py",{"type":53,"value":198},{"type":40,"tag":69,"props":4213,"children":4214},{},[4215,4220,4222,4228,4229,4235,4237,4243],{"type":40,"tag":49,"props":4216,"children":4217},{},[4218],{"type":53,"value":4219},"Parallelize fan-out.",{"type":53,"value":4221}," Independent reads (linking-table queries, per-entity-type IN-list reads) go in ",{"type":40,"tag":80,"props":4223,"children":4225},{"className":4224},[],[4226],{"type":53,"value":4227},"&",{"type":53,"value":2860},{"type":40,"tag":80,"props":4230,"children":4232},{"className":4231},[],[4233],{"type":53,"value":4234},"wait",{"type":53,"value":4236},", not sequential ",{"type":40,"tag":80,"props":4238,"children":4240},{"className":4239},[],[4241],{"type":53,"value":4242},"for",{"type":53,"value":4244}," loops.",{"type":40,"tag":69,"props":4246,"children":4247},{},[4248,4253,4254,4260,4262,4268],{"type":40,"tag":49,"props":4249,"children":4250},{},[4251],{"type":53,"value":4252},"One round trip per group.",{"type":53,"value":3277},{"type":40,"tag":80,"props":4255,"children":4257},{"className":4256},[],[4258],{"type":53,"value":4259},"WHERE id IN (...)",{"type":53,"value":4261}," not N×",{"type":40,"tag":80,"props":4263,"children":4265},{"className":4264},[],[4266],{"type":53,"value":4267},"WHERE id = '...'",{"type":53,"value":198},{"type":40,"tag":69,"props":4270,"children":4271},{},[4272,4277],{"type":40,"tag":49,"props":4273,"children":4274},{},[4275],{"type":53,"value":4276},"Cache the grounding JSON",{"type":53,"value":4278}," for the session — it does not change between queries, and refetching it doubles every walk's latency.",{"type":40,"tag":69,"props":4280,"children":4281},{},[4282,4287],{"type":40,"tag":49,"props":4283,"children":4284},{},[4285],{"type":53,"value":4286},"Stream early.",{"type":53,"value":4288}," Show the anchor row and first neighbor group as soon as they return; don't block presentation on the full walk.",{"type":40,"tag":69,"props":4290,"children":4291},{},[4292,4297,4299,4304],{"type":40,"tag":49,"props":4293,"children":4294},{},[4295],{"type":53,"value":4296},"No script unless asked.",{"type":53,"value":4298}," If the user says \"save this for later\" or \"re-run nightly\", ",{"type":40,"tag":1351,"props":4300,"children":4301},{},[4302],{"type":53,"value":4303},"then",{"type":53,"value":4305}," package as a script. Otherwise keep the work in chat-replayable shell.",{"type":40,"tag":45,"props":4307,"children":4308},{},[4309],{"type":53,"value":4310},"If a task starts to look like it needs > ~20 REST calls, > 2 hops, or persistent state across calls, surface this to the user before scripting — it usually means the question should be narrowed, not automated.",{"type":40,"tag":1618,"props":4312,"children":4314},{"id":4313},"ground-then-query-sequence",[4315],{"type":53,"value":4316},"\"Ground then Query\" Sequence",{"type":40,"tag":45,"props":4318,"children":4319},{},[4320],{"type":53,"value":4321},"When the user asks to query data through an ontology lens:",{"type":40,"tag":4323,"props":4324,"children":4329},"pre",{"className":4325,"code":4327,"language":53,"meta":4328},[4326],"language-text","Step 1 → Resolve WS_ID + ONT_ID (list workspaces, list items type=Ontology)\nStep 2 → getDefinition (LRO) → decode all parts → reconstruct tree\nStep 3 → Build grounding JSON (entities, properties, bindings, relationships)\nStep 4 → Disambiguate with the user if multiple entity types \u002F bindings could satisfy the intent\nStep 5 → For the chosen entity type + binding:\n           a. Remap ontology property names → source column names\n           b. Compose the source query (KQL \u002F Spark SQL \u002F T-SQL)\n           c. Hand off to the matching sibling consumption skill with minimal fields\nStep 6 → Post-process results back into ontology-property naming for the user (optional but helpful)\n","",[4330],{"type":40,"tag":80,"props":4331,"children":4332},{"__ignoreMap":4328},[4333],{"type":53,"value":4327},{"type":40,"tag":1618,"props":4335,"children":4337},{"id":4336},"schema-aware-query-generation",[4338],{"type":53,"value":4339},"Schema-Aware Query Generation",{"type":40,"tag":45,"props":4341,"children":4342},{},[4343,4345,4350],{"type":53,"value":4344},"After a grounding pass, generate queries using the physical columns recorded in ",{"type":40,"tag":80,"props":4346,"children":4348},{"className":4347},[],[4349],{"type":53,"value":265},{"type":53,"value":4351},", never the ontology names:",{"type":40,"tag":4323,"props":4353,"children":4356},{"className":4354,"code":4355,"language":53,"meta":4328},[4326],"Entity type \"Aircraft\" with binding:\n  source kind = KustoTable\n  sourceTableName = \"AircraftReadings\"\n  timestampColumnName = \"PreciseTimestamp\"\n  propertyBindings: { AltitudeFt → SourceColumn \"Temp_C\", TailNumber → SourceColumn \"AssetId\" }\n\nUser intent: \"show altitude excursions on aircraft N42ZA in the last hour\"\n\nGenerated KQL (delegated to eventhouse-consumption-cli):\n  AircraftReadings\n  | where AssetId == \"N42ZA\"\n  | where PreciseTimestamp > ago(1h)\n  | project PreciseTimestamp, Temp_C\n  | where Temp_C > 80\n",[4357],{"type":40,"tag":80,"props":4358,"children":4359},{"__ignoreMap":4328},[4360],{"type":53,"value":4355},{"type":40,"tag":1618,"props":4362,"children":4364},{"id":4363},"relationship-traversal",[4365],{"type":53,"value":4366},"Relationship Traversal",{"type":40,"tag":4323,"props":4368,"children":4371},{"className":4369,"code":4370,"language":53,"meta":4328},[4326],"Relationship \"operates\" (Airline → Aircraft)\nContextualization: LakehouseTable \"HubAircraftAssignment\" with (AirlineId, TailNumber) columns\n  AND two entity-type bindings (Airline on LakehouseTable \"Airlines\", Aircraft on KustoTable \"AircraftReadings\")\n\nUser intent: \"which aircraft does Airline 'ZA' operate and what's their latest reading?\"\n\nStep 1: sqldw-consumption-cli → SELECT TailNumber FROM HubAircraftAssignment WHERE AirlineId = 'ZA'\nStep 2: eventhouse-consumption-cli → AircraftReadings | where AssetId in (\u003CTankIds>) | summarize arg_max(PreciseTimestamp, *) by AssetId\nStep 3: Merge results in the agent; present with ontology-level column names.\n",[4372],{"type":40,"tag":80,"props":4373,"children":4374},{"__ignoreMap":4328},[4375],{"type":53,"value":4370},{"type":40,"tag":45,"props":4377,"children":4378},{},[4379,4381,4385,4387,4391],{"type":53,"value":4380},"Full end-to-end bash recipes (enumerate → ground → route → query) live in ",{"type":40,"tag":219,"props":4382,"children":4383},{"href":1010},[4384],{"type":53,"value":1013},{"type":53,"value":4386},". For \"show me everything related to X\" prompts, jump straight to the N-hop walk in ",{"type":40,"tag":219,"props":4388,"children":4389},{"href":1032},[4390],{"type":53,"value":1035},{"type":53,"value":198},{"type":40,"tag":1618,"props":4393,"children":4395},{"id":4394},"graph-walks-n-hop-from-an-anchor",[4396],{"type":53,"value":4397},"Graph Walks (N-hop from an anchor)",{"type":40,"tag":45,"props":4399,"children":4400},{},[4401,4403,4408,4410,4415],{"type":53,"value":4402},"When the user gives an instance (\"Panel7\", \"aircraft N42ZA\", \"customer 1234\") and asks for ",{"type":40,"tag":1351,"props":4404,"children":4405},{},[4406],{"type":53,"value":4407},"its neighborhood",{"type":53,"value":4409}," — not a single column — use the dedicated ",{"type":40,"tag":49,"props":4411,"children":4412},{},[4413],{"type":53,"value":4414},"graph walk",{"type":53,"value":4416}," pattern instead of inventing a recipe per question.",{"type":40,"tag":4323,"props":4418,"children":4421},{"className":4419,"code":4420,"language":53,"meta":4328},[4326],"Anchor → relationships touching anchor (from grounding JSON, in-memory)\n       → linking-table reads (parallel, one per relationship)\n       → IN-list reads of neighbor entities (one per EntityType)\n       → optional KustoTable telemetry sweep (one per EntityType with TS binding)\n",[4422],{"type":40,"tag":80,"props":4423,"children":4424},{"__ignoreMap":4328},[4425],{"type":53,"value":4420},{"type":40,"tag":45,"props":4427,"children":4428},{},[4429,4431,4435],{"type":53,"value":4430},"For hop=1 this is typically ≤ 10 round trips and stays inline. Full algorithm, fan-out template, hop budget, and a worked Panel7 example live in ",{"type":40,"tag":219,"props":4432,"children":4433},{"href":1032},[4434],{"type":53,"value":1035},{"type":53,"value":198},{"type":40,"tag":1130,"props":4437,"children":4438},{},[],{"type":40,"tag":292,"props":4440,"children":4442},{"id":4441},"examples",[4443],{"type":53,"value":4444},"Examples",{"type":40,"tag":45,"props":4446,"children":4447},{},[4448,4450,4454,4456,4460,4462,4466,4468,4472],{"type":53,"value":4449},"End-to-end worked examples (enumerate an ontology → build grounding JSON → route a source-table query to the correct sibling consumption skill → traverse a relationship across Lakehouse + Eventhouse) live in ",{"type":40,"tag":219,"props":4451,"children":4452},{"href":1010},[4453],{"type":53,"value":1013},{"type":53,"value":4455},". N-hop neighborhood walks from an anchor instance (Panel7-style) live in ",{"type":40,"tag":219,"props":4457,"children":4458},{"href":1032},[4459],{"type":53,"value":1035},{"type":53,"value":4461},". Complete fetch-and-decode scripts live in ",{"type":40,"tag":219,"props":4463,"children":4464},{"href":966},[4465],{"type":53,"value":969},{"type":53,"value":4467},". Per-binding-type invocation templates live in ",{"type":40,"tag":219,"props":4469,"children":4470},{"href":988},[4471],{"type":53,"value":991},{"type":53,"value":198},{"type":40,"tag":1130,"props":4474,"children":4475},{},[],{"type":40,"tag":292,"props":4477,"children":4479},{"id":4478},"agent-integration-notes",[4480],{"type":53,"value":1114},{"type":40,"tag":65,"props":4482,"children":4483},{},[4484,4504,4516,4555,4573,4592],{"type":40,"tag":69,"props":4485,"children":4486},{},[4487,4488,4492,4494,4502],{"type":53,"value":164},{"type":40,"tag":49,"props":4489,"children":4490},{},[4491],{"type":53,"value":169},{"type":53,"value":4493}," on the ontology item. All authoring operations (create, alter, rebind, rename) belong to ",{"type":40,"tag":49,"props":4495,"children":4496},{},[4497],{"type":40,"tag":80,"props":4498,"children":4500},{"className":4499},[],[4501],{"type":53,"value":196},{"type":53,"value":4503}," — delegate there.",{"type":40,"tag":69,"props":4505,"children":4506},{},[4507,4509,4514],{"type":53,"value":4508},"This skill ",{"type":40,"tag":49,"props":4510,"children":4511},{},[4512],{"type":53,"value":4513},"does not execute data queries itself",{"type":53,"value":4515},". It produces grounding context and a routing decision; the actual source query runs inside the per-datasource consumption skill you delegate to.",{"type":40,"tag":69,"props":4517,"children":4518},{},[4519,4521,4529,4530,4538,4539,4547,4549,4553],{"type":53,"value":4520},"Supported downstream skills (preview): ",{"type":40,"tag":49,"props":4522,"children":4523},{},[4524],{"type":40,"tag":80,"props":4525,"children":4527},{"className":4526},[],[4528],{"type":53,"value":1856},{"type":53,"value":1228},{"type":40,"tag":49,"props":4531,"children":4532},{},[4533],{"type":40,"tag":80,"props":4534,"children":4536},{"className":4535},[],[4537],{"type":53,"value":1885},{"type":53,"value":1228},{"type":40,"tag":49,"props":4540,"children":4541},{},[4542],{"type":40,"tag":80,"props":4543,"children":4545},{"className":4544},[],[4546],{"type":53,"value":1877},{"type":53,"value":4548},". A standalone graph consumption skill does ",{"type":40,"tag":49,"props":4550,"children":4551},{},[4552],{"type":53,"value":208},{"type":53,"value":4554}," yet exist — if the user asks for a graph-shaped query over relationships, surface that limitation and fall back to per-edge joins via Lakehouse \u002F SQL.",{"type":40,"tag":69,"props":4556,"children":4557},{},[4558,4560,4565,4566,4571],{"type":53,"value":4559},"Orchestrator agents should hand this skill the ",{"type":40,"tag":49,"props":4561,"children":4562},{},[4563],{"type":53,"value":4564},"workspace name \u002F ID",{"type":53,"value":1538},{"type":40,"tag":49,"props":4567,"children":4568},{},[4569],{"type":53,"value":4570},"ontology display name \u002F ID",{"type":53,"value":4572},"; it will return a grounding JSON they can reuse for subsequent delegate calls without re-fetching the definition.",{"type":40,"tag":69,"props":4574,"children":4575},{},[4576,4578,4583,4585,4590],{"type":53,"value":4577},"When authoring activity is suspected mid-session (e.g., the user runs ",{"type":40,"tag":80,"props":4579,"children":4581},{"className":4580},[],[4582],{"type":53,"value":196},{"type":53,"value":4584}," and then comes back to query), ",{"type":40,"tag":49,"props":4586,"children":4587},{},[4588],{"type":53,"value":4589},"re-run the grounding pass",{"type":53,"value":4591}," — the cached definition is stale.",{"type":40,"tag":69,"props":4593,"children":4594},{},[4595,4597,4602,4604,4609,4611,4617,4619,4623,4625,4631,4633,4637,4639,4644],{"type":53,"value":4596},"If a ",{"type":40,"tag":49,"props":4598,"children":4599},{},[4600],{"type":53,"value":4601},"Fabric KQL MCP server",{"type":53,"value":4603}," is configured in the user's environment, it can substitute for ",{"type":40,"tag":80,"props":4605,"children":4607},{"className":4606},[],[4608],{"type":53,"value":521},{"type":53,"value":4610}," on the Eventhouse delegate leg. The repo's default ",{"type":40,"tag":80,"props":4612,"children":4614},{"className":4613},[],[4615],{"type":53,"value":4616},"mcp-setup\u002Fmcp-config-template.json",{"type":53,"value":4618}," does ",{"type":40,"tag":49,"props":4620,"children":4621},{},[4622],{"type":53,"value":208},{"type":53,"value":4624}," register a ",{"type":40,"tag":80,"props":4626,"children":4628},{"className":4627},[],[4629],{"type":53,"value":4630},"fabric-kql",{"type":53,"value":4632}," server, so do not assume that name exists. Either way it does ",{"type":40,"tag":49,"props":4634,"children":4635},{},[4636],{"type":53,"value":208},{"type":53,"value":4638}," cover ontology control-plane calls, so the fetch \u002F grounding step still uses ",{"type":40,"tag":80,"props":4640,"children":4642},{"className":4641},[],[4643],{"type":53,"value":521},{"type":53,"value":198},{"items":4646,"total":4755},[4647,4658,4679,4695,4711,4727,4742],{"slug":61,"name":61,"fn":4648,"description":4649,"org":4650,"tags":4651,"stars":23,"repoUrl":24,"updatedAt":4657},"check for Fabric skill marketplace updates","Check an installed skills-for-fabric plugin bundle or git clone for updates, show the matching changelog, and provide host-appropriate update guidance. Use when the user wants to: (1) check for skill updates, (2) see what changed, (3) verify the installed version. Triggers: \"check for updates\", \"am I up to date\", \"what version\", \"update skills\", \"show changelog\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4652,4653,4654],{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":4655,"slug":4656,"type":15},"Operations","operations","2026-07-24T05:41:25.892114",{"slug":4659,"name":4659,"fn":4660,"description":4661,"org":4662,"tags":4663,"stars":23,"repoUrl":24,"updatedAt":4678},"databricks-migration","migrate Databricks notebooks to Microsoft Fabric","Port Databricks notebooks and jobs to Microsoft Fabric. Provides an exhaustive dbutils to notebookutils substitution table: fs operations (runtime mounts or OneLake Shortcuts), secret scope to Key Vault URL conversion, notebook run and exit, widget replacement with parameter-tagged cells, and library install replacement with Fabric Environments. Covers Unity Catalog three-level namespace reduction to Lakehouse two-level schemas, DBFS path conversion to OneLake, Databricks Jobs to Spark Job Definitions, MLflow tracking URI removal, and Photon to Native Execution Engine substitution. Use when the user wants to: (1) replace dbutils with notebookutils, (2) collapse Unity Catalog namespaces to Lakehouse schemas, (3) convert Databricks Jobs or Delta Live Tables. Triggers: \"migrate from databricks\", \"databricks to fabric\", \"dbutils to notebookutils\", \"dbutils fabric\", \"unity catalog migration\", \"dbfs to onelake\", \"databricks notebook migration\", \"delta live tables fabric\", \"photon native execution\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4664,4667,4670,4671,4672,4675],{"name":4665,"slug":4666,"type":15},"Data Engineering","data-engineering",{"name":4668,"slug":4669,"type":15},"Databricks","databricks",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":4673,"slug":4674,"type":15},"Migration","migration",{"name":4676,"slug":4677,"type":15},"Notebooks","notebooks","2026-07-24T05:41:22.914341",{"slug":4680,"name":4680,"fn":4681,"description":4682,"org":4683,"tags":4684,"stars":23,"repoUrl":24,"updatedAt":4694},"dataflows-authoring-cli","manage Microsoft Fabric Dataflows via CLI","Create, update, delete, and refresh Fabric Dataflows Gen2 with write-side CLI via Fabric APIs. Build mashup.pq and queryMetadata.json, preview candidate M with executeQuery\u002FcustomMashupDocument, bind connections, and configure output destinations. For saved query execution or refresh-status reads, use `dataflows-consumption-cli`. If a request explicitly insists on the Dataflows consumption or read-only path for a mutation, do not route here; let consumption refuse before any separately confirmed authoring handoff. Triggers: \"create dataflow\", \"update dataflow\", \"delete dataflow\", \"trigger dataflow refresh\", \"preview Power Query M\", \"preview before save\", \"customMashupDocument\", \"create Fabric data source connection\", \"create SQL Server source REST\", \"POST \u002Fv1\u002Fconnections\", \"supportedConnectionTypes\", \"passwordReference\", \"bind connection\", \"dataflow output destination\", \"dataflow write to lakehouse\", \"dataflow write to warehouse\", \"dataflow write to ADX\", \"DataDestinations annotation\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4685,4686,4687,4690,4691],{"name":17,"slug":18,"type":15},{"name":4665,"slug":4666,"type":15},{"name":4688,"slug":4689,"type":15},"Data Pipeline","data-pipeline",{"name":21,"slug":22,"type":15},{"name":4692,"slug":4693,"type":15},"REST API","rest-api","2026-07-31T05:54:59.059517",{"slug":4696,"name":4696,"fn":4697,"description":4698,"org":4699,"tags":4700,"stars":23,"repoUrl":24,"updatedAt":4710},"e2e-medallion-architecture","implement Medallion Architecture in Microsoft Fabric","Plan and implement end-to-end Microsoft Fabric data platforms and Medallion Architecture (Bronze\u002FSilver\u002FGold) lakehouse patterns using PySpark, Delta Lake, Lakehouse\u002FWarehouse items, Fabric Pipelines, and semantic-model handoff. Use when the user wants to: (1) design a Bronze\u002FSilver\u002FGold data lakehouse, (2) plan an ingestion-to-semantic-model Fabric data platform, (3) set up multi-layer workspaces with lakehouses for each tier, (4) build ingestion-to-analytics pipelines with data quality enforcement, (5) orchestrate Bronze-to-Silver-to-Gold flows via notebooks. For natural-language business questions over existing Power BI report data, use `fabriciq`. Triggers: \"medallion architecture\", \"bronze silver gold\", \"lakehouse layers\", \"e2e data pipeline\", \"end-to-end lakehouse\", \"data lakehouse pattern\", \"multi-layer lakehouse\", \"build medallion\", \"setup medallion\", \"end-to-end Fabric data platform\", \"bronze silver gold platform\", \"ingestion semantic model platform\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4701,4704,4705,4706,4707],{"name":4702,"slug":4703,"type":15},"Architecture","architecture",{"name":4665,"slug":4666,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":4708,"slug":4709,"type":15},"PySpark","pyspark","2026-07-31T05:54:57.038396",{"slug":4712,"name":4712,"fn":4713,"description":4714,"org":4715,"tags":4716,"stars":23,"repoUrl":24,"updatedAt":4726},"eventhouse-authoring-cli","manage Fabric Eventhouse and KQL databases","Execute KQL management commands (table management, ingestion, policies, functions, materialized views) against Fabric Eventhouse and KQL Databases via CLI. Use when the user wants to:\n  1. Create or alter KQL tables, columns, or functions\n  2. Ingest data into an Eventhouse (inline, from storage, streaming)\n  3. Configure retention, caching, or partitioning policies\n  4. Create or manage materialized views and update policies\n  5. Manage data mappings for ingestion pipelines\n  6. Deploy KQL schema via scripts\nTriggers: \"create kql table\", \"kql ingestion\", \"ingest into eventhouse\", \"kql function\", \"materialized view\", \"kql retention policy\", \"eventhouse schema\", \"kql authoring\", \"create eventhouse table\", \"kql mapping\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4717,4720,4723,4724,4725],{"name":4718,"slug":4719,"type":15},"Database","database",{"name":4721,"slug":4722,"type":15},"KQL","kql",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":4655,"slug":4656,"type":15},"2026-04-06T18:36:51.340409",{"slug":1856,"name":1856,"fn":4728,"description":4729,"org":4730,"tags":4731,"stars":23,"repoUrl":24,"updatedAt":4741},"query Fabric Eventhouse with KQL","Run KQL queries against Fabric Eventhouse for real-time intelligence and time-series analytics using `az rest` against the Kusto REST API. Covers KQL operators (where, summarize, join, render), Eventhouse schema discovery (.show tables), time-series patterns with bin(), and ingestion monitoring. Use when the user wants to:\n  1. Run read-only KQL queries against an Eventhouse or KQL Database\n  2. Discover Eventhouse table schema and metadata\n  3. Analyse real-time or time-series data with KQL operators\n  4. Monitor ingestion health and active KQL queries\n  5. Export KQL results to JSON\nTriggers: \"kql query\", \"kusto query\", \"eventhouse query\", \"kql database\", \"real-time intelligence\", \"time-series kql\", \"query eventhouse\", \"explore eventhouse\", \"show tables kql\"\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4732,4735,4736,4737,4738],{"name":4733,"slug":4734,"type":15},"Analytics","analytics",{"name":4721,"slug":4722,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":4739,"slug":4740,"type":15},"Real-Time Intelligence","real-time-intelligence","2026-04-06T18:36:45.018807",{"slug":4743,"name":4743,"fn":4744,"description":4745,"org":4746,"tags":4747,"stars":23,"repoUrl":24,"updatedAt":4754},"eventstream-consumption-cli","monitor Fabric Eventstream ingestion pipelines","List, inspect, and monitor Fabric Eventstream real-time ingestion pipelines via the Items REST API. Discover Eventstreams across workspaces, decode base64 graph topologies tracing event flow from source through operators to destination nodes. Validate connection IDs, wiring, retention policies (1-90 days), and throughput levels. Retrieve Custom Endpoint Kafka credentials via Topology API. **Invoke this skill** to: (1) list Eventstreams, (2) inspect Eventstream topology showing sources and destinations, (3) validate Eventstream configurations, (4) check Eventstream retention policy and throughput level, (5) get connection strings. Triggers: \"list eventstreams\", \"inspect eventstream\", \"describe eventstream topology\", \"eventstream operator nodes\", \"eventstream sources and destinations\", \"eventstream health\", \"eventstream status\", \"eventstream configuration\", \"eventstream retention\", \"eventstream throughput level\", \"eventstream connection string\", \"custom endpoint credentials\", \"check eventstream\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4748,4749,4750,4751],{"name":17,"slug":18,"type":15},{"name":4665,"slug":4666,"type":15},{"name":21,"slug":22,"type":15},{"name":4752,"slug":4753,"type":15},"Monitoring","monitoring","2026-07-31T05:55:03.045486",19,{"items":4757,"total":4946},[4758,4780,4801,4818,4833,4850,4861,4874,4889,4904,4921,4934],{"slug":4759,"name":4759,"fn":4760,"description":4761,"org":4762,"tags":4763,"stars":4777,"repoUrl":4778,"updatedAt":4779},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4764,4767,4770,4771,4774],{"name":4765,"slug":4766,"type":15},"Engineering","engineering",{"name":4768,"slug":4769,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":4772,"slug":4773,"type":15},"Project Management","project-management",{"name":4775,"slug":4776,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":4781,"name":4781,"fn":4782,"description":4783,"org":4784,"tags":4785,"stars":4798,"repoUrl":4799,"updatedAt":4800},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4786,4789,4792,4795],{"name":4787,"slug":4788,"type":15},".NET","net",{"name":4790,"slug":4791,"type":15},"Agents","agents",{"name":4793,"slug":4794,"type":15},"Azure","azure",{"name":4796,"slug":4797,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":4802,"name":4802,"fn":4803,"description":4804,"org":4805,"tags":4806,"stars":4798,"repoUrl":4799,"updatedAt":4817},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4807,4808,4809,4812,4815,4816],{"name":4733,"slug":4734,"type":15},{"name":4793,"slug":4794,"type":15},{"name":4810,"slug":4811,"type":15},"Data Analysis","data-analysis",{"name":4813,"slug":4814,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":4752,"slug":4753,"type":15},"2026-05-13T06:14:16.261754",{"slug":4819,"name":4819,"fn":4820,"description":4821,"org":4822,"tags":4823,"stars":4798,"repoUrl":4799,"updatedAt":4832},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4824,4827,4828,4829],{"name":4825,"slug":4826,"type":15},"AI Infrastructure","ai-infrastructure",{"name":4793,"slug":4794,"type":15},{"name":4813,"slug":4814,"type":15},{"name":4830,"slug":4831,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":4834,"name":4834,"fn":4835,"description":4836,"org":4837,"tags":4838,"stars":4798,"repoUrl":4799,"updatedAt":4849},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4839,4840,4843,4844,4845,4848],{"name":4793,"slug":4794,"type":15},{"name":4841,"slug":4842,"type":15},"Compliance","compliance",{"name":4796,"slug":4797,"type":15},{"name":9,"slug":8,"type":15},{"name":4846,"slug":4847,"type":15},"Python","python",{"name":4830,"slug":4831,"type":15},"2026-07-18T05:14:23.017504",{"slug":4851,"name":4851,"fn":4852,"description":4853,"org":4854,"tags":4855,"stars":4798,"repoUrl":4799,"updatedAt":4860},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4856,4857,4858,4859],{"name":4733,"slug":4734,"type":15},{"name":4793,"slug":4794,"type":15},{"name":4796,"slug":4797,"type":15},{"name":4846,"slug":4847,"type":15},"2026-07-31T05:54:29.068751",{"slug":4862,"name":4862,"fn":4863,"description":4864,"org":4865,"tags":4866,"stars":4798,"repoUrl":4799,"updatedAt":4873},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4867,4870,4871,4872],{"name":4868,"slug":4869,"type":15},"API Development","api-development",{"name":4793,"slug":4794,"type":15},{"name":9,"slug":8,"type":15},{"name":4846,"slug":4847,"type":15},"2026-07-18T05:14:16.988376",{"slug":4875,"name":4875,"fn":4876,"description":4877,"org":4878,"tags":4879,"stars":4798,"repoUrl":4799,"updatedAt":4888},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4880,4881,4884,4887],{"name":4793,"slug":4794,"type":15},{"name":4882,"slug":4883,"type":15},"Computer Vision","computer-vision",{"name":4885,"slug":4886,"type":15},"Images","images",{"name":4846,"slug":4847,"type":15},"2026-07-18T05:14:18.007737",{"slug":4890,"name":4890,"fn":4891,"description":4892,"org":4893,"tags":4894,"stars":4798,"repoUrl":4799,"updatedAt":4903},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4895,4896,4899,4902],{"name":4793,"slug":4794,"type":15},{"name":4897,"slug":4898,"type":15},"Configuration","configuration",{"name":4900,"slug":4901,"type":15},"Feature Flags","feature-flags",{"name":4813,"slug":4814,"type":15},"2026-07-03T16:32:01.278468",{"slug":4905,"name":4905,"fn":4906,"description":4907,"org":4908,"tags":4909,"stars":4798,"repoUrl":4799,"updatedAt":4920},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4910,4913,4914,4917],{"name":4911,"slug":4912,"type":15},"Cosmos DB","cosmos-db",{"name":4718,"slug":4719,"type":15},{"name":4915,"slug":4916,"type":15},"NoSQL","nosql",{"name":4918,"slug":4919,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":4922,"name":4922,"fn":4906,"description":4923,"org":4924,"tags":4925,"stars":4798,"repoUrl":4799,"updatedAt":4933},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4926,4927,4928,4929,4930],{"name":4911,"slug":4912,"type":15},{"name":4718,"slug":4719,"type":15},{"name":9,"slug":8,"type":15},{"name":4915,"slug":4916,"type":15},{"name":4931,"slug":4932,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":4935,"name":4935,"fn":4936,"description":4937,"org":4938,"tags":4939,"stars":4798,"repoUrl":4799,"updatedAt":4945},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4940,4941,4942,4943,4944],{"name":4793,"slug":4794,"type":15},{"name":4911,"slug":4912,"type":15},{"name":4718,"slug":4719,"type":15},{"name":4813,"slug":4814,"type":15},{"name":4915,"slug":4916,"type":15},"2026-05-13T06:14:17.582229",267]