[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69BAC4GJCHR0MS5DWEK5JRC":3,"skill-same:01M69BAC4GJCHR0MS5DWEK5JRC":50},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M69BAC4GJCHR0MS5DWEK5JRC","test",null,"microsoft\u002FEmployee-Self-Service-Agent-Developer-Kit","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69B8MRC17NGDB6TFWV3247A",31,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fworkflows\u002Ftest\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[5],"2026-11-10 10:12:30",false,"# Test Workflow Skill\n\nGuides a maker through debugging a Power Automate cloud flow (workflow) behind their agent — exercising it, reading its per-action run history, localizing a fault to a specific action, and fixing the flow (or the template config it reads).\n\n**You do not drive a flow directly from this skill.** An ESS flow is triggered by Copilot Studio — a topic calls it — so you exercise it one of two ways (below) and then read the decisive surface: the **run history**, action by action. The bot reply tells you what the user saw; the flow source tells you what was authored; only the run-action view tells you what actually happened.\n\n## The debug-and-validate loop\n\nDebugging a flow is one loop, repeated until the run is clean:\n\n1. **Identify the flow** — the workflow folder and its `workflowId` (the flow GUID).\n2. **Exercise it** — in **isolation** (Power Automate manual Test with direct inputs) or **in context** (drive the topic that calls it). Isolation tells you if the fault is in the flow itself; in-context tells you if the fault is in how the topic calls it.\n3. **Read the run history** — `flow_run_inspect.py` dumps the per-action cascade. This is read-only and the decisive \"why\" surface.\n4. **Localize the fault** — the first `Failed` action + its statusCode, the scope-vs-handler trap, the skipped branch — then map the action name back to `workflow.json`.\n5. **Fix the flow** — through the `workflows\u002Fupdate` skill (edit the local working copy **and** push), or fix the **template config** the orchestrator reads. Never hand-patch the deployed flow.\n6. **Re-exercise** until the cascade is clean.\n\n**The one invariant:** inspection is read-only; every fix lands in the **flow definition or its template config**, applied through `workflows\u002Fupdate` so the local working copy and the live environment stay in sync. A flow's output shape is a contract the calling topic consumes — don't change `Respond_to_Copilot` outputs or `workflowId` without checking the topic that depends on them.\n\n## Rules\n\n- **Read-only inspection.** `flow_run_inspect.py` only GETs run history — it never invokes, patches, or deletes a flow. The only mutation path is a fix applied via `workflows\u002Fupdate`.\n- **Exercise before you inspect.** Run history only exists after the flow has run. If there is no recent run, exercise the flow first (isolated or in-context), then inspect — and allow a few seconds for eventual consistency.\n- **A `Succeeded` handler is not a `Succeeded` flow.** Read scope status, not just handler status (see the interpretation reference). This is the trap that masks a connector 400 as a generic 500.\n- **TRACK PROGRESS.** Use the todo list tool to track the loop so the maker can see where you are.\n\n## Identify the flow\n\nRecord anonymous usage telemetry (best-effort, non-blocking — no user-facing\nmessage, and it never fails the step): `python scripts\u002Femit_capability.py workflow_test`\n\nRead `.local\u002Fconfig.json` for `agent.folder` and `agent.slug`. List the workflow folders under `{agent.folder}\u002Fworkflows\u002F` — each holds a `metadata.yml` (with `workflowId`, `name`) and a `workflow.json`. Match the user's request to a folder by name or `metadata.yml` display name; if ambiguous, list them and ask. The **flow GUID** you pass to the inspector is `workflowId` from that `metadata.yml`.\n\n## Exercise the flow\n\nPick the mode by the question you're answering:\n\n- **Isolated — is the fault in the flow itself?** Have the maker open the flow in Power Automate (make.powerautomate.com → the agent's environment → Solutions → the solution containing the flow), open it, and click **Test → Manually**, supplying the inputs the flow's trigger expects. This removes the topic from the picture — a failure here is purely the flow (or the backend it calls).\n- **In context — is the fault in how the topic calls it?** Drive the topic that invokes the flow with the `topics\u002Ftest` skill (`scripts\u002Fdrive_topic.py`). This exercises the real request the topic builds and passes in. Use this when the flow tests clean in isolation but the topic still misbehaves.\n\nEither way, the flow produces a run you then inspect.\n\n**Exercise the failure inputs, not just the happy path.** By default, drive the flow with a **set** of inputs that includes its error conditions — a **missing record** (an id\u002Fkey that doesn't exist), an **unauthorized \u002F needs-consent** call, and a **malformed \u002F out-of-range** input the connector rejects — alongside the valid request. These are the runs where the scope-vs-handler trap below actually bites, and they are the ones skipped when testing by hand. Derive them from the flow's trigger inputs and the scenario's template config; run the failure inputs first.\n\n## Read the run history (the decisive surface)\n\nDump the latest run's action cascade:\n\n```\npython scripts\u002Fflow_run_inspect.py --flow \u003CworkflowId>\n```\n\nThe **environment id** is resolved automatically from the active agent's Dataverse org URL — pass `--environment \u003Cenv-guid>` only to override. The tool acquires a Flow-scoped token automatically via the kit's sign-in (set `FLOW_API_TOKEN` only to bring your own). Add `--run \u003Crun-guid>` to inspect a specific earlier run instead of the latest.\n\nInterpret the cascade with **`src\u002Freference\u002Fess-docs\u002Foperations\u002Fflow-run-inspection.md`** — read it before drawing a conclusion. The essentials:\n\n- **The first `Failed` action is usually the real fault**; everything after it is fallout. Its **statusCode** localizes why — `400` bad request body, `401`\u002F`403` auth\u002Fconsent, `404` wrong table or missing record, `429`\u002F`5xx` throttling or transient backend.\n- **A `Failed` scope with a `Succeeded` catch handler** commonly routes to a catch-all Response that returns a generic 500 and discards the handler's error body — so the user's \"something went wrong (500)\" is often a masked 400. Look at scope status, not just handler status.\n- **`Skipped` actions show the path not taken** — a skipped success branch alongside a run error branch confirms the flow took its failure path.\n\n## Localize and fix\n\nMap the failing action's `name` back to `workflow.json` and compare the intended path to the actual path — the gap is the bug. Then fix at the right layer:\n\n- **Bad request body (a `400` from the orchestrator's connector call)** — for the ESS common-orchestrator flows, the request is built from a **template config** read by `scenarioName`, not hardcoded in the flow. A missing or mis-mapped field is usually a template-config fault, not a `workflow.json` fault. Check the scenario's template config mappings first.\n- **Auth (`401`\u002F`403`)** — the connection reference isn't consented, is stale, or lacks entitlement; re-check the agent's `connectionreferences.mcs.yml` and re-consent in the environment. This is a connection fix, not a flow-logic fix.\n- **Flow logic (wrong branch, wrong mapping, missing action)** — apply the edit through the `workflows\u002Fupdate` skill so the local working copy and Copilot Studio stay in sync, then re-exercise.\n\n## Report\n\nSummarize for the maker:\n\n- How the flow was exercised (isolated \u002F in-context) and whether a run was produced.\n- The **first failing action + statusCode**, and whether the fault is in the flow, its template config, the connection, or the calling topic.\n- The concrete fix and where it belongs (`workflow.json`, template config, connection reference), and a reminder to **publish** after pushing.\n",{},"main","a1b1bbb8aaa2435985ea2242cf836acf31b8a390","solutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fworkflows\u002Ftest",19,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-13 02:21:47",{"source":7,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add microsoft\u002FEmployee-Self-Service-Agent-Developer-Kit --skill test",{"tool":42,"command":43},"bunx","bunx skills add microsoft\u002FEmployee-Self-Service-Agent-Developer-Kit --skill test",{"tool":45,"command":46},"pnpm","pnpm dlx skills add microsoft\u002FEmployee-Self-Service-Agent-Developer-Kit --skill test","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fworkflows\u002Ftest\u002FSKILL.md",true,[],[51,59,66,73,81,87],{"skillNo":52,"name":53,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":23},"01M6PJDNK6N62M11V5WPFY8PK0","servicenow-da","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fconnect\u002Fservicenow-da\u002FSKILL.md",[],[57,58],"servicenow","servicenow da",{"skillNo":60,"name":61,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":23},"01M6PJDHJHJYWRPB3NFKY8J7SY","servicenow-da-itsm","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fconnect\u002Fservicenow-da-itsm\u002FSKILL.md",[],[57,65],"servicenow da itsm",{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":23},"01M6PJD93VBG12YV42JC80VTQJ","servicenow-da-hrsd","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fconnect\u002Fservicenow-da-hrsd\u002FSKILL.md",[],[57,72],"servicenow da hrsd",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":23},"01M69BAFGZ25JSN9W1GMP16NHD","ESS-Diagnostics-Skills","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Ftools\u002FESS-Diagnostics-Skills\u002FSKILL.md",[],[79,80],"diagnostics","ESS Diagnostics Skills",{"skillNo":82,"name":83,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":23},"01M69BADVK3HC5BCARHN74EEGJ","update","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fworkflows\u002Fupdate\u002FSKILL.md",[],[83],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":23},"01M69BAARKKR3ZP2X89Q8RWMXY","delete","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FEmployee-Self-Service-Agent-Developer-Kit\u002Fblob\u002Fmain\u002Fsolutions\u002Fess-maker-skills\u002Fsrc\u002Fskills\u002Fworkflows\u002Fdelete\u002FSKILL.md",[],[89]]