agentsclimarketplace

Fabric gotchas

Skill wardawgmalvicious/claude-config/skills/fabric-gotchas

Personal Claude Code config — skills, subagents, hooks, and rules for Microsoft Fabric and Power BI workflows on Windows. Cherry-pickable, no semver.

Install
npx -y skills add wardawgmalvicious/claude-config --skill fabric-gotchas

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when troubleshooting Microsoft Fabric — common errors: 401 (wrong token audience), 403 on Power BI API (Viewer role), 404 EntityNotFound on getDefinition (permissions masquerading), PowerBIEntityNotFound from pipeline/Variable Library (logicalId vs runtime ID confusion), Login failed (wrong Initial Catalog), 24556/24706 snapshot conflict, nvarchar/datetime/money errors (Warehouse unsupported types), COPY INTO auth, MERGE/ALTER COLUMN failures, TMDL validation (tabs vs spaces, /// comments), DefaultJob jobType mistake, sqlcmd version, slow SQLEP (small files), notebook `400 exceptionCulprit:1` (bare-string cell source), plus the MUST/PREFER/AVOID best-practices summary.

SKILL.md

7.3 KB, as published. Nobody here has run it

Common gotchas & troubleshooting

IssueCauseFix
401 UnauthorizedWrong token audienceCheck audience table in fabric-auth skill; verify aud claim at jwt.ms
403 Forbidden on Power BI APIUser has Viewer roleRefresh/data sources/permissions APIs require Contributor+. Stop retrying — it's permissions.
404 EntityNotFound on getDefinitionInsufficient permissions masquerading as 404Check workspace role first; don't retry with different URLs
PowerBIEntityNotFound / EntityNotFound from pipeline, Variable Library, or REST callUsed .platform logicalId instead of runtime item IDFetch runtime ID from Fabric portal URL or GET /v1/workspaces/{wsId}/items. See fabric-rest-api skill (Item IDs section)
Login failed... database not foundWrong Initial CatalogUse item display name, not FQDN. Verify workspace role. Connections with no Initial Catalog now land deterministically on master (drill-verified) — confirm with SELECT DB_NAME() and switch with USE [<item display name>] instead of reconnecting.
Error 24556/24706 snapshot conflictConcurrent writes to same tableSerialize writes; retry with backoff
nvarchar / datetime / money errorsUnsupported types in Fabric WarehouseUse varchar, datetime2(6), decimal(19,4) (Warehouse only — fabric-database skill supports these)
COPY INTO auth errorMissing Storage Blob Data Reader on ADLSGrant role or use SAS in CREDENTIAL
MERGE failures in productionPreview feature with table-level conflict detectionUse DELETE + INSERT pattern instead (Warehouse only — fabric-database skill supports MERGE)
ALTER COLUMN failsNot supported in Fabric WarehouseUse CTAS + sp_rename workaround (Warehouse only — fabric-database skill supports ALTER COLUMN)
TMDL validation errorSpaces instead of tabs, or // commentsUse literal tabs; use /// for descriptions
Parts missing after updateDefinitionOnly modified parts sentMust include ALL parts in every update
DefaultJob in job executionWrong jobTypeUse type-specific values: RunNotebook, Pipeline, SparkJob, Refresh
sqlcmd not found or ODBC errorsWrong sqlcmd versionUse Go version: winget install sqlcmd (not ODBC /opt/mssql-tools/ version)
Slow / stale Lakehouse SQLEP queriesSmall-file problem, or metadata-sync lag on newly-landed dataRun OPTIMIZE and VACUUM via Spark. If on the new metadata-sync preview, diagnose staleness via the DMV / targeted refresh in the note below
Query Insights emptyViews not yet generated after creationWait ~2 minutes
OneLake 401Wrong storage audienceMust use https://storage.azure.com/.default exactly
TDS connection timeoutPort 1433 blockedOpen outbound TCP 1433; allow *.datawarehouse.fabric.microsoft.com
Cross-database query failsItems in different regions or workspacesAll items must share same workspace AND region
Notebook upload 400 exceptionCulprit:1Cell source is a bare string, not an arrayConvert every cell's source to array-of-strings form (["line\n", "line\n", "last"]). Applies to markdown and code cells.
CloudEventPropertyMissingException: ...type is missing when publishing to a schema-associated Eventstream custom endpointAttributes sent in the JSON body / structured modeSend binary-mode CloudEvents: cloudEvents:-prefixed Event Hub application properties (not body). See [[fabric-eventstream]] — Producing to a schema-associated custom endpoint

Slow SQLEP — new metadata sync (preview, May 2026): on endpoints created with the new opt-in metadata sync, target a single table with EXEC sys.sp_dw_refresh_ext_table '<schema.table>' and inspect last sync time / blocked state via sys.dm_db_external_tables_log_status. Full preview note (scope, enablement, limitations): [[fabric-spark]].


Best Practices Summary

MUST

  • Verify workspace has capacity before creating items (capacityId in workspace response)
  • Use parameterized notebooks and pipelines — no hardcoded workspace/item IDs
  • Use Delta Lake format for all Lakehouse tables
  • Include time filters in KQL queries
  • Label queries with OPTION (LABEL = ...) for tracking
  • Always specify database name in SQL connections (-d flag or Initial Catalog)
  • Use Entra ID auth everywhere — SQL auth not supported in Fabric

PREFER

  • Medallion architecture (Bronze/Silver/Gold) for data organization
  • REST APIs for programmatic management over portal clicks
  • Incremental processing over full refreshes
  • CTAS over CREATE TABLE + INSERT for large transforms
  • COPY INTO for external file ingestion
  • DELETE + INSERT over MERGE for production upserts
  • Distributed #temp tables (ROUND_ROBIN) over non-distributed
  • EXISTS over IN for large subqueries
  • UNION ALL over UNION when duplicates are acceptable
  • Integer keys over string keys for relationships

AVOID

  • Hardcoded workspace/item IDs — discover via REST API
  • Confusing .platform logicalId with runtime item ID — they are NOT interchangeable; runtime references need the portal/API ID
  • SELECT * without LIMIT on large tables
  • Long-running transactions (increases conflict window)
  • Singleton INSERT...VALUES at scale (creates tiny Parquet files)
  • DROP TABLE IF EXISTS + CREATE TABLE to refresh (loses time-travel history) — use TRUNCATE + INSERT
  • IFERROR in DAX (performance degradation)
  • FOR XML (use FOR JSON instead)
  • Manual lineageTag or PBI_* annotations in TMDL
  • Unbounded streaming queries
  • MARS in connection strings

Reference

See also

  • fabric-auth skill — token audience table (for 401 diagnosis)
  • fabric-rest-api skill — logicalId vs runtime ID detail
  • fabric-warehouse skill — Warehouse-specific type and feature restrictions
  • fabric-database skill — what's different when it's SQL Database (most restrictions don't apply)
  • fabric-spark skill — notebook upload array-of-strings requirement

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.