[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BRK8X2MS2KA89Q0TY2BRZ":3,"skill-same:01M69BRK8X2MS2KA89Q0TY2BRZ":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":34,"publishedAt":59,"linkOnly":60,"markdownContent":61,"markdownBody":62,"frontMatter":63,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":67,"repositoryHtmlUrl":68,"repositoryHomepageUrl":69,"ownerHtmlUrl":70,"ownerBlogUrl":71,"ownerDescription":72,"updatedAt":73,"install":74,"resources":87},"01M69BRK8X2MS2KA89Q0TY2BRZ","resource-designer",null,"Research SDK contracts, design Terraform schema approach, and compose a GitHub issue for a new resource, data source, ephemeral resource, or enhancement to an existing resource. USE FOR: analyzing SDK DTOs, determining design patterns (polymorphic flattening, immutability, enum filtering), and creating well-structured GitHub issues. INVOKES: GitHub MCP tools for issue creation, sdk-contract-navigator skill for SDK analysis.","microsoft\u002Fterraform-provider-fabric","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69BRDVBHATNC3Y885F5ET9B",130,"MPL-2.0","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fresource-designer\u002FSKILL.md",[18,23,26,29],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],"resource designer","designer","Tools","new","enhancement","issue creation","source","creation","patterns","contracts","issue","design patterns","analysis","design","data","analyzing","navigator","issues","terraform","github issues","research","sdk","github","MCP","2026-11-10 10:12:30",false,"---\nname: resource-designer\ndescription: >-\n  Research SDK contracts, design Terraform schema approach, and compose a GitHub issue for a new resource, data source, ephemeral resource, or enhancement to an existing resource. USE FOR: analyzing SDK DTOs, determining design patterns (polymorphic flattening, immutability, enum filtering), and creating well-structured GitHub issues. INVOKES: GitHub MCP tools for issue creation, sdk-contract-navigator skill for SDK analysis.\n---\n\n# Skill: Resource Designer\n\nResearch SDK contracts, design the Terraform schema approach, and compose a GitHub issue for a new resource, data source, ephemeral resource, or enhancement to an existing resource.\n\n## Prerequisites\n\n- The user has described what they want to add or change\n- Ideally, `#skill:sdk-contract-navigator` has already been run to identify SDK availability\n- If the caller (resource-designer agent or user) has not provided a milestone name, this skill should prompt for one, then resolve it to a numeric milestone ID via the GitHub API\n\n## Step 1 — Resolve Milestone Name to Number\n\nIf a milestone name was provided (e.g. \"2026-04\"), resolve it to its numeric ID:\n\n1. Query the GitHub REST API:\n\n   ```\n   GET \u002Frepos\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fmilestones?state=all&per_page=100\n   ```\n\n2. Parse the response and find the milestone object where `title` matches the user's input (case-insensitive)\n\n3. Extract the `number` field from that milestone object\n\n4. If no match is found, report an error with the list of available milestones and ask the user to retry\n\nIf no milestone was specified, set `milestone: null` and proceed.\n\n## Step 2 — Determine Issue Type\n\nChoose the correct issue template based on what is being requested.\n\n| Scenario                                   | Title Prefix | Label            | Template File                               |\n| ------------------------------------------ | ------------ | ---------------- | ------------------------------------------- |\n| **New resource** (Fabric Item or non-item) | `[RS]`       | `tf\u002Fresource`    | `tfprovider_resource_request.yml`           |\n| **New data source**                        | `[DS]`       | `tf\u002Fdata-source` | `tfprovider_data_source_request.yml`        |\n| **New ephemeral resource**                 | `[EPH]`      | `tf\u002Fephemeral`   | `tfprovider_ephemeral_resource_request.yml` |\n| **Enhancement to existing resource**       | `[FEAT]`     | `feature`        | `feature_request.yml`                       |\n\n### When to Use Each\n\n- **`[RS]` \u002F `[DS]`** — A completely new Terraform resource or data source that doesn't exist yet. Applies to both Fabric Items (Lakehouse, Eventhouse, etc.) and non-item resources (Connection, Shortcut, Gateway, Workspace Role Assignment, etc.)\n- **`[EPH]`** — A new ephemeral resource (short-lived, not stored in state)\n- **`[FEAT]`** — Adding new attributes to an existing resource, changing behavior, adding support for a new API feature on an existing resource, or any other enhancement that modifies existing code\n\nIf both a resource and data source are needed for the same Fabric resource, create **two** separate issues.\n\n## Step 3 — Extract Resource Details\n\nFrom the user's description and SDK analysis, gather:\n\n| Detail                | How to Determine                                                                                                             |\n| --------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n| **Resource name**     | `fabric_\u003Csnake_case>` — e.g. `fabric_lakehouse`, `fabric_connection`, `fabric_shortcut`                                      |\n| **Display name**      | PascalCase with spaces — e.g. \"Lakehouse\", \"Connection\", \"Shortcut\"                                                          |\n| **API doc links**     | Browse `learn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F` for API pages                                                                  |\n| **SDK availability**  | Check if the SDK package\u002Fclient exists (from `#skill:sdk-contract-navigator`)                                                |\n| **Resource category** | Fabric Item (~60%) or non-item (~40%) — see below                                                                            |\n| **Item archetype**    | For Fabric Items only: basic, definition, properties, definition-properties, config-properties, config-definition-properties |\n| **Complexity**        | `easy` (basic\u002Fdefinition), `moderate` (properties\u002Fnon-item), `hard` (config-\\*\u002Fcomplex non-item)                             |\n| **Definition paths**  | For Fabric Items with definitions: fetch the definition article to list supported definition parts — see below               |\n| **Related resources** | Existing resources that interact with this one                                                                               |\n| **Preview status**    | Check if the Fabric API is marked as preview                                                                                 |\n| **SPN support**       | Check if the API supports service principal authentication                                                                   |\n\n### Resource Category Identification\n\n**Fabric Items** — Standard items managed in workspaces (Lakehouse, Eventhouse, SQL Database, Data Pipeline, Notebook, etc.). These use the `fabricitem` generic abstraction and have `ItemType` constants in the core SDK.\n\n**Non-item resources** — Specialized resources with bespoke CRUD logic. Each belongs to an **implementation pattern (A–H)** that determines canonical reference, lifecycle semantics, and test structure:\n\n| Pattern | Characteristic                                       | SDK Client                         | Canonical Reference                    |\n| :-----: | ---------------------------------------------------- | ---------------------------------- | -------------------------------------- |\n|  **A**  | Workspace policy singleton (no ID, delete=reset)     | `fabcore.WorkspacesClient`         | `internal\u002Fservices\u002Fworkspacencp\u002F`      |\n|  **B**  | Workspace settings (dedicated client, validators)    | `fabspark.*`                       | `internal\u002Fservices\u002Fsparkwssettings\u002F`   |\n|  **C**  | Role assignment (parent+principal+role, ImportState) | Various `*Client`                  | `internal\u002Fservices\u002Fworkspacera\u002F`       |\n|  **D**  | Batch assignment (immutable set, no update)          | `fabadmin.DomainsClient`           | `internal\u002Fservices\u002Fdomainra\u002F`          |\n|  **E**  | Standalone entity, standard CRUD                     | Various dedicated clients          | `internal\u002Fservices\u002Fworkspace\u002F`         |\n|  **E**  | Standalone entity, polymorphic types                 | `fabcore.GatewaysClient`           | `internal\u002Fservices\u002Fgateway\u002F`           |\n|  **E**  | Standalone entity, tenant-scoped                     | `fabadmin.DomainsClient`           | `internal\u002Fservices\u002Fdomain\u002F`            |\n|  **E**  | Standalone entity, connect\u002Fdisconnect lifecycle      | `fabcore.GitClient`                | `internal\u002Fservices\u002Fworkspacegit\u002F`      |\n|  **F**  | Item-scoped (workspace_id+item_id, 3+ path params)   | `fabcore.OneLakeShortcutsClient`   | `internal\u002Fservices\u002Fshortcut\u002F`          |\n|  **F**  | Item-scoped (ModifyPlan, conditional validation)     | `fabcore.JobSchedulerClient`       | `internal\u002Fservices\u002Fitemjobscheduler\u002F`  |\n|  **F**  | Item-scoped (simple CRUD, no Update)                 | `fabcore.ExternalDataSharesClient` | `internal\u002Fservices\u002Fexternaldatashare\u002F` |\n|  **G**  | Tenant-level, custom identity\u002Fdelete semantics       | `fabadmin.TenantsClient`           | `internal\u002Fservices\u002Ftenantsetting\u002F`     |\n|  **H**  | Complex: dual clients, write-only secrets, KV refs   | `fabcore.ConnectionsClient`        | `internal\u002Fservices\u002Fconnection\u002F`        |\n\n**Pattern classification decision tree:**\n\n```\nIs it a workspace policy\u002Fsettings with no real entity ID?\n├── YES → Uses WorkspacesClient sub-endpoint, delete=reset? → Pattern A\n│         Uses dedicated Spark\u002FEnvironment client, ConfigValidators? → Pattern B\n│\n├── NO → Is it an assignment of principals\u002Fitems to a parent?\n│         ├── Single-item assignment with updatable role, ImportState? → Pattern C\n│         └── Batch set assignment, fully immutable, no Import? → Pattern D\n│\n├── NO → Is it scoped to a specific item (workspace_id + item_id)?\n│         └── YES → Pattern F\n│\n├── NO → Is it a tenant-level admin resource with non-UUID identity or custom delete?\n│         └── YES → Pattern G\n│\n├── NO → Does it have write-only secrets, dual clients, KV references?\n│         └── YES → Pattern H\n│\n└── NO → Standalone entity with dedicated client → Pattern E\n```\n\nWhen composing the issue, include the pattern letter in the \"Details \u002F References\" section so downstream agents can immediately route to the correct implementation reference.\n\n### Item Definition Paths\n\nFor Fabric Items that support definitions (archetypes: `definition`, `definition-properties`, `config-definition-properties`), fetch the item definition article to discover the supported definition parts\u002Fpaths:\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002F\u003Citem-kebab-case>-definition\n```\n\nFor example:\n\n- Notebook → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Fnotebook-definition`\n- Report → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Freport-definition`\n- Spark Job Definition → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Fspark-job-definition-definition`\n\nUse the `fetch_webpage` tool to read the article and extract the list of definition paths (e.g. `notebook-content.py`, `definition.pbir\u002Freport.json`). Each definition part has a path and format. Record all supported definition paths for inclusion in the issue.\n\nIf the article does not exist or returns a 404, the item likely does not support definitions — adjust the archetype accordingly.\n\n### API Documentation URL Pattern\n\nFabric REST API docs follow this pattern (never include `en-us` locale):\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Cservice>\u002Fitems\n```\n\nFor non-item resources, the API path varies:\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fconnections\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fshortcuts\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fgateways\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fworkspaces\n```\n\n## Step 3.5 — Terraform Design Analysis\n\nAfter gathering SDK details (Step 3), analyze the DTOs to determine **which design patterns apply** to this resource. This produces the \"? Terraform Design Notes\" section in the issue body, giving the implementor explicit guidance.\n\n### Analysis Checks\n\nPerform each check by comparing the SDK DTOs discovered in Step 3:\n\n| #   | Check                       | How to Detect                                                                                                          | Output                                                                          |\n| --- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| 1   | **Immutable fields**        | Fields present in `Create\u003CResource>Request` but absent from `Update\u003CResource>Request` (or no Update method exists)     | List fields → `RequiresReplace`                                                 |\n| 2   | **Computed-only fields**    | Fields in response DTO absent from all request DTOs                                                                    | List fields → `Computed: true` + `UseStateForUnknown`                           |\n| 3   | **Polymorphic flattening**  | Response\u002Frequest DTO has an interface type, or a struct with a `Type`\u002F`Kind` discriminator and variant-specific fields | Describe variants → separate optional nested blocks + `ExactlyOneOf`            |\n| 4   | **Write-only secrets**      | Request DTO has `*Password`\u002F`*Secret`\u002F`*Token`\u002F`*Key`\u002F`*Credential` fields absent from response DTO                    | List fields → `WriteOnly: true` + `*_reference` alternative                     |\n| 5   | **Conditional fields**      | Properties that only apply when a type discriminator has a specific value (variant-specific fields)                    | List field→type mappings → `NullIfAttributeIsOneOf`\u002F`RequireIfAttributeIsOneOf` |\n| 6   | **Enum filtering**          | `Possible*Values()` contains values representing system-managed\u002Fread-only states that cannot be set via Create\u002FUpdate  | List values to exclude from `OneOf` validator                                   |\n| 7   | **Composite ID for import** | Sub-resource with 3+ path parameters (e.g., `workspace_id` + `item_id` + `name`)                                       | Describe import ID format                                                       |\n\n### Skip Conditions\n\n- For **basic Fabric Items** (archetype `basic` or `definition` with no properties), checks 3–6 typically don't apply — skip them.\n- For **enhancements** (`[FEAT]`), only run checks relevant to the new fields being added.\n\n## Step 4 — Compose Issue Title\n\n| Type            | Format                                      |\n| --------------- | ------------------------------------------- |\n| New resource    | `[RS] fabric_\u003Csnake_case_name>`             |\n| New data source | `[DS] fabric_\u003Csnake_case_name>`             |\n| New ephemeral   | `[EPH] fabric_\u003Csnake_case_name>`            |\n| Enhancement     | `[FEAT] \u003Cshort description of enhancement>` |\n\n## Step 5 — Compose Issue Body\n\n### For New Resources (`[RS]`) and Data Sources (`[DS]`)\n\n#### ? Description\n\nUse Job Story format:\n\n```\nWhen managing Microsoft Fabric infrastructure as code,\nI want to create\u002Fmanage \u003CResourceName> resources via Terraform,\nso I can automate provisioning and maintain consistent \u003CResourceName> configurations across environments.\n```\n\n#### ? Details \u002F References\n\n**For Fabric Items:**\n\n> **Important:** Do NOT include SDK CRUD method signatures (e.g. `Get`, `Create`, `Update`, `Delete`, `List`, `GetDefinition`, `UpdateDefinition`) in the issue body. Fabric Items follow standardized method patterns determined by the archetype — listing them adds noise without value. Only include the SDK package, archetype, DTO fields (Properties\u002FCreationPayload), enum types, and definition paths.\n\n```markdown\n- Resource Name: `fabric_\u003Csnake_case_name>`\n- API documentation:\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Fcreate-\u003Citem>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Fget-\u003Citem>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Flist-\u003Citems>\n- Definition article: https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002F\u003Citem-kebab-case>-definition\n- SDK Package: `github.com\u002Fmicrosoft\u002Ffabric-sdk-go\u002Ffabric\u002F\u003Cpackage>`\n- Item Archetype: `\u003Carchetype>`\n- Definition Paths (if applicable):\n  - `\u003Cpath>` (format: `\u003Cformat>`)\n  - `\u003Cpath>` (format: `\u003Cformat>`)\n- Estimated complexity\u002Feffort: \u003Ceasy|moderate|hard>\n- Preview: \u003Cyes|no>\n- SPN Supported: \u003Cyes|no>\n- Related resources\u002Fdata-sources:\n  - `fabric_workspace` (required parent)\n```\n\n**For non-item resources:**\n\n```markdown\n- Resource Name: `fabric_\u003Csnake_case_name>`\n- API documentation:\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Fcreate-\u003Cresource>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Fget-\u003Cresource>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Flist-\u003Cresources>\n- SDK Client: `fabcore.\u003CResource>Client`\n- Resource Category: non-item (bespoke CRUD)\n- Implementation Pattern: \u003CA|B|C|D|E|F|G|H> — \u003Cpattern description>\n- Estimated complexity\u002Feffort: \u003Ceasy|moderate|hard>\n- Preview: \u003Cyes|no>\n- SPN Supported: \u003Cyes|no>\n- Related resources\u002Fdata-sources:\n  - \u003Crelated resources>\n```\n\n> **Pattern key:** A=Workspace policy singleton, B=Workspace settings (Spark), C=Role assignment, D=Batch assignment, E=Standalone entity, F=Item-scoped, G=Tenant-level custom, H=Connection (complex credentials)\n\n#### ? DTO Nesting Depth Map (complex resources only)\n\n**Include this section only for `[RS]` and `[DS]` issues where the SDK DTOs have 3+ nesting levels** (slices containing structs with nested slices\u002Fpointers to other structs). Skip for flat resources (Workspace, Domain, role assignments, basic Fabric Items without properties).\n\nRender a tree showing the SDK DTO hierarchy with type annotations. This helps implementors plan model structs, `set()` methods, and `SetNull(ctx)` placement.\n\nFormat — use indented tree with type annotations at leaf\u002Fbranch nodes:\n\n```markdown\n\u003CRootDTO>\n├── Field1 (string)\n├── Field2 (enum)\n├── NestedSlice []ChildDTO                    ← Level 1\n│   ├── ScalarField (string)\n│   ├── DeepSlice []GrandchildDTO             ← Level 2\n│   │   ├── LeafSlice []string               ← Level 3\n│   │   └── LeafField (enum)\n│   └── OptionalNested *AnotherDTO            ← Level 2\n│       └── Items []ItemDTO                   ← Level 3\n└── OptionalTop *TopDTO                       ← Level 1\n    └── Children []ChildDTO                   ← Level 2\n```\n\nRules:\n\n- Annotate slices as `[]Type`, optional nested as `*Type`, scalars as `(type)`\n- Mark nesting levels with `← Level N` comments on lines introducing a new struct depth\n- Only show fields that map to Terraform schema attributes (skip internal\u002Fwire-only fields)\n- Maximum depth shown: 5 levels (truncate deeper with `...`)\n\n#### ? Terraform Design Notes\n\n**Include this section for all `[RS]` and `[DS]` issues.** Populate from the analysis in Step 3.5. Only include applicable items — omit checks that returned no findings.\n\nFormat:\n\n```markdown\n**Immutable fields** (→ `RequiresReplace`):\n\n- `\u003Cfield_name>` — only in Create request, not updatable\n\n**Computed-only fields** (→ `Computed: true`):\n\n- `\u003Cfield_name>` — response-only, server-generated\n\n**Polymorphic type** (→ separate optional blocks + `ExactlyOneOf`):\n\n- SDK type `\u003CInterfaceName>` has variants: `\u003CVariant1>`, `\u003CVariant2>`, ...\n- Model as: `\u003Cvariant_1> {}`, `\u003Cvariant_2> {}` optional nested blocks\n\n**Write-only secrets** (→ `WriteOnly: true` + `*_reference` alternative):\n\n- `\u003Cfield_name>` — credential\u002Fsecret in request, absent from response\n\n**Conditional fields** (→ `NullIfAttributeIsOneOf` \u002F `RequireIfAttributeIsOneOf`):\n\n- `\u003Cfield_name>` only applies when `type == \"\u003Cvalue>\"`\n\n**Enum filtering** (→ exclude from `OneOf` validator):\n\n- `\u003CEnumType>`: exclude `\u003CValue1>`, `\u003CValue2>` (system-managed\u002Fnon-creatable)\n\n**Import ID format**:\n\n- `\u003Cworkspace_id>\u002F\u003Citem_id>\u002F\u003Cname>` (composite)\n```\n\n#### ? Potential Terraform Configuration\n\nGenerate sample HCL based on SDK properties discovered and **informed by the design notes above** (use optional blocks for polymorphic types, add comments for immutable\u002Fcomputed fields):\n\n```terraform\nresource \"fabric_\u003Csnake_case_name>\" \"example\" {\n  display_name = \"example\"\n  description  = \"Example resource\"\n  workspace_id = fabric_workspace.example.id\n\n  # Item-specific attributes\n}\n```\n\n#### ☑️ Acceptance Criteria\n\n```markdown\n- [ ] Can create a new \u003CResourceName> with required attributes\n- [ ] Can read \u003CResourceName> by ID\n- [ ] Can update \u003CResourceName> mutable attributes\n- [ ] Can delete \u003CResourceName>\n- [ ] Can import existing \u003CResourceName>\n- [ ] Properties are correctly mapped from SDK response\n```\n\n#### ✅ Definition of Done\n\nFor Resource:\n\n```markdown\n- [ ] Data Transfer Objects (DTOs)\n- [ ] Resource Implementation\n- [ ] Resource Added to Provider\n- [ ] Unit Tests for Happy path\n- [ ] Unit Tests for Error path\n- [ ] Acceptance Tests\n- [ ] Example in the .\u002Fexamples folder\n- [ ] Schema documentation in code\n- [ ] Updated auto-generated provider docs with `task docs`\n```\n\nFor Data Source:\n\n```markdown\n- [ ] Data Transfer Objects (DTOs)\n- [ ] Data-Source Implementation\n- [ ] Data-Source Added to Provider\n- [ ] Unit Tests for Happy path\n- [ ] Unit Tests for Error path\n- [ ] Acceptance Tests\n- [ ] Example in the .\u002Fexamples folder\n- [ ] Schema documentation in code\n- [ ] Updated auto-generated provider docs with `task docs`\n```\n\n### For Enhancements (`[FEAT]`)\n\nUse the `feature_request.yml` template structure.\n\n#### ? Feature description\n\nJob Story format describing the enhancement:\n\n```\nWhen using the existing `fabric_\u003Cresource>` resource,\nI want to \u003Cwhat is missing or needs to change>,\nso I can \u003Cexpected outcome>.\n```\n\n#### ? Motivation\n\nExplain why the enhancement is needed — e.g. new API capability, missing attribute, user request.\n\n#### ? Alternatives\n\nDescribe workarounds or alternative approaches considered.\n\n#### ? SDK Diff (from `#skill:sdk-contract-navigator`)\n\nCompare the current SDK DTOs against the existing implementation to identify what's new. Include this section in the issue body so the implementor agent has a clear change list:\n\n**For Fabric Item enhancements:**\n\n```markdown\n### SDK Diff\n\nResource: `fabric_\u003Csnake_case_name>`\nCategory: Fabric Item (`\u003Carchetype>`)\nService package: `internal\u002Fservices\u002F\u003Cpackage>\u002F`\n\n| Change    | SDK Field                     | Go Type                  | Current Status                    |\n| --------- | ----------------------------- | ------------------------ | --------------------------------- |\n| + New     | `Properties.\u003CFieldName>`      | `*string`                | Not in `\u003Citem>PropertiesModel`    |\n| + New     | `Properties.\u003CNestedField>`    | `*\u003CNestedDTO>`           | New sub-model needed              |\n| + New     | `CreationPayload.\u003CFieldName>` | `*bool`                  | Not in `\u003Citem>ConfigurationModel` |\n| ~ Changed | `Properties.\u003CFieldName>`      | `*int32` (was `*string`) | Type change in model              |\n```\n\n**For non-item enhancements:**\n\n```markdown\n### SDK Diff\n\nResource: `fabric_\u003Csnake_case_name>`\nCategory: non-item (bespoke CRUD)\nService package: `internal\u002Fservices\u002F\u003Cpackage>\u002F`\nSDK Client: `fabcore.\u003CResource>Client`\n\n| Change       | SDK Field                   | Go Type   | Current Status                          |\n| ------------ | --------------------------- | --------- | --------------------------------------- |\n| + New        | `\u003CResponseDTO>.\u003CFieldName>` | `*string` | Not in `base\u003CResource>Model`            |\n| + New        | `\u003CRequestDTO>.\u003CFieldName>`  | `*bool`   | Not in `request\u003CAction>\u003CResource>Model` |\n| + New method | `client.\u003CNewMethod>(...)`   | —         | No CRUD handler                         |\n```\n\n#### ? Potential Configuration \u002F Desired Solution\n\nShow HCL demonstrating the desired new behavior:\n\n```terraform\nresource \"fabric_\u003Cexisting_resource>\" \"example\" {\n  # existing attributes...\n\n  # NEW: proposed enhancement\n  new_attribute = \"value\"\n}\n```\n\n#### ☑️ Acceptance Criteria\n\n```markdown\n- [ ] New attribute `\u003Cname>` is added to the schema\n- [ ] SDK mapping is correct for new fields\n- [ ] `set()` methods updated for new fields\n- [ ] Fakes updated with new field test data\n- [ ] Existing tests still pass\n- [ ] New test assertions for added attributes\n- [ ] Documentation updated\n```\n\n## Step 6 — Create the Issue\n\nUse the GitHub MCP server `create_issue` tool:\n\n```\nowner: microsoft\nrepo: terraform-provider-fabric\ntitle: \u003Ccomposed title from Step 4>\nbody: \u003Ccomposed body from Step 5>\nlabels: [\u003Cappropriate label>]\nmilestone: \u003Cresolved milestone number from Step 1, or null if not specified>\n```\n\nLabel mapping:\n\n- `[RS]` → `[\"tf\u002Fresource\"]`\n- `[DS]` → `[\"tf\u002Fdata-source\"]`\n- `[EPH]` → `[\"tf\u002Fephemeral\"]`\n- `[FEAT]` → `[\"feature\"]`\n\n## Step 7 — Report Back\n\nAfter creating the issue, report:\n\n- Issue number and URL\n- Summary of what was filed\n- Resource category (Fabric Item vs non-item) and archetype (if applicable)\n- Any gaps or unknowns that need follow-up (e.g. API not yet public, SDK package missing)\n","# Skill: Resource Designer\n\nResearch SDK contracts, design the Terraform schema approach, and compose a GitHub issue for a new resource, data source, ephemeral resource, or enhancement to an existing resource.\n\n## Prerequisites\n\n- The user has described what they want to add or change\n- Ideally, `#skill:sdk-contract-navigator` has already been run to identify SDK availability\n- If the caller (resource-designer agent or user) has not provided a milestone name, this skill should prompt for one, then resolve it to a numeric milestone ID via the GitHub API\n\n## Step 1 — Resolve Milestone Name to Number\n\nIf a milestone name was provided (e.g. \"2026-04\"), resolve it to its numeric ID:\n\n1. Query the GitHub REST API:\n\n   ```\n   GET \u002Frepos\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fmilestones?state=all&per_page=100\n   ```\n\n2. Parse the response and find the milestone object where `title` matches the user's input (case-insensitive)\n\n3. Extract the `number` field from that milestone object\n\n4. If no match is found, report an error with the list of available milestones and ask the user to retry\n\nIf no milestone was specified, set `milestone: null` and proceed.\n\n## Step 2 — Determine Issue Type\n\nChoose the correct issue template based on what is being requested.\n\n| Scenario                                   | Title Prefix | Label            | Template File                               |\n| ------------------------------------------ | ------------ | ---------------- | ------------------------------------------- |\n| **New resource** (Fabric Item or non-item) | `[RS]`       | `tf\u002Fresource`    | `tfprovider_resource_request.yml`           |\n| **New data source**                        | `[DS]`       | `tf\u002Fdata-source` | `tfprovider_data_source_request.yml`        |\n| **New ephemeral resource**                 | `[EPH]`      | `tf\u002Fephemeral`   | `tfprovider_ephemeral_resource_request.yml` |\n| **Enhancement to existing resource**       | `[FEAT]`     | `feature`        | `feature_request.yml`                       |\n\n### When to Use Each\n\n- **`[RS]` \u002F `[DS]`** — A completely new Terraform resource or data source that doesn't exist yet. Applies to both Fabric Items (Lakehouse, Eventhouse, etc.) and non-item resources (Connection, Shortcut, Gateway, Workspace Role Assignment, etc.)\n- **`[EPH]`** — A new ephemeral resource (short-lived, not stored in state)\n- **`[FEAT]`** — Adding new attributes to an existing resource, changing behavior, adding support for a new API feature on an existing resource, or any other enhancement that modifies existing code\n\nIf both a resource and data source are needed for the same Fabric resource, create **two** separate issues.\n\n## Step 3 — Extract Resource Details\n\nFrom the user's description and SDK analysis, gather:\n\n| Detail                | How to Determine                                                                                                             |\n| --------------------- | ---------------------------------------------------------------------------------------------------------------------------- |\n| **Resource name**     | `fabric_\u003Csnake_case>` — e.g. `fabric_lakehouse`, `fabric_connection`, `fabric_shortcut`                                      |\n| **Display name**      | PascalCase with spaces — e.g. \"Lakehouse\", \"Connection\", \"Shortcut\"                                                          |\n| **API doc links**     | Browse `learn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F` for API pages                                                                  |\n| **SDK availability**  | Check if the SDK package\u002Fclient exists (from `#skill:sdk-contract-navigator`)                                                |\n| **Resource category** | Fabric Item (~60%) or non-item (~40%) — see below                                                                            |\n| **Item archetype**    | For Fabric Items only: basic, definition, properties, definition-properties, config-properties, config-definition-properties |\n| **Complexity**        | `easy` (basic\u002Fdefinition), `moderate` (properties\u002Fnon-item), `hard` (config-\\*\u002Fcomplex non-item)                             |\n| **Definition paths**  | For Fabric Items with definitions: fetch the definition article to list supported definition parts — see below               |\n| **Related resources** | Existing resources that interact with this one                                                                               |\n| **Preview status**    | Check if the Fabric API is marked as preview                                                                                 |\n| **SPN support**       | Check if the API supports service principal authentication                                                                   |\n\n### Resource Category Identification\n\n**Fabric Items** — Standard items managed in workspaces (Lakehouse, Eventhouse, SQL Database, Data Pipeline, Notebook, etc.). These use the `fabricitem` generic abstraction and have `ItemType` constants in the core SDK.\n\n**Non-item resources** — Specialized resources with bespoke CRUD logic. Each belongs to an **implementation pattern (A–H)** that determines canonical reference, lifecycle semantics, and test structure:\n\n| Pattern | Characteristic                                       | SDK Client                         | Canonical Reference                    |\n| :-----: | ---------------------------------------------------- | ---------------------------------- | -------------------------------------- |\n|  **A**  | Workspace policy singleton (no ID, delete=reset)     | `fabcore.WorkspacesClient`         | `internal\u002Fservices\u002Fworkspacencp\u002F`      |\n|  **B**  | Workspace settings (dedicated client, validators)    | `fabspark.*`                       | `internal\u002Fservices\u002Fsparkwssettings\u002F`   |\n|  **C**  | Role assignment (parent+principal+role, ImportState) | Various `*Client`                  | `internal\u002Fservices\u002Fworkspacera\u002F`       |\n|  **D**  | Batch assignment (immutable set, no update)          | `fabadmin.DomainsClient`           | `internal\u002Fservices\u002Fdomainra\u002F`          |\n|  **E**  | Standalone entity, standard CRUD                     | Various dedicated clients          | `internal\u002Fservices\u002Fworkspace\u002F`         |\n|  **E**  | Standalone entity, polymorphic types                 | `fabcore.GatewaysClient`           | `internal\u002Fservices\u002Fgateway\u002F`           |\n|  **E**  | Standalone entity, tenant-scoped                     | `fabadmin.DomainsClient`           | `internal\u002Fservices\u002Fdomain\u002F`            |\n|  **E**  | Standalone entity, connect\u002Fdisconnect lifecycle      | `fabcore.GitClient`                | `internal\u002Fservices\u002Fworkspacegit\u002F`      |\n|  **F**  | Item-scoped (workspace_id+item_id, 3+ path params)   | `fabcore.OneLakeShortcutsClient`   | `internal\u002Fservices\u002Fshortcut\u002F`          |\n|  **F**  | Item-scoped (ModifyPlan, conditional validation)     | `fabcore.JobSchedulerClient`       | `internal\u002Fservices\u002Fitemjobscheduler\u002F`  |\n|  **F**  | Item-scoped (simple CRUD, no Update)                 | `fabcore.ExternalDataSharesClient` | `internal\u002Fservices\u002Fexternaldatashare\u002F` |\n|  **G**  | Tenant-level, custom identity\u002Fdelete semantics       | `fabadmin.TenantsClient`           | `internal\u002Fservices\u002Ftenantsetting\u002F`     |\n|  **H**  | Complex: dual clients, write-only secrets, KV refs   | `fabcore.ConnectionsClient`        | `internal\u002Fservices\u002Fconnection\u002F`        |\n\n**Pattern classification decision tree:**\n\n```\nIs it a workspace policy\u002Fsettings with no real entity ID?\n├── YES → Uses WorkspacesClient sub-endpoint, delete=reset? → Pattern A\n│         Uses dedicated Spark\u002FEnvironment client, ConfigValidators? → Pattern B\n│\n├── NO → Is it an assignment of principals\u002Fitems to a parent?\n│         ├── Single-item assignment with updatable role, ImportState? → Pattern C\n│         └── Batch set assignment, fully immutable, no Import? → Pattern D\n│\n├── NO → Is it scoped to a specific item (workspace_id + item_id)?\n│         └── YES → Pattern F\n│\n├── NO → Is it a tenant-level admin resource with non-UUID identity or custom delete?\n│         └── YES → Pattern G\n│\n├── NO → Does it have write-only secrets, dual clients, KV references?\n│         └── YES → Pattern H\n│\n└── NO → Standalone entity with dedicated client → Pattern E\n```\n\nWhen composing the issue, include the pattern letter in the \"Details \u002F References\" section so downstream agents can immediately route to the correct implementation reference.\n\n### Item Definition Paths\n\nFor Fabric Items that support definitions (archetypes: `definition`, `definition-properties`, `config-definition-properties`), fetch the item definition article to discover the supported definition parts\u002Fpaths:\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002F\u003Citem-kebab-case>-definition\n```\n\nFor example:\n\n- Notebook → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Fnotebook-definition`\n- Report → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Freport-definition`\n- Spark Job Definition → `https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002Fspark-job-definition-definition`\n\nUse the `fetch_webpage` tool to read the article and extract the list of definition paths (e.g. `notebook-content.py`, `definition.pbir\u002Freport.json`). Each definition part has a path and format. Record all supported definition paths for inclusion in the issue.\n\nIf the article does not exist or returns a 404, the item likely does not support definitions — adjust the archetype accordingly.\n\n### API Documentation URL Pattern\n\nFabric REST API docs follow this pattern (never include `en-us` locale):\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Cservice>\u002Fitems\n```\n\nFor non-item resources, the API path varies:\n\n```\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fconnections\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fshortcuts\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fgateways\nhttps:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002Fworkspaces\n```\n\n## Step 3.5 — Terraform Design Analysis\n\nAfter gathering SDK details (Step 3), analyze the DTOs to determine **which design patterns apply** to this resource. This produces the \"? Terraform Design Notes\" section in the issue body, giving the implementor explicit guidance.\n\n### Analysis Checks\n\nPerform each check by comparing the SDK DTOs discovered in Step 3:\n\n| #   | Check                       | How to Detect                                                                                                          | Output                                                                          |\n| --- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |\n| 1   | **Immutable fields**        | Fields present in `Create\u003CResource>Request` but absent from `Update\u003CResource>Request` (or no Update method exists)     | List fields → `RequiresReplace`                                                 |\n| 2   | **Computed-only fields**    | Fields in response DTO absent from all request DTOs                                                                    | List fields → `Computed: true` + `UseStateForUnknown`                           |\n| 3   | **Polymorphic flattening**  | Response\u002Frequest DTO has an interface type, or a struct with a `Type`\u002F`Kind` discriminator and variant-specific fields | Describe variants → separate optional nested blocks + `ExactlyOneOf`            |\n| 4   | **Write-only secrets**      | Request DTO has `*Password`\u002F`*Secret`\u002F`*Token`\u002F`*Key`\u002F`*Credential` fields absent from response DTO                    | List fields → `WriteOnly: true` + `*_reference` alternative                     |\n| 5   | **Conditional fields**      | Properties that only apply when a type discriminator has a specific value (variant-specific fields)                    | List field→type mappings → `NullIfAttributeIsOneOf`\u002F`RequireIfAttributeIsOneOf` |\n| 6   | **Enum filtering**          | `Possible*Values()` contains values representing system-managed\u002Fread-only states that cannot be set via Create\u002FUpdate  | List values to exclude from `OneOf` validator                                   |\n| 7   | **Composite ID for import** | Sub-resource with 3+ path parameters (e.g., `workspace_id` + `item_id` + `name`)                                       | Describe import ID format                                                       |\n\n### Skip Conditions\n\n- For **basic Fabric Items** (archetype `basic` or `definition` with no properties), checks 3–6 typically don't apply — skip them.\n- For **enhancements** (`[FEAT]`), only run checks relevant to the new fields being added.\n\n## Step 4 — Compose Issue Title\n\n| Type            | Format                                      |\n| --------------- | ------------------------------------------- |\n| New resource    | `[RS] fabric_\u003Csnake_case_name>`             |\n| New data source | `[DS] fabric_\u003Csnake_case_name>`             |\n| New ephemeral   | `[EPH] fabric_\u003Csnake_case_name>`            |\n| Enhancement     | `[FEAT] \u003Cshort description of enhancement>` |\n\n## Step 5 — Compose Issue Body\n\n### For New Resources (`[RS]`) and Data Sources (`[DS]`)\n\n#### ? Description\n\nUse Job Story format:\n\n```\nWhen managing Microsoft Fabric infrastructure as code,\nI want to create\u002Fmanage \u003CResourceName> resources via Terraform,\nso I can automate provisioning and maintain consistent \u003CResourceName> configurations across environments.\n```\n\n#### ? Details \u002F References\n\n**For Fabric Items:**\n\n> **Important:** Do NOT include SDK CRUD method signatures (e.g. `Get`, `Create`, `Update`, `Delete`, `List`, `GetDefinition`, `UpdateDefinition`) in the issue body. Fabric Items follow standardized method patterns determined by the archetype — listing them adds noise without value. Only include the SDK package, archetype, DTO fields (Properties\u002FCreationPayload), enum types, and definition paths.\n\n```markdown\n- Resource Name: `fabric_\u003Csnake_case_name>`\n- API documentation:\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Fcreate-\u003Citem>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Fget-\u003Citem>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002F\u003Citemtype>\u002Fitems\u002Flist-\u003Citems>\n- Definition article: https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Farticles\u002Fitem-management\u002Fdefinitions\u002F\u003Citem-kebab-case>-definition\n- SDK Package: `github.com\u002Fmicrosoft\u002Ffabric-sdk-go\u002Ffabric\u002F\u003Cpackage>`\n- Item Archetype: `\u003Carchetype>`\n- Definition Paths (if applicable):\n  - `\u003Cpath>` (format: `\u003Cformat>`)\n  - `\u003Cpath>` (format: `\u003Cformat>`)\n- Estimated complexity\u002Feffort: \u003Ceasy|moderate|hard>\n- Preview: \u003Cyes|no>\n- SPN Supported: \u003Cyes|no>\n- Related resources\u002Fdata-sources:\n  - `fabric_workspace` (required parent)\n```\n\n**For non-item resources:**\n\n```markdown\n- Resource Name: `fabric_\u003Csnake_case_name>`\n- API documentation:\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Fcreate-\u003Cresource>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Fget-\u003Cresource>\n  - https:\u002F\u002Flearn.microsoft.com\u002Frest\u002Fapi\u002Ffabric\u002Fcore\u002F\u003Cservice>\u002Flist-\u003Cresources>\n- SDK Client: `fabcore.\u003CResource>Client`\n- Resource Category: non-item (bespoke CRUD)\n- Implementation Pattern: \u003CA|B|C|D|E|F|G|H> — \u003Cpattern description>\n- Estimated complexity\u002Feffort: \u003Ceasy|moderate|hard>\n- Preview: \u003Cyes|no>\n- SPN Supported: \u003Cyes|no>\n- Related resources\u002Fdata-sources:\n  - \u003Crelated resources>\n```\n\n> **Pattern key:** A=Workspace policy singleton, B=Workspace settings (Spark), C=Role assignment, D=Batch assignment, E=Standalone entity, F=Item-scoped, G=Tenant-level custom, H=Connection (complex credentials)\n\n#### ? DTO Nesting Depth Map (complex resources only)\n\n**Include this section only for `[RS]` and `[DS]` issues where the SDK DTOs have 3+ nesting levels** (slices containing structs with nested slices\u002Fpointers to other structs). Skip for flat resources (Workspace, Domain, role assignments, basic Fabric Items without properties).\n\nRender a tree showing the SDK DTO hierarchy with type annotations. This helps implementors plan model structs, `set()` methods, and `SetNull(ctx)` placement.\n\nFormat — use indented tree with type annotations at leaf\u002Fbranch nodes:\n\n```markdown\n\u003CRootDTO>\n├── Field1 (string)\n├── Field2 (enum)\n├── NestedSlice []ChildDTO                    ← Level 1\n│   ├── ScalarField (string)\n│   ├── DeepSlice []GrandchildDTO             ← Level 2\n│   │   ├── LeafSlice []string               ← Level 3\n│   │   └── LeafField (enum)\n│   └── OptionalNested *AnotherDTO            ← Level 2\n│       └── Items []ItemDTO                   ← Level 3\n└── OptionalTop *TopDTO                       ← Level 1\n    └── Children []ChildDTO                   ← Level 2\n```\n\nRules:\n\n- Annotate slices as `[]Type`, optional nested as `*Type`, scalars as `(type)`\n- Mark nesting levels with `← Level N` comments on lines introducing a new struct depth\n- Only show fields that map to Terraform schema attributes (skip internal\u002Fwire-only fields)\n- Maximum depth shown: 5 levels (truncate deeper with `...`)\n\n#### ? Terraform Design Notes\n\n**Include this section for all `[RS]` and `[DS]` issues.** Populate from the analysis in Step 3.5. Only include applicable items — omit checks that returned no findings.\n\nFormat:\n\n```markdown\n**Immutable fields** (→ `RequiresReplace`):\n\n- `\u003Cfield_name>` — only in Create request, not updatable\n\n**Computed-only fields** (→ `Computed: true`):\n\n- `\u003Cfield_name>` — response-only, server-generated\n\n**Polymorphic type** (→ separate optional blocks + `ExactlyOneOf`):\n\n- SDK type `\u003CInterfaceName>` has variants: `\u003CVariant1>`, `\u003CVariant2>`, ...\n- Model as: `\u003Cvariant_1> {}`, `\u003Cvariant_2> {}` optional nested blocks\n\n**Write-only secrets** (→ `WriteOnly: true` + `*_reference` alternative):\n\n- `\u003Cfield_name>` — credential\u002Fsecret in request, absent from response\n\n**Conditional fields** (→ `NullIfAttributeIsOneOf` \u002F `RequireIfAttributeIsOneOf`):\n\n- `\u003Cfield_name>` only applies when `type == \"\u003Cvalue>\"`\n\n**Enum filtering** (→ exclude from `OneOf` validator):\n\n- `\u003CEnumType>`: exclude `\u003CValue1>`, `\u003CValue2>` (system-managed\u002Fnon-creatable)\n\n**Import ID format**:\n\n- `\u003Cworkspace_id>\u002F\u003Citem_id>\u002F\u003Cname>` (composite)\n```\n\n#### ? Potential Terraform Configuration\n\nGenerate sample HCL based on SDK properties discovered and **informed by the design notes above** (use optional blocks for polymorphic types, add comments for immutable\u002Fcomputed fields):\n\n```terraform\nresource \"fabric_\u003Csnake_case_name>\" \"example\" {\n  display_name = \"example\"\n  description  = \"Example resource\"\n  workspace_id = fabric_workspace.example.id\n\n  # Item-specific attributes\n}\n```\n\n#### ☑️ Acceptance Criteria\n\n```markdown\n- [ ] Can create a new \u003CResourceName> with required attributes\n- [ ] Can read \u003CResourceName> by ID\n- [ ] Can update \u003CResourceName> mutable attributes\n- [ ] Can delete \u003CResourceName>\n- [ ] Can import existing \u003CResourceName>\n- [ ] Properties are correctly mapped from SDK response\n```\n\n#### ✅ Definition of Done\n\nFor Resource:\n\n```markdown\n- [ ] Data Transfer Objects (DTOs)\n- [ ] Resource Implementation\n- [ ] Resource Added to Provider\n- [ ] Unit Tests for Happy path\n- [ ] Unit Tests for Error path\n- [ ] Acceptance Tests\n- [ ] Example in the .\u002Fexamples folder\n- [ ] Schema documentation in code\n- [ ] Updated auto-generated provider docs with `task docs`\n```\n\nFor Data Source:\n\n```markdown\n- [ ] Data Transfer Objects (DTOs)\n- [ ] Data-Source Implementation\n- [ ] Data-Source Added to Provider\n- [ ] Unit Tests for Happy path\n- [ ] Unit Tests for Error path\n- [ ] Acceptance Tests\n- [ ] Example in the .\u002Fexamples folder\n- [ ] Schema documentation in code\n- [ ] Updated auto-generated provider docs with `task docs`\n```\n\n### For Enhancements (`[FEAT]`)\n\nUse the `feature_request.yml` template structure.\n\n#### ? Feature description\n\nJob Story format describing the enhancement:\n\n```\nWhen using the existing `fabric_\u003Cresource>` resource,\nI want to \u003Cwhat is missing or needs to change>,\nso I can \u003Cexpected outcome>.\n```\n\n#### ? Motivation\n\nExplain why the enhancement is needed — e.g. new API capability, missing attribute, user request.\n\n#### ? Alternatives\n\nDescribe workarounds or alternative approaches considered.\n\n#### ? SDK Diff (from `#skill:sdk-contract-navigator`)\n\nCompare the current SDK DTOs against the existing implementation to identify what's new. Include this section in the issue body so the implementor agent has a clear change list:\n\n**For Fabric Item enhancements:**\n\n```markdown\n### SDK Diff\n\nResource: `fabric_\u003Csnake_case_name>`\nCategory: Fabric Item (`\u003Carchetype>`)\nService package: `internal\u002Fservices\u002F\u003Cpackage>\u002F`\n\n| Change    | SDK Field                     | Go Type                  | Current Status                    |\n| --------- | ----------------------------- | ------------------------ | --------------------------------- |\n| + New     | `Properties.\u003CFieldName>`      | `*string`                | Not in `\u003Citem>PropertiesModel`    |\n| + New     | `Properties.\u003CNestedField>`    | `*\u003CNestedDTO>`           | New sub-model needed              |\n| + New     | `CreationPayload.\u003CFieldName>` | `*bool`                  | Not in `\u003Citem>ConfigurationModel` |\n| ~ Changed | `Properties.\u003CFieldName>`      | `*int32` (was `*string`) | Type change in model              |\n```\n\n**For non-item enhancements:**\n\n```markdown\n### SDK Diff\n\nResource: `fabric_\u003Csnake_case_name>`\nCategory: non-item (bespoke CRUD)\nService package: `internal\u002Fservices\u002F\u003Cpackage>\u002F`\nSDK Client: `fabcore.\u003CResource>Client`\n\n| Change       | SDK Field                   | Go Type   | Current Status                          |\n| ------------ | --------------------------- | --------- | --------------------------------------- |\n| + New        | `\u003CResponseDTO>.\u003CFieldName>` | `*string` | Not in `base\u003CResource>Model`            |\n| + New        | `\u003CRequestDTO>.\u003CFieldName>`  | `*bool`   | Not in `request\u003CAction>\u003CResource>Model` |\n| + New method | `client.\u003CNewMethod>(...)`   | —         | No CRUD handler                         |\n```\n\n#### ? Potential Configuration \u002F Desired Solution\n\nShow HCL demonstrating the desired new behavior:\n\n```terraform\nresource \"fabric_\u003Cexisting_resource>\" \"example\" {\n  # existing attributes...\n\n  # NEW: proposed enhancement\n  new_attribute = \"value\"\n}\n```\n\n#### ☑️ Acceptance Criteria\n\n```markdown\n- [ ] New attribute `\u003Cname>` is added to the schema\n- [ ] SDK mapping is correct for new fields\n- [ ] `set()` methods updated for new fields\n- [ ] Fakes updated with new field test data\n- [ ] Existing tests still pass\n- [ ] New test assertions for added attributes\n- [ ] Documentation updated\n```\n\n## Step 6 — Create the Issue\n\nUse the GitHub MCP server `create_issue` tool:\n\n```\nowner: microsoft\nrepo: terraform-provider-fabric\ntitle: \u003Ccomposed title from Step 4>\nbody: \u003Ccomposed body from Step 5>\nlabels: [\u003Cappropriate label>]\nmilestone: \u003Cresolved milestone number from Step 1, or null if not specified>\n```\n\nLabel mapping:\n\n- `[RS]` → `[\"tf\u002Fresource\"]`\n- `[DS]` → `[\"tf\u002Fdata-source\"]`\n- `[EPH]` → `[\"tf\u002Fephemeral\"]`\n- `[FEAT]` → `[\"feature\"]`\n\n## Step 7 — Report Back\n\nAfter creating the issue, report:\n\n- Issue number and URL\n- Summary of what was filed\n- Resource category (Fabric Item vs non-item) and archetype (if applicable)\n- Any gaps or unknowns that need follow-up (e.g. API not yet public, SDK package missing)\n",{"name":5,"description":7},"main","4c6f9562b27de9117c921e193706463d60551cbe",".github\u002Fskills\u002Fresource-designer",35,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric","https:\u002F\u002Fregistry.terraform.io\u002Fproviders\u002Fmicrosoft\u002Ffabric","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-12 19:02:40",{"source":8,"skillName":5,"commands":75,"prompt":85,"zipAvailable":86},[76,79,82],{"tool":77,"command":78},"npx","npx skills add microsoft\u002Fterraform-provider-fabric --skill resource-designer",{"tool":80,"command":81},"bunx","bunx skills add microsoft\u002Fterraform-provider-fabric --skill resource-designer",{"tool":83,"command":84},"pnpm","pnpm dlx skills add microsoft\u002Fterraform-provider-fabric --skill resource-designer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fresource-designer\u002FSKILL.md",true,[],[89,113,134,155],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":59},"01M69BRSJGC84SF0F9567H5A03","wellknown-analyzer","Analyze dependencies and determine what infrastructure must be added to tools\u002Fscripts\u002FSet-WellKnown.ps1 and internal\u002Ftesthelp\u002Fwellknown.go so that acceptance tests for a new resource have all required pre-requisite resources available. USE FOR: analyzing well-known test fixture requirements for new resources, determining creation strategies, and generating code snippets for Set-WellKnown.ps1 and wellknown.go additions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fwellknown-analyzer\u002FSKILL.md",[],[96,97,98,99,38,100,101,102,103,42,104,105,106,107,37,108,50,109,110,111,112],"wellknown analyzer","analyzer","infrastructure","use","for","resources","scripts","tests","strategies","fixture","snippets","analyze","SET","acceptance","code","test","go",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":59},"01M69BRQPDJYENDVDG88XC8V7N","sdk-contract-navigator","Navigate the fabric-sdk-go SDK source to find the correct client factory, DTOs, item type constants, and pager methods for a given Fabric Item or non-item resource. USE FOR: identifying SDK packages, client factories, DTO structs, item type constants, and pager methods for any Fabric resource.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsdk-contract-navigator\u002FSKILL.md",[119],{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},[121,122,51,56,123,124,125,41,100,126,127,128,129,130,99,131,132,112,133],"contract","sdk contract navigator","client","dto","navigate","factory","type","correct","methods","find","constants","packages","fabric",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":59},"01M69BRNV6ARREM1SJFF71DR6E","schema-model-generator","Given a Go SDK contract (DTOs), generate the corresponding Terraform schema attributes and model structs with high fidelity. USE FOR: creating schema_*.go and models.go files from SDK DTOs, mapping Go types to Terraform attribute types and custom types.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fschema-model-generator\u002FSKILL.md",[140],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[142,143,144,145,146,147,100,148,149,150,151,121,152,153,99,53,154,56,112],"generator","schema model generator","model","schema","custom","mapping","high","attributes","with","types","models","files","generate",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":59},"01M69BRGHQT06DYTRQDP9H1N39","itemgen-command-builder","Given SDK analysis results, automatically determine the correct itemgen archetype and build the full go run tools\u002Fitemgen\u002Fmain.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).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fterraform-provider-fabric\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fitemgen-command-builder\u002FSKILL.md",[],[162,163,164,165,100,142,101,166,64,167,168,99,38,169,128,47,170,110,133,171,56,112],"builder","command","itemgen command builder","results","scaffolding","build","only","workspace","gateway","run"]