@uipath/skills 1.197.0 → 1.197.2

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.
Files changed (100) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/skills/uipath-ixp/SKILL.md +2 -2
  5. package/skills/uipath-ixp/references/label-documents-guide.md +1 -1
  6. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +1 -1
  7. package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
  8. package/skills/uipath-platform/SKILL.md +10 -1
  9. package/skills/uipath-review/SKILL.md +21 -10
  10. package/skills/uipath-review/references/api-workflows/api-workflow-review-checklist.md +72 -0
  11. package/skills/uipath-review/references/bpmn/bpmn-review-checklist.md +92 -0
  12. package/skills/uipath-review/references/coded-apps/coded-app-review-checklist.md +16 -15
  13. package/skills/uipath-review/references/flows/flow-common-issues.md +1 -25
  14. package/skills/uipath-review/references/flows/flow-review-checklist.md +12 -67
  15. package/skills/uipath-review/references/rpa/long-running-workflow-issues.md +2 -2
  16. package/skills/uipath-review/references/rpa/modern-studio-issues.md +2 -2
  17. package/skills/uipath-review/references/rpa/rpa-common-issues.md +15 -59
  18. package/skills/uipath-review/references/rpa/rpa-review-checklist.md +17 -16
  19. package/skills/uipath-review/references/solution-review-guide.md +1 -1
  20. package/skills/uipath-rpa/SKILL.md +7 -8
  21. package/skills/uipath-rpa/references/cli-reference.md +7 -6
  22. package/skills/uipath-rpa/references/debugging.md +117 -56
  23. package/skills/uipath-rpa/references/environment-setup.md +2 -2
  24. package/skills/uipath-rpa/references/ui-automation-guide.md +12 -2
  25. package/skills/uipath-rpa/references/uia-prerequisites.md +7 -7
  26. package/skills/uipath-rpa/references/validation-guide.md +9 -12
  27. package/skills/uipath-solution/references/scenarios/manual-edits.md +2 -2
  28. package/skills/uipath-troubleshoot/SKILL.md +68 -137
  29. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-action-failed-after-find.md +1 -1
  30. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-cell-targeting-failures.md +1 -1
  31. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-element-not-found.md +1 -1
  32. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-get-text-empty-or-wrong-result.md +2 -1
  33. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-invalid-descriptor.md +1 -1
  34. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-scroll-search-failures.md +1 -1
  35. package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-silent-failures-and-false-results.md +1 -1
  36. package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/delete-range-failures.md +2 -1
  37. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/investigation_guide.md +1 -1
  38. package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/connection-and-auth-failures.md +3 -1
  39. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/investigation_guide.md +1 -0
  40. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/authentication-token-invalid.md +1 -1
  41. package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/email-trigger-connection-event-failure.md +2 -2
  42. package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-activity-bug-silent-failure.md +1 -1
  43. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/application-not-found.md +2 -2
  44. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/click-coordinate-off-screen.md +2 -2
  45. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/selector-failure-healing-disabled.md +3 -3
  46. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/selector-failure-healing-fix.md +3 -3
  47. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/investigation_guide.md +1 -1
  48. package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-silent-no-substitution.md +2 -0
  49. package/skills/uipath-troubleshoot/references/activity-packages/workflowevents-activities/overview.md +26 -0
  50. package/skills/uipath-troubleshoot/references/activity-packages/workflowevents-activities/playbooks/app-request-trigger-connection-lost.md +40 -0
  51. package/skills/uipath-troubleshoot/references/activity-packages/workflowevents-activities/playbooks/handle-app-request-null-reference.md +34 -0
  52. package/skills/uipath-troubleshoot/references/activity-packages/workflowevents-activities/playbooks/initialize-hub-connection-aggregate-failure.md +40 -0
  53. package/skills/uipath-troubleshoot/references/activity-packages/workflowevents-activities/summary.md +9 -0
  54. package/skills/uipath-troubleshoot/references/escalation.md +98 -0
  55. package/skills/uipath-troubleshoot/references/investigation_guide.md +41 -1
  56. package/skills/uipath-troubleshoot/references/knowledge-base-guide.md +22 -24
  57. package/skills/uipath-troubleshoot/references/presenting.md +143 -0
  58. package/skills/uipath-troubleshoot/references/products/agents/playbooks/context-grounding-index-not-found.md +2 -0
  59. package/skills/uipath-troubleshoot/references/products/integration-service/cns-error-codes-reference.md +91 -0
  60. package/skills/uipath-troubleshoot/references/products/integration-service/dap-error-codes-reference.md +109 -0
  61. package/skills/uipath-troubleshoot/references/products/integration-service/overview.md +9 -3
  62. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/activity-configuration-corrupt.md +52 -0
  63. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connection-invalid.md +2 -2
  64. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connection-not-resolved.md +47 -0
  65. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-general-exception.md +2 -2
  66. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-connection-not-authenticated.md +46 -0
  67. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-connection-not-found.md +53 -0
  68. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-connector-unavailable.md +48 -0
  69. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-dependency-unavailable.md +59 -0
  70. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-events-callback-failed.md +55 -0
  71. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-operation-conflict.md +41 -0
  72. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-permission-denied.md +54 -0
  73. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-solutions-install-failed.md +66 -0
  74. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/cs-trigger-operation-failed.md +48 -0
  75. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/http-client-exception.md +44 -0
  76. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/missing-required-input.md +38 -0
  77. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/request-failed.md +49 -0
  78. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/response-mapping-mismatch.md +43 -0
  79. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/token-refresh-failed.md +42 -0
  80. package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/trigger-execution-failed.md +47 -0
  81. package/skills/uipath-troubleshoot/references/products/integration-service/summary.md +43 -0
  82. package/skills/uipath-troubleshoot/references/products/maestro/investigation_guide.md +4 -4
  83. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/personal-automation-quota.md +1 -1
  84. package/skills/uipath-troubleshoot/references/products/orchestrator/investigation_guide.md +13 -27
  85. package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-pending-stale-dispatch.md +2 -2
  86. package/skills/uipath-troubleshoot/references/runtime-exceptions/playbooks/argument-null-exception.md +1 -1
  87. package/skills/uipath-troubleshoot/references/summary.md +33 -12
  88. package/skills/uipath-troubleshoot/references/templates/playbook-template.md +1 -1
  89. package/version-manifest.json +1 -1
  90. package/skills/uipath-troubleshoot/agents/depth-verifier.md +0 -164
  91. package/skills/uipath-troubleshoot/agents/hypothesis-generator.md +0 -42
  92. package/skills/uipath-troubleshoot/agents/hypothesis-tester.md +0 -103
  93. package/skills/uipath-troubleshoot/agents/presenter.md +0 -160
  94. package/skills/uipath-troubleshoot/agents/scope-checker.md +0 -42
  95. package/skills/uipath-troubleshoot/agents/shared.md +0 -97
  96. package/skills/uipath-troubleshoot/agents/triage.md +0 -148
  97. package/skills/uipath-troubleshoot/schemas/evidence.schema.md +0 -118
  98. package/skills/uipath-troubleshoot/schemas/hypotheses.schema.md +0 -71
  99. package/skills/uipath-troubleshoot/schemas/scope-check.schema.md +0 -27
  100. package/skills/uipath-troubleshoot/schemas/state.schema.md +0 -145
@@ -21,7 +21,7 @@ What can cause it:
21
21
  - Authoring-time selector mistake against a stable element (typo, wrong attribute value, copy-paste error) — the live element is unchanged but the workflow's selector never matched
22
22
  - Element temporarily obscured by a popup or overlapping window (HA may emit a `dismiss-popup` fix instead of `update-target`)
23
23
 
24
- This playbook applies whenever HA recovery data is present for the failing activity, regardless of which specific cause above produced the failure. The cause label affects the user-facing narrative; the **remediation procedure (present HA's recommendation, ask whether to apply it) is the same for all of them** and is the authoritative resolution path even when the cause is later refined (e.g., depth-verifier identifies an authoring typo rather than UI drift).
24
+ This playbook applies whenever HA recovery data is present for the failing activity, regardless of which specific cause above produced the failure. The cause label affects the user-facing narrative; the **remediation procedure (present HA's recommendation, ask whether to apply it) is the same for all of them** and is the authoritative resolution path even when the cause is later refined (e.g., verification identifies an authoring typo rather than UI drift).
25
25
 
26
26
  ## Investigation
27
27
 
@@ -34,7 +34,7 @@ This playbook applies whenever HA recovery data is present for the failing activ
34
34
  3. Compare failed vs recommended selector and note which attributes changed (text, index, role, ancestry, etc.).
35
35
  4. Record the recovery channel, the detection's `InferMethod` / confidence score, and whether self-healing actually applied the fix at runtime (`RecoverySuccessful`). These determine the warning attached to the apply-fix prompt.
36
36
 
37
- Persist the exact failed and recovered selector strings to the evidence file for this hypothesis (e.g., as `failed_selector_xml`, `recovered_partial_selector_xml`, `recovered_fuzzy_partial_selector_xml`). The orchestrator's Resolution phase will read them back to drive the `AskUserQuestion` apply-fix flow — they MUST be present verbatim, not paraphrased.
37
+ Persist the exact failed and recovered selector strings verbatim in notes.md (e.g., as `failed_selector_xml`, `recovered_partial_selector_xml`, `recovered_fuzzy_partial_selector_xml`). The Resolution phase will read them back to drive the `AskUserQuestion` apply-fix flow — they MUST be present verbatim, not paraphrased.
38
38
 
39
39
  ## Resolution
40
40
 
@@ -42,4 +42,4 @@ Follow the fix-application procedures in [interpretations/healing-agent-data.md]
42
42
  - For `update-target` (self-healing) or `InferredRecoveryInfo.RecoveredTarget` (recommendation-only): use `uia-improve-selector` skill if available, otherwise direct XAML edit. When the data is `InferredRecoveryInfo` or `RecoverySuccessful: false`, attach the runtime-not-validated warning to the apply-fix prompt.
43
43
  - For `dismiss-popup` / `RecoveredExternally`: create a Click activity before the failing activity, validate the workflow compiles.
44
44
 
45
- This resolution path is **interactive** — it requires `AskUserQuestion` to be called by the orchestrator at the end of the troubleshooting to (a) print the Failed / Recovered Partial / Recovered Fuzzy selectors as plain text, (b) ask the user whether to apply the fix and which selector variant. The presenter must emit a `## Post-presentation actions` block declaring this interactive step; the orchestrator must execute it before closing the investigation. Do not collapse this into a generic "fix the selector" recommendation — the recovered selector text and the apply-fix prompt are part of the documented resolution.
45
+ This resolution path is **interactive** — it requires `AskUserQuestion` to be called at the end of the troubleshooting to (a) print the Failed / Recovered Partial / Recovered Fuzzy selectors as plain text, (b) ask the user whether to apply the fix and which selector variant. Execute this interactive step per `references/presenting.md` § Interactive resolutions before closing the investigation. Do not collapse this into a generic "fix the selector" recommendation — the recovered selector text and the apply-fix prompt are part of the documented resolution.
@@ -14,7 +14,7 @@ Before using any fetched data, verify it matches the user's reported problem:
14
14
 
15
15
  If the data doesn't match: **discard it**. Do NOT use unrelated data as a proxy. Report the mismatch and ask for clarification.
16
16
 
17
- ## What to Capture
17
+ ## Domain-Specific Data Gathering
18
18
 
19
19
  1. **Workflow source** — read the `WordApplicationScope` node from the `.xaml` to capture the literal document `Path` expression, `CreateIfNotExists`, `Password`, and whether the scope runs visible or unattended. Property-panel summaries truncate; the XAML is authoritative.
20
20
  2. **Word installed + bitness** — whether desktop Word is installed on the execution host (`Control Panel > Programs and Features`, or `HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\winword.exe`), and the Office bitness (`File > Account > About Word`) versus the robot process bitness.
@@ -18,6 +18,8 @@ What to look for:
18
18
  - Whether the placeholder was edited in place in the template (a tell: it was typed with corrections).
19
19
  - Whether part of the placeholder carries different formatting from the rest.
20
20
 
21
+ > **Workflow-source guard:** in workflow XAML, an activity attribute value wrapped in square brackets (e.g. `Replace="[employeeName]"`) is an **expression binding** to a variable — correct configuration, not a defect. Never report it as a bug and never propose removing the brackets; stripping them converts the binding into the literal text and BREAKS a working workflow. The defect in this failure class lives in the Word template's XML runs, not in the activity's property syntax.
22
+
21
23
  ## Investigation
22
24
 
23
25
  1. Confirm the activity reports success and the `Search` value exactly matches the on-screen placeholder (character-for-character, including brackets and case).
@@ -0,0 +1,26 @@
1
+ # App Events (Workflow Events) Activities
2
+
3
+ Activities from the `UiPath.WorkflowEvents.Activities` package. These are **internal** machinery that connects a **UiPath App** (or a Studio Web app preview) to the robot that runs the App's workflows — they are marked `[Internal]` and a user never drags them onto a canvas. They appear only inside a process that an App invokes.
4
+
5
+ So the user-visible failure is **"a job invoked by my App faulted"** — the faulted activity name (`HandleAppRequest`, `AppRequestTrigger`, `InitializeHubConnection`) shows up in the job error / trace spans, **not** in the user's project. Treat the activity as the location the fault surfaced, not a control the user can edit.
6
+
7
+ ## Two connection modes
8
+
9
+ A UiPath App talks to the robot over one of two channels; the same activities run on both:
10
+
11
+ - **RobotJS** (legacy, default) — a local message channel between the App host and the robot via the executor's `WorkflowCommunication`.
12
+ - **SignalR** (modern, Studio Web) — a SignalR hub connection over WebSockets / Server-Sent Events / long-polling. `InitializeHubConnection` sets it up; the trigger and handler ride it.
13
+
14
+ ## Exceptions propagate raw
15
+
16
+ These activities do **NOT** wrap failures in a package-specific exception type. They surface raw .NET framework exceptions (`NullReferenceException`, `TimeoutException`, `IOException`, `InvalidOperationException`, `AggregateException`) from the SignalR / HTTP / transport / runtime layer. So the **faulted activity class plus the exception class** — not a unique message string — is the primary discriminator. The same exception type on two different activities is a different investigation.
17
+
18
+ ## Key activity types
19
+
20
+ - **Initialize Apps Hub Connection** (`NetCore.Activities.InitializeHubConnection`) — Studio Web only. At workflow start it resolves the Apps/Orchestrator resource URL and an access token, then kicks off the SignalR hub connection. The hub `StartConnectionAsync` runs on a background thread whose errors are **logged, not thrown** — so a job-faulting `System.AggregateException` comes from the **synchronous** bootstrap (resource-URL / token acquisition, or an invalid session/URL → `WorkflowApplicationException`), wrapped by the async-activity framework. Unwrap the inner exception.
21
+ - **Apps Request Trigger** (`AppRequestTrigger`) — waits for the App to send invoke-workflow requests and periodic heartbeats over the channel. A missed heartbeat is handled gracefully (it signals "connection lost", no fault). The activity **faults** when the request-listener leg cannot establish or loses the channel — `TimeoutException` (SignalR connection never established), `IOException` (transport/pipe dropped while awaiting a request), or `InvalidOperationException` (SignalR client in an invalid state). These are channel/transport failures, not the user's workflow logic.
22
+ - **Handle Apps Request** (`HandleAppRequest`) — runs the workflow the App invoked and sends the result back over the channel. The invoked workflow's own exception is **captured and returned to the App**, not rethrown — so a job-faulting `System.NullReferenceException` at this activity is almost always a **null dereference inside the App-invoked workflow** (or a required input argument the App did not supply), surfaced through the Apps invocation machinery. Investigate the invoked workflow, not the package internals.
23
+
24
+ ## Package
25
+
26
+ Namespace / assembly: `UiPath.WorkflowEvents.Activities` (with the Studio-Web-only `NetCore.Activities.InitializeHubConnection`). Ships with the UiPath Apps / Studio Web runtime, not as a toolbox package users add.
@@ -0,0 +1,40 @@
1
+ ---
2
+ confidence: medium
3
+ ---
4
+
5
+ # Apps Request Trigger — Connection / Transport Lost (Timeout / IOException / InvalidOperation)
6
+
7
+ ## Context
8
+
9
+ What this looks like — a job invoked by a **UiPath App** faults at `AppRequestTrigger` (display name **Apps Request Trigger**) with one of:
10
+
11
+ - `System.TimeoutException` — message `SignalR connection did not establish within 60 seconds. Current state: <state>` (SignalR mode). The hub connection never reached `Connected` while the trigger waited.
12
+ - `System.IO.IOException` — the underlying transport (SignalR socket, or the RobotJS pipe) dropped while the trigger was awaiting a request from the App.
13
+ - `System.InvalidOperationException` — the SignalR client was driven in an invalid state (e.g. invoked on a connection that is not connected / was disposed).
14
+
15
+ `AppRequestTrigger` is internal Apps machinery the user never placed. It waits for the App to send invoke-workflow requests and heartbeats. A **missed heartbeat is handled gracefully** (it signals "connection lost" without faulting); the job faults only when the request-listener leg cannot establish or loses the channel and rethrows the error through the trigger's bookmark. All three signatures are the same root domain: **the App↔robot channel failed**, not the user's workflow logic.
16
+
17
+ What can cause it:
18
+ - **The App never connected within the timeout** — the App instance closed, crashed, or was never opened against this run; or the SignalR hub was unreachable, so the connection stayed un-established for 60s (`TimeoutException`).
19
+ - **Network / transport drop** — the WebSocket/long-polling transport (or the local RobotJS pipe) was interrupted mid-wait by a network fluctuation, proxy/idle timeout, or the App host going away (`IOException`).
20
+ - **Invalid channel state** — the hub connection was lost/disposed and an operation was attempted on it, or a reconnect left the client in a non-connected state (`InvalidOperationException`).
21
+
22
+ What to look for:
23
+ - **Which exception type** — it selects the branch (establish-timeout vs transport-drop vs invalid-state).
24
+ - **Whether the App instance was alive** for the run — a closed/crashed App or one never opened is the most common cause of the establish-timeout.
25
+ - **Connection mode** — SignalR (Studio Web / modern Apps) vs RobotJS (legacy). The `SignalR connection did not establish` message is SignalR mode; a RobotJS pipe drop surfaces as `IOException`.
26
+ - **Network conditions on the robot host** — proxy, idle-socket, or firewall behavior that severs long-lived connections.
27
+
28
+ ## Investigation
29
+
30
+ 1. **Confirm the signature + activity.** `uip or jobs get <job-key> --output json` → `Info` shows `System.TimeoutException` / `System.IO.IOException` / `System.InvalidOperationException`; the faulted activity is `AppRequestTrigger`.
31
+ 2. **Read the message and branch:** the `SignalR connection did not establish within 60 seconds` text → establish-timeout; a transport/IO phrase → connection drop; an invalid-operation message → invalid hub state.
32
+ 3. **Check the App side** — was the App instance open and connected for this run, or did it close / fail to open? An App that is not connected can never complete the handshake.
33
+ 4. **Check the robot host's connectivity** to the SignalR hub (network fluctuation, proxy, idle-connection timeout) for the transport-drop and timeout branches.
34
+
35
+ ## Resolution
36
+
37
+ - **Establish-timeout (`TimeoutException`):** ensure the UiPath App is actually open and connected to this run before/while the workflow waits; confirm the robot host can reach the SignalR hub (network/proxy/firewall). The trigger waits 60s — a connection that never forms means the App side never attached, not that the timeout is too short.
38
+ - **Transport drop (`IOException`):** treat as an environmental connection loss — verify network stability between the robot host and the hub, and proxy/idle-socket timeouts that sever long-lived connections; re-run once connectivity is stable. Recurring drops on the same network path point at the proxy/firewall.
39
+ - **Invalid channel state (`InvalidOperationException`):** the channel was lost/disposed before the operation — resolve the underlying disconnect (as for the transport-drop branch); if it reproduces deterministically on a specific App/runtime version, capture the trace and report it as an Apps runtime issue.
40
+ - These are platform/transport failures — do not look for a fix inside the user's workflow logic.
@@ -0,0 +1,34 @@
1
+ ---
2
+ confidence: medium
3
+ ---
4
+
5
+ # Handle Apps Request — Null Reference (NullReferenceException)
6
+
7
+ ## Context
8
+
9
+ What this looks like:
10
+ - A job invoked by a **UiPath App** faults with `System.NullReferenceException: Object reference not set to an instance of an object.`, and the faulted activity is `HandleAppRequest` (display name **Handle Apps Request**).
11
+ - `HandleAppRequest` is internal Apps machinery — the user never placed it. It runs the workflow the App invoked and returns the result. The invoked workflow's own exception is **captured and returned to the App, not rethrown**, so a job-faulting NRE at this activity is almost always raised **inside the App-invoked workflow**, surfaced here through the invocation layer.
12
+
13
+ What can cause it:
14
+ - **A null dereference in the App-invoked workflow.** A variable, argument, or object inside the workflow the App ran evaluates to `Nothing` and is dereferenced (the classic in-workflow NRE) — the App invocation is just the entry point.
15
+ - **A required input argument the App did not supply.** The App passes input arguments by name; a `null`/missing value the workflow then dereferences faults the same way. Mismatched argument name or type between the App's binding and the workflow's `In` arguments leaves the argument unset.
16
+ - **A wrong or missing workflow file binding.** The App points at a workflow whose argument contract differs from what the App sends, so a value the workflow assumes is present is null.
17
+
18
+ What to look for:
19
+ - **No SignalR / hub / transport phrase** in the message — a pure NRE means the failure is in workflow execution, not the channel. A channel/transport fault surfaces on `AppRequestTrigger` instead (see [app-request-trigger-connection-lost.md](./app-request-trigger-connection-lost.md)).
20
+ - **The invoked workflow's name and its `In` arguments** vs. what the App binds — the decisive signal.
21
+ - **The faulting frame in the stack** — it points inside the invoked workflow's activities, not the WorkflowEvents package internals.
22
+
23
+ ## Investigation
24
+
25
+ 1. **Confirm the signature + activity.** `uip or jobs get <job-key> --output json` → `Info` shows `System.NullReferenceException`; the faulted activity is `HandleAppRequest`.
26
+ 2. **Identify the invoked workflow.** From traces (`uip or jobs traces <job-key> --output json`) read the workflow file the App invoked and the input arguments delivered to it.
27
+ 3. **Read the faulting frame.** The stack points inside the invoked workflow — find which variable/argument was dereferenced.
28
+ 4. **Compare the App's argument bindings to the workflow's `In` arguments** — name and type must match, and every value the workflow dereferences must be supplied non-null.
29
+
30
+ ## Resolution
31
+
32
+ - **If the null originates in the invoked workflow's logic:** fix it in that workflow — assign the variable before use, or guard the null path (validate / default it) before the dereference. This is an ordinary in-workflow NRE; investigate it as one.
33
+ - **If a required input argument arrives null:** correct the App's binding so it supplies the value, and align the argument name/type with the workflow's `In` argument. Add a guard in the workflow for the missing-input case.
34
+ - **If the App points at the wrong workflow / a changed contract:** repoint the App at the intended workflow, or update the workflow's argument contract to match what the App sends.
@@ -0,0 +1,40 @@
1
+ ---
2
+ confidence: medium
3
+ ---
4
+
5
+ # Initialize Apps Hub Connection — Aggregate Exception (AggregateException)
6
+
7
+ ## Context
8
+
9
+ What this looks like:
10
+ - A Studio Web app-workflow run faults at `InitializeHubConnection` (display name **Initialize Apps Hub Connection**) with `System.AggregateException` and the message `One or more errors occurred. (<inner message>)`.
11
+ - `InitializeHubConnection` is internal Studio Web machinery the user never placed. At workflow start it resolves the Apps/Orchestrator resource URL and an access token, then starts the SignalR hub connection. It is an async activity, so a failure in its **synchronous bootstrap** surfaces wrapped in an `AggregateException` — the real cause is the inner exception.
12
+ - Note: the actual hub `StartConnectionAsync` runs on a **background thread that logs (not throws)** its errors, so a job-faulting `AggregateException` is **not** the raw socket connect failing — it is the bootstrap before that (resource-URL / token / session validation). Unwrap the inner exception.
13
+
14
+ What can cause it (read the inner exception):
15
+ - **Inner `WorkflowApplicationException` — `SignalR: Invalid SessionId: <id> OR Orchestrator Url: <url>`.** The session id or the resolved resource URL was blank when the activity validated them. Indicates the Apps/Studio Web session context or the resource-URL resolution did not produce a usable value.
16
+ - **Inner resource-URL / token-acquisition failure.** `runtime.AccessProvider.GetResourceUrl(...)` / `GetAccessToken(...)` threw — the robot could not resolve the Apps or Orchestrator endpoint, or could not obtain an access token (auth / connectivity / permission).
17
+ - **Inner transport/HTTP failure during bootstrap** — a network failure while resolving the hub endpoint.
18
+
19
+ What to look for:
20
+ - **`InnerException` / `InnerExceptions` type and message** — the decisive signal; the `AggregateException` wrapper text alone is not enough.
21
+ - **The `SignalR: Invalid SessionId ... OR Orchestrator Url ...` phrase** — points at blank session/URL context rather than a transport failure.
22
+ - **Whether the run is a Studio Web app preview / Apps-invoked run** — this activity only runs in that context; a normal Orchestrator job never executes it.
23
+
24
+ ## Investigation
25
+
26
+ 1. **Confirm the signature + activity.** `uip or jobs get <job-key> --output json` → `Info` shows `System.AggregateException`; the faulted activity is `InitializeHubConnection`.
27
+ 2. **Unwrap the inner exception.** Read the inner type/message from the `Info` stack and from `uip or jobs traces <job-key> --output json` / `uip traces spans get --job-key <job-key> --output json`. This selects the branch.
28
+ 3. **Branch on the inner cause:**
29
+ - `WorkflowApplicationException: SignalR: Invalid SessionId ... OR Orchestrator Url ...` → blank session/URL context.
30
+ - resource-URL / token failure → endpoint resolution or auth failure.
31
+ - transport/HTTP → network failure reaching the endpoint.
32
+ 4. **Confirm the execution context** — that the run is a Studio Web app preview / Apps invocation (the only context where this activity runs).
33
+
34
+ ## Resolution
35
+
36
+ - **Resolve by inner cause, not the wrapper.** Map the unwrapped inner exception to its fix.
37
+ - **Invalid session / resource URL (`WorkflowApplicationException`):** the Apps/Studio Web session context did not provide a session id or a resolvable resource URL — re-launch the app preview / Apps run from Studio Web so a valid session is established, and confirm the tenant's Apps service URL resolves for this robot. A blank URL points at resource-URL resolution, not the user's workflow.
38
+ - **Resource-URL / token-acquisition failure:** verify the robot can reach the Apps/Orchestrator endpoints and that the run has the rights/connectivity to obtain an access token (network, proxy, and the account's permissions).
39
+ - **Transport/HTTP inner failure:** treat as an environmental connectivity issue to the hub endpoint; re-run once the robot host's connectivity is stable.
40
+ - This activity is platform machinery — the fix is in the session/endpoint/auth context, not in the user's workflow logic.
@@ -0,0 +1,9 @@
1
+ # App Events (Workflow Events) Activities Playbooks
2
+
3
+ **Package overview:** [overview.md](./overview.md) — what `UiPath.WorkflowEvents.Activities` is (internal UiPath Apps / Studio Web ↔ robot machinery), the RobotJS vs SignalR connection modes, and how each activity faults. These activities propagate raw .NET framework exceptions (no package-specific wrapper), so the **faulted activity class + exception class** is the primary discriminator. The user experiences these as **a job invoked by a UiPath App faulting** — the activity name appears in the job error / traces, not in their project.
4
+
5
+ | Issue | Confidence | Description | Playbook |
6
+ |-------|:---:|-------------|----------|
7
+ | Handle Apps Request — Null Reference | Medium | A UiPath-App-invoked job faults at `HandleAppRequest` with `System.NullReferenceException: Object reference not set to an instance of an object.`. The activity captures and returns the invoked workflow's own exception rather than rethrowing, so a job-faulting NRE here is a null dereference **inside the App-invoked workflow** or a required input argument the App did not supply. No SignalR/transport phrase = failure is in workflow execution, not the channel. | [handle-app-request-null-reference.md](./playbooks/handle-app-request-null-reference.md) |
8
+ | Apps Request Trigger — Connection / Transport Lost | Medium | A UiPath-App-invoked job faults at `AppRequestTrigger` with `System.TimeoutException` (`SignalR connection did not establish within 60 seconds. Current state: <state>`), `System.IO.IOException` (transport/RobotJS pipe dropped while awaiting a request), or `System.InvalidOperationException` (SignalR client in an invalid state). All are App↔robot channel/transport failures — the App never connected within the timeout, a network/transport drop, or a lost/disposed hub. A missed heartbeat is handled gracefully (no fault). | [app-request-trigger-connection-lost.md](./playbooks/app-request-trigger-connection-lost.md) |
9
+ | Initialize Apps Hub Connection — Aggregate Exception | Medium | A Studio Web app-workflow run faults at `InitializeHubConnection` with `System.AggregateException` (`One or more errors occurred. (<inner>)`). The background `StartConnectionAsync` logs (not throws), so the fault is the synchronous bootstrap — unwrap the inner: `WorkflowApplicationException: SignalR: Invalid SessionId: <id> OR Orchestrator Url: <url>` (blank session/URL context), a resource-URL/token-acquisition failure, or a transport/HTTP failure. | [initialize-hub-connection-aggregate-failure.md](./playbooks/initialize-hub-connection-aggregate-failure.md) |
@@ -0,0 +1,98 @@
1
+ # Escalation — Competitive Hypotheses
2
+
3
+ Load this file only when a SKILL.md escalation trigger fires. The fast path handles one dominant playbook match; escalation handles ambiguity: no match, co-equal matches, deep cross-domain chains, exhausted decision trees, or contradicted matches.
4
+
5
+ ## 1. Enumerate candidates
6
+
7
+ Draft 2–4 candidate hypotheses in `.local/investigations/notes.md`:
8
+
9
+ 1. **One candidate per candidate playbook.** Candidates come from playbook grep matches, the no-signature routing table in `references/summary.md` (for silent failures), and cross-domain signals. Never draft a candidate from a playbook already eliminated by contradicting evidence — record eliminations in notes.md with the disproving datum.
10
+ 2. **Always add one "originating fault is upstream/elsewhere" candidate** — the possibility that every matched playbook describes a consequence and the true origin is a domain or entity not yet fetched. This candidate's probe follows the strongest cross-domain signal (wrapped inner exception, child job key, connection ID, parent instance).
11
+ 3. **Fault-signal-first ordering.** If any explicit fault signal exists (exception stack, error code, faulted state, incident), the candidate explaining what CAUSED that fault ranks first. Persistence, propagation, cleanup, or recovery-gap candidates rank after it.
12
+ 4. Each candidate records: description, source playbook path, supporting signals (a candidate with zero supporting signals is speculation — do not draft it), `to_confirm` evidence, and `to_eliminate` evidence. One candidate = one playbook at signature level; do NOT split a playbook's "What can cause it" list into separate candidates — those are branches its decision tree resolves.
13
+
14
+ ## 2. Probe in parallel
15
+
16
+ Spawn one read-only probe subagent per candidate (2–4, concurrently, in one message). Probes gather evidence; they never conclude for you, never present, never ask the user.
17
+
18
+ Probe prompt template — fill every {slot}:
19
+
20
+ ```
21
+ Gather evidence for ONE troubleshooting hypothesis. Read-only: you fetch data and report; you do not conclude the investigation, modify files, or ask the user anything.
22
+
23
+ Hypothesis: {description}
24
+ Playbook: {absolute path} — read its ## Context and ## Investigation sections first.
25
+ Confirm items: {to_confirm list}
26
+ Eliminate items: {to_eliminate list — you MUST attempt every one; elimination evidence is first-class}
27
+
28
+ Rules:
29
+ 1. Run ONLY uip commands documented in the playbook's ## Investigation section or the product overview's CLI section ({overview path}). No --help discovery, no guessed flags, no REST/curl workarounds.
30
+ 2. Redirect every CLI response: `uip ... --output json > .local/investigations/raw/h{n}-{command-name}.json`. Read back only needed fields. Before fetching, check .local/investigations/raw/ — reuse existing fetches of the same entity. (Probes deliberately use `>` uniformly — narrower than Invariant 4's conditional `tee` — to keep probe context minimal.)
31
+ 3. Every datum must match the reported entity, folder/tenant, and time window. Empty ≠ absent — verify the container exists. Live state ≠ historical state for incidents older than 24h.
32
+ 4. Max 2 retries per command; after 3 distinct command failures, stop and report the failures.
33
+ 5. Data unavailable → report the gap. Never invent or substitute.
34
+
35
+ Return (structured): per confirm/eliminate item — supported / contradicted / no data, with the raw file path and the specific field values; open gaps; any signal pointing at a DIFFERENT domain or entity (report it — do not chase more than one hop).
36
+ ```
37
+
38
+ Probes may run concurrently because each writes to its own `raw/h{n}-*` namespace and nothing else.
39
+
40
+ ### Serial fallback — no subagent tool
41
+
42
+ Harness has no subagent-spawning tool → execute each probe yourself, sequentially, in this context. Same protocol, same budget; only the execution changes:
43
+
44
+ 1. Take candidates in §1 rank order. Per candidate, execute the probe-prompt rules verbatim (read-only, documented commands only, `raw/h{n}-*` namespace, retry caps).
45
+ 2. **Close each probe before opening the next**: write its structured return block (per confirm/eliminate item — supported / contradicted / no data, raw file + field; open gaps; cross-domain signals) into notes.md under `## Probe h{n}`. Adjudication reads ONLY these blocks — not your memory of the fetches.
46
+ 3. A probe surfacing a different-domain signal still stops at one hop — record it for adjudication; do not chase it mid-probe.
47
+ 4. Do not adjudicate early. A dominant-looking first probe does not skip the remaining candidates — elimination evidence from later probes is what separates siblings.
48
+ 5. **Single-candidate collapse:** when only one viable candidate exists (the upstream/elsewhere candidate has no concrete signal to chase), the probe round collapses to targeted fetches for that candidate's confirm/eliminate items. The structure still applies: per-item verdicts in notes.md, then the verifier.
49
+
50
+ Then adjudicate per §3 unchanged.
51
+
52
+ ## 3. Adjudicate
53
+
54
+ You (not the probes) decide, in notes.md:
55
+
56
+ 1. **Eliminate first.** A candidate with any contradicted `to_eliminate` item is out — record the disproving datum.
57
+ 2. **Upstream precedence.** A propagation/persistence/state-transition candidate cannot win while an upstream "why did the presupposed condition occur" candidate is untested or supported. If the upstream probe surfaced a new domain signal, follow it: re-grep the playbooks, and if it matches a new playbook, run that playbook's decision tree (fast-path §5) before concluding.
58
+ 3. **Runtime-evidence gate.** For runtime failures, the winning candidate needs ≥1 runtime datum (logs, job records, instance state, incidents) that passes correlation. Design-time evidence alone proves a defect exists, not that it caused this failure. All runtime queries empty while the user reports active failures = contradiction — wrong scope; re-verify scope or ask the user, do not conclude.
59
+ 4. Apply the SKILL.md verification checklist to the winner.
60
+
61
+ No candidate survives → present findings and ruled-out candidates per `presenting.md` ("no root cause found" terminal). Do not loop generating new candidates more than once — a second full round requires new evidence or new user input.
62
+
63
+ ## 4. Fresh-eyes verifier (conditional)
64
+
65
+ Spawn ONE read-only verifier subagent before presenting when ANY of:
66
+
67
+ - The conclusion's confidence is medium or low
68
+ - The winning branch is the playbook's default/fallback branch (the tree's "none of the above")
69
+ - Co-equal candidates were adjudicated (trigger 2 fired)
70
+
71
+ Verifier prompt template:
72
+
73
+ ```
74
+ Verify a troubleshooting conclusion with fresh eyes. Read-only: no CLI, no file edits. Read .local/investigations/notes.md, the raw files it references, and the playbook at {path}.
75
+
76
+ Conclusion under test: {cause statement + chosen resolution branch}
77
+
78
+ Check:
79
+ 1. Specific cause named — the conclusion names ONE item from the playbook's "What can cause it" list (## Context), verbatim or tight paraphrase — not a category, not a vague generalization.
80
+ 2. Evidence pinned — the cited raw data contains a datum that singles out THIS cause from its siblings in the same list. Symptom-level data that fits multiple causes is not enough.
81
+ 3. Resolution alignment — the chosen fix is the ## Resolution branch keyed to that exact cause.
82
+ 4. Causal precedence — list every event the conclusion treats as given and ask "why did that occur?". A persistence/state-transition narrative presupposes an upstream condition ("state X didn't transition" presupposes "X was entered for a reason worth investigating"). Any unexplained upstream event that notes.md does not address → fail this check.
83
+
84
+ Return: verdict `verified` or `shallow`; per failed check: whether the gap is FACTUAL (missing datum — a targeted re-fetch could fix it; name the exact datum) or TEXTUAL (imprecise cause naming / wrong branch label — re-fetching cannot fix it); one line per gap.
85
+ ```
86
+
87
+ Route on the verdict:
88
+
89
+ - `verified` → present.
90
+ - `shallow` with factual gaps → ONE targeted re-fetch of the named datum (yourself or a single probe), then re-check. Still failing → treat as textual.
91
+ - `shallow` with textual gaps → present at reduced confidence with the gap named. **Cause label and remediation path are separable**: an imprecise cause name does NOT invalidate the matched playbook's `## Resolution` procedure — an interactive resolution (e.g., apply recovered selector) still runs; never switch to another playbook's resolution just because it names the cause better. Only a resolution-alignment gap (check 3) changes the fix branch.
92
+
93
+ No subagent tool → run the verifier's four checks yourself: re-read notes.md and every raw file the conclusion cites, answer each check in writing in notes.md under `## Self-verify`, then route on the verdict as above. Independence is lost — compensate by presenting at one confidence level lower than the adjudication assigned unless every check passes with a cited datum.
94
+
95
+ ## Boundaries
96
+
97
+ - Probes and the verifier never talk to the user; every user question is asked by you, directly, after they return.
98
+ - Total spawn budget per investigation: one probe round (2–4 probes) + optionally one verifier + at most one factual re-fetch round. Beyond that, present what is known with gaps named. The budget counts probes, not subagents — serial-fallback probes consume it identically.
@@ -13,6 +13,46 @@ Before using any fetched data, verify it matches the user's reported problem:
13
13
 
14
14
  If the data doesn't match: **discard it**. Do NOT use unrelated data as a proxy. Report the mismatch and ask for clarification.
15
15
 
16
+ ## Output Capture
17
+
18
+ Every `uip` data-gathering command follows two patterns — lean context AND an audit trail:
19
+
20
+ 1. **Filter at the source with `--output-filter`** — pull only the fields you need. Do NOT fetch the full response and slice it (`[:3000]` etc.); that silently drops information.
21
+ 2. **Capture to `raw/`, matching the tool to the payload size:**
22
+ - **Small / filtered result** → `| tee .local/investigations/raw/<command>.json`: saves the file AND echoes the (already-small) result for immediate use the same turn.
23
+ - **Heavy or unfilterable result** (dense traces, full logs/stacks, `errorDetails`, or the fallback below) → `> .local/investigations/raw/<command>.json`, then read back only the fields/lines you need. Do NOT `tee` a full unfiltered response — it loads the whole body into context.
24
+
25
+ Run `mkdir -p .local/investigations/raw` once before the first fetch — neither `tee` nor `>` creates the directory and will otherwise drop the file silently.
26
+
27
+ **Filter-failure fallback.** If `--output-filter` returns empty, an error, or an uninterpretable shape (usually a field name that drifted from the current CLI schema), retry the SAME command ONCE without `--output-filter` to see the actual shape. Capture that unfiltered retry with `>` (not `tee`) and read back only the fields you need; note the stale filter in your evidence summary. Do NOT silently swallow filter errors.
28
+
29
+ **Anti-patterns:** `tee`-ing a full unfiltered response (dumps the whole body into context — use `>` + selective read-back); `| head -c N` or byte/character slicing (drops required fields); fetching the unfiltered full response when 2–3 fields suffice (bloats context); inventing JSONpath field names (use only documented filters; on failure apply the fallback above).
30
+
31
+ ## Signal-Extraction Cheatsheet
32
+
33
+ Where each signal kind lives (fetch per the domain's `investigation_guide.md`; exact commands are documented there and in playbook `## Investigation` sections):
34
+
35
+ | Signal kind | Where to find it |
36
+ |---|---|
37
+ | exception (class/FQN) | Job record `Info` field; error-level job logs; trace span error attributes; Maestro incident body. Unwrap `System.AggregateException` / `--->` chains — the INNER exception is the routable signal |
38
+ | message / message-key | Verbatim friendly message in job `Info` / logs; localization resource keys quoted in UIA exception details |
39
+ | error-code | Message text (`DAP-*`, `#NNNN`, `AADSTS*`, HRESULTs like `0x8004027D`); Maestro incident code (e.g. `170002`); job `PendingReasons.ErrorCodes` |
40
+ | http-status | Message text ("Bad Gateway", "429"); trace span attributes |
41
+ | state | Job `State` + `PendingReasons`; Maestro instance status + incident open/closed; connection status |
42
+ | faulting activity + package | `[Name]` prefix in error log message bodies; span names; exception FQN prefix maps to the owning package (see `references/summary.md` domain namespaces) |
43
+ | package versions | `project.json` dependencies (source-required); job record package version fields |
44
+
45
+ ## Locating Project Source & Resource Files
46
+
47
+ A UiPath project ships in one of two layouts, and a named source or resource file (workflow, code, manifest, or a connection/asset/queue/bucket resource) may sit in either. Resolve BOTH before concluding a file is absent — this applies to every product, not just the one that named the file:
48
+
49
+ - **Standalone** — resources inline under the project dir (e.g. `<project>/connection/<connector>/*.json`).
50
+ - **Solution** — the project sits under a subdir and resources are hoisted into a solution wrapper at the **solution root**: the working directory, which is the *parent* of the named project dir — NOT inside it. E.g. from the working directory `resources/solution_folder/connection/<connector>/*.json`; likewise `resources/solution_folder/{package,process,asset,queue,bucket}/...`.
51
+
52
+ **Search from the working-directory root, not only under a named project subdir.** When the user points you at a project dir (e.g. `./MyProject/`), the solution resources live beside it — one level up — at `./resources/solution_folder/...`. So look both **inside the named project** (standalone layout) AND **in the working-directory root / one level up from the project** (solution layout).
53
+
54
+ When a playbook names a file at one layout's path and it is not there, check the other layout — including the solution root above the project dir — before treating it as missing. If neither resolves: data gap — ask the user for the correct path. Absence from one layout is NOT absence.
55
+
16
56
  ## Interpreting Query Results
17
57
 
18
58
  - **Empty results or 404** — before concluding an entity doesn't exist, verify the container (folder, tenant, instance) is still accessible. If the container was deleted or returns 404, all scoped queries are unreliable. Widen the search (different folder, broader time window, different state filters) or flag as a data gap and ask the user. Never treat empty results from an inaccessible container as proof of absence.
@@ -37,7 +77,7 @@ Before starting any investigation, establish what the user expects from the trou
37
77
  2. **If you cannot infer**, present the user with the options you identified (e.g., "Are you looking for the root cause, a quick fix, or help understanding why this happens intermittently?") and let them choose
38
78
  3. **If you have no options**, ask the user directly what outcome they need from this investigation
39
79
 
40
- Do NOT begin triage or hypothesis generation until the expected outcome is clear. It determines what depth of investigation is appropriate and what a useful resolution looks like.
80
+ Do NOT begin the investigation until the expected outcome is clear. It determines what depth of investigation is appropriate and what a useful resolution looks like.
41
81
 
42
82
  ## Tool Boundary — uip CLI Only
43
83
 
@@ -6,8 +6,10 @@ This document describes how the troubleshooting knowledge base is structured, wh
6
6
 
7
7
  ```
8
8
  references/
9
- summary.md <- Entry point. Routes agents to the correct product.
9
+ summary.md <- Domain descriptions, CLI entry points, no-signature routing.
10
10
  investigation_guide.md <- Generic investigation rules (all products).
11
+ presenting.md <- Resolution formatting, fix assembly, approval gate.
12
+ escalation.md <- Competitive-hypothesis protocol (probes, verifier).
11
13
  templates/ <- Templates for creating new playbooks.
12
14
  products/{id}/ <- One folder per product.
13
15
  overview.md <- (optional) Product overview and dependencies.
@@ -39,11 +41,11 @@ Each product has different concerns. UI Automation needs to verify the correct a
39
41
 
40
42
  ### presentation.md (optional)
41
43
 
42
- Product-specific display rules for how to format entity names, IDs, and labels in user-facing output. Defines how to refer to the product's entities (e.g., connections by display name, jobs by process name, instances by BPMN process name). The presenter agent discovers and reads these directly based on the domains in `state.json.scope.domain`.
44
+ Product-specific display rules for how to format entity names, IDs, and labels in user-facing output. Defines how to refer to the product's entities (e.g., connections by display name, jobs by process name, instances by BPMN process name). Read at presentation time (`references/presenting.md` § 1) for every domain in the causal chain.
43
45
 
44
46
  ### summary.md (required)
45
47
 
46
- The playbook index. Lists all playbooks for this product, organized by confidence level. This is how agents discover which playbooks exist and their confidence. Every new playbook must be added here.
48
+ The playbook index. Lists all playbooks for this product, organized by confidence level. Runtime routing greps playbook files directly; this index is the browse and fallback surface (family-playbook routing, escalation, silent failures). Every new playbook must be added here.
47
49
 
48
50
  ### playbooks/ (required)
49
51
 
@@ -75,36 +77,32 @@ All playbooks use the same three headers:
75
77
 
76
78
  | Section | What goes here | Who reads it |
77
79
  |---------|---------------|-------------|
78
- | `## Context` | What the issue is, what causes it, what to look for. Always present. | Generator (to produce hypotheses 1 for high-confidence, 2-5 for medium/low). Tester (for understanding). |
79
- | `## Investigation` | Steps to troubleshoot or verify. Can be absent for low-confidence playbooks. | Tester (follows steps if present, reasons freely if absent). |
80
- | `## Resolution` | Known fixes. Can be absent if the fix depends on what the investigation finds. | Presenter (assembles fixes for the user). |
80
+ | `## Context` | What the issue is, what causes it, what to look for. Always present. | The investigator, to confirm the match fits the evidence and learn the cause list. |
81
+ | `## Investigation` | Steps to troubleshoot or verify. Can be absent for low-confidence playbooks. | The investigator (follows steps in decision-tree order if present, reasons freely if absent). Escalation probes inherit these as their only allowed commands. |
82
+ | `## Resolution` | Known fixes. Can be absent if the fix depends on what the investigation finds. | Presentation phase (`references/presenting.md` assembles fixes for the user). |
81
83
 
82
84
  Template: `templates/playbook-template.md`
83
85
 
84
- > **Note:** The canonical confidence-level behavior table (how each agent acts per confidence level) is in `agents/shared.md`. Keep this guide aligned with that table.
86
+ ### Greppable Signatures
85
87
 
86
- ### Cross-Product References
87
-
88
- Playbooks may reference other product domains (e.g., an Orchestrator playbook mentioning "ProcessOrchestration" or "BPMN", a Maestro playbook referencing child Orchestrator jobs). When writing playbooks, use explicit product names when describing cross-domain behavior — the scope checker agent detects these references and flags missing domains for the orchestrator to expand scope.
89
-
90
- ## How Agents Use This
91
-
92
- ### Triage
88
+ Routing greps playbook files directly, so a playbook is reachable only if its `## Context` quotes the failure's signals verbatim:
93
89
 
94
- Reads `summary.md` to find the right product, then reads the product's `summary.md` to find ALL matching playbooks. Records every match with its confidence in `state.json`. Multiple playbooks may describe the same issue — all are recorded. Triage does NOT read playbook contents or do cross-domain expansion — the scope checker handles domain detection separately.
90
+ 1. Quote in "What this looks like" the exact strings the real failure produces exception class (FQN), verbatim message fragments, localization resource keys, error codes, HTTP statuses. Never paraphrase; trim placeholder segments.
91
+ 2. When two playbooks share a signal (same exception class, same message), each body must state its discriminator and explicitly redirect to the sibling playbook for the other case ("NOT for X → other-playbook.md").
92
+ 3. A playbook with no crisp greppable signal (silent failure, hang, wrong result) is a last resort — a distinctive log line or state combination is still a signature. Such playbooks are reachable only via the no-signature routing table in `references/summary.md` and the domain's `summary.md`.
93
+ 4. `confidence` (frontmatter) is a cap on root-cause certainty, not a routing rank.
95
94
 
96
- ### Hypothesis Generation
97
-
98
- The generator reads `## Context` from matched playbooks and produces hypotheses per the confidence-level behavior table in `agents/shared.md`. Hypotheses are tested in confidence order (high first).
99
-
100
- ### Testing
95
+ ### Cross-Product References
101
96
 
102
- The tester reads `## Context` for understanding, then scopes work per the confidence-level behavior table in `agents/shared.md`.
97
+ Playbooks may reference other product domains (e.g., an Orchestrator playbook mentioning "ProcessOrchestration" or "BPMN", a Maestro playbook referencing child Orchestrator jobs). Use explicit product names when describing cross-domain behavior cross-domain signals (entity keys, exception namespaces) are what route the investigator across the domain boundary.
103
98
 
104
- ### Investigation Guides
99
+ ## How the Investigator Uses This
105
100
 
106
- The investigation guide (generic + product-specific) tells agents how to verify their data is correct before drawing conclusions. Applied regardless of playbook confidence.
101
+ 1. **Route** greps the playbook corpus with extracted signals; loads only the matched playbook plus its domain's `investigation_guide.md`.
102
+ 2. **Walk** — confirms the match against `## Context`, executes `## Investigation` in decision-tree order, verifies the cause against the "What can cause it" list before presenting.
103
+ 3. **Escalate** — on ambiguity, `references/escalation.md` drafts one candidate per plausible playbook; probes gather evidence using only commands documented in the playbook or product overview.
104
+ 4. **Investigation guides** (generic + product-specific) define how to verify data correlation before drawing conclusions. Applied regardless of playbook confidence.
107
105
 
108
106
  ## Creating New Content
109
107
 
110
- Template is in `references/templates/playbook-template.md`. Copy it, set the `confidence` field in the frontmatter (high, medium, or low), fill in the sections, and add the entry to the product's `summary.md`. The summary's Confidence column must match the playbook's frontmatter.
108
+ Template is in `references/templates/playbook-template.md`. Copy it, set the `confidence` field, quote the failure's verbatim signature strings in `## Context` per Greppable Signatures above, fill in the sections, and add the entry to the product's `summary.md` (Confidence column must match the frontmatter).
@@ -0,0 +1,143 @@
1
+ # Presenting the Resolution
2
+
3
+ Rules for the final user-facing resolution — formatting, entity naming, cross-domain fix completeness, evidence gating, and interactive fixes. Load this file when the verification checklist has passed (or a reduced-confidence / diagnostic-recommendation terminal applies) and you are ready to present.
4
+
5
+ ## Inputs
6
+
7
+ - `.local/investigations/notes.md` — anchor, signals, matched playbook(s), branch decisions, checklist verdicts
8
+ - `.local/investigations/raw/` — authoritative field values; quote entity names and values from here
9
+ - Matched playbook(s) — `## Resolution` sections
10
+ - `uip docsai ask "<question>" --source docs|technical_solution_articles` — for domains missing a playbook resolution
11
+
12
+ ## 1. Load presentation rules
13
+
14
+ For each domain in the causal chain, read `references/products/{domain}/presentation.md` or `references/activity-packages/{domain}/presentation.md` if it exists. These define entity naming and field labels.
15
+
16
+ ## 2. Assemble fixes across all domains
17
+
18
+ Classify each domain in the causal chain: **root cause domain** (failure originated) or **propagation domain** (failure surfaced or was relayed).
19
+
20
+ ### Root cause domain
21
+
22
+ 1. Matched playbook's `## Resolution` — if present, use the branch keyed to the verified cause.
23
+ 2. No `## Resolution` — run `uip docsai ask` targeted at the domain's fix. Use the result if concrete and actionable.
24
+ 3. Docsai returns nothing useful — write: "No documented fix found for the {domain} layer — check UiPath documentation or consult UiPath support."
25
+
26
+ ### Propagation domains
27
+
28
+ For each domain that relayed or surfaced the fault:
29
+
30
+ 1. Matched playbook's `## Resolution` — if present, use it.
31
+ 2. Otherwise run `uip docsai ask` for that domain's error-handling / resilience patterns. Frame the query around the domain's role, not the specific root cause (e.g., "error boundary events for service tasks in Maestro", "retry policies for faulted jobs in Orchestrator", "fallback configuration for Integration Service connectors").
32
+ 3. Concrete pattern found → include as a preventive fix for that layer, citing the docsai result.
33
+ 4. Nothing useful → write: "No documented error handling pattern found for the {domain} layer — check UiPath documentation for resilience options."
34
+
35
+ Do NOT write "No configuration change needed" for a propagation domain. Every domain in the causal chain gets either a fix or an explicit no-documented-pattern note.
36
+
37
+ ### Source gating
38
+
39
+ Every fix step cites its source (playbook section, docsai result, or raw data file).
40
+
41
+ - Preserve docsai URLs — full URL, not just a title.
42
+ - Step with no documented source → drop it, or mark `[Unverified]` visibly.
43
+ - Undocumented field/setting behavior → do NOT include. Write: "Check UiPath documentation for [{field/setting}] behavior before proceeding."
44
+
45
+ ### Discriminator carry
46
+
47
+ The final answer states the discriminating datum, not just the verdict:
48
+
49
+ - Name the datum that separates the confirmed cause from its sibling causes (the same evidence the verification checklist pinned) — "the recovered label matches the unchanged live button, so this is a mistyped selector, not a page change", not just "fix the selector".
50
+ - Upstream "why" unproven after the checklist AND after every reachable evidence source is exhausted — including workflow source present in the working directory (check its top level; if the project is there, read it, do not enumerate around it) → enumerate the candidate explanations ranked by evidence (most likely first, one line each, each tagged by what would confirm it) instead of only flagging the gap. Enumeration is never a substitute for reading available source.
51
+
52
+ ## 3. Format
53
+
54
+ ```
55
+ Root Cause: {description}
56
+
57
+ What went wrong: {one sentence}
58
+
59
+ Why: {root cause explanation — trace the full causal chain across all domains}
60
+
61
+ Evidence:
62
+
63
+ ### {Domain} (Root Cause)
64
+ - {bullets — quote specific field values, error messages, IDs, timestamps, state, per this domain's presentation rules}
65
+
66
+ ### {Domain} (Propagation)
67
+ - {bullets}
68
+
69
+ Immediate fix:
70
+
71
+ ### {Domain} (Root Cause)
72
+ 1. {What to do — concrete action with exact navigation path or command}
73
+ - Why: {cite evidence that makes this step necessary}
74
+ - Where: {exact file, UI path, setting, or command}
75
+ - Who: {RPA developer | admin | platform team | process owner}
76
+ - Source: {playbook path or docsai URL}
77
+
78
+ ### {Domain} (Propagation)
79
+ 1. {same structure}
80
+
81
+ Preventive fix:
82
+
83
+ 1. {Domain} -- {What to change — concrete action}
84
+ - Why: {cite specific evidence showing the gap this fix addresses}
85
+ - Where: {exact file, UI path, setting}
86
+ - Who: {RPA developer | admin | platform team}
87
+ - Source: {playbook path or docsai URL}
88
+ 2. {next domain, same structure}
89
+ ```
90
+
91
+ **Reduced-confidence terminal** (checklist gap survived the re-fetch): present the same structure, name the gap explicitly next to the cause statement, and lead the Immediate fix with the playbook's diagnostic recommendation (e.g., a byte-compare snippet) instead of a guessed branch. Recommending the discriminating diagnostic IS the deliverable when evidence cannot separate sibling causes — never silently pick one.
92
+
93
+ **No root cause found**: present what was investigated and ruled out (from notes.md), and recommend providing more data or opening a UiPath support ticket.
94
+
95
+ ## 4. Apply presentation rules
96
+
97
+ Check every entity name against the presentation guides and raw data:
98
+
99
+ - Display names from raw data, not API property names or paraphrases
100
+ - IDs only where needed for commands
101
+ - UI labels, not API field names
102
+
103
+ ## 5. Investigation summary table
104
+
105
+ | # | What was checked | Verdict | Key Evidence | Resolution |
106
+ |---|------------------|---------|--------------|------------|
107
+
108
+ One row per playbook/branch/candidate checked (from notes.md), including eliminated ones.
109
+
110
+ ## 6. Interactive resolutions — the approval gate
111
+
112
+ If a matched playbook's `## Resolution` is **interactive** — it prescribes printing concrete values and asking the user before applying a fix (the Healing Agent apply-fix flow via `activity-packages/ui-automation/interpretations/healing-agent-data.md` is the canonical example) — execute this protocol after presenting. This applies even when the cause label was refined or downgraded: cause label and remediation path are separable; the playbook's remediation procedure remains authoritative.
113
+
114
+ For each interactive action, in order:
115
+
116
+ 1. **Print the user-facing data as plain text** — NOT inside AskUserQuestion options or previews. E.g. for a selector fix:
117
+
118
+ ```
119
+ Failed selector:
120
+ {failed_selector_xml from raw data}
121
+
122
+ Recovered Partial selector:
123
+ {recovered_partial_selector_xml — or "(not available)"}
124
+
125
+ Recovered Fuzzy selector:
126
+ {recovered_fuzzy_partial_selector_xml — or "(not available)"}
127
+ ```
128
+
129
+ 2. **Print required warnings verbatim.** E.g. when `OrchestratorEnableHeal=false`: "Healing Agent was running in recommendation-only mode (OrchestratorEnableHeal=false) — the recovered selector was inferred from the UI tree after the failure but was not validated at runtime. There is no guarantee it will work." Analogous wording for `RecoverySuccessful=false`.
130
+
131
+ 3. **Ask via AskUserQuestion** — the exact apply/dismiss question, plus a project-path follow-up if the path is not already known.
132
+
133
+ 4. **On accept:** follow the playbook's linked procedure (e.g., `activity-packages/ui-automation/interpretations/healing-agent-data.md` § Applying `update-target` Fixes: prefer a package-provided skill like `uia-improve-selector` under `<PROJECT_DIR>/.local/docs/packages/`; otherwise edit the XAML activity matched by `ActivityRefId` with the playbook's XAML Selector Encoding rules; then validate with `uip rpa validate --file-path "<WORKFLOW_FILE>" --output json`). **After applying, the confirmation message must restate the confirmed root cause and the complete resolution** — it must stand alone as the investigation's summary for a user returning to only that message; never let it read as if the applied edit were the primary or only fix.
134
+
135
+ 5. **On decline or non-answer: do not modify files.** If AskUserQuestion is unavailable, present the proposed edit as plain text and stop — never fall through to editing.
136
+
137
+ Pull every value from raw data. A required value missing (e.g., `recovered_partial_selector_xml`) → do NOT fabricate; surface the action as blocked, naming the missing evidence, and offer it as a follow-up.
138
+
139
+ ## Boundaries
140
+
141
+ - Do NOT fabricate fix steps from undocumented field behavior — cite sources or flag `[Unverified]`.
142
+ - `uip docsai ask` is the only CLI command this phase may add beyond what the playbook documents.
143
+ - Diagnosis is autonomous; **mutation of user source files requires explicit in-channel approval** — no exceptions.