[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-azure-workflow-json-generation-rules":3,"mdc--5g9f0l-key":35,"related-repo-azure-workflow-json-generation-rules":2149,"related-org-azure-workflow-json-generation-rules":2258},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"workflow-json-generation-rules","generate workflow.json files for Logic Apps","Rules for generating workflow.json files for Logic Apps Standard. Covers connector selection, splitOn preference, file trigger semantics, runAfter structure, and mandatory reference lookup before writing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"azure","Azure (Microsoft)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fazure.png","Azure",[13,15,18,21],{"name":11,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Configuration","configuration",{"name":19,"slug":20,"type":14},"Automation","automation",{"name":22,"slug":23,"type":14},"Workflow Automation","workflow-automation",6,"https:\u002F\u002Fgithub.com\u002FAzure\u002Flogicapps-migration-agent","2026-07-12T08:19:19.730244",null,7,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"VS Code Extension for migrating BizTalk, MuleSoft, and other integration platforms to Azure Logic Apps Standard","https:\u002F\u002Fgithub.com\u002FAzure\u002Flogicapps-migration-agent\u002Ftree\u002FHEAD\u002Fresources\u002Fskills\u002Fworkflow-json-generation-rules\u002Ftibco","---\nname: workflow-json-generation-rules\ndescription: Rules for generating workflow.json files for Logic Apps Standard. Covers connector selection, splitOn preference, file trigger semantics, runAfter structure, and mandatory reference lookup before writing.\n---\n\n# Skill: Workflow JSON Generation Rules\n\n> **Purpose**: Authoritative rules for generating `workflow.json` files. Follow exactly.\n\n---\n\n## 1. Mandatory Reference Lookup\n\nBEFORE writing ANY `workflow.json`:\n\n1. Read the skill `source-to-logic-apps-mapping` to get the Logic Apps equivalent connector, service provider ID, and operation names for each source component.\n2. Use those operation names to call `migration_searchReferenceWorkflows` and `migration_readReferenceWorkflow` to get exact `operationId` and `serviceProviderConfiguration` for each trigger\u002Faction.\n3. If the first search returns no relevant results, RETRY 2-4 more times with different word combinations.\n4. Also call `migration_readReferenceDoc` with `action=\"search\"` then `action=\"read\"` to verify connector capabilities.\n5. Do NOT invent `operationId` values, `serviceProviderConfiguration` structures, or connection formats — ALWAYS copy from references.\n\n---\n\n## 2. Workflow Definition Structure\n\nEach `workflow.json` must contain a `definition` key with:\n\n- `$schema` — MUST be exactly `\"https:\u002F\u002Fschema.management.azure.com\u002Fproviders\u002FMicrosoft.Logic\u002Fschemas\u002F2016-06-01\u002Fworkflowdefinition.json#\"`\n- `contentVersion` — use `\"1.0.0.0\"`\n- `triggers` — at least one trigger\n- `actions` — with `runAfter` (object mapping predecessor action names to status arrays) and `type` for each action\n\n### Action Types\n\n- `Switch` — must have `cases`\n- `If` \u002F `Condition` — must have `actions` (true branch) and optionally `else.actions` (false branch)\n- `Foreach` \u002F `Until` — nest `actions` inside\n- `ServiceProvider` — with `serviceProviderConfiguration`\n- `ApiConnection` — only when no built-in ServiceProvider equivalent exists\n- `InvokeFunction` — for .NET local functions\n- `Workflow` \u002F `InvokeWorkflow` — for calling child workflows\n\n### Preference: ServiceProvider over ApiConnection\n\nPrefer `ServiceProvider` type with `serviceProviderConfiguration` over `ApiConnection` (managed connector) whenever a built-in equivalent exists. Built-in connectors run in-process with lower latency and no connection overhead.\n\n### Parameterization (keep it simple)\n\n- For Logic Apps Standard, prefer `parameters.json` for cross-environment values.\n- In `workflow.json`, reference values with `@parameters('name')`.\n- In `parameters.json`, `@appsetting('name')` is the only valid expression type.\n- In `connections.json`, only `@parameters(...)` and `@appsetting(...)` are valid.\n- For more details, fetch Microsoft Learn docs about Standard parameters and app settings (`create-parameters-workflows`, `edit-app-settings-host-settings`).\n\n---\n\n## 3. SplitOn over ForEach\n\nWhen a trigger returns an array (batch of messages), ALWAYS use `splitOn` on the trigger instead of wrapping actions in a `For_each` loop:\n\n```json\n\"triggers\": {\n  \"myTrigger\": {\n    \"splitOn\": \"@triggerOutputs()?['body']\",\n    ...\n  }\n}\n```\n\nSplitOn debatches the array so each item fires a separate workflow run. Only use `For_each` if splitOn is not supported by that trigger type.\n\n---\n\n## 4. File System Trigger Semantics\n\n- Do NOT add delete\u002Fremove\u002Fcleanup actions that remove the trigger input file by default.\n- The runtime does not re-trigger on the same unchanged file, so deleting is unnecessary unless the user explicitly requests archival\u002Fdeletion behavior.\n\n---\n\n## 5. Trigger Output Verification (MANDATORY)\n\n> **⚠️ NEVER assume a trigger returns file\u002Fmessage content directly. ALWAYS verify what the trigger actually returns.**\n\nMany triggers return **metadata** (file path, message ID, blob URI) rather than the actual content. You MUST check the trigger's return type from the reference workflow before building downstream actions.\n\n### 5.1 Procedure\n\n1. After selecting a trigger via reference lookup (§1), read the reference workflow AND the reference docs to see what `triggerOutputs()` or `triggerBody()` actually contains.\n2. Call `migration_readReferenceDoc` with `action=\"search\"` for the trigger's connector name to find documentation on its output schema and return type.\n3. Call `migration_readReferenceDoc` with `action=\"read\"` on the top result to confirm the exact trigger output fields.\n4. If the trigger returns a **file path** (e.g. File System `whenFilesAreAdded` returns `path` and `name`), you MUST add a separate **read content** action (e.g. `getFileContent`) before any parsing\u002Fprocessing.\n5. If the trigger returns **message content directly** (e.g. HTTP Request trigger, Service Bus `receiveQueueMessage`), you can use `triggerBody()` directly.\n\n### 5.2 Common Trigger Return Types\n\n| Trigger                                   | Returns                          | Content Available Via                     |\n| ----------------------------------------- | -------------------------------- | ----------------------------------------- |\n| File System `whenFilesAreAdded`           | File metadata (path, name, size) | Add `getFileContent` action with the path |\n| File System `whenFilesAreAddedOrModified` | File metadata (path, name, size) | Add `getFileContent` action with the path |\n| Azure Blob `whenABlobIsAddedOrModified`   | Blob metadata (path, URI)        | Add `readBlob` action with the path       |\n| HTTP Request                              | Full request body                | `triggerBody()` directly                  |\n| Service Bus `receiveQueueMessage`         | Message content + properties     | `triggerBody()?['contentData']` directly  |\n| Service Bus `peekLockQueueMessagesV2`     | Array of message metadata        | Add `completeMessage` after processing    |\n| FTP\u002FSFTP `whenFileIsAdded`                | File metadata                    | Add `getFileContent` action with the path |\n| Recurrence \u002F Timer                        | No body                          | N\u002FA — use actions to fetch data           |\n\n### 5.3 Rule\n\n- **If trigger returns metadata\u002Fpath**: Add a content-reading action BEFORE any XmlParse, Parse JSON, Compose, or processing action.\n- **If trigger returns content directly**: Use `triggerBody()` or `triggerOutputs()?['body']` in downstream actions.\n- **If unsure**: Check BOTH the reference workflow AND the reference docs. If the reference workflow has a read-content action after the trigger, or the docs show the trigger returns metadata rather than content, you need a content-reading action too.\n\n---\n\n## 6. 1:1 Flow to Workflow Rule\n\n- Every flow (including sub-processes with significant logic) MUST be a separate workflow.\n- Use the `Workflow` action type to invoke child workflows from parent workflows.\n- Do NOT convert flows to local functions.\n\n---\n\n## 7. Plan Adherence\n\nWhen fixing any errors in workflow.json:\n\n- Do NOT deviate from the planned design.\n- Do NOT add\u002Fremove actions, change triggers, switch connectors, or alter schemas.\n- Before any fix, re-read the planning results to verify compliance.\n- If a fix requires changing the design, STOP and report to the user.\n\n---\n\n## 8. Scenario-Specific Action Overrides\n\nThese overrides are deterministic — apply them directly without asking the user.\n\n### 8.1 XML Field Extraction\n\nWhen extracting fields from an XML message body:\n\n1. **FIRST**: Use `XmlParse` built-in action with the schema from `Artifacts\u002FSchemas\u002F`. This validates and extracts XML fields in one step. Access fields via: `body('Parse_XML')?['Root']?['fieldName']`\n2. **ONLY IF** no schema exists and cannot be generated: fall back to `xpath()` expressions.\n\nDo NOT use `xpath()` when an XSD schema is available — XmlParse is a level-1 built-in action and MUST be preferred over level-2 expressions per the Component Priority Ladder.\n\n### 8.2 XML Schema Validation\n\nWhen validating incoming XML against a schema:\n\n- Use `XmlValidation` built-in action — do NOT write custom validation logic or skip validation.\n\n### 8.3 XML Transformation\n\nWhen transforming XML documents:\n\n- Use `Xslt` (Transform XML) built-in action with maps from `Artifacts\u002FMaps\u002F` — do NOT use Compose + string manipulation.\n\n### 8.4 Output XML Construction\n\nWhen constructing XML output documents:\n\n- **FIRST**: Use `XmlCompose` built-in action (XML Operations) to compose XML from structured data. This assembles XML output from structured fields.\n- `XmlCompose` can reference schemas from **either** the local `Artifacts\u002FSchemas\u002F` folder **or** an **Integration Account** — select the source via the `Source` parameter (`LogicApp` or `IntegrationAccount`). If the flow uses the Integration Account model, use `IntegrationAccount` as the source.\n- If the source uses .NET code to build XML (e.g. `XmlDocument`, `XElement`) with complex business logic, use a **.NET local function**.\n- If the output is a simple static template with field substitution, `Compose` is acceptable.\n- Do NOT approximate XML construction with `Compose` + `concat()` when `XmlCompose` or a local function is more appropriate.\n\n### 8.5 EDI Decode Output Handling\n\n> **⚠️ CRITICAL**: The EDIFACT `EdifactDecode` and X12 `X12Decode` built-in actions return **JSON**, not XML. If a downstream action or function expects XML (e.g. `XmlDocument.LoadXml()`), you MUST add an `XmlCompose` action after the decode action to convert the JSON back to XML using the appropriate message schema.\n\nPattern:\n```\nDecode_EDIFACT (EdifactDecode) → JSON output\n  → Compose_EDIFACT_XML (XmlCompose, Source: IntegrationAccount, Schema: message schema) → XML output\n    → downstream action expecting XML\n```\n\nDo NOT pass the JSON decode output directly to XML-expecting code. Do NOT try to parse the JSON as XML — it will fail with \"Data at the root level is invalid\".\n\n### 8.6 JSON Parsing\n\nWhen parsing JSON payloads:\n\n- Use `Parse JSON` built-in action — do NOT use `json()` expression for structured access.\n\n---\n\n## 9. Pre-Finalize Validation Checklist\n\nBefore storing workflow definitions, cross-check EVERY action against this table. If ANY row in the \"DON'T\" column matches your output, fix it before proceeding.\n\n| Scenario                    | DO (correct)                                         | DON'T (wrong — fix before storing)                     |\n| --------------------------- | ---------------------------------------------------- | ------------------------------------------------------ |\n| Trigger output assumption   | Verify trigger return type from ref                  | Assume trigger returns file\u002Fmessage content directly   |\n| File\u002FBlob\u002FFTP trigger       | Add `getFileContent`\u002F`readBlob` action after trigger | Use `triggerBody()` for content (it only has metadata) |\n| XML field extraction        | `XmlParse` action + schema                           | `xpath()` expression when schema exists                |\n| XML validation              | `XmlValidation` action                               | Skip validation or custom code                         |\n| XML transformation          | `Xslt` action + map file                             | `Compose` + string concat                              |\n| XML output assembly         | `XmlCompose` action (Source: LogicApp or IntegrationAccount) | `Compose` + `concat()` for XML                         |\n| EDI decode → XML needed     | Add `XmlCompose` after EdifactDecode\u002FX12Decode       | Pass JSON decode output directly to XML-expecting code |\n| Complex XML with .NET logic | .NET local function                                  | `Compose` + `concat()` approximation                   |\n| JSON parsing                | `Parse JSON` action                                  | `json()` expression for structured access              |\n| Array trigger debatching    | `splitOn` on trigger                                 | `For_each` loop wrapping all actions                   |\n| File trigger cleanup        | Do nothing (no delete)                               | Delete\u002Farchive trigger input file                      |\n| sub-process (via process-call)     | Separate workflow + `Workflow` action                | Merge into parent or local function                    |\n| Custom source code          | .NET local function                                  | Expressions or inline approximation                    |\n\n\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,74,78,85,97,204,207,213,233,309,316,449,455,481,487,589,592,598,619,757,769,772,778,791,794,800,811,823,829,965,971,1219,1225,1272,1275,1281,1306,1309,1315,1320,1343,1346,1352,1357,1363,1368,1420,1432,1438,1443,1459,1465,1470,1493,1499,1504,1657,1663,1714,1719,1729,1734,1740,1745,1768,1771,1777,1782,2143],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"skill-workflow-json-generation-rules",[46],{"type":47,"value":48},"text","Skill: Workflow JSON Generation Rules",{"type":41,"tag":50,"props":51,"children":52},"blockquote",{},[53],{"type":41,"tag":54,"props":55,"children":56},"p",{},[57,63,65,72],{"type":41,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":47,"value":62},"Purpose",{"type":47,"value":64},": Authoritative rules for generating ",{"type":41,"tag":66,"props":67,"children":69},"code",{"className":68},[],[70],{"type":47,"value":71},"workflow.json",{"type":47,"value":73}," files. Follow exactly.",{"type":41,"tag":75,"props":76,"children":77},"hr",{},[],{"type":41,"tag":79,"props":80,"children":82},"h2",{"id":81},"_1-mandatory-reference-lookup",[83],{"type":47,"value":84},"1. Mandatory Reference Lookup",{"type":41,"tag":54,"props":86,"children":87},{},[88,90,95],{"type":47,"value":89},"BEFORE writing ANY ",{"type":41,"tag":66,"props":91,"children":93},{"className":92},[],[94],{"type":47,"value":71},{"type":47,"value":96},":",{"type":41,"tag":98,"props":99,"children":100},"ol",{},[101,115,151,156,185],{"type":41,"tag":102,"props":103,"children":104},"li",{},[105,107,113],{"type":47,"value":106},"Read the skill ",{"type":41,"tag":66,"props":108,"children":110},{"className":109},[],[111],{"type":47,"value":112},"source-to-logic-apps-mapping",{"type":47,"value":114}," to get the Logic Apps equivalent connector, service provider ID, and operation names for each source component.",{"type":41,"tag":102,"props":116,"children":117},{},[118,120,126,128,134,136,142,143,149],{"type":47,"value":119},"Use those operation names to call ",{"type":41,"tag":66,"props":121,"children":123},{"className":122},[],[124],{"type":47,"value":125},"migration_searchReferenceWorkflows",{"type":47,"value":127}," and ",{"type":41,"tag":66,"props":129,"children":131},{"className":130},[],[132],{"type":47,"value":133},"migration_readReferenceWorkflow",{"type":47,"value":135}," to get exact ",{"type":41,"tag":66,"props":137,"children":139},{"className":138},[],[140],{"type":47,"value":141},"operationId",{"type":47,"value":127},{"type":41,"tag":66,"props":144,"children":146},{"className":145},[],[147],{"type":47,"value":148},"serviceProviderConfiguration",{"type":47,"value":150}," for each trigger\u002Faction.",{"type":41,"tag":102,"props":152,"children":153},{},[154],{"type":47,"value":155},"If the first search returns no relevant results, RETRY 2-4 more times with different word combinations.",{"type":41,"tag":102,"props":157,"children":158},{},[159,161,167,169,175,177,183],{"type":47,"value":160},"Also call ",{"type":41,"tag":66,"props":162,"children":164},{"className":163},[],[165],{"type":47,"value":166},"migration_readReferenceDoc",{"type":47,"value":168}," with ",{"type":41,"tag":66,"props":170,"children":172},{"className":171},[],[173],{"type":47,"value":174},"action=\"search\"",{"type":47,"value":176}," then ",{"type":41,"tag":66,"props":178,"children":180},{"className":179},[],[181],{"type":47,"value":182},"action=\"read\"",{"type":47,"value":184}," to verify connector capabilities.",{"type":41,"tag":102,"props":186,"children":187},{},[188,190,195,197,202],{"type":47,"value":189},"Do NOT invent ",{"type":41,"tag":66,"props":191,"children":193},{"className":192},[],[194],{"type":47,"value":141},{"type":47,"value":196}," values, ",{"type":41,"tag":66,"props":198,"children":200},{"className":199},[],[201],{"type":47,"value":148},{"type":47,"value":203}," structures, or connection formats — ALWAYS copy from references.",{"type":41,"tag":75,"props":205,"children":206},{},[],{"type":41,"tag":79,"props":208,"children":210},{"id":209},"_2-workflow-definition-structure",[211],{"type":47,"value":212},"2. Workflow Definition Structure",{"type":41,"tag":54,"props":214,"children":215},{},[216,218,223,225,231],{"type":47,"value":217},"Each ",{"type":41,"tag":66,"props":219,"children":221},{"className":220},[],[222],{"type":47,"value":71},{"type":47,"value":224}," must contain a ",{"type":41,"tag":66,"props":226,"children":228},{"className":227},[],[229],{"type":47,"value":230},"definition",{"type":47,"value":232}," key with:",{"type":41,"tag":234,"props":235,"children":236},"ul",{},[237,254,271,282],{"type":41,"tag":102,"props":238,"children":239},{},[240,246,248],{"type":41,"tag":66,"props":241,"children":243},{"className":242},[],[244],{"type":47,"value":245},"$schema",{"type":47,"value":247}," — MUST be exactly ",{"type":41,"tag":66,"props":249,"children":251},{"className":250},[],[252],{"type":47,"value":253},"\"https:\u002F\u002Fschema.management.azure.com\u002Fproviders\u002FMicrosoft.Logic\u002Fschemas\u002F2016-06-01\u002Fworkflowdefinition.json#\"",{"type":41,"tag":102,"props":255,"children":256},{},[257,263,265],{"type":41,"tag":66,"props":258,"children":260},{"className":259},[],[261],{"type":47,"value":262},"contentVersion",{"type":47,"value":264}," — use ",{"type":41,"tag":66,"props":266,"children":268},{"className":267},[],[269],{"type":47,"value":270},"\"1.0.0.0\"",{"type":41,"tag":102,"props":272,"children":273},{},[274,280],{"type":41,"tag":66,"props":275,"children":277},{"className":276},[],[278],{"type":47,"value":279},"triggers",{"type":47,"value":281}," — at least one trigger",{"type":41,"tag":102,"props":283,"children":284},{},[285,291,293,299,301,307],{"type":41,"tag":66,"props":286,"children":288},{"className":287},[],[289],{"type":47,"value":290},"actions",{"type":47,"value":292}," — with ",{"type":41,"tag":66,"props":294,"children":296},{"className":295},[],[297],{"type":47,"value":298},"runAfter",{"type":47,"value":300}," (object mapping predecessor action names to status arrays) and ",{"type":41,"tag":66,"props":302,"children":304},{"className":303},[],[305],{"type":47,"value":306},"type",{"type":47,"value":308}," for each action",{"type":41,"tag":310,"props":311,"children":313},"h3",{"id":312},"action-types",[314],{"type":47,"value":315},"Action Types",{"type":41,"tag":234,"props":317,"children":318},{},[319,336,369,394,409,420,431],{"type":41,"tag":102,"props":320,"children":321},{},[322,328,330],{"type":41,"tag":66,"props":323,"children":325},{"className":324},[],[326],{"type":47,"value":327},"Switch",{"type":47,"value":329}," — must have ",{"type":41,"tag":66,"props":331,"children":333},{"className":332},[],[334],{"type":47,"value":335},"cases",{"type":41,"tag":102,"props":337,"children":338},{},[339,345,347,353,354,359,361,367],{"type":41,"tag":66,"props":340,"children":342},{"className":341},[],[343],{"type":47,"value":344},"If",{"type":47,"value":346}," \u002F ",{"type":41,"tag":66,"props":348,"children":350},{"className":349},[],[351],{"type":47,"value":352},"Condition",{"type":47,"value":329},{"type":41,"tag":66,"props":355,"children":357},{"className":356},[],[358],{"type":47,"value":290},{"type":47,"value":360}," (true branch) and optionally ",{"type":41,"tag":66,"props":362,"children":364},{"className":363},[],[365],{"type":47,"value":366},"else.actions",{"type":47,"value":368}," (false branch)",{"type":41,"tag":102,"props":370,"children":371},{},[372,378,379,385,387,392],{"type":41,"tag":66,"props":373,"children":375},{"className":374},[],[376],{"type":47,"value":377},"Foreach",{"type":47,"value":346},{"type":41,"tag":66,"props":380,"children":382},{"className":381},[],[383],{"type":47,"value":384},"Until",{"type":47,"value":386}," — nest ",{"type":41,"tag":66,"props":388,"children":390},{"className":389},[],[391],{"type":47,"value":290},{"type":47,"value":393}," inside",{"type":41,"tag":102,"props":395,"children":396},{},[397,403,404],{"type":41,"tag":66,"props":398,"children":400},{"className":399},[],[401],{"type":47,"value":402},"ServiceProvider",{"type":47,"value":292},{"type":41,"tag":66,"props":405,"children":407},{"className":406},[],[408],{"type":47,"value":148},{"type":41,"tag":102,"props":410,"children":411},{},[412,418],{"type":41,"tag":66,"props":413,"children":415},{"className":414},[],[416],{"type":47,"value":417},"ApiConnection",{"type":47,"value":419}," — only when no built-in ServiceProvider equivalent exists",{"type":41,"tag":102,"props":421,"children":422},{},[423,429],{"type":41,"tag":66,"props":424,"children":426},{"className":425},[],[427],{"type":47,"value":428},"InvokeFunction",{"type":47,"value":430}," — for .NET local functions",{"type":41,"tag":102,"props":432,"children":433},{},[434,440,441,447],{"type":41,"tag":66,"props":435,"children":437},{"className":436},[],[438],{"type":47,"value":439},"Workflow",{"type":47,"value":346},{"type":41,"tag":66,"props":442,"children":444},{"className":443},[],[445],{"type":47,"value":446},"InvokeWorkflow",{"type":47,"value":448}," — for calling child workflows",{"type":41,"tag":310,"props":450,"children":452},{"id":451},"preference-serviceprovider-over-apiconnection",[453],{"type":47,"value":454},"Preference: ServiceProvider over ApiConnection",{"type":41,"tag":54,"props":456,"children":457},{},[458,460,465,467,472,474,479],{"type":47,"value":459},"Prefer ",{"type":41,"tag":66,"props":461,"children":463},{"className":462},[],[464],{"type":47,"value":402},{"type":47,"value":466}," type with ",{"type":41,"tag":66,"props":468,"children":470},{"className":469},[],[471],{"type":47,"value":148},{"type":47,"value":473}," over ",{"type":41,"tag":66,"props":475,"children":477},{"className":476},[],[478],{"type":47,"value":417},{"type":47,"value":480}," (managed connector) whenever a built-in equivalent exists. Built-in connectors run in-process with lower latency and no connection overhead.",{"type":41,"tag":310,"props":482,"children":484},{"id":483},"parameterization-keep-it-simple",[485],{"type":47,"value":486},"Parameterization (keep it simple)",{"type":41,"tag":234,"props":488,"children":489},{},[490,503,523,542,569],{"type":41,"tag":102,"props":491,"children":492},{},[493,495,501],{"type":47,"value":494},"For Logic Apps Standard, prefer ",{"type":41,"tag":66,"props":496,"children":498},{"className":497},[],[499],{"type":47,"value":500},"parameters.json",{"type":47,"value":502}," for cross-environment values.",{"type":41,"tag":102,"props":504,"children":505},{},[506,508,513,515,521],{"type":47,"value":507},"In ",{"type":41,"tag":66,"props":509,"children":511},{"className":510},[],[512],{"type":47,"value":71},{"type":47,"value":514},", reference values with ",{"type":41,"tag":66,"props":516,"children":518},{"className":517},[],[519],{"type":47,"value":520},"@parameters('name')",{"type":47,"value":522},".",{"type":41,"tag":102,"props":524,"children":525},{},[526,527,532,534,540],{"type":47,"value":507},{"type":41,"tag":66,"props":528,"children":530},{"className":529},[],[531],{"type":47,"value":500},{"type":47,"value":533},", ",{"type":41,"tag":66,"props":535,"children":537},{"className":536},[],[538],{"type":47,"value":539},"@appsetting('name')",{"type":47,"value":541}," is the only valid expression type.",{"type":41,"tag":102,"props":543,"children":544},{},[545,546,552,554,560,561,567],{"type":47,"value":507},{"type":41,"tag":66,"props":547,"children":549},{"className":548},[],[550],{"type":47,"value":551},"connections.json",{"type":47,"value":553},", only ",{"type":41,"tag":66,"props":555,"children":557},{"className":556},[],[558],{"type":47,"value":559},"@parameters(...)",{"type":47,"value":127},{"type":41,"tag":66,"props":562,"children":564},{"className":563},[],[565],{"type":47,"value":566},"@appsetting(...)",{"type":47,"value":568}," are valid.",{"type":41,"tag":102,"props":570,"children":571},{},[572,574,580,581,587],{"type":47,"value":573},"For more details, fetch Microsoft Learn docs about Standard parameters and app settings (",{"type":41,"tag":66,"props":575,"children":577},{"className":576},[],[578],{"type":47,"value":579},"create-parameters-workflows",{"type":47,"value":533},{"type":41,"tag":66,"props":582,"children":584},{"className":583},[],[585],{"type":47,"value":586},"edit-app-settings-host-settings",{"type":47,"value":588},").",{"type":41,"tag":75,"props":590,"children":591},{},[],{"type":41,"tag":79,"props":593,"children":595},{"id":594},"_3-spliton-over-foreach",[596],{"type":47,"value":597},"3. SplitOn over ForEach",{"type":41,"tag":54,"props":599,"children":600},{},[601,603,609,611,617],{"type":47,"value":602},"When a trigger returns an array (batch of messages), ALWAYS use ",{"type":41,"tag":66,"props":604,"children":606},{"className":605},[],[607],{"type":47,"value":608},"splitOn",{"type":47,"value":610}," on the trigger instead of wrapping actions in a ",{"type":41,"tag":66,"props":612,"children":614},{"className":613},[],[615],{"type":47,"value":616},"For_each",{"type":47,"value":618}," loop:",{"type":41,"tag":620,"props":621,"children":626},"pre",{"className":622,"code":623,"language":624,"meta":625,"style":625},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\"triggers\": {\n  \"myTrigger\": {\n    \"splitOn\": \"@triggerOutputs()?['body']\",\n    ...\n  }\n}\n","json","",[627],{"type":41,"tag":66,"props":628,"children":629},{"__ignoreMap":625},[630,662,690,731,740,749],{"type":41,"tag":631,"props":632,"children":635},"span",{"class":633,"line":634},"line",1,[636,642,647,651,657],{"type":41,"tag":631,"props":637,"children":639},{"style":638},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[640],{"type":47,"value":641},"\"",{"type":41,"tag":631,"props":643,"children":645},{"style":644},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[646],{"type":47,"value":279},{"type":41,"tag":631,"props":648,"children":649},{"style":638},[650],{"type":47,"value":641},{"type":41,"tag":631,"props":652,"children":654},{"style":653},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[655],{"type":47,"value":656},": ",{"type":41,"tag":631,"props":658,"children":659},{"style":638},[660],{"type":47,"value":661},"{\n",{"type":41,"tag":631,"props":663,"children":665},{"class":633,"line":664},2,[666,671,677,681,685],{"type":41,"tag":631,"props":667,"children":668},{"style":638},[669],{"type":47,"value":670},"  \"",{"type":41,"tag":631,"props":672,"children":674},{"style":673},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[675],{"type":47,"value":676},"myTrigger",{"type":41,"tag":631,"props":678,"children":679},{"style":638},[680],{"type":47,"value":641},{"type":41,"tag":631,"props":682,"children":683},{"style":638},[684],{"type":47,"value":96},{"type":41,"tag":631,"props":686,"children":687},{"style":638},[688],{"type":47,"value":689}," {\n",{"type":41,"tag":631,"props":691,"children":693},{"class":633,"line":692},3,[694,699,704,708,712,717,722,726],{"type":41,"tag":631,"props":695,"children":696},{"style":638},[697],{"type":47,"value":698},"    \"",{"type":41,"tag":631,"props":700,"children":702},{"style":701},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[703],{"type":47,"value":608},{"type":41,"tag":631,"props":705,"children":706},{"style":638},[707],{"type":47,"value":641},{"type":41,"tag":631,"props":709,"children":710},{"style":638},[711],{"type":47,"value":96},{"type":41,"tag":631,"props":713,"children":714},{"style":638},[715],{"type":47,"value":716}," \"",{"type":41,"tag":631,"props":718,"children":719},{"style":644},[720],{"type":47,"value":721},"@triggerOutputs()?['body']",{"type":41,"tag":631,"props":723,"children":724},{"style":638},[725],{"type":47,"value":641},{"type":41,"tag":631,"props":727,"children":728},{"style":638},[729],{"type":47,"value":730},",\n",{"type":41,"tag":631,"props":732,"children":734},{"class":633,"line":733},4,[735],{"type":41,"tag":631,"props":736,"children":737},{"style":653},[738],{"type":47,"value":739},"    ...\n",{"type":41,"tag":631,"props":741,"children":743},{"class":633,"line":742},5,[744],{"type":41,"tag":631,"props":745,"children":746},{"style":638},[747],{"type":47,"value":748},"  }\n",{"type":41,"tag":631,"props":750,"children":751},{"class":633,"line":24},[752],{"type":41,"tag":631,"props":753,"children":754},{"style":638},[755],{"type":47,"value":756},"}\n",{"type":41,"tag":54,"props":758,"children":759},{},[760,762,767],{"type":47,"value":761},"SplitOn debatches the array so each item fires a separate workflow run. Only use ",{"type":41,"tag":66,"props":763,"children":765},{"className":764},[],[766],{"type":47,"value":616},{"type":47,"value":768}," if splitOn is not supported by that trigger type.",{"type":41,"tag":75,"props":770,"children":771},{},[],{"type":41,"tag":79,"props":773,"children":775},{"id":774},"_4-file-system-trigger-semantics",[776],{"type":47,"value":777},"4. File System Trigger Semantics",{"type":41,"tag":234,"props":779,"children":780},{},[781,786],{"type":41,"tag":102,"props":782,"children":783},{},[784],{"type":47,"value":785},"Do NOT add delete\u002Fremove\u002Fcleanup actions that remove the trigger input file by default.",{"type":41,"tag":102,"props":787,"children":788},{},[789],{"type":47,"value":790},"The runtime does not re-trigger on the same unchanged file, so deleting is unnecessary unless the user explicitly requests archival\u002Fdeletion behavior.",{"type":41,"tag":75,"props":792,"children":793},{},[],{"type":41,"tag":79,"props":795,"children":797},{"id":796},"_5-trigger-output-verification-mandatory",[798],{"type":47,"value":799},"5. Trigger Output Verification (MANDATORY)",{"type":41,"tag":50,"props":801,"children":802},{},[803],{"type":41,"tag":54,"props":804,"children":805},{},[806],{"type":41,"tag":58,"props":807,"children":808},{},[809],{"type":47,"value":810},"⚠️ NEVER assume a trigger returns file\u002Fmessage content directly. ALWAYS verify what the trigger actually returns.",{"type":41,"tag":54,"props":812,"children":813},{},[814,816,821],{"type":47,"value":815},"Many triggers return ",{"type":41,"tag":58,"props":817,"children":818},{},[819],{"type":47,"value":820},"metadata",{"type":47,"value":822}," (file path, message ID, blob URI) rather than the actual content. You MUST check the trigger's return type from the reference workflow before building downstream actions.",{"type":41,"tag":310,"props":824,"children":826},{"id":825},"_51-procedure",[827],{"type":47,"value":828},"5.1 Procedure",{"type":41,"tag":98,"props":830,"children":831},{},[832,853,871,888,938],{"type":41,"tag":102,"props":833,"children":834},{},[835,837,843,845,851],{"type":47,"value":836},"After selecting a trigger via reference lookup (§1), read the reference workflow AND the reference docs to see what ",{"type":41,"tag":66,"props":838,"children":840},{"className":839},[],[841],{"type":47,"value":842},"triggerOutputs()",{"type":47,"value":844}," or ",{"type":41,"tag":66,"props":846,"children":848},{"className":847},[],[849],{"type":47,"value":850},"triggerBody()",{"type":47,"value":852}," actually contains.",{"type":41,"tag":102,"props":854,"children":855},{},[856,858,863,864,869],{"type":47,"value":857},"Call ",{"type":41,"tag":66,"props":859,"children":861},{"className":860},[],[862],{"type":47,"value":166},{"type":47,"value":168},{"type":41,"tag":66,"props":865,"children":867},{"className":866},[],[868],{"type":47,"value":174},{"type":47,"value":870}," for the trigger's connector name to find documentation on its output schema and return type.",{"type":41,"tag":102,"props":872,"children":873},{},[874,875,880,881,886],{"type":47,"value":857},{"type":41,"tag":66,"props":876,"children":878},{"className":877},[],[879],{"type":47,"value":166},{"type":47,"value":168},{"type":41,"tag":66,"props":882,"children":884},{"className":883},[],[885],{"type":47,"value":182},{"type":47,"value":887}," on the top result to confirm the exact trigger output fields.",{"type":41,"tag":102,"props":889,"children":890},{},[891,893,898,900,906,908,914,915,921,923,928,930,936],{"type":47,"value":892},"If the trigger returns a ",{"type":41,"tag":58,"props":894,"children":895},{},[896],{"type":47,"value":897},"file path",{"type":47,"value":899}," (e.g. File System ",{"type":41,"tag":66,"props":901,"children":903},{"className":902},[],[904],{"type":47,"value":905},"whenFilesAreAdded",{"type":47,"value":907}," returns ",{"type":41,"tag":66,"props":909,"children":911},{"className":910},[],[912],{"type":47,"value":913},"path",{"type":47,"value":127},{"type":41,"tag":66,"props":916,"children":918},{"className":917},[],[919],{"type":47,"value":920},"name",{"type":47,"value":922},"), you MUST add a separate ",{"type":41,"tag":58,"props":924,"children":925},{},[926],{"type":47,"value":927},"read content",{"type":47,"value":929}," action (e.g. ",{"type":41,"tag":66,"props":931,"children":933},{"className":932},[],[934],{"type":47,"value":935},"getFileContent",{"type":47,"value":937},") before any parsing\u002Fprocessing.",{"type":41,"tag":102,"props":939,"children":940},{},[941,943,948,950,956,958,963],{"type":47,"value":942},"If the trigger returns ",{"type":41,"tag":58,"props":944,"children":945},{},[946],{"type":47,"value":947},"message content directly",{"type":47,"value":949}," (e.g. HTTP Request trigger, Service Bus ",{"type":41,"tag":66,"props":951,"children":953},{"className":952},[],[954],{"type":47,"value":955},"receiveQueueMessage",{"type":47,"value":957},"), you can use ",{"type":41,"tag":66,"props":959,"children":961},{"className":960},[],[962],{"type":47,"value":850},{"type":47,"value":964}," directly.",{"type":41,"tag":310,"props":966,"children":968},{"id":967},"_52-common-trigger-return-types",[969],{"type":47,"value":970},"5.2 Common Trigger Return Types",{"type":41,"tag":972,"props":973,"children":974},"table",{},[975,999],{"type":41,"tag":976,"props":977,"children":978},"thead",{},[979],{"type":41,"tag":980,"props":981,"children":982},"tr",{},[983,989,994],{"type":41,"tag":984,"props":985,"children":986},"th",{},[987],{"type":47,"value":988},"Trigger",{"type":41,"tag":984,"props":990,"children":991},{},[992],{"type":47,"value":993},"Returns",{"type":41,"tag":984,"props":995,"children":996},{},[997],{"type":47,"value":998},"Content Available Via",{"type":41,"tag":1000,"props":1001,"children":1002},"tbody",{},[1003,1034,1061,1091,1114,1142,1172,1201],{"type":41,"tag":980,"props":1004,"children":1005},{},[1006,1017,1022],{"type":41,"tag":1007,"props":1008,"children":1009},"td",{},[1010,1012],{"type":47,"value":1011},"File System ",{"type":41,"tag":66,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":47,"value":905},{"type":41,"tag":1007,"props":1018,"children":1019},{},[1020],{"type":47,"value":1021},"File metadata (path, name, size)",{"type":41,"tag":1007,"props":1023,"children":1024},{},[1025,1027,1032],{"type":47,"value":1026},"Add ",{"type":41,"tag":66,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":47,"value":935},{"type":47,"value":1033}," action with the path",{"type":41,"tag":980,"props":1035,"children":1036},{},[1037,1047,1051],{"type":41,"tag":1007,"props":1038,"children":1039},{},[1040,1041],{"type":47,"value":1011},{"type":41,"tag":66,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":47,"value":1046},"whenFilesAreAddedOrModified",{"type":41,"tag":1007,"props":1048,"children":1049},{},[1050],{"type":47,"value":1021},{"type":41,"tag":1007,"props":1052,"children":1053},{},[1054,1055,1060],{"type":47,"value":1026},{"type":41,"tag":66,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":47,"value":935},{"type":47,"value":1033},{"type":41,"tag":980,"props":1062,"children":1063},{},[1064,1075,1080],{"type":41,"tag":1007,"props":1065,"children":1066},{},[1067,1069],{"type":47,"value":1068},"Azure Blob ",{"type":41,"tag":66,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":47,"value":1074},"whenABlobIsAddedOrModified",{"type":41,"tag":1007,"props":1076,"children":1077},{},[1078],{"type":47,"value":1079},"Blob metadata (path, URI)",{"type":41,"tag":1007,"props":1081,"children":1082},{},[1083,1084,1090],{"type":47,"value":1026},{"type":41,"tag":66,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":47,"value":1089},"readBlob",{"type":47,"value":1033},{"type":41,"tag":980,"props":1092,"children":1093},{},[1094,1099,1104],{"type":41,"tag":1007,"props":1095,"children":1096},{},[1097],{"type":47,"value":1098},"HTTP Request",{"type":41,"tag":1007,"props":1100,"children":1101},{},[1102],{"type":47,"value":1103},"Full request body",{"type":41,"tag":1007,"props":1105,"children":1106},{},[1107,1112],{"type":41,"tag":66,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":47,"value":850},{"type":47,"value":1113}," directly",{"type":41,"tag":980,"props":1115,"children":1116},{},[1117,1127,1132],{"type":41,"tag":1007,"props":1118,"children":1119},{},[1120,1122],{"type":47,"value":1121},"Service Bus ",{"type":41,"tag":66,"props":1123,"children":1125},{"className":1124},[],[1126],{"type":47,"value":955},{"type":41,"tag":1007,"props":1128,"children":1129},{},[1130],{"type":47,"value":1131},"Message content + properties",{"type":41,"tag":1007,"props":1133,"children":1134},{},[1135,1141],{"type":41,"tag":66,"props":1136,"children":1138},{"className":1137},[],[1139],{"type":47,"value":1140},"triggerBody()?['contentData']",{"type":47,"value":1113},{"type":41,"tag":980,"props":1143,"children":1144},{},[1145,1155,1160],{"type":41,"tag":1007,"props":1146,"children":1147},{},[1148,1149],{"type":47,"value":1121},{"type":41,"tag":66,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":47,"value":1154},"peekLockQueueMessagesV2",{"type":41,"tag":1007,"props":1156,"children":1157},{},[1158],{"type":47,"value":1159},"Array of message metadata",{"type":41,"tag":1007,"props":1161,"children":1162},{},[1163,1164,1170],{"type":47,"value":1026},{"type":41,"tag":66,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":47,"value":1169},"completeMessage",{"type":47,"value":1171}," after processing",{"type":41,"tag":980,"props":1173,"children":1174},{},[1175,1186,1191],{"type":41,"tag":1007,"props":1176,"children":1177},{},[1178,1180],{"type":47,"value":1179},"FTP\u002FSFTP ",{"type":41,"tag":66,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":47,"value":1185},"whenFileIsAdded",{"type":41,"tag":1007,"props":1187,"children":1188},{},[1189],{"type":47,"value":1190},"File metadata",{"type":41,"tag":1007,"props":1192,"children":1193},{},[1194,1195,1200],{"type":47,"value":1026},{"type":41,"tag":66,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":47,"value":935},{"type":47,"value":1033},{"type":41,"tag":980,"props":1202,"children":1203},{},[1204,1209,1214],{"type":41,"tag":1007,"props":1205,"children":1206},{},[1207],{"type":47,"value":1208},"Recurrence \u002F Timer",{"type":41,"tag":1007,"props":1210,"children":1211},{},[1212],{"type":47,"value":1213},"No body",{"type":41,"tag":1007,"props":1215,"children":1216},{},[1217],{"type":47,"value":1218},"N\u002FA — use actions to fetch data",{"type":41,"tag":310,"props":1220,"children":1222},{"id":1221},"_53-rule",[1223],{"type":47,"value":1224},"5.3 Rule",{"type":41,"tag":234,"props":1226,"children":1227},{},[1228,1238,1262],{"type":41,"tag":102,"props":1229,"children":1230},{},[1231,1236],{"type":41,"tag":58,"props":1232,"children":1233},{},[1234],{"type":47,"value":1235},"If trigger returns metadata\u002Fpath",{"type":47,"value":1237},": Add a content-reading action BEFORE any XmlParse, Parse JSON, Compose, or processing action.",{"type":41,"tag":102,"props":1239,"children":1240},{},[1241,1246,1248,1253,1254,1260],{"type":41,"tag":58,"props":1242,"children":1243},{},[1244],{"type":47,"value":1245},"If trigger returns content directly",{"type":47,"value":1247},": Use ",{"type":41,"tag":66,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":47,"value":850},{"type":47,"value":844},{"type":41,"tag":66,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":47,"value":1259},"triggerOutputs()?['body']",{"type":47,"value":1261}," in downstream actions.",{"type":41,"tag":102,"props":1263,"children":1264},{},[1265,1270],{"type":41,"tag":58,"props":1266,"children":1267},{},[1268],{"type":47,"value":1269},"If unsure",{"type":47,"value":1271},": Check BOTH the reference workflow AND the reference docs. If the reference workflow has a read-content action after the trigger, or the docs show the trigger returns metadata rather than content, you need a content-reading action too.",{"type":41,"tag":75,"props":1273,"children":1274},{},[],{"type":41,"tag":79,"props":1276,"children":1278},{"id":1277},"_6-11-flow-to-workflow-rule",[1279],{"type":47,"value":1280},"6. 1:1 Flow to Workflow Rule",{"type":41,"tag":234,"props":1282,"children":1283},{},[1284,1289,1301],{"type":41,"tag":102,"props":1285,"children":1286},{},[1287],{"type":47,"value":1288},"Every flow (including sub-processes with significant logic) MUST be a separate workflow.",{"type":41,"tag":102,"props":1290,"children":1291},{},[1292,1294,1299],{"type":47,"value":1293},"Use the ",{"type":41,"tag":66,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":47,"value":439},{"type":47,"value":1300}," action type to invoke child workflows from parent workflows.",{"type":41,"tag":102,"props":1302,"children":1303},{},[1304],{"type":47,"value":1305},"Do NOT convert flows to local functions.",{"type":41,"tag":75,"props":1307,"children":1308},{},[],{"type":41,"tag":79,"props":1310,"children":1312},{"id":1311},"_7-plan-adherence",[1313],{"type":47,"value":1314},"7. Plan Adherence",{"type":41,"tag":54,"props":1316,"children":1317},{},[1318],{"type":47,"value":1319},"When fixing any errors in workflow.json:",{"type":41,"tag":234,"props":1321,"children":1322},{},[1323,1328,1333,1338],{"type":41,"tag":102,"props":1324,"children":1325},{},[1326],{"type":47,"value":1327},"Do NOT deviate from the planned design.",{"type":41,"tag":102,"props":1329,"children":1330},{},[1331],{"type":47,"value":1332},"Do NOT add\u002Fremove actions, change triggers, switch connectors, or alter schemas.",{"type":41,"tag":102,"props":1334,"children":1335},{},[1336],{"type":47,"value":1337},"Before any fix, re-read the planning results to verify compliance.",{"type":41,"tag":102,"props":1339,"children":1340},{},[1341],{"type":47,"value":1342},"If a fix requires changing the design, STOP and report to the user.",{"type":41,"tag":75,"props":1344,"children":1345},{},[],{"type":41,"tag":79,"props":1347,"children":1349},{"id":1348},"_8-scenario-specific-action-overrides",[1350],{"type":47,"value":1351},"8. Scenario-Specific Action Overrides",{"type":41,"tag":54,"props":1353,"children":1354},{},[1355],{"type":47,"value":1356},"These overrides are deterministic — apply them directly without asking the user.",{"type":41,"tag":310,"props":1358,"children":1360},{"id":1359},"_81-xml-field-extraction",[1361],{"type":47,"value":1362},"8.1 XML Field Extraction",{"type":41,"tag":54,"props":1364,"children":1365},{},[1366],{"type":47,"value":1367},"When extracting fields from an XML message body:",{"type":41,"tag":98,"props":1369,"children":1370},{},[1371,1402],{"type":41,"tag":102,"props":1372,"children":1373},{},[1374,1379,1380,1386,1388,1394,1396],{"type":41,"tag":58,"props":1375,"children":1376},{},[1377],{"type":47,"value":1378},"FIRST",{"type":47,"value":1247},{"type":41,"tag":66,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":47,"value":1385},"XmlParse",{"type":47,"value":1387}," built-in action with the schema from ",{"type":41,"tag":66,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":47,"value":1393},"Artifacts\u002FSchemas\u002F",{"type":47,"value":1395},". This validates and extracts XML fields in one step. Access fields via: ",{"type":41,"tag":66,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":47,"value":1401},"body('Parse_XML')?['Root']?['fieldName']",{"type":41,"tag":102,"props":1403,"children":1404},{},[1405,1410,1412,1418],{"type":41,"tag":58,"props":1406,"children":1407},{},[1408],{"type":47,"value":1409},"ONLY IF",{"type":47,"value":1411}," no schema exists and cannot be generated: fall back to ",{"type":41,"tag":66,"props":1413,"children":1415},{"className":1414},[],[1416],{"type":47,"value":1417},"xpath()",{"type":47,"value":1419}," expressions.",{"type":41,"tag":54,"props":1421,"children":1422},{},[1423,1425,1430],{"type":47,"value":1424},"Do NOT use ",{"type":41,"tag":66,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":47,"value":1417},{"type":47,"value":1431}," when an XSD schema is available — XmlParse is a level-1 built-in action and MUST be preferred over level-2 expressions per the Component Priority Ladder.",{"type":41,"tag":310,"props":1433,"children":1435},{"id":1434},"_82-xml-schema-validation",[1436],{"type":47,"value":1437},"8.2 XML Schema Validation",{"type":41,"tag":54,"props":1439,"children":1440},{},[1441],{"type":47,"value":1442},"When validating incoming XML against a schema:",{"type":41,"tag":234,"props":1444,"children":1445},{},[1446],{"type":41,"tag":102,"props":1447,"children":1448},{},[1449,1451,1457],{"type":47,"value":1450},"Use ",{"type":41,"tag":66,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":47,"value":1456},"XmlValidation",{"type":47,"value":1458}," built-in action — do NOT write custom validation logic or skip validation.",{"type":41,"tag":310,"props":1460,"children":1462},{"id":1461},"_83-xml-transformation",[1463],{"type":47,"value":1464},"8.3 XML Transformation",{"type":41,"tag":54,"props":1466,"children":1467},{},[1468],{"type":47,"value":1469},"When transforming XML documents:",{"type":41,"tag":234,"props":1471,"children":1472},{},[1473],{"type":41,"tag":102,"props":1474,"children":1475},{},[1476,1477,1483,1485,1491],{"type":47,"value":1450},{"type":41,"tag":66,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":47,"value":1482},"Xslt",{"type":47,"value":1484}," (Transform XML) built-in action with maps from ",{"type":41,"tag":66,"props":1486,"children":1488},{"className":1487},[],[1489],{"type":47,"value":1490},"Artifacts\u002FMaps\u002F",{"type":47,"value":1492}," — do NOT use Compose + string manipulation.",{"type":41,"tag":310,"props":1494,"children":1496},{"id":1495},"_84-output-xml-construction",[1497],{"type":47,"value":1498},"8.4 Output XML Construction",{"type":41,"tag":54,"props":1500,"children":1501},{},[1502],{"type":47,"value":1503},"When constructing XML output documents:",{"type":41,"tag":234,"props":1505,"children":1506},{},[1507,1523,1591,1617,1630],{"type":41,"tag":102,"props":1508,"children":1509},{},[1510,1514,1515,1521],{"type":41,"tag":58,"props":1511,"children":1512},{},[1513],{"type":47,"value":1378},{"type":47,"value":1247},{"type":41,"tag":66,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":47,"value":1520},"XmlCompose",{"type":47,"value":1522}," built-in action (XML Operations) to compose XML from structured data. This assembles XML output from structured fields.",{"type":41,"tag":102,"props":1524,"children":1525},{},[1526,1531,1533,1538,1540,1545,1547,1552,1554,1559,1561,1567,1569,1575,1576,1582,1584,1589],{"type":41,"tag":66,"props":1527,"children":1529},{"className":1528},[],[1530],{"type":47,"value":1520},{"type":47,"value":1532}," can reference schemas from ",{"type":41,"tag":58,"props":1534,"children":1535},{},[1536],{"type":47,"value":1537},"either",{"type":47,"value":1539}," the local ",{"type":41,"tag":66,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":47,"value":1393},{"type":47,"value":1546}," folder ",{"type":41,"tag":58,"props":1548,"children":1549},{},[1550],{"type":47,"value":1551},"or",{"type":47,"value":1553}," an ",{"type":41,"tag":58,"props":1555,"children":1556},{},[1557],{"type":47,"value":1558},"Integration Account",{"type":47,"value":1560}," — select the source via the ",{"type":41,"tag":66,"props":1562,"children":1564},{"className":1563},[],[1565],{"type":47,"value":1566},"Source",{"type":47,"value":1568}," parameter (",{"type":41,"tag":66,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":47,"value":1574},"LogicApp",{"type":47,"value":844},{"type":41,"tag":66,"props":1577,"children":1579},{"className":1578},[],[1580],{"type":47,"value":1581},"IntegrationAccount",{"type":47,"value":1583},"). If the flow uses the Integration Account model, use ",{"type":41,"tag":66,"props":1585,"children":1587},{"className":1586},[],[1588],{"type":47,"value":1581},{"type":47,"value":1590}," as the source.",{"type":41,"tag":102,"props":1592,"children":1593},{},[1594,1596,1602,1603,1609,1611,1616],{"type":47,"value":1595},"If the source uses .NET code to build XML (e.g. ",{"type":41,"tag":66,"props":1597,"children":1599},{"className":1598},[],[1600],{"type":47,"value":1601},"XmlDocument",{"type":47,"value":533},{"type":41,"tag":66,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":47,"value":1608},"XElement",{"type":47,"value":1610},") with complex business logic, use a ",{"type":41,"tag":58,"props":1612,"children":1613},{},[1614],{"type":47,"value":1615},".NET local function",{"type":47,"value":522},{"type":41,"tag":102,"props":1618,"children":1619},{},[1620,1622,1628],{"type":47,"value":1621},"If the output is a simple static template with field substitution, ",{"type":41,"tag":66,"props":1623,"children":1625},{"className":1624},[],[1626],{"type":47,"value":1627},"Compose",{"type":47,"value":1629}," is acceptable.",{"type":41,"tag":102,"props":1631,"children":1632},{},[1633,1635,1640,1642,1648,1650,1655],{"type":47,"value":1634},"Do NOT approximate XML construction with ",{"type":41,"tag":66,"props":1636,"children":1638},{"className":1637},[],[1639],{"type":47,"value":1627},{"type":47,"value":1641}," + ",{"type":41,"tag":66,"props":1643,"children":1645},{"className":1644},[],[1646],{"type":47,"value":1647},"concat()",{"type":47,"value":1649}," when ",{"type":41,"tag":66,"props":1651,"children":1653},{"className":1652},[],[1654],{"type":47,"value":1520},{"type":47,"value":1656}," or a local function is more appropriate.",{"type":41,"tag":310,"props":1658,"children":1660},{"id":1659},"_85-edi-decode-output-handling",[1661],{"type":47,"value":1662},"8.5 EDI Decode Output Handling",{"type":41,"tag":50,"props":1664,"children":1665},{},[1666],{"type":41,"tag":54,"props":1667,"children":1668},{},[1669,1674,1676,1682,1684,1690,1692,1697,1699,1705,1707,1712],{"type":41,"tag":58,"props":1670,"children":1671},{},[1672],{"type":47,"value":1673},"⚠️ CRITICAL",{"type":47,"value":1675},": The EDIFACT ",{"type":41,"tag":66,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":47,"value":1681},"EdifactDecode",{"type":47,"value":1683}," and X12 ",{"type":41,"tag":66,"props":1685,"children":1687},{"className":1686},[],[1688],{"type":47,"value":1689},"X12Decode",{"type":47,"value":1691}," built-in actions return ",{"type":41,"tag":58,"props":1693,"children":1694},{},[1695],{"type":47,"value":1696},"JSON",{"type":47,"value":1698},", not XML. If a downstream action or function expects XML (e.g. ",{"type":41,"tag":66,"props":1700,"children":1702},{"className":1701},[],[1703],{"type":47,"value":1704},"XmlDocument.LoadXml()",{"type":47,"value":1706},"), you MUST add an ",{"type":41,"tag":66,"props":1708,"children":1710},{"className":1709},[],[1711],{"type":47,"value":1520},{"type":47,"value":1713}," action after the decode action to convert the JSON back to XML using the appropriate message schema.",{"type":41,"tag":54,"props":1715,"children":1716},{},[1717],{"type":47,"value":1718},"Pattern:",{"type":41,"tag":620,"props":1720,"children":1724},{"className":1721,"code":1723,"language":47},[1722],"language-text","Decode_EDIFACT (EdifactDecode) → JSON output\n  → Compose_EDIFACT_XML (XmlCompose, Source: IntegrationAccount, Schema: message schema) → XML output\n    → downstream action expecting XML\n",[1725],{"type":41,"tag":66,"props":1726,"children":1727},{"__ignoreMap":625},[1728],{"type":47,"value":1723},{"type":41,"tag":54,"props":1730,"children":1731},{},[1732],{"type":47,"value":1733},"Do NOT pass the JSON decode output directly to XML-expecting code. Do NOT try to parse the JSON as XML — it will fail with \"Data at the root level is invalid\".",{"type":41,"tag":310,"props":1735,"children":1737},{"id":1736},"_86-json-parsing",[1738],{"type":47,"value":1739},"8.6 JSON Parsing",{"type":41,"tag":54,"props":1741,"children":1742},{},[1743],{"type":47,"value":1744},"When parsing JSON payloads:",{"type":41,"tag":234,"props":1746,"children":1747},{},[1748],{"type":41,"tag":102,"props":1749,"children":1750},{},[1751,1752,1758,1760,1766],{"type":47,"value":1450},{"type":41,"tag":66,"props":1753,"children":1755},{"className":1754},[],[1756],{"type":47,"value":1757},"Parse JSON",{"type":47,"value":1759}," built-in action — do NOT use ",{"type":41,"tag":66,"props":1761,"children":1763},{"className":1762},[],[1764],{"type":47,"value":1765},"json()",{"type":47,"value":1767}," expression for structured access.",{"type":41,"tag":75,"props":1769,"children":1770},{},[],{"type":41,"tag":79,"props":1772,"children":1774},{"id":1773},"_9-pre-finalize-validation-checklist",[1775],{"type":47,"value":1776},"9. Pre-Finalize Validation Checklist",{"type":41,"tag":54,"props":1778,"children":1779},{},[1780],{"type":47,"value":1781},"Before storing workflow definitions, cross-check EVERY action against this table. If ANY row in the \"DON'T\" column matches your output, fix it before proceeding.",{"type":41,"tag":972,"props":1783,"children":1784},{},[1785,1806],{"type":41,"tag":976,"props":1786,"children":1787},{},[1788],{"type":41,"tag":980,"props":1789,"children":1790},{},[1791,1796,1801],{"type":41,"tag":984,"props":1792,"children":1793},{},[1794],{"type":47,"value":1795},"Scenario",{"type":41,"tag":984,"props":1797,"children":1798},{},[1799],{"type":47,"value":1800},"DO (correct)",{"type":41,"tag":984,"props":1802,"children":1803},{},[1804],{"type":47,"value":1805},"DON'T (wrong — fix before storing)",{"type":41,"tag":1000,"props":1807,"children":1808},{},[1809,1827,1864,1892,1915,1943,1977,2001,2029,2056,2084,2102,2126],{"type":41,"tag":980,"props":1810,"children":1811},{},[1812,1817,1822],{"type":41,"tag":1007,"props":1813,"children":1814},{},[1815],{"type":47,"value":1816},"Trigger output assumption",{"type":41,"tag":1007,"props":1818,"children":1819},{},[1820],{"type":47,"value":1821},"Verify trigger return type from ref",{"type":41,"tag":1007,"props":1823,"children":1824},{},[1825],{"type":47,"value":1826},"Assume trigger returns file\u002Fmessage content directly",{"type":41,"tag":980,"props":1828,"children":1829},{},[1830,1835,1853],{"type":41,"tag":1007,"props":1831,"children":1832},{},[1833],{"type":47,"value":1834},"File\u002FBlob\u002FFTP trigger",{"type":41,"tag":1007,"props":1836,"children":1837},{},[1838,1839,1844,1846,1851],{"type":47,"value":1026},{"type":41,"tag":66,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":47,"value":935},{"type":47,"value":1845},"\u002F",{"type":41,"tag":66,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":47,"value":1089},{"type":47,"value":1852}," action after trigger",{"type":41,"tag":1007,"props":1854,"children":1855},{},[1856,1857,1862],{"type":47,"value":1450},{"type":41,"tag":66,"props":1858,"children":1860},{"className":1859},[],[1861],{"type":47,"value":850},{"type":47,"value":1863}," for content (it only has metadata)",{"type":41,"tag":980,"props":1865,"children":1866},{},[1867,1872,1882],{"type":41,"tag":1007,"props":1868,"children":1869},{},[1870],{"type":47,"value":1871},"XML field extraction",{"type":41,"tag":1007,"props":1873,"children":1874},{},[1875,1880],{"type":41,"tag":66,"props":1876,"children":1878},{"className":1877},[],[1879],{"type":47,"value":1385},{"type":47,"value":1881}," action + schema",{"type":41,"tag":1007,"props":1883,"children":1884},{},[1885,1890],{"type":41,"tag":66,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":47,"value":1417},{"type":47,"value":1891}," expression when schema exists",{"type":41,"tag":980,"props":1893,"children":1894},{},[1895,1900,1910],{"type":41,"tag":1007,"props":1896,"children":1897},{},[1898],{"type":47,"value":1899},"XML validation",{"type":41,"tag":1007,"props":1901,"children":1902},{},[1903,1908],{"type":41,"tag":66,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":47,"value":1456},{"type":47,"value":1909}," action",{"type":41,"tag":1007,"props":1911,"children":1912},{},[1913],{"type":47,"value":1914},"Skip validation or custom code",{"type":41,"tag":980,"props":1916,"children":1917},{},[1918,1923,1933],{"type":41,"tag":1007,"props":1919,"children":1920},{},[1921],{"type":47,"value":1922},"XML transformation",{"type":41,"tag":1007,"props":1924,"children":1925},{},[1926,1931],{"type":41,"tag":66,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":47,"value":1482},{"type":47,"value":1932}," action + map file",{"type":41,"tag":1007,"props":1934,"children":1935},{},[1936,1941],{"type":41,"tag":66,"props":1937,"children":1939},{"className":1938},[],[1940],{"type":47,"value":1627},{"type":47,"value":1942}," + string concat",{"type":41,"tag":980,"props":1944,"children":1945},{},[1946,1951,1961],{"type":41,"tag":1007,"props":1947,"children":1948},{},[1949],{"type":47,"value":1950},"XML output assembly",{"type":41,"tag":1007,"props":1952,"children":1953},{},[1954,1959],{"type":41,"tag":66,"props":1955,"children":1957},{"className":1956},[],[1958],{"type":47,"value":1520},{"type":47,"value":1960}," action (Source: LogicApp or IntegrationAccount)",{"type":41,"tag":1007,"props":1962,"children":1963},{},[1964,1969,1970,1975],{"type":41,"tag":66,"props":1965,"children":1967},{"className":1966},[],[1968],{"type":47,"value":1627},{"type":47,"value":1641},{"type":41,"tag":66,"props":1971,"children":1973},{"className":1972},[],[1974],{"type":47,"value":1647},{"type":47,"value":1976}," for XML",{"type":41,"tag":980,"props":1978,"children":1979},{},[1980,1985,1996],{"type":41,"tag":1007,"props":1981,"children":1982},{},[1983],{"type":47,"value":1984},"EDI decode → XML needed",{"type":41,"tag":1007,"props":1986,"children":1987},{},[1988,1989,1994],{"type":47,"value":1026},{"type":41,"tag":66,"props":1990,"children":1992},{"className":1991},[],[1993],{"type":47,"value":1520},{"type":47,"value":1995}," after EdifactDecode\u002FX12Decode",{"type":41,"tag":1007,"props":1997,"children":1998},{},[1999],{"type":47,"value":2000},"Pass JSON decode output directly to XML-expecting code",{"type":41,"tag":980,"props":2002,"children":2003},{},[2004,2009,2013],{"type":41,"tag":1007,"props":2005,"children":2006},{},[2007],{"type":47,"value":2008},"Complex XML with .NET logic",{"type":41,"tag":1007,"props":2010,"children":2011},{},[2012],{"type":47,"value":1615},{"type":41,"tag":1007,"props":2014,"children":2015},{},[2016,2021,2022,2027],{"type":41,"tag":66,"props":2017,"children":2019},{"className":2018},[],[2020],{"type":47,"value":1627},{"type":47,"value":1641},{"type":41,"tag":66,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":47,"value":1647},{"type":47,"value":2028}," approximation",{"type":41,"tag":980,"props":2030,"children":2031},{},[2032,2037,2046],{"type":41,"tag":1007,"props":2033,"children":2034},{},[2035],{"type":47,"value":2036},"JSON parsing",{"type":41,"tag":1007,"props":2038,"children":2039},{},[2040,2045],{"type":41,"tag":66,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":47,"value":1757},{"type":47,"value":1909},{"type":41,"tag":1007,"props":2047,"children":2048},{},[2049,2054],{"type":41,"tag":66,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":47,"value":1765},{"type":47,"value":2055}," expression for structured access",{"type":41,"tag":980,"props":2057,"children":2058},{},[2059,2064,2074],{"type":41,"tag":1007,"props":2060,"children":2061},{},[2062],{"type":47,"value":2063},"Array trigger debatching",{"type":41,"tag":1007,"props":2065,"children":2066},{},[2067,2072],{"type":41,"tag":66,"props":2068,"children":2070},{"className":2069},[],[2071],{"type":47,"value":608},{"type":47,"value":2073}," on trigger",{"type":41,"tag":1007,"props":2075,"children":2076},{},[2077,2082],{"type":41,"tag":66,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":47,"value":616},{"type":47,"value":2083}," loop wrapping all actions",{"type":41,"tag":980,"props":2085,"children":2086},{},[2087,2092,2097],{"type":41,"tag":1007,"props":2088,"children":2089},{},[2090],{"type":47,"value":2091},"File trigger cleanup",{"type":41,"tag":1007,"props":2093,"children":2094},{},[2095],{"type":47,"value":2096},"Do nothing (no delete)",{"type":41,"tag":1007,"props":2098,"children":2099},{},[2100],{"type":47,"value":2101},"Delete\u002Farchive trigger input file",{"type":41,"tag":980,"props":2103,"children":2104},{},[2105,2110,2121],{"type":41,"tag":1007,"props":2106,"children":2107},{},[2108],{"type":47,"value":2109},"sub-process (via process-call)",{"type":41,"tag":1007,"props":2111,"children":2112},{},[2113,2115,2120],{"type":47,"value":2114},"Separate workflow + ",{"type":41,"tag":66,"props":2116,"children":2118},{"className":2117},[],[2119],{"type":47,"value":439},{"type":47,"value":1909},{"type":41,"tag":1007,"props":2122,"children":2123},{},[2124],{"type":47,"value":2125},"Merge into parent or local function",{"type":41,"tag":980,"props":2127,"children":2128},{},[2129,2134,2138],{"type":41,"tag":1007,"props":2130,"children":2131},{},[2132],{"type":47,"value":2133},"Custom source code",{"type":41,"tag":1007,"props":2135,"children":2136},{},[2137],{"type":47,"value":1615},{"type":41,"tag":1007,"props":2139,"children":2140},{},[2141],{"type":47,"value":2142},"Expressions or inline approximation",{"type":41,"tag":2144,"props":2145,"children":2146},"style",{},[2147],{"type":47,"value":2148},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2150,"total":2257},[2151,2168,2188,2199,2216,2232,2242],{"slug":2152,"name":2152,"fn":2153,"description":2154,"org":2155,"tags":2156,"stars":24,"repoUrl":25,"updatedAt":2167},"analyse-source-design","analyze TIBCO flow architecture","Rules for analysing a single TIBCO flow group's architecture. Covers source file reading depth, Mermaid diagram rules, flow\u002Fsub-process rendering, processor mapping priority ladder, and the required multi-step store tool sequence.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2157,2160,2161,2164],{"name":2158,"slug":2159,"type":14},"Architecture","architecture",{"name":11,"slug":8,"type":14},{"name":2162,"slug":2163,"type":14},"Code Analysis","code-analysis",{"name":2165,"slug":2166,"type":14},"Diagrams","diagrams","2026-07-12T08:19:15.81605",{"slug":2169,"name":2169,"fn":2170,"description":2171,"org":2172,"tags":2173,"stars":24,"repoUrl":25,"updatedAt":2187},"cloud-deployment-and-testing","deploy and test Azure Logic Apps","Rules for optional cloud deployment and testing of Logic Apps Standard projects. Covers ARM\u002FBicep generation, deployment method, app settings management, cloud test execution, and reporting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2174,2175,2178,2181,2184],{"name":11,"slug":8,"type":14},{"name":2176,"slug":2177,"type":14},"Bicep","bicep",{"name":2179,"slug":2180,"type":14},"Deployment","deployment",{"name":2182,"slug":2183,"type":14},"Reporting","reporting",{"name":2185,"slug":2186,"type":14},"Testing","testing","2026-07-12T08:20:12.210407",{"slug":2189,"name":2189,"fn":2190,"description":2191,"org":2192,"tags":2193,"stars":24,"repoUrl":25,"updatedAt":2198},"connections-json-generation-rules","generate connections.json files for Logic Apps","Rules for generating connections.json files for Logic Apps Standard. Covers serviceProviderConnections format, mandatory reference lookup, FileSystem mountPath rule, and connector parameter constraints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2194,2195,2196,2197],{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":22,"slug":23,"type":14},"2026-07-12T08:20:28.730402",{"slug":2200,"name":2200,"fn":2201,"description":2202,"org":2203,"tags":2204,"stars":24,"repoUrl":25,"updatedAt":2215},"conversion-task-plan-rules","generate ordered conversion task plans","Rules for generating ordered conversion task plans. Covers mandatory task ordering, required task types, descriptive task ID rules, optional vs non-optional tasks, output path conventions, and what each task must contain.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2205,2206,2209,2212],{"name":11,"slug":8,"type":14},{"name":2207,"slug":2208,"type":14},"Migration","migration",{"name":2210,"slug":2211,"type":14},"Operations","operations",{"name":2213,"slug":2214,"type":14},"Planning","planning","2026-07-12T08:20:17.194993",{"slug":2217,"name":2217,"fn":2218,"description":2219,"org":2220,"tags":2221,"stars":24,"repoUrl":25,"updatedAt":2231},"dependency-and-decompilation-analysis","analyze MuleSoft dependencies and decompiled Java code","Rules for discovering, analysing, and classifying missing dependencies during MuleSoft flow analysis. Covers JAR\u002FJava decompilation, Maven dependency analysis, custom module classification, and what blocks migration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2222,2223,2224,2227,2230],{"name":11,"slug":8,"type":14},{"name":2162,"slug":2163,"type":14},{"name":2225,"slug":2226,"type":14},"Java","java",{"name":2228,"slug":2229,"type":14},"Maven","maven",{"name":2207,"slug":2208,"type":14},"2026-07-12T08:20:04.462447",{"slug":2233,"name":2233,"fn":2234,"description":2235,"org":2236,"tags":2237,"stars":24,"repoUrl":25,"updatedAt":2241},"detect-logical-groups","group MuleSoft integration artifacts","Rules for detecting and grouping MuleSoft integration artifacts into logical flow groups using flow-reference strategy. Covers flow-ref call-chain rules, fallback grouping when no sources exist, and required output fields.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2238,2239,2240],{"name":2158,"slug":2159,"type":14},{"name":11,"slug":8,"type":14},{"name":2207,"slug":2208,"type":14},"2026-07-12T08:20:08.228065",{"slug":2243,"name":2243,"fn":2244,"description":2245,"org":2246,"tags":2247,"stars":24,"repoUrl":25,"updatedAt":2256},"dotnet-local-functions-logic-apps","create .NET local functions for Logic Apps","Creates .NET local functions (custom code) for Azure Logic Apps Standard. Covers exact NuGet packages, namespaces, csproj, MSBuild targets, VS Code config, function.json, and workflow InvokeFunction patterns for both .NET 8 and .NET Framework 4.7.2.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2248,2251,2254,2255],{"name":2249,"slug":2250,"type":14},".NET","net",{"name":2252,"slug":2253,"type":14},"API Development","api-development",{"name":19,"slug":20,"type":14},{"name":11,"slug":8,"type":14},"2026-07-12T08:19:23.722956",12,{"items":2259,"total":2430},[2260,2279,2294,2311,2324,2339,2352,2367,2378,2392,2405,2418],{"slug":2261,"name":2261,"fn":2262,"description":2263,"org":2264,"tags":2265,"stars":2276,"repoUrl":2277,"updatedAt":2278},"azure-arg-external-evaluation-policy-author","author and test Azure Resource Graph policies","Use when the user wants to author, design, or test an Azure Policy that queries Azure Resource Graph (ARG) at request-time — i.e. a policy whose deny\u002Faudit decision depends on data from elsewhere in the subscription (sibling\u002Fparent resource state, RG-wide invariants, multi-hop relationships, etc.). Formally called Azure Policy External Evaluation; sometimes referred to colloquially as \"Invoke\". Drives an iterative KQL co-design loop against the user's real subscription via `az graph query`, then emits a policy definition, assignment, `.http` test flow, and an `EXPLANATION.md` companion. Read-only; never provisions anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2266,2267,2270,2273],{"name":11,"slug":8,"type":14},{"name":2268,"slug":2269,"type":14},"Compliance","compliance",{"name":2271,"slug":2272,"type":14},"Governance","governance",{"name":2274,"slug":2275,"type":14},"Policy","policy",1686,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-policy","2026-07-12T08:17:48.378432",{"slug":2280,"name":2280,"fn":2281,"description":2282,"org":2283,"tags":2284,"stars":2291,"repoUrl":2292,"updatedAt":2293},"azure-blueprints-migration","migrate Azure Blueprints to Template Specs","Use when a user needs to migrate off Azure Blueprints (definitions and\u002For assignments) to Template Specs and Deployment Stacks before the January 31, 2027 retirement. Covers inventory, export, conversion to Bicep, policy decoupling, Template Spec publishing, Deployment Stack deployment with deny-settings, validation, and cutover.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2285,2286,2287,2290],{"name":11,"slug":8,"type":14},{"name":2179,"slug":2180,"type":14},{"name":2288,"slug":2289,"type":14},"Infrastructure as Code","infrastructure-as-code",{"name":2207,"slug":2208,"type":14},260,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-blueprints","2026-07-12T08:17:49.646405",{"slug":2295,"name":2295,"fn":2296,"description":2297,"org":2298,"tags":2299,"stars":2308,"repoUrl":2309,"updatedAt":2310},"apiview-feedback-resolution","resolve APIView feedback on Azure SDKs","Analyze and resolve APIView review feedback on Azure SDK PRs. **UTILITY SKILL**. USE FOR: APIView comments, API review feedback, SDK API surface changes. DO NOT USE FOR: general code review, non-APIView feedback. INVOKES: azure-sdk-mcp:azsdk_apiview_get_comments, azure-sdk-mcp:azsdk_typespec_customized_code_update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2300,2301,2302,2305],{"name":2252,"slug":2253,"type":14},{"name":11,"slug":8,"type":14},{"name":2303,"slug":2304,"type":14},"Code Review","code-review",{"name":2306,"slug":2307,"type":14},"Documentation","documentation",133,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-tools","2026-07-12T08:17:43.350876",{"slug":2312,"name":2312,"fn":2313,"description":2314,"org":2315,"tags":2316,"stars":2308,"repoUrl":2309,"updatedAt":2323},"azsdk-common-live-and-recorded-tests","deploy resources and run Azure SDK tests","Deploy test resources and run Azure SDK tests in live, record, or playback mode. WHEN: \"run live tests\", \"run recorded tests\", \"deploy test resources\", \"record tests\", \"run tests in record mode\", \"clean up test resources\", \"run tests against live resources\". DO NOT USE FOR: writing new tests, authoring Bicep templates, playback-only test runs without resource deployment. INVOKES: azure-sdk-mcp:azsdk_package_run_tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2317,2318,2319,2322],{"name":11,"slug":8,"type":14},{"name":2179,"slug":2180,"type":14},{"name":2320,"slug":2321,"type":14},"SDK","sdk",{"name":2185,"slug":2186,"type":14},"2026-07-12T08:17:44.718943",{"slug":2325,"name":2325,"fn":2326,"description":2327,"org":2328,"tags":2329,"stars":2308,"repoUrl":2309,"updatedAt":2338},"azsdk-common-prepare-release-plan","manage Azure SDK release plan work items","Create, get, update, abandon, and link SDK PRs to release plan work items for Azure SDK releases. **UTILITY SKILL**. USE FOR: \"create release plan\", \"get release plan\", \"update release plan\", \"update API spec in release plan\", \"update SDK details in release plan\", \"abandon release plan\", \"link SDK PR to plan\", \"namespace approval\", \"check release plan status\". DO NOT USE FOR: SDK code generation, pipeline troubleshooting, API review feedback. INVOKES: azure-sdk-mcp:azsdk_create_release_plan, azure-sdk-mcp:azsdk_get_release_plan, azure-sdk-mcp:azsdk_get_release_plan_for_spec_pr, azure-sdk-mcp:azsdk_update_release_plan, azure-sdk-mcp:azsdk_update_api_spec_pull_request_in_release_plan, azure-sdk-mcp:azsdk_update_sdk_details_in_release_plan, azure-sdk-mcp:azsdk_abandon_release_plan, azure-sdk-mcp:azsdk_link_sdk_pull_request_to_release_plan, azure-sdk-mcp:azsdk_link_namespace_approval_issue.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2330,2331,2334,2337],{"name":11,"slug":8,"type":14},{"name":2332,"slug":2333,"type":14},"GitHub","github",{"name":2335,"slug":2336,"type":14},"Project Management","project-management",{"name":2320,"slug":2321,"type":14},"2026-07-12T08:17:38.345387",{"slug":2340,"name":2340,"fn":2341,"description":2342,"org":2343,"tags":2344,"stars":2308,"repoUrl":2309,"updatedAt":2351},"azsdk-common-sdk-release","release Azure SDK packages","Check release readiness and trigger the release pipeline for Azure SDK packages. **UTILITY SKILL**. USE FOR: \"release SDK\", \"trigger release\", \"check release readiness\", \"release pipeline\", \"publish package\", \"ship SDK\". DO NOT USE FOR: SDK development, code generation, pipeline debugging, release plan creation. INVOKES: azure-sdk-mcp:azsdk_release_sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2345,2346,2349,2350],{"name":11,"slug":8,"type":14},{"name":2347,"slug":2348,"type":14},"CI\u002FCD","ci-cd",{"name":2179,"slug":2180,"type":14},{"name":2320,"slug":2321,"type":14},"2026-07-12T08:17:34.27607",{"slug":2353,"name":2353,"fn":2354,"description":2355,"org":2356,"tags":2357,"stars":2308,"repoUrl":2309,"updatedAt":2366},"azure-typespec-author","author and modify Azure TypeSpec API specifications","Authors and modifies Azure TypeSpec (.tsp) API specifications. USE FOR: any TypeSpec\u002Ftsp change — api versions (add, bump, preview, stable, promote), resources, operations, models, properties, decorators, visibility, constraints, breaking changes, LRO, suppressions, operationId, spread model. Covers ARM resource-manager and data-plane services. DO NOT USE FOR: SDK generation, releasing SDK packages, or single MCP tool calls. INVOKES: azure-sdk-mcp:azsdk_typespec_generate_authoring_plan, azure-sdk-mcp:azsdk_run_typespec_validation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2358,2359,2360,2363],{"name":2252,"slug":2253,"type":14},{"name":11,"slug":8,"type":14},{"name":2361,"slug":2362,"type":14},"OpenAPI","openapi",{"name":2364,"slug":2365,"type":14},"Technical Writing","technical-writing","2026-07-12T08:17:39.603232",{"slug":2368,"name":2368,"fn":2369,"description":2370,"org":2371,"tags":2372,"stars":2308,"repoUrl":2309,"updatedAt":2377},"generate-sdk-locally","generate and test Azure SDKs locally","Generate, build, and test Azure SDKs locally from TypeSpec with automatic customization. WHEN: \"generate SDK locally\", \"build SDK\", \"run SDK tests\", \"run CI checks\", \"validate package\", \"run checks\", \"update changelog\", \"fix SDK build errors\", \"fix breaking changes\", \"resolve SDK generation errors\", \"customize TypeSpec\", \"rename SDK client\", \"rename SDK model\", \"hide operation from SDK\", \"fix analyzer errors\", \"resolve customization drift\", \"create subclient\", \"update metadata\", \"update version\". DO NOT USE FOR: publishing to package registries, CI pipeline configuration, API design review. INVOKES: azsdk_verify_setup, azsdk_package_generate_code, azsdk_package_build_code, azsdk_package_run_check, azsdk_package_run_tests, azsdk_customized_code_update, azsdk_package_update_changelog_content, azsdk_package_update_metadata, azsdk_package_update_version.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2373,2374,2375,2376],{"name":11,"slug":8,"type":14},{"name":2347,"slug":2348,"type":14},{"name":2320,"slug":2321,"type":14},{"name":2185,"slug":2186,"type":14},"2026-07-12T08:17:37.08523",{"slug":2379,"name":2379,"fn":2380,"description":2381,"org":2382,"tags":2383,"stars":2308,"repoUrl":2309,"updatedAt":2391},"markdown-token-optimizer","optimize markdown files for token efficiency","Analyze markdown files for token efficiency and reduce context-window bloat. **UTILITY SKILL**. DO NOT USE FOR: code optimization, general file editing, non-markdown files. TRIGGERS: optimize markdown, reduce tokens, token count, token bloat, too many tokens, make concise, shrink file, file too large, optimize for AI, token efficiency, verbose markdown, reduce file size. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2384,2387,2390],{"name":2385,"slug":2386,"type":14},"LLM","llm",{"name":2388,"slug":2389,"type":14},"Performance","performance",{"name":2364,"slug":2365,"type":14},"2026-07-12T08:17:42.080413",{"slug":2393,"name":2393,"fn":2394,"description":2395,"org":2396,"tags":2397,"stars":2308,"repoUrl":2309,"updatedAt":2404},"pipeline-troubleshooting","troubleshoot Azure SDK CI pipelines","Diagnose and resolve failures in Azure SDK CI and generation pipelines. **UTILITY SKILL**. USE FOR: \"pipeline failed\", \"build failure\", \"CI check failing\", \"SDK generation error\", \"reproduce pipeline locally\", \"debug SDK pipeline\". DO NOT USE FOR: local build issues without pipeline context, API design review, SDK publishing. INVOKES: azure-sdk-mcp:azsdk_analyze_pipeline, azure-sdk-mcp:azsdk_package_build_code, azure-sdk-mcp:azsdk_package_run_check.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2398,2399,2400,2403],{"name":11,"slug":8,"type":14},{"name":2347,"slug":2348,"type":14},{"name":2401,"slug":2402,"type":14},"Debugging","debugging",{"name":2320,"slug":2321,"type":14},"2026-07-12T08:17:40.821512",{"slug":2406,"name":2406,"fn":2407,"description":2408,"org":2409,"tags":2410,"stars":2308,"repoUrl":2309,"updatedAt":2417},"sensei","improve skill frontmatter compliance","**WORKFLOW SKILL** — Iteratively improve skill frontmatter compliance using the Ralph loop pattern. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"skill compliance\", \"frontmatter audit\", \"score skill\", \"check skill tokens\". INVOKES: token counting tools, test runners, git commands. FOR SINGLE OPERATIONS: use token CLI directly for counts\u002Fchecks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2411,2412,2413,2416],{"name":11,"slug":8,"type":14},{"name":2268,"slug":2269,"type":14},{"name":2414,"slug":2415,"type":14},"Process Optimization","process-optimization",{"name":2364,"slug":2365,"type":14},"2026-07-12T08:17:32.970921",{"slug":2419,"name":2419,"fn":2420,"description":2421,"org":2422,"tags":2423,"stars":2308,"repoUrl":2309,"updatedAt":2429},"skill-authoring","author agent skills for agentskills.io","Write Agent Skills that comply with the agentskills.io specification. WHEN: \"create a skill\", \"new skill\", \"write a skill\", \"skill template\", \"skill structure\", \"review skill\", \"skill PR\", \"skill compliance\", \"SKILL.md format\", \"skill frontmatter\", \"skill best practices\". DO NOT USE FOR: improving existing skills (use sensei), general documentation. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2424,2425,2428],{"name":2306,"slug":2307,"type":14},{"name":2426,"slug":2427,"type":14},"Plugin Development","plugin-development",{"name":2364,"slug":2365,"type":14},"2026-07-12T08:17:35.873862",109]