@uipath/skills 1.204.0 → 1.204.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +12 -14
- package/package.json +1 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -3
- package/skills/uipath-agents/references/coded/quickstart.md +0 -2
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +10 -8
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-human-in-the-loop/SKILL.md +1 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +2 -2
- package/skills/uipath-maestro-flow/.maintenance/README.md +265 -0
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +40 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +101 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +132 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +123 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +73 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +93 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +39 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +42 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +270 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +160 -0
- package/skills/uipath-maestro-flow/SKILL.md +69 -886
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +207 -0
- package/skills/uipath-maestro-flow/references/author/brownfield.md +91 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-cli.md +190 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +374 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +104 -0
- package/skills/uipath-maestro-flow/references/author/greenfield.md +420 -0
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +364 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +291 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +237 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/planning.md +97 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/impl.md +108 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl-inline.md +120 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +463 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/planning.md +186 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/impl.md +517 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +309 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +133 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +428 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +188 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/impl.md +83 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/planning.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/planning.md +53 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/planning.md +28 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/planning.md +58 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +181 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/planning.md +166 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-connector.md +86 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/planning.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/impl.md +540 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/impl.md +269 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/planning.md +128 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/impl.md +424 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/planning.md +95 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/impl.md +403 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/impl.md +82 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/planning.md +44 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/planning.md +93 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/impl.md +98 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/planning.md +42 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/planning.md +35 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/impl.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/planning.md +29 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +252 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/planning.md +47 -0
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +73 -0
- package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +353 -0
- package/skills/uipath-maestro-flow/references/diagnose/troubleshooting-guide.md +174 -0
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +134 -0
- package/skills/uipath-maestro-flow/references/evaluate/commands-reference.md +376 -0
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/evaluators-guide.md +143 -0
- package/skills/uipath-maestro-flow/references/evaluate/running-guide.md +215 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +77 -0
- package/skills/uipath-maestro-flow/references/operate/manage.md +39 -0
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/ship.md +57 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +100 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +269 -0
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +178 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +582 -0
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +86 -0
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +113 -0
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +787 -0
- package/skills/uipath-platform/references/integration-service/activities.md +2 -2
- package/skills/uipath-platform/references/integration-service/activity-generation.md +8 -1
- package/skills/uipath-platform/references/integration-service/triggers.md +1 -3
- package/version-manifest.json +1 -1
- package/skills/uipath-maestro-flow/examples/AquariumSafetyStop.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/ArchiveCardExtract.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/BakeOffEntryForm.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/BeeHiveLedger.flow.ts +0 -61
- package/skills/uipath-maestro-flow/examples/BeltProgression.flow.ts +0 -53
- package/skills/uipath-maestro-flow/examples/BirdCountLookup.flow.ts +0 -24
- package/skills/uipath-maestro-flow/examples/ClubDirectory.flow.ts +0 -56
- package/skills/uipath-maestro-flow/examples/ConcertSoundcheck.flow.ts +0 -59
- package/skills/uipath-maestro-flow/examples/DoorbellLog.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FestivalMapScaffold.flow.ts +0 -22
- package/skills/uipath-maestro-flow/examples/FieldTripQuickForm.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FossilCatalogEnrich.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/GallerySubmission.flow.ts +0 -67
- package/skills/uipath-maestro-flow/examples/GreenhouseWatering.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/HarbourRadioLine.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/HerbariumDispatch.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/KilnReview.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/LibraryDeskChat.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/LighthouseSignal.flow.ts +0 -30
- package/skills/uipath-maestro-flow/examples/MeteorShowerPages.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/NeighborhoodWalkPlanner.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/ObservatorySeeing.flow.ts +0 -51
- package/skills/uipath-maestro-flow/examples/OralHistoryDigest.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/PlanetariumConfirmation.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/PlantNameAdvisor.flow.ts +0 -28
- package/skills/uipath-maestro-flow/examples/PostcardCaption.flow.ts +0 -44
- package/skills/uipath-maestro-flow/examples/PotteryStudioCallback.flow.ts +0 -41
- package/skills/uipath-maestro-flow/examples/RecipeScaler.flow.ts +0 -62
- package/skills/uipath-maestro-flow/examples/SeedPacketReader.flow.ts +0 -49
- package/skills/uipath-maestro-flow/examples/TideTableConverter.flow.ts +0 -35
- package/skills/uipath-maestro-flow/examples/TrailLogSummary.flow.ts +0 -75
- package/skills/uipath-maestro-flow/examples/WorkshopInventory.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/bindings.json +0 -85
- package/skills/uipath-maestro-flow/references/CLI-LOOP.md +0 -309
- package/skills/uipath-maestro-flow/references/agent-resources.md +0 -74
- package/skills/uipath-maestro-flow/references/agent.md +0 -175
- package/skills/uipath-maestro-flow/references/agentic-process.md +0 -41
- package/skills/uipath-maestro-flow/references/api-workflow.md +0 -29
- package/skills/uipath-maestro-flow/references/author.md +0 -178
- package/skills/uipath-maestro-flow/references/batch-transform.md +0 -23
- package/skills/uipath-maestro-flow/references/bindings.md +0 -178
- package/skills/uipath-maestro-flow/references/branch.md +0 -18
- package/skills/uipath-maestro-flow/references/brownfield.md +0 -152
- package/skills/uipath-maestro-flow/references/connector-params.md +0 -624
- package/skills/uipath-maestro-flow/references/conversational.md +0 -77
- package/skills/uipath-maestro-flow/references/data-fabric.md +0 -268
- package/skills/uipath-maestro-flow/references/delay.md +0 -26
- package/skills/uipath-maestro-flow/references/diagnose.md +0 -141
- package/skills/uipath-maestro-flow/references/document-pipeline.md +0 -47
- package/skills/uipath-maestro-flow/references/error-handling.md +0 -75
- package/skills/uipath-maestro-flow/references/evaluate.md +0 -168
- package/skills/uipath-maestro-flow/references/event-trigger.md +0 -155
- package/skills/uipath-maestro-flow/references/form-trigger.md +0 -41
- package/skills/uipath-maestro-flow/references/hitl.md +0 -169
- package/skills/uipath-maestro-flow/references/http.md +0 -105
- package/skills/uipath-maestro-flow/references/inline-agent.md +0 -132
- package/skills/uipath-maestro-flow/references/ixp.md +0 -167
- package/skills/uipath-maestro-flow/references/loops.md +0 -77
- package/skills/uipath-maestro-flow/references/manual-trigger.md +0 -39
- package/skills/uipath-maestro-flow/references/operate.md +0 -204
- package/skills/uipath-maestro-flow/references/or-processes.md +0 -91
- package/skills/uipath-maestro-flow/references/parallel-merge.md +0 -21
- package/skills/uipath-maestro-flow/references/placeholder.md +0 -70
- package/skills/uipath-maestro-flow/references/published-function.md +0 -66
- package/skills/uipath-maestro-flow/references/queue.md +0 -53
- package/skills/uipath-maestro-flow/references/return.md +0 -20
- package/skills/uipath-maestro-flow/references/rpa-workflow.md +0 -27
- package/skills/uipath-maestro-flow/references/scheduled-trigger.md +0 -34
- package/skills/uipath-maestro-flow/references/script.md +0 -52
- package/skills/uipath-maestro-flow/references/subflow.md +0 -33
- package/skills/uipath-maestro-flow/references/summarize.md +0 -20
- package/skills/uipath-maestro-flow/references/switch.md +0 -20
- package/skills/uipath-maestro-flow/references/terminate.md +0 -22
- package/skills/uipath-maestro-flow/references/transform.md +0 -32
- package/skills/uipath-maestro-flow/references/voice.md +0 -70
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
# Failure Modes — Pattern Catalog
|
|
2
|
+
|
|
3
|
+
Lookup table for known recurring failure modes in Maestro Flow projects. Each entry: what the failure looks like, why it happens, how to fix it, where to read more. Use this when you have an error symptom in hand and want to identify the pattern.
|
|
4
|
+
|
|
5
|
+
> **Hot-path triage:** if you have a failed run and need to investigate from scratch, start at [troubleshooting-guide.md](troubleshooting-guide.md) (the priority ladder: incidents → variables → flow correlation → traces). This document is the **lookup catalog** — read it after the ladder identifies a known pattern, or when the symptom matches an entry below.
|
|
6
|
+
|
|
7
|
+
## Index
|
|
8
|
+
|
|
9
|
+
| Pattern | Symptom | Cause |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| [`=js:` prefix missing](#js-prefix-missing) | Activity input bound to literal string `"vars.X.output.Y"` | Missing `=js:` prefix on a `$vars` reference. `flow validate` catches this — pre-`expression-prefix-validator` cli still ships the literal at runtime. |
|
|
12
|
+
| [`variables.nodes[]` missing](#variablesnodes-missing--varsxoutput-resolves-to-undefined) | `Cannot read property 'output' of undefined` on a downstream node | Direct-authored `.flow` skipped `variables.nodes[]`; `flow validate` accepts it but the BPMN has no process-level variable declaration for the upstream node. |
|
|
13
|
+
| [Misshapen nodes in Studio Web](#misshapen-rectangle-nodes-in-studio-web) | Nodes render at the wrong size for their shape | `flow format` not run before publish |
|
|
14
|
+
| [HITL outcome port unwired](#hitl-outcome-port-unwired) | Flow hangs indefinitely after a HITL node | No outgoing edge from one of the node's `outcome-<outcome.id>` source ports |
|
|
15
|
+
| [Run reports `Completed`, work not done](#run-reports-completed-but-the-work-never-happened) | Run finishes `Completed`, but the API call / node it depended on failed | `inputs.errorHandlingEnabled: true` on a node with no handler, or an `error` edge routed back into the happy path |
|
|
16
|
+
| [Reused reference ID](#reused-reference-id--cross-connection-id-leakage) | Connector node faults silently at runtime | Reference ID copied from a prior flow's connection |
|
|
17
|
+
| [Single-nested layout](#single-nested-layout) | Studio Web upload fails; `flow init` auto-registration is skipped | `uip maestro flow init` was run with `--skip-solution-registration` (opts out of auto-scaffold + registration) |
|
|
18
|
+
| [Missing `bindings[]` on resource node](#missing-bindings-on-resource-node) | `Folder does not exist or the user does not have access to the folder` | Top-level `bindings[]` entries not added for a `uipath.core.*` resource node |
|
|
19
|
+
| [`flow validate` passes, `flow debug` faults](#flow-validate-passes-flow-debug-faults) | Local validation green, cloud run red | Multiple causes — narrower than before (the missing-`=js:` validator + expression-ref linting now catch a large slice statically). See entry for the residual triage path. |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## `=js:` prefix missing
|
|
24
|
+
|
|
25
|
+
### Symptom
|
|
26
|
+
|
|
27
|
+
A connector, HTTP, or end node receives the literal string `"vars.X.output.Y"` as its input value at runtime instead of the resolved value.
|
|
28
|
+
|
|
29
|
+
`flow validate` flags this as an error today (cli-side `expression-prefix-validator`, emitted with a remediation hint pointing at the `=js:`-prefixed form). Pre-validator cli versions miss it and the failure surfaces only at `flow debug` or in deployed runs — if you see the symptom without a corresponding validate error, your cli is older than the fix.
|
|
30
|
+
|
|
31
|
+
Example: input field set to literal `"vars.createEntityRecord1.output.Id"` instead of the entity's actual ID.
|
|
32
|
+
|
|
33
|
+
### Cause
|
|
34
|
+
|
|
35
|
+
The `=js:` prefix was omitted on a `$vars` / `$metadata` / `$self` reference inside a value field. The serializer rewrites `$vars` → `vars` whether or not the prefix is present, so a missing `=js:` yields a string that **looks like** an unevaluated expression but is actually a literal.
|
|
36
|
+
|
|
37
|
+
There is also no `nodes.X.output.Y` syntax — that is an invented form that silently ships as a literal string. `flow validate` flags this same way (rewriting the suggested fix to the `=js:$vars.X.output.Y` form).
|
|
38
|
+
|
|
39
|
+
### Fix
|
|
40
|
+
|
|
41
|
+
Add `=js:` to every `$vars`/`$metadata`/`$self` reference in:
|
|
42
|
+
|
|
43
|
+
- Connector `inputs.detail.bodyParameters` / `queryParameters` / `pathParameters`
|
|
44
|
+
- HTTP `url` / `headers` / `body`
|
|
45
|
+
- End node output `source`
|
|
46
|
+
- Variable update `expression`
|
|
47
|
+
- Loop `collection`
|
|
48
|
+
- Subflow `inputs.<id>.source`
|
|
49
|
+
|
|
50
|
+
Do **not** add `=js:` to condition expressions (decision `expression`, switch case `expression`, HTTP branch `conditionExpression`) — those are evaluated as JavaScript automatically.
|
|
51
|
+
|
|
52
|
+
### Reference
|
|
53
|
+
|
|
54
|
+
[shared/node-output-wiring.md](../shared/node-output-wiring.md) — canonical per-node-type field reference.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## `variables.nodes[]` missing → `$vars.X.output` resolves to undefined
|
|
59
|
+
|
|
60
|
+
### Symptom
|
|
61
|
+
|
|
62
|
+
A downstream script or expression reads `$vars.<sourceNodeId>.output` and gets `undefined` at runtime. Common shapes: `Cannot read property 'output' of undefined`, `Cannot read properties of undefined (reading '<field>')`, or a connector activity receiving an empty / undefined input that an upstream node should have populated. `uip maestro flow validate` accepts the file without complaint. The upstream node's own incident shows it ran successfully.
|
|
63
|
+
|
|
64
|
+
### Cause
|
|
65
|
+
|
|
66
|
+
The `.flow` file is missing `variables.nodes[]` entries for the upstream node. The BPMN emitter walks `variables.nodes[]` to write the process-level `<uipath:inputOutput id="<nodeId>.<outputId>">` declarations the runtime needs — without them, the activity's local `output` value has no process variable to flow into, and downstream `$vars` reads fail.
|
|
67
|
+
|
|
68
|
+
This happens almost exclusively on **direct-authored** `.flow` files: `uip maestro flow node add` and the canvas / Studio Web save path both auto-populate `variables.nodes[]`. `Edit` / `Write` authoring does not, and pre-fix `uip maestro flow format` did not regenerate it either. Adding an `outputs` block on the action-node instance does **not** fix this — for action nodes the BPMN emitter reads the manifest's `outputDefinition`, not the instance block, so authoring the instance block has no runtime effect.
|
|
69
|
+
|
|
70
|
+
### Fix
|
|
71
|
+
|
|
72
|
+
Run `uip maestro flow format <ProjectName>.flow --output json`. Current CLI versions regenerate `variables.nodes[]` from `nodes[]` + `definitions[]` (matching `node add` and canvas behavior). On older CLI versions, add the entries manually:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
"variables": {
|
|
76
|
+
"nodes": [
|
|
77
|
+
{
|
|
78
|
+
"id": "<nodeId>.output",
|
|
79
|
+
"type": "object",
|
|
80
|
+
"binding": { "nodeId": "<nodeId>", "outputId": "output" }
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "<nodeId>.error",
|
|
84
|
+
"type": "object",
|
|
85
|
+
"binding": { "nodeId": "<nodeId>", "outputId": "error" }
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
One entry per declared output (trigger nodes: `output` only; action nodes: `output` + `error`; end / terminate: none).
|
|
92
|
+
|
|
93
|
+
### Reference
|
|
94
|
+
|
|
95
|
+
[shared/file-format.md — Node outputs](../shared/file-format.md#node-outputs), [author/CAPABILITY.md rule #14](../author/CAPABILITY.md), [editing-operations-json.md — Pre-flight Checklist step 5–6](../author/editing-operations-json.md#pre-flight-checklist).
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Misshapen rectangle nodes in Studio Web
|
|
100
|
+
|
|
101
|
+
### Symptom
|
|
102
|
+
|
|
103
|
+
After publish or debug upload, Studio Web renders nodes at the wrong dimensions for their shape — a square/circle node stretched into an oblong (e.g., 200×80), or an inline agent squashed to a 96×96 square instead of its 288×96 rectangle. Layout looks visually broken even though the flow runs correctly.
|
|
104
|
+
|
|
105
|
+
### Cause
|
|
106
|
+
|
|
107
|
+
`uip maestro flow format` was not run before publishing or debugging. Hand-written or stale `layout` data with dimensions that don't match each node's shape remains in the `.flow` file and Studio Web renders it as-is.
|
|
108
|
+
|
|
109
|
+
### Fix
|
|
110
|
+
|
|
111
|
+
Run format before any publish or debug operation:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
uip maestro flow format <ProjectName>.flow --output json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Format:
|
|
118
|
+
|
|
119
|
+
- Sets each node's `size` by its canvas shape (inline agents → 288×96, containers → 560×320, everything else → 96×96)
|
|
120
|
+
- Arranges nodes horizontally with ELK at `nodeSpacing: 96`
|
|
121
|
+
- Recurses into subflows and rewrites `subflows[<id>].layout`
|
|
122
|
+
- Preserves sticky note custom sizes
|
|
123
|
+
|
|
124
|
+
### Reference
|
|
125
|
+
|
|
126
|
+
[author capability](../author/CAPABILITY.md) — see "Always run `flow format` after edits" in critical rules; [shared/cli-commands.md — uip maestro flow format](../shared/cli-commands.md#uip-maestro-flow-format).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## HITL outcome port unwired
|
|
131
|
+
|
|
132
|
+
### Symptom
|
|
133
|
+
|
|
134
|
+
Flow execution reaches a HITL QuickForm node, the human task is created and completed, but the flow blocks indefinitely afterward on one or more branches. No further nodes execute on the affected branch.
|
|
135
|
+
|
|
136
|
+
### Cause
|
|
137
|
+
|
|
138
|
+
A QuickForm node has one output port per outcome, named `outcome-<outcome.id>`. `outcome-completed` is a separate, zero-outcome placeholder port that disappears the instant the schema has any real outcome — it is never a real branch once outcomes exist. Either one of the real outcome ports has no outgoing edge, or the flow was wired against the stale `outcome-completed` placeholder instead of the real per-outcome ports.
|
|
139
|
+
|
|
140
|
+
### Fix
|
|
141
|
+
|
|
142
|
+
Add an edge from each `outcome-<outcome.id>` port to its next node — every outcome the schema declares needs its own edge. After running `uip maestro flow hitl add`, always wire every outcome port before validating; see [hitl/impl.md](../author/plugins/hitl/impl.md).
|
|
143
|
+
|
|
144
|
+
### Reference
|
|
145
|
+
|
|
146
|
+
[Author HITL plugin reference](../author/plugins/hitl/impl.md) — full HITL node reference including port wiring requirements.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Run reports `Completed` but the work never happened
|
|
151
|
+
|
|
152
|
+
### Symptom
|
|
153
|
+
|
|
154
|
+
`finalStatus` is `Completed` and no incident is raised, yet the flow's real effect is missing — the record was never created, the message never sent, the downstream node ran on empty or stale data. The flow "always looks successful," including on runs where a dependency was demonstrably down. Nothing shows up in `instance incidents` because, as far as the engine is concerned, nothing failed.
|
|
155
|
+
|
|
156
|
+
### Cause
|
|
157
|
+
|
|
158
|
+
The failing node has `inputs.errorHandlingEnabled: true`, which suppresses its fault instead of faulting the run. Two shapes:
|
|
159
|
+
|
|
160
|
+
1. **Flag with no handler** — the flag is set on a node with no outgoing `sourcePort: "error"` edge. The node swallows the exception and execution continues down `default` with missing output.
|
|
161
|
+
2. **Error path rejoins the happy path** — an `error` edge targets the next happy-path node, or reaches the same End node the success path reaches. The failure then runs the success path's output mappings against the failed node's empty output.
|
|
162
|
+
|
|
163
|
+
Both pass `uip maestro flow validate` — it checks structure, never whether an error path is meaningful.
|
|
164
|
+
|
|
165
|
+
### Fix
|
|
166
|
+
|
|
167
|
+
Report every node carrying the flag, and where its error path ends:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
python3 - "<ProjectName>.flow" <<'PY'
|
|
171
|
+
import json, sys
|
|
172
|
+
d = json.load(open(sys.argv[1]))
|
|
173
|
+
E = d.get("edges", []); N = {n["id"]: n for n in d.get("nodes", [])}
|
|
174
|
+
|
|
175
|
+
def targets(nid, port=None, exclude=None):
|
|
176
|
+
return [e["targetNodeId"] for e in E if e["sourceNodeId"] == nid
|
|
177
|
+
and (port is None or e.get("sourcePort") == port)
|
|
178
|
+
and (exclude is None or e.get("sourcePort") != exclude)]
|
|
179
|
+
|
|
180
|
+
def terminals(start, seen=None):
|
|
181
|
+
seen = seen or set()
|
|
182
|
+
if start in seen: return set()
|
|
183
|
+
seen.add(start)
|
|
184
|
+
if (N.get(start) or {}).get("type") in ("core.control.end", "core.logic.terminate"):
|
|
185
|
+
return {start}
|
|
186
|
+
return set().union(*[terminals(t, seen) for t in targets(start)] or [set()])
|
|
187
|
+
|
|
188
|
+
for nid, n in N.items():
|
|
189
|
+
if (n.get("inputs") or {}).get("errorHandlingEnabled") is not True: continue
|
|
190
|
+
err, ok = targets(nid, "error"), targets(nid, exclude="error")
|
|
191
|
+
if not err:
|
|
192
|
+
print(f"{nid}: flag set, NO error edge"); continue
|
|
193
|
+
ok_term = set().union(*[terminals(t) for t in ok]) if ok else set()
|
|
194
|
+
for t in err:
|
|
195
|
+
if t in ok: print(f"{nid}: error -> {t} REJOINS the happy path")
|
|
196
|
+
elif terminals(t) and terminals(t) <= ok_term:
|
|
197
|
+
print(f"{nid}: error -> {t} shares success terminal(s) {sorted(terminals(t))}")
|
|
198
|
+
else: print(f"{nid}: error -> {t} distinct terminal(s) {sorted(terminals(t))} - ok")
|
|
199
|
+
PY
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
No output means no node has the flag set — the flow is clean. Otherwise act per line:
|
|
203
|
+
|
|
204
|
+
- **`flag set, NO error edge`** (shape 1) — remove `inputs.errorHandlingEnabled` from that node. The failure then faults the run, which is the visible, correct outcome.
|
|
205
|
+
- **`REJOINS the happy path`** / **`shares success terminal(s)`** (shape 2) — repoint the `error` edge at a terminal the caller can distinguish from success: a distinct End node mapping an error/status `out` variable, or `core.logic.terminate` when recovery is impossible.
|
|
206
|
+
- **`distinct terminal(s) … - ok`** — this node's error handling is wired correctly; look elsewhere.
|
|
207
|
+
|
|
208
|
+
Re-run `uip maestro flow validate` and `uip maestro flow format` after either fix.
|
|
209
|
+
|
|
210
|
+
### Reference
|
|
211
|
+
|
|
212
|
+
- [shared/file-format.md — Default: off](../shared/file-format.md#default-off--enable-only-for-a-failure-the-flow-actually-handles) and [Do not swallow the failure](../shared/file-format.md#do-not-swallow-the-failure)
|
|
213
|
+
- [Author capability — rule #16](../author/CAPABILITY.md#critical-rules)
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Reused reference ID — cross-connection ID leakage
|
|
218
|
+
|
|
219
|
+
### Symptom
|
|
220
|
+
|
|
221
|
+
A connector node passes `flow validate` and `node configure` cleanly. At runtime (`flow debug` or deployed run), the node faults silently with no resolvable error.
|
|
222
|
+
|
|
223
|
+
Common scenarios:
|
|
224
|
+
|
|
225
|
+
- A `parentFolderId` from one Outlook mailbox used in a flow connected to a different Outlook mailbox
|
|
226
|
+
- A Slack channel ID from one workspace used in a flow connected to a different Slack workspace
|
|
227
|
+
- A Jira project key copied from a prior session
|
|
228
|
+
|
|
229
|
+
### Cause
|
|
230
|
+
|
|
231
|
+
Reference IDs (mailbox folders, Slack channels, Jira projects, Google Sheets, etc.) are **scoped to the specific authenticated account behind the connection**. They are not portable across connections, even when the connection points to the same connector type.
|
|
232
|
+
|
|
233
|
+
### Fix
|
|
234
|
+
|
|
235
|
+
Always re-resolve reference IDs against the connection bound to the current flow. Never paste a value you saw in another flow or session:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
uip is resources run list <connector-key> <objectName> --connection-id <CURRENT_CONNECTION_ID> --output json
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Reference
|
|
242
|
+
|
|
243
|
+
- [Author connector plugin — Step 4](../author/plugins/connector/impl.md)
|
|
244
|
+
- [Author connector-trigger plugin — Step 3](../author/plugins/connector-trigger/impl.md)
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Single-nested layout
|
|
249
|
+
|
|
250
|
+
### Symptom
|
|
251
|
+
|
|
252
|
+
`uip solution upload` rejects the project. The `.flow` file lives at `<Project>/<Project>.flow` (single-nested) instead of the required `<Solution>/<Project>/<Project>.flow` (double-nested). `flow init` returned `Data.SolutionRegistration.Status: "OptedOut"` (or `"NotInSolution"`). Studio Web upload fails with structural errors. Packaging fails.
|
|
253
|
+
|
|
254
|
+
### Cause
|
|
255
|
+
|
|
256
|
+
`uip maestro flow init` was run with `--skip-solution-registration`, which opts out of both auto-scaffold and registration and leaves a bare single-nested project. (Without that flag, `flow init` outside a solution now auto-scaffolds `<Project>Solution/<Project>/` and registers — `Status: Registered` — so this layout no longer happens by accident.)
|
|
257
|
+
|
|
258
|
+
### Fix
|
|
259
|
+
|
|
260
|
+
Delete the partial scaffold. Restart in the correct order — `flow init` from inside the solution directory will auto-register the project with the `.uipx`, so the explicit `uip solution projects add` step is no longer needed.
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
uip solution init "<SolutionName>" --output json
|
|
264
|
+
cd <SolutionName>
|
|
265
|
+
uip maestro flow init <ProjectName> --output json
|
|
266
|
+
# Confirm Data.SolutionRegistration.Status is "Registered" in the JSON response.
|
|
267
|
+
# Only if Status is "NotInSolution" / "Skipped" / "Failed" do you need:
|
|
268
|
+
# uip solution projects add <SolutionName>/<ProjectName> <SolutionName>/<SolutionName>.uipx
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
> **Was the broken project a Maestro Automate one?** This recipe rebuilds it, so carry `--automate` on the `flow init` above. Check before deleting: a `.maestro_automate` file in the project root means it was. Rebuilding without the flag returns a plain Flow, and nothing downstream reports the change.
|
|
272
|
+
|
|
273
|
+
After running, verify the file exists at the double-nested path. The `cd <SolutionName>` above persists across Bash calls, so anchor the check with `$(pwd)` instead of repeating `<SolutionName>/`:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
ls "$(pwd)/<ProjectName>/<ProjectName>.flow"
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
A relative `ls "<SolutionName>/<ProjectName>/<ProjectName>.flow"` here resolves to `<SolutionName>/<SolutionName>/<ProjectName>/<ProjectName>.flow` (triple-nested) and reports "no such file" even on a correctly-scaffolded solution — a false negative that turns a healthy layout into a fake bug.
|
|
280
|
+
|
|
281
|
+
If the absolute path doesn't exist, the `init` step was wrong — do not try to patch the layout by hand.
|
|
282
|
+
|
|
283
|
+
### Reference
|
|
284
|
+
|
|
285
|
+
[Author greenfield journey — Step 2](../author/greenfield.md) — the canonical scaffold sequence.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Missing `bindings[]` on resource node
|
|
290
|
+
|
|
291
|
+
### Symptom
|
|
292
|
+
|
|
293
|
+
`uip maestro flow validate` passes locally. At `uip maestro flow debug` (or in deployed runs), the resource node faults with:
|
|
294
|
+
|
|
295
|
+
```text
|
|
296
|
+
Folder does not exist or the user does not have access to the folder.
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
The error mentions a folder, but the actual cause is a missing binding entry.
|
|
300
|
+
|
|
301
|
+
### Cause
|
|
302
|
+
|
|
303
|
+
For `uipath.core.*` resource nodes (rpa, agent, flow, agentic-process, api-workflow, hitl), the registry definition carries `model.context[]` with `<bindings.{name}>` placeholders. The runtime rewrites these to `=bindings.{id}` at BPMN emit by matching `(resourceKey, name)` against the **top-level `bindings[]` array** in the `.flow` file. Without those entries, the placeholder never resolves and the runtime treats the binding as missing — surfacing as the folder-not-found error.
|
|
304
|
+
|
|
305
|
+
`flow validate` checks JSON schema and cross-references; it does not validate that resource-node `model.context[]` entries are matched by top-level `bindings[]` entries.
|
|
306
|
+
|
|
307
|
+
### Fix
|
|
308
|
+
|
|
309
|
+
Add two entries to the top-level `bindings[]` array per resource node — `name` and `folderPath` — with `resourceKey` matching the definition's `model.bindings.resourceKey`. See the relevant resource plugin's `impl.md` for the exact shape ([rpa](../author/plugins/rpa/impl.md), [agent](../author/plugins/agent/impl.md), [flow](../author/plugins/flow/impl.md), [agentic-process](../author/plugins/agentic-process/impl.md), [api-workflow](../author/plugins/api-workflow/impl.md), [hitl](../author/plugins/hitl/impl.md)).
|
|
310
|
+
|
|
311
|
+
### Reference
|
|
312
|
+
|
|
313
|
+
[shared/file-format.md — Bindings](../shared/file-format.md#bindings--orchestrator-resource-bindings-top-level-bindings)
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## `flow validate` passes, `flow debug` faults
|
|
318
|
+
|
|
319
|
+
### Symptom
|
|
320
|
+
|
|
321
|
+
Local `uip maestro flow validate` returns `Result: Success`. The same flow fails at `uip maestro flow debug` with a runtime error.
|
|
322
|
+
|
|
323
|
+
### Cause
|
|
324
|
+
|
|
325
|
+
Multiple. `flow validate` runs a JSON schema check, cross-reference checks, expression-reference linting, and a small set of structural rules.
|
|
326
|
+
|
|
327
|
+
**Caught** (each with a precise field path and remediation hint). **Error** severity exits non-zero; **warning** severity still exits **0**, so read `Data.Warnings` rather than the exit code:
|
|
328
|
+
|
|
329
|
+
- Missing `=js:` prefix on `$vars`/`$metadata`/`$self` — emitted by cli-side `expression-prefix-validator`
|
|
330
|
+
- Invented `nodes.<id>.output.<...>` syntax (same failure class) — same validator, suggests `=js:$vars.<id>.output.<...>` as the fix
|
|
331
|
+
- References to unknown variable IDs or node IDs in `=js:` expressions (`EXPR_UNRESOLVED_REF`) — flow-schema `expression-ref` rule
|
|
332
|
+
- Output-path walks that descend into a declared primitive (`type: "string"` etc.) or a schema closed with `additionalProperties: false` (`EXPR_INVALID_OUTPUT_PATH`) — flow-schema `expression-ref` rule
|
|
333
|
+
- Missing End-node output mappings for declared `out` variables (`MISSING_OUTPUT_MAPPING`, **warning** severity) — flow-schema `output-mapping` rule
|
|
334
|
+
- A `$vars.<nodeId>` read whose node is not in the reader's scope (`EXPRESSION_DIAGNOSTIC`, **warning** severity). The message prints the scope it *is* in: `Property '<nodeId>' does not exist on type '{ … }'`. Never ship it, but diagnose the runtime symptom from *why* the node is out of scope, because the three causes do not behave alike: a Decision or Switch is unreadable from anywhere downstream and reads `undefined`, silently yielding a wrong result instead of faulting ([decision/impl.md — Outputs](../author/plugins/decision/impl.md#outputs)); a node that runs *after* the reader faults instead, with `[400302]`/`[400300]` ([brownfield.md — Common edits](../author/brownfield.md#common-edits)); a node on a branch the reader is not on reads `undefined`, having never executed
|
|
335
|
+
- Connector `inputs.detail.configuration` missing, empty, missing the `essentialConfiguration` envelope, or containing invalid JSON inside the `=jsonString:` prefix — emitted with a shape hint pointing at `uip maestro flow node configure`. Re-run that command rather than hand-editing.
|
|
336
|
+
- A non-catalog activity node (`uipath.connector.custom.*`) without `inputs.inlineActivityConfiguration`, a `scriptRef` (main or lookup) with no script under `scripts`, or an `activityContext` whose `source` is not `"inline"` / whose `scriptRef` differs from the embedded one — `inline-activity` validator. Re-add the node with `node add --metadata --scripts`, or re-run `node configure`; see [connector/impl-inline.md — Validate](../author/plugins/connector/impl-inline.md#validate).
|
|
337
|
+
|
|
338
|
+
**Not caught** — these still surface only at `flow debug` or in deployed runs:
|
|
339
|
+
|
|
340
|
+
- Reused reference IDs → see [Reused reference ID](#reused-reference-id--cross-connection-id-leakage)
|
|
341
|
+
- Missing top-level `bindings[]` entries on resource nodes → see [Missing `bindings[]` on resource node](#missing-bindings-on-resource-node)
|
|
342
|
+
- HITL outcome port unwired → see [HITL outcome port unwired](#hitl-outcome-port-unwired)
|
|
343
|
+
- Stale `layout` data → see [Misshapen rectangle nodes](#misshapen-rectangle-nodes-in-studio-web) (cosmetic, not faulting)
|
|
344
|
+
- Output-path walks against **open** output schemas — HTTP response bodies, script returns, free-text agent output. The deep-path walker is permissive by design: it skips when the producer's schema doesn't authoritatively declare the field's structure, so e.g. `=js:$vars.fetchWeather.output.body.current_weather` against an HTTP node that declares only `output: { type: "object" }` passes validate and faults only when the runtime response doesn't have that path.
|
|
345
|
+
- Wrong-direction reads (reading an `out`-only variable) — currently a runtime concern; the direction discriminator isn't yet threaded into the validator context.
|
|
346
|
+
|
|
347
|
+
### Fix
|
|
348
|
+
|
|
349
|
+
Triage via the diagnostic priority ladder in [troubleshooting-guide.md](troubleshooting-guide.md). Match the incident message and faulting element to the patterns above.
|
|
350
|
+
|
|
351
|
+
### Reference
|
|
352
|
+
|
|
353
|
+
[troubleshooting-guide.md](troubleshooting-guide.md) — start there for any "passes locally, fails in cloud" scenario.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Troubleshooting Failed Flows
|
|
2
|
+
|
|
3
|
+
Diagnostic workflow for failed debug runs and deployed process runs. All commands require `uip login`.
|
|
4
|
+
|
|
5
|
+
> **`--folder-key` is required.** All `instance` and `incident get` commands require `--folder-key <FOLDER_KEY>`. Get the folder key from `uip or folders list --output json` or from the job/process context.
|
|
6
|
+
|
|
7
|
+
## Diagnostic priority
|
|
8
|
+
|
|
9
|
+
Investigate in this order — each step adds context, stop when you have enough to diagnose the root cause:
|
|
10
|
+
|
|
11
|
+
0. The failed `flow debug` response you already have (incident + fault detail, no extra call)
|
|
12
|
+
1. Incidents (error message + faulting element)
|
|
13
|
+
2. Runtime variables (data state at failure)
|
|
14
|
+
3. Flow definition correlation (map element to `.flow` node)
|
|
15
|
+
4. Traces (last resort — verbose full timeline)
|
|
16
|
+
|
|
17
|
+
## Step 0 — Read the cause in the debug output you already have
|
|
18
|
+
|
|
19
|
+
A faulted `uip maestro flow debug` response already carries the incident and the fault detail. **Do not re-run `flow debug` before you read them.** An unchanged re-run re-uploads the solution and repeats the same fault against real systems.
|
|
20
|
+
|
|
21
|
+
The response can exceed 200,000 characters. `"Result": "Failure"` and `Context.ErrorCode` (the numeric incident code) sit in the first 1,000 characters; the cause sits tens of thousands of characters deeper. Reading the head of the output and stopping tells you that the run failed, not why. Never report a faulted run as "incomplete" — report the fault code and the detail.
|
|
22
|
+
|
|
23
|
+
Two fields hold the cause:
|
|
24
|
+
|
|
25
|
+
| Field | JSON path |
|
|
26
|
+
|---|---|
|
|
27
|
+
| Fault code + faulting element | `Data.incidents[].dependentFaultCode`, `.elementId`, `.errorCode`, `.errorDetails` |
|
|
28
|
+
| Fault detail (the real message) | `Data.variables.elements[].outputs.Error.detail`, `.code` |
|
|
29
|
+
|
|
30
|
+
### Redirect stdout to a file, then extract
|
|
31
|
+
|
|
32
|
+
Logs go to stderr and JSON to stdout, so redirect stdout to keep the full response. Keep stderr visible — on a poll-budget overrun it carries the only instanceId (see [cli-conventions.md §7](../shared/cli-conventions.md#7-use-uip_log_levelinfo-for-debug-runs)).
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
UIP_LOG_LEVEL=info uip maestro flow debug <PROJECT_DIR> --output json > /tmp/flow-debug.json
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Wait for the process to exit before reading the file. `flow debug` prints its JSON only when it exits, so an empty file means the run is still going — see [operate/run.md — Debug](../operate/run.md#debug--controlled-end-to-end-run).
|
|
39
|
+
|
|
40
|
+
Extract both fields:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
jq -r '.Data.incidents[] | "\(.elementId) \(.errorCode) \(.dependentFaultCode) \(.errorDetails)"' /tmp/flow-debug.json
|
|
44
|
+
jq -r '.Data.variables.elements[] | select(.outputs.Error) | "\(.elementId) \(.outputs.Error.code) \(.outputs.Error.detail)"' /tmp/flow-debug.json
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Without `jq`:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python3 - /tmp/flow-debug.json <<'EOF'
|
|
51
|
+
import json, sys
|
|
52
|
+
data = json.load(open(sys.argv[1]))["Data"]
|
|
53
|
+
for incident in data.get("incidents", []):
|
|
54
|
+
print(incident["elementId"], incident["errorCode"], incident["dependentFaultCode"], incident["errorDetails"])
|
|
55
|
+
for element in data.get("variables", {}).get("elements", []):
|
|
56
|
+
error = element.get("outputs", {}).get("Error")
|
|
57
|
+
if error:
|
|
58
|
+
print(element["elementId"], error["code"], error["detail"])
|
|
59
|
+
EOF
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The CLI applies `--output-filter` only when a command succeeds; a faulted run prints the whole envelope.
|
|
63
|
+
|
|
64
|
+
### Match the fault code
|
|
65
|
+
|
|
66
|
+
Match `dependentFaultCode`, or the failure marker on a run that never started, to a known cause:
|
|
67
|
+
|
|
68
|
+
| Fault marker | Cause and fix |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `dependentFaultCode: AGENT_STARTUP.INPUT_VALIDATION_ERROR` | Declared `type` does not match the bound node's real output shape — the runtime strict-validates agent inputs. `detail` names the failing key and the real type (for example `input_type=list`). See [author/plugins/inline-agent/impl.md — Anti-patterns](../author/plugins/inline-agent/impl.md#anti-patterns). |
|
|
71
|
+
| `Stage: prepare-custom-debug` with `HttpStatus: 500`, and no `Data.incidents` | Debug was pointed at a shared folder with `--folder-path` or `--folder-key`. The server fails to prepare the run and no instance starts, so there is no incident to read. Re-run `flow debug` without the flag. See [operate/run.md — Debug](../operate/run.md#debug--controlled-end-to-end-run). |
|
|
72
|
+
|
|
73
|
+
No match, or `detail` is not enough → `uip maestro flow debug-instance incidents <INSTANCE_ID> --output json` returns the full backend payload (incidentId, errorDetails, AI summary). For a deployed process run, continue with Step 1.
|
|
74
|
+
|
|
75
|
+
## Step 1 — Get the instance ID
|
|
76
|
+
|
|
77
|
+
The debug output (`Data.instanceId`) or `job status` response contains the instance ID. If you only have a job key:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
uip maestro flow job status <JOB_KEY> --output json
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Parse the instance ID and folder key from the response.
|
|
84
|
+
|
|
85
|
+
## Step 2 — Fetch incidents
|
|
86
|
+
|
|
87
|
+
Failed flows always have an incident. Start here — incidents give you the error category, message, and the faulting element.
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
uip maestro flow instance incidents <INSTANCE_ID> --folder-key <FOLDER_KEY> --output json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Drill into a specific incident for full detail:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
uip maestro flow incident get <INCIDENT_ID> --folder-key <FOLDER_KEY> --output json
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
To get a cross-process incident overview:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
uip maestro flow incident summary --output json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Step 3 — Fetch runtime variable state
|
|
106
|
+
|
|
107
|
+
Get the variable values at the time of failure to understand what data each node was working with:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
uip maestro flow instance variables <INSTANCE_ID> --folder-key <FOLDER_KEY> --output json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Scope to a specific element (node or subflow):
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
uip maestro flow instance variables <INSTANCE_ID> --folder-key <FOLDER_KEY> --parent-element-id <ELEMENT_ID> --output json
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Step 4 — Correlate with the flow definition
|
|
120
|
+
|
|
121
|
+
Use the incident's faulting element ID and the variable state to locate the failure point in the `.flow` file. Map the element ID to the corresponding node, check its `inputs`, upstream edges, and the variable values flowing into it.
|
|
122
|
+
|
|
123
|
+
If the local `.flow` file may differ from what was deployed, fetch the deployed BPMN definition:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
uip maestro flow instance asset <INSTANCE_ID> --folder-key <FOLDER_KEY> --output json
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Additional instance inspection commands:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
uip maestro flow instance element-executions <INSTANCE_ID> --folder-key <FOLDER_KEY> --output json # per-element execution details
|
|
133
|
+
uip maestro flow instance cursors <INSTANCE_ID> --folder-key <FOLDER_KEY> --output json # current execution cursor positions
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Step 5 — Traces (last resort)
|
|
137
|
+
|
|
138
|
+
Traces are verbose but contain the full execution timeline. Use them only when incidents and variables are insufficient:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
uip maestro flow job traces <JOB_KEY> --output json
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
> **Always use CLI commands for troubleshooting — never call the underlying APIs directly.**
|
|
145
|
+
|
|
146
|
+
## CLI command reference
|
|
147
|
+
|
|
148
|
+
### uip maestro flow instance
|
|
149
|
+
|
|
150
|
+
Inspect and manage Flow process instances. **Requires `uip login`.** All subcommands require `--folder-key <FOLDER_KEY>` (`-f` shorthand).
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
uip maestro flow instance list --output json # list all instances
|
|
154
|
+
uip maestro flow instance get <INSTANCE_ID> -f <FOLDER_KEY> --output json # get instance details
|
|
155
|
+
uip maestro flow instance incidents <INSTANCE_ID> -f <FOLDER_KEY> --output json # get incidents for a failed instance
|
|
156
|
+
uip maestro flow instance variables <INSTANCE_ID> -f <FOLDER_KEY> --output json # get runtime variable values
|
|
157
|
+
uip maestro flow instance variables <INSTANCE_ID> -f <FOLDER_KEY> --parent-element-id <ELEMENT_ID> --output json # scope to a specific element
|
|
158
|
+
uip maestro flow instance element-executions <INSTANCE_ID> -f <FOLDER_KEY> --output json # get per-element execution details
|
|
159
|
+
uip maestro flow instance asset <INSTANCE_ID> -f <FOLDER_KEY> --output json # get the deployed BPMN definition
|
|
160
|
+
uip maestro flow instance cursors <INSTANCE_ID> -f <FOLDER_KEY> --output json # get current execution cursor positions
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> **Lifecycle commands** (`pause` / `resume` / `cancel` / `retry`) are operate concerns — see the [Operate manage guide](../operate/manage.md).
|
|
164
|
+
|
|
165
|
+
### uip maestro flow incident
|
|
166
|
+
|
|
167
|
+
Get incident details for failed flows. **Requires `uip login`.**
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
uip maestro flow incident summary --output json # get incident summaries across all processes
|
|
171
|
+
uip maestro flow incident get <INCIDENT_ID> --folder-key <FOLDER_KEY> --output json # get full details for a specific incident
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Use `instance incidents <INSTANCE_ID>` to get incidents scoped to a specific run, then `incident get <INCIDENT_ID>` for full detail on a specific incident.
|