mirror of
https://github.com/github/awesome-copilot.git
synced 2026-05-15 19:21:45 +00:00
Update FlowStudio Power Automate skills (#1664)
* feat(flowstudio): align Power Automate skills with MCP server v1.1.6 Foundation skill (flowstudio-power-automate-mcp) rewritten to use the server's new tool_search and list_skills meta-tools (v1.1.5+) for discovery instead of cataloging every tool by hand. Cut from 519 to 295 lines. New "Which Skill to Use When" intent-keyed decision tree points at the four specialized skills. Build/debug/governance/monitoring updated for use-case framing. Tools that genuinely cross tiers (e.g. debug skill borrowing get_store_flow_summary) are correct when the workflow needs them — the split between skills is by use-case intent, not by tool partition. Build skill: new Step 3a Resolving Dynamic Connector Values covers get_live_dynamic_options outer-parameter auto-bridge (v1.1.6+) and the AadGraph user-picker fallback via shared_office365users.SearchUserV2 (replaces broken builtInOperation:AadGraph.GetUsers). Debug skill: Outlook user-picker failure note pointing at the fallback. Monitoring skill description disambiguates from the server's monitor-flow tool bundle (runtime control of a single flow) — this skill is tenant-wide health analytics over the cached store. All 5 skills validate via npm run skill:validate; line endings LF only; codespell clean; auto-regenerated docs/README.skills.md included. * fix(flowstudio): remove deprecated tool references The v1.1.5 MCP server release marked 5 tools [DEPRECATED] but the previous alignment commit missed them. Replacements per server source: - get_live_flow_http_schema → read trigger.inputs.schema from get_live_flow - get_live_flow_trigger_url → read trigger.metadata.callbackUrl from get_live_flow - get_store_flow_trigger_url → get_store_flow.triggerUrl field - get_store_flow_errors → get_store_flow_runs(status=["Failed"]) - set_store_flow_state → set_live_flow_state Touches build, debug, governance, monitoring SKILL.md and the foundation skill's tool-reference.md. Remaining mentions of the deprecated names are intentional — they live in deprecation notices naming the obsolete wrapper alongside its replacement. * Update FlowStudio Power Automate skills * Cover latest FlowStudio MCP actions * Trim FlowStudio Power Automate skills * Number FlowStudio build workflow steps
This commit is contained in:
@@ -149,6 +149,24 @@ iterations in parallel, causing write conflicts or undefined ordering.
|
||||
|
||||
---
|
||||
|
||||
### Foreach Parent Failed After Handled Inner Failure
|
||||
|
||||
**Symptom**: Inner actions have failure handlers, but the parent `Foreach` still
|
||||
shows `Failed`, and downstream actions such as `Response` are skipped.
|
||||
|
||||
**Root cause**: A handled child failure can still mark the loop container as
|
||||
failed. Downstream `runAfter` that only accepts `Succeeded` will not run.
|
||||
|
||||
**Diagnosis**: Inspect the parent foreach with `get_live_flow_run_error`, then
|
||||
inspect child action outputs for the iteration that failed.
|
||||
|
||||
**Fix**: If partial success is acceptable, allow the downstream join/response to
|
||||
run after `Succeeded` and `Failed`, and include an explicit error summary in the
|
||||
payload. If the loop must be all-or-nothing, wrap risky inner work in a Scope and
|
||||
handle success/failure at the Scope boundary.
|
||||
|
||||
---
|
||||
|
||||
## Update / Deploy Errors
|
||||
|
||||
### `update_live_flow` Returns No-Op
|
||||
@@ -186,3 +204,20 @@ values override new_data for matching records.
|
||||
Before: @sort(union(outputs('Old_Array'), body('New_Array')), 'Date')
|
||||
After: @sort(union(body('New_Array'), outputs('Old_Array')), 'Date')
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Null Cascade in Filter Array / Query
|
||||
|
||||
**Symptom**: A lookup/filter step returns the wrong record or a later expression
|
||||
fails on null even though the filter action itself succeeded.
|
||||
|
||||
**Root cause**: The lookup key is null or empty. A condition such as
|
||||
`equals(item()?['Email'], outputs('Lookup_Email'))` can accidentally match rows
|
||||
where both sides are null, or can pass an empty array downstream.
|
||||
|
||||
**Diagnosis**: Inspect the action that creates the lookup key and the filter
|
||||
output length. Confirm the key is non-empty before trusting the filter result.
|
||||
|
||||
**Fix**: Add a non-empty guard before the filter, normalize comparison values
|
||||
with `trim()`/`toLower()`, and branch explicitly when no match is found.
|
||||
|
||||
@@ -27,6 +27,9 @@ Flow is failing
|
||||
│ ├── error.code = "ActionFailed" + message mentions HTTP
|
||||
│ │ └── ► See: HTTP Action Workflow below
|
||||
│ │
|
||||
│ ├── parent action is Foreach / Apply to each
|
||||
│ │ └── ► Inspect child actions; handled child failures can still fail the parent
|
||||
│ │
|
||||
│ └── Unknown / generic error
|
||||
│ └── ► Walk actions backwards (Step B below)
|
||||
│
|
||||
@@ -113,6 +116,9 @@ Flow succeeds but output data is wrong
|
||||
│ ├── Check foreach condition — filter may be too strict
|
||||
│ └── Check if parallel foreach caused race condition (add Sequential)
|
||||
│
|
||||
├── Filter/Query result unexpectedly matches nulls or returns empty
|
||||
│ └── Guard lookup keys before the filter; do not compare null-to-null
|
||||
│
|
||||
└── Date/time values wrong timezone
|
||||
└── Use convertTimeZone() — utcNow() is always UTC
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user