Skill v1.0.0
currentTrusted Publisher100/100version: "1.0.0" name: itemgen-command-builder description: Given SDK analysis results, automatically determine the correct itemgen archetype and build the full go run tools/itemgen/main.go command. USE FOR: scaffolding new Fabric Item resources using the itemgen code generator. Only applies to Fabric Item resources (not bespoke resources like Connection, Gateway, Workspace).
Skill: Itemgen Command Builder
Given SDK analysis results (from #skill:sdk-contract-navigator), automatically determine the correct itemgen archetype and build the full go run tools/itemgen/main.go command.
Important: This skill applies ONLY to Fabric Item resources (Category A from#skill:sdk-contract-navigator). Non-item resources (Connection, Shortcut, Gateway, Workspace, etc.) do NOT useitemgen— they require manual bespoke implementation.
Prerequisites
- SDK analysis has been completed (from
#skill:sdk-contract-navigator) - The resource is confirmed as a Fabric Item (not a non-item resource)
Step 1 — Determine the Archetype
Use the SDK analysis to select the correct archetype. Refer to the "Item Archetypes" table in .github/instructions/fabric-item-patterns.instructions.md for the archetype capabilities matrix.
Also read tools/itemgen/main.go for the canonical list of valid item types from the validItemTypes() function.
How to Check Each Capability
- Has Properties → The SDK Get response main struct has a
Propertiesfield pointing to a named struct type (e.g.fablakehouse.Properties) - Has CreationPayload → A
CreationPayloadstruct exists in the SDK package - Has Definition → The items client has
Get<Item>Definition()and/orUpdate<Item>Definition()methods
Step 2 — Gather Flag Values
The itemgen tool accepts 9 command-line flags. Determine each value from the SDK analysis and Fabric API docs:
| Flag | Type | How to Determine | Default | |
|---|---|---|---|---|
-item-name | string | Display name with spaces (e.g. "Data Pipeline", "Eventhouse") | required | |
-items-name | string | Plural form (e.g. "Data Pipelines", "Eventhouses") | required | |
-item-type | string | Archetype from Step 1 | required | |
-definition-path | string | The definition file path from the issue's "Definition Paths" field (e.g. "definition.json", "eventstream.json") | content.json | |
-rename-allowed | bool | Check SDK for Update/Rename method on the items client | true | |
-is-preview | bool | Check Fabric API docs for "preview" badge or header | false | |
-is-spn-supported | bool | Check API docs for service principal authentication support | false | |
-generate-fakes | bool | set to true unless item is of archetype basic or definition — generates fake test handlers | true | |
-generate-examples | bool | Always set to true — generates TF example files | true |
Flag Value Details
`-item-name`: The human-readable display name. Use the form from Microsoft docs (e.g. "Data Pipeline" not "DataPipeline"). The tool derives:
Package= lowercased, no spaces (e.g.datapipeline)Type= lowercased, spaces→underscores (e.g.data_pipeline)TypeInfo= no spaces (e.g.DataPipeline)
`-items-name`: The plural form. Usually just append "s" but check API docs for irregular plurals (e.g. "KQL Databases", "Warehouses", "Variable Libraries").
`-definition-path`: The definition file path as listed in the issue's "Definition Paths" section (populated by #skill:resource-designer from the Fabric definition article). Use the first/primary definition path (e.g. "eventstream.json", "definition.json", "notebook-content.ipynb"). This determines the definition key used in Terraform HCL blocks and template source references.
Note: This flag is only relevant for item types that have a definition (definition,definition-properties,config-definition-properties). For archetypes without a definition (basic,properties,config-properties), omit this flag — it will be ignored. If the item archetype includes a definition but the "Definition Paths" field is missing from the issue, prompt the user to provide the definition file path before proceeding.
`-rename-allowed`: Most items support rename. Set to false if the SDK items client lacks an Update<ItemName> method.
`-is-preview`: Fetch the Create API docs page (https://learn.microsoft.com/rest/api/fabric/<item>/items/create-<item-kebab-case>) and check for "currently in Preview" text. Set true if found.
`-is-spn-supported`: Check if the API documentation mentions service principal support. Also check if the existing base.go similar items use IsSPNSupported: true.
Step 3 — Build the Command
Construct the full command:
go run tools/itemgen/main.go \-item-name "<Display Name>" \-items-name "<Plural Display Name>" \-item-type "<archetype>" \-definition-path "<definition-file-path>" \-rename-allowed=<true|false> \-is-preview=<true|false> \-is-spn-supported=<true|false> \-generate-fakes=true \-generate-examples=true
Reference
- Itemgen source:
tools/itemgen/main.go - Template directory:
tools/itemgen/templates/ - Canonical example output:
internal/services/lakehouse/