@uipath/skills 1.201.0-preview.621 → 1.202.0-preview.635

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 (415) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +1 -1
  4. package/CODEOWNERS +41 -29
  5. package/README.md +1 -0
  6. package/assets/skill-status.json +13 -2
  7. package/assets/uip-catalog-snapshot.json +95 -46
  8. package/package.json +2 -1
  9. package/skills/uipath-admin/SKILL.md +107 -197
  10. package/skills/uipath-admin/references/audit-commands.md +69 -120
  11. package/skills/uipath-admin/references/audit-workflow-guide.md +101 -152
  12. package/skills/uipath-admin/references/authorization/authorization-commands.md +121 -210
  13. package/skills/uipath-admin/references/authorization/check-access.md +39 -63
  14. package/skills/uipath-admin/references/authorization/grant-permissions.md +38 -49
  15. package/skills/uipath-admin/references/authorization/permission-catalog.md +32 -34
  16. package/skills/uipath-admin/references/authorization/role-assignment-management.md +96 -99
  17. package/skills/uipath-admin/references/authorization/role-management.md +113 -142
  18. package/skills/uipath-admin/references/diagnose/CAPABILITY.md +13 -14
  19. package/skills/uipath-admin/references/diagnose/{references/failure-modes.md → failure-modes.md} +90 -46
  20. package/skills/uipath-admin/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +21 -14
  21. package/skills/uipath-admin/references/external-app-management.md +42 -39
  22. package/skills/uipath-admin/references/identity-commands.md +72 -625
  23. package/skills/uipath-admin/references/identity-troubleshoot-guide.md +73 -95
  24. package/skills/uipath-admin/references/ip-restriction/bypass-rule-management.md +25 -54
  25. package/skills/uipath-admin/references/ip-restriction/enforcement-management.md +19 -31
  26. package/skills/uipath-admin/references/ip-restriction/ip-range-management.md +48 -45
  27. package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +89 -146
  28. package/skills/uipath-admin/references/key-concepts.md +24 -0
  29. package/skills/uipath-admin/references/organization-management.md +49 -70
  30. package/skills/uipath-admin/references/organizations-commands.md +39 -74
  31. package/skills/uipath-admin/references/pat-management.md +25 -38
  32. package/skills/uipath-admin/references/robot-account-management.md +16 -14
  33. package/skills/uipath-admin/references/smtp-management.md +19 -14
  34. package/skills/uipath-admin/references/tenant-management.md +1 -1
  35. package/skills/uipath-admin/references/tenants-commands.md +82 -148
  36. package/skills/uipath-admin/references/user-management.md +70 -56
  37. package/skills/uipath-agents/SKILL.md +4 -3
  38. package/skills/uipath-agents/references/authentication.md +4 -3
  39. package/skills/uipath-agents/references/coded/capabilities/datafabric.md +465 -0
  40. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -0
  41. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +2 -0
  42. package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +12 -6
  43. package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
  44. package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +48 -16
  45. package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +1 -1
  46. package/skills/uipath-agents/references/coded/lifecycle/deployment.md +11 -1
  47. package/skills/uipath-agents/references/coded/quickstart.md +11 -8
  48. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +3 -3
  49. package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +19 -2
  50. package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -2
  51. package/skills/uipath-agents/references/lowcode/evaluations/orchestrator-eval-run.md +409 -155
  52. package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +2 -2
  53. package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
  54. package/skills/uipath-aops/SKILL.md +313 -0
  55. package/skills/uipath-aops/assets/templates/pipeline-dto-template.json +15 -0
  56. package/skills/uipath-aops/references/discovery-flow.md +312 -0
  57. package/skills/uipath-aops/references/migration-guide.md +146 -0
  58. package/skills/uipath-aops/references/pipeline-dto-guide.md +276 -0
  59. package/skills/uipath-aops/references/save-and-run-guide.md +156 -0
  60. package/skills/uipath-api-workflow/SKILL.md +48 -6
  61. package/skills/uipath-api-workflow/assets/templates/file-base64-roundtrip-example.json +154 -0
  62. package/skills/uipath-api-workflow/assets/templates/nested-control-flow-example.json +0 -1
  63. package/skills/uipath-api-workflow/references/cli-reference.md +20 -1
  64. package/skills/uipath-api-workflow/references/expressions-and-context.md +19 -0
  65. package/skills/uipath-api-workflow/references/files-and-base64.md +153 -0
  66. package/skills/uipath-api-workflow/references/operating-published-workflows.md +3 -2
  67. package/skills/uipath-api-workflow/references/task-types.md +89 -3
  68. package/skills/uipath-api-workflow/references/testing-and-evals.md +224 -0
  69. package/skills/uipath-api-workflow/references/troubleshooting.md +124 -4
  70. package/skills/uipath-coded-apps/SKILL.md +4 -2
  71. package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1 -1
  72. package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +11 -1
  73. package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +5 -3
  74. package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +1 -0
  75. package/skills/uipath-coded-apps/references/oauth-client-setup.md +2 -0
  76. package/skills/uipath-coded-apps/references/pack-publish-deploy.md +18 -0
  77. package/skills/uipath-coded-apps/references/sdk/orchestrator.md +4 -0
  78. package/skills/uipath-connector-builder/SKILL.md +7 -5
  79. package/skills/uipath-connector-builder/references/debugging.md +5 -1
  80. package/skills/uipath-connector-builder/references/element-json.md +3 -1
  81. package/skills/uipath-connector-builder/references/standard-resources.md +37 -6
  82. package/skills/uipath-functions/SKILL.md +134 -222
  83. package/skills/uipath-functions/references/js/authoring-guide.md +141 -0
  84. package/skills/uipath-functions/references/js/bindings-guide.md +120 -0
  85. package/skills/uipath-functions/references/js/calling-uipath-apis-guide.md +112 -0
  86. package/skills/uipath-functions/references/js/coded-app-wiring-guide.md +103 -0
  87. package/skills/uipath-functions/references/js/deployment-guide.md +109 -0
  88. package/skills/uipath-functions/references/js/http-semantics-guide.md +80 -0
  89. package/skills/uipath-functions/references/js/job-mode-guide.md +114 -0
  90. package/skills/uipath-functions/references/js/local-dev-guide.md +107 -0
  91. package/skills/uipath-functions/references/python/workflow-guide.md +224 -0
  92. package/skills/uipath-governance/SKILL.md +9 -8
  93. package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +36 -8
  94. package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +14 -12
  95. package/skills/uipath-governance/references/compliance-pack/disable/impl.md +5 -3
  96. package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +7 -5
  97. package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +14 -7
  98. package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +3 -1
  99. package/skills/uipath-governance/references/compliance-pack/preview-gate.md +1 -1
  100. package/skills/uipath-governance/references/compliance-pack/query/impl.md +4 -2
  101. package/skills/uipath-governance/references/diagnose/CAPABILITY.md +12 -12
  102. package/skills/uipath-governance/references/diagnose/{references/failure-modes.md → failure-modes.md} +5 -5
  103. package/skills/uipath-governance/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +2 -2
  104. package/skills/uipath-governance/references/disambiguation-guide.md +15 -7
  105. package/skills/uipath-human-in-the-loop/SKILL.md +107 -9
  106. package/skills/uipath-human-in-the-loop/references/hitl-casetask-action.md +413 -0
  107. package/skills/uipath-insights/SKILL.md +21 -14
  108. package/skills/uipath-insights/references/alerts-reads-guide.md +242 -0
  109. package/skills/uipath-insights/references/filter-discovery-guide.md +1 -1
  110. package/skills/uipath-insights/references/jobs-commands-guide.md +2 -2
  111. package/skills/uipath-ixp/references/cli-reference.md +1 -1
  112. package/skills/uipath-ixp/references/improve-prompts-guide.md +5 -6
  113. package/skills/uipath-maestro-bpmn/SKILL.md +87 -15
  114. package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +10 -10
  115. package/skills/uipath-maestro-bpmn/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +1 -1
  116. package/skills/uipath-maestro-bpmn/references/expression-authoring.md +12 -2
  117. package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +12 -12
  118. package/skills/uipath-maestro-bpmn/references/operate/{references/run.md → run.md} +2 -2
  119. package/skills/uipath-maestro-bpmn/references/operate/{references/ship.md → ship.md} +3 -3
  120. package/skills/uipath-maestro-bpmn/references/patterns/ai-decision-review-guide.md +138 -0
  121. package/skills/uipath-maestro-bpmn/references/patterns/approval-chain-guide.md +136 -0
  122. package/skills/uipath-maestro-bpmn/references/patterns/composing-guide.md +113 -0
  123. package/skills/uipath-maestro-bpmn/references/patterns/external-wait-guide.md +145 -0
  124. package/skills/uipath-maestro-bpmn/references/patterns/failure-escalation-guide.md +103 -0
  125. package/skills/uipath-maestro-bpmn/references/patterns/high-volume-batch-guide.md +107 -0
  126. package/skills/uipath-maestro-bpmn/references/patterns/queue-distribution-guide.md +129 -0
  127. package/skills/uipath-maestro-bpmn/references/patterns/smart-triage-guide.md +129 -0
  128. package/skills/uipath-maestro-bpmn/references/registry-workflow.md +15 -0
  129. package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +67 -36
  130. package/skills/uipath-maestro-bpmn/references/shared/project-layout.md +6 -5
  131. package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +23 -5
  132. package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +101 -53
  133. package/skills/uipath-maestro-case/SKILL.md +23 -24
  134. package/skills/uipath-maestro-case/references/bindings-and-expressions.md +30 -17
  135. package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -5
  136. package/skills/uipath-maestro-case/references/brownfield.md +3 -3
  137. package/skills/uipath-maestro-case/references/case-commands.md +8 -4
  138. package/skills/uipath-maestro-case/references/case-editing-operations.md +19 -19
  139. package/skills/uipath-maestro-case/references/case-schema.md +17 -3
  140. package/skills/uipath-maestro-case/references/connector-integration.md +25 -16
  141. package/skills/uipath-maestro-case/references/connector-trigger-impl.md +15 -15
  142. package/skills/uipath-maestro-case/references/connector-trigger-planning.md +32 -29
  143. package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -1
  144. package/skills/uipath-maestro-case/references/evals/evals.json +11 -11
  145. package/skills/uipath-maestro-case/references/implementation.md +74 -44
  146. package/skills/uipath-maestro-case/references/phased-execution.md +23 -21
  147. package/skills/uipath-maestro-case/references/placeholder-tasks.md +28 -23
  148. package/skills/uipath-maestro-case/references/planning.md +37 -252
  149. package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +3 -3
  150. package/skills/uipath-maestro-case/references/plugins/case/planning.md +8 -6
  151. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -3
  152. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +11 -10
  153. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +6 -6
  154. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +12 -12
  155. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +4 -4
  156. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +10 -9
  157. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +5 -5
  158. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +16 -14
  159. package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +3 -3
  160. package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +15 -15
  161. package/skills/uipath-maestro-case/references/plugins/sla/planning.md +20 -21
  162. package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +6 -6
  163. package/skills/uipath-maestro-case/references/plugins/stages/planning.md +9 -9
  164. package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +9 -9
  165. package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +38 -38
  166. package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -3
  167. package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +24 -20
  168. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -3
  169. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +24 -20
  170. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +4 -4
  171. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +25 -21
  172. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +30 -22
  173. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +44 -28
  174. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -10
  175. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +27 -23
  176. package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -3
  177. package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -3
  178. package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +25 -22
  179. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -3
  180. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +25 -21
  181. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -4
  182. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +5 -4
  183. package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -9
  184. package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +30 -19
  185. package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -4
  186. package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +8 -7
  187. package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +3 -3
  188. package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +5 -4
  189. package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +5 -5
  190. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +7 -7
  191. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +21 -17
  192. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +29 -21
  193. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +23 -21
  194. package/skills/uipath-maestro-case/references/registry-discovery.md +5 -5
  195. package/skills/uipath-maestro-flow/.maintenance/README.md +35 -28
  196. package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +19 -1
  197. package/skills/uipath-maestro-flow/.maintenance/check-links.sh +3 -0
  198. package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +2 -2
  199. package/skills/uipath-maestro-flow/SKILL.md +66 -76
  200. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +75 -72
  201. package/skills/uipath-maestro-flow/references/author/brownfield.md +90 -0
  202. package/skills/uipath-maestro-flow/references/author/{references/editing-operations-cli.md → editing-operations-cli.md} +9 -4
  203. package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +373 -0
  204. package/skills/uipath-maestro-flow/references/author/editing-operations.md +103 -0
  205. package/skills/uipath-maestro-flow/references/author/{references/greenfield.md → greenfield.md} +32 -20
  206. package/skills/uipath-maestro-flow/references/author/planning-arch.md +342 -0
  207. package/skills/uipath-maestro-flow/references/author/planning-impl.md +283 -0
  208. package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +227 -0
  209. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agent/planning.md +2 -2
  210. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/impl.md +2 -2
  211. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/planning.md +1 -1
  212. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/impl.md +2 -2
  213. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/planning.md +1 -1
  214. package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
  215. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/batch-transform/planning.md +1 -1
  216. package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +449 -0
  217. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector/planning.md +3 -3
  218. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/impl.md +20 -18
  219. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/planning.md +2 -2
  220. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +427 -0
  221. package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +185 -0
  222. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/impl.md +5 -0
  223. package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
  224. package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
  225. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/impl.md +2 -2
  226. package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +178 -0
  227. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/hitl/planning.md +14 -1
  228. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/impl-connector.md +4 -4
  229. package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
  230. package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
  231. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/planning.md +3 -3
  232. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/impl.md +6 -6
  233. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/planning.md +1 -1
  234. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/impl.md +4 -4
  235. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/planning.md +1 -1
  236. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/impl.md +8 -8
  237. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/impl.md +1 -1
  238. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/planning.md +1 -1
  239. package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
  240. package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
  241. package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
  242. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/rpa/planning.md +1 -1
  243. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/impl.md +6 -8
  244. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/impl.md +5 -5
  245. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/planning.md +1 -1
  246. package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
  247. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/subflow/planning.md +1 -1
  248. package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
  249. package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
  250. package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
  251. package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
  252. package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +241 -0
  253. package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/transform/planning.md +1 -1
  254. package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +39 -37
  255. package/skills/uipath-maestro-flow/references/diagnose/{references/failure-modes.md → failure-modes.md} +22 -22
  256. package/skills/uipath-maestro-flow/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +60 -1
  257. package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +27 -25
  258. package/skills/uipath-maestro-flow/references/evaluate/{references/commands-reference.md → commands-reference.md} +58 -7
  259. package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
  260. package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
  261. package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +21 -21
  262. package/skills/uipath-maestro-flow/references/operate/{references/manage.md → manage.md} +4 -4
  263. package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
  264. package/skills/uipath-maestro-flow/references/operate/{references/ship.md → ship.md} +5 -5
  265. package/skills/uipath-maestro-flow/references/shared/action-nodes.md +30 -22
  266. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +76 -184
  267. package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +49 -60
  268. package/skills/uipath-maestro-flow/references/shared/file-format.md +32 -11
  269. package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +49 -104
  270. package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +66 -103
  271. package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +4 -4
  272. package/skills/uipath-planner/SKILL.md +1 -1
  273. package/skills/uipath-planner/assets/templates/case/case-sdd-template.md +5 -3
  274. package/skills/uipath-planner/references/case/case-design-lane-guide.md +1 -1
  275. package/skills/uipath-planner/references/case/case-design-layers-guide.md +2 -2
  276. package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -1
  277. package/skills/uipath-planner/references/pdd-driven-lane-guide.md +3 -2
  278. package/skills/uipath-planner/references/sdd-generation-guide.md +1 -0
  279. package/skills/uipath-planner/scripts/case/audit_sdd.py +77 -1
  280. package/skills/uipath-platform/SKILL.md +6 -4
  281. package/skills/uipath-platform/references/integration-service/activities.md +7 -4
  282. package/skills/uipath-platform/references/integration-service/reference-resolution.md +28 -0
  283. package/skills/uipath-platform/references/integration-service/resources.md +11 -0
  284. package/skills/uipath-platform/references/integration-service/triggers.md +2 -2
  285. package/skills/uipath-platform/references/licensing/diagnose/CAPABILITY.md +80 -0
  286. package/skills/uipath-platform/references/licensing/diagnose/references/failure-modes.md +147 -0
  287. package/skills/uipath-platform/references/licensing/diagnose/references/troubleshooting-guide.md +125 -0
  288. package/skills/uipath-platform/references/licensing/licensing.md +3 -0
  289. package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +5 -0
  290. package/skills/uipath-platform/references/orchestrator/run-jobs.md +11 -2
  291. package/skills/uipath-platform/references/traces/feedback.md +4 -4
  292. package/skills/uipath-platform/references/traces/traces.md +1 -1
  293. package/skills/uipath-process-mining/SKILL.md +6 -6
  294. package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +10 -8
  295. package/skills/uipath-process-mining/references/model-editing.md +1 -1
  296. package/skills/uipath-process-mining/references/querying.md +4 -3
  297. package/skills/uipath-review/SKILL.md +171 -541
  298. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +73 -92
  299. package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +4 -0
  300. package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +73 -180
  301. package/skills/uipath-review/references/architecture-assessment-guide.md +93 -105
  302. package/skills/uipath-review/references/review-workflow-guide.md +1 -1
  303. package/skills/uipath-review/references/rpa/modern-studio-issues.md +44 -44
  304. package/skills/uipath-review/references/rpa/rpa-common-issues.md +251 -321
  305. package/skills/uipath-review/references/rpa/rpa-review-checklist.md +1 -1
  306. package/skills/uipath-review/references/rule-catalog-workflow.md +25 -45
  307. package/skills/uipath-review/references/rule-format.md +21 -21
  308. package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +1 -1
  309. package/skills/uipath-rpa/CLAUDE.md +4 -5
  310. package/skills/uipath-rpa/SKILL.md +40 -246
  311. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/FindText.md +2 -10
  312. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetColorAtPosition.md +2 -10
  313. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetCursorPosition.md +2 -10
  314. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetField.md +13 -13
  315. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetFieldAtPosition.md +2 -10
  316. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetScreenArea.md +27 -8
  317. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetText.md +2 -14
  318. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetTextAtPosition.md +2 -10
  319. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursor.md +3 -11
  320. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursorToText.md +2 -10
  321. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendControlKey.md +2 -8
  322. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeys.md +2 -10
  323. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeysSecure.md +2 -10
  324. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetField.md +14 -13
  325. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetFieldAtPosition.md +4 -7
  326. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/_common-options.md +29 -0
  327. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/authoring-paths.md +58 -0
  328. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession.md +197 -11
  329. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitFieldText.md +2 -10
  330. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenReady.md +9 -10
  331. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenText.md +2 -14
  332. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitTextAtPosition.md +2 -10
  333. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities.json +271 -0
  334. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/coded/coded-api.md +61 -3
  335. package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/overview.md +76 -0
  336. package/skills/uipath-rpa/references/cli-reference.md +63 -29
  337. package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +59 -1
  338. package/skills/uipath-rpa/references/coded/operations-guide.md +2 -1
  339. package/skills/uipath-rpa/references/debugging.md +29 -12
  340. package/skills/uipath-rpa/references/environment-setup.md +54 -1
  341. package/skills/uipath-rpa/references/execution-maps-guide.md +10 -9
  342. package/skills/uipath-rpa/references/legacy/activity-docs/_INVOKE-CODE.md +1 -1
  343. package/skills/uipath-rpa/references/uia-starter-guide.md +46 -8
  344. package/skills/uipath-rpa/references/xaml/common-pitfalls.md +3 -4
  345. package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +7 -8
  346. package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +132 -42
  347. package/skills/uipath-solution/SKILL.md +9 -6
  348. package/skills/uipath-solution/references/activate-and-manage.md +11 -6
  349. package/skills/uipath-solution/references/develop-solution.md +39 -28
  350. package/skills/uipath-solution/references/pack-and-deploy.md +49 -1
  351. package/skills/uipath-solution/references/scenarios/failure-modes.md +1 -1
  352. package/skills/uipath-solution/references/scenarios/intra-solution-references.md +3 -3
  353. package/skills/uipath-solution/references/scenarios/manual-edits.md +1 -1
  354. package/skills/uipath-solution/references/scenarios.md +2 -2
  355. package/skills/uipath-solution/references/solution-overview.md +15 -6
  356. package/skills/uipath-tasks/SKILL.md +11 -6
  357. package/skills/uipath-tasks/references/task-assignment.md +5 -0
  358. package/skills/uipath-tasks/references/task-catalogs.md +7 -4
  359. package/skills/uipath-tasks/references/task-completion.md +3 -1
  360. package/skills/uipath-tasks/references/task-data.md +3 -3
  361. package/skills/uipath-tasks/references/task-lifecycle.md +11 -0
  362. package/skills/uipath-tasks/references/task-metadata.md +4 -3
  363. package/skills/uipath-test/SKILL.md +13 -28
  364. package/skills/uipath-test/references/failure-triage-guide.md +90 -0
  365. package/skills/uipath-test/references/playwright-first-mile-guide.md +2 -2
  366. package/skills/uipath-test/references/publish-and-link-guide.md +0 -1
  367. package/skills/uipath-test/references/test-result-report-guide.md +1 -2
  368. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/interpretations/healing-agent-data.md +1 -1
  369. package/skills/uipath-troubleshoot/references/presenting.md +1 -1
  370. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/folder-not-accessible.md +1 -1
  371. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/generic-error-400.md +4 -4
  372. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/integration-service-400.md +2 -2
  373. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/job-operation-timeout.md +1 -1
  374. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/no-suitable-runtime-machine.md +1 -1
  375. package/version-manifest.json +2 -2
  376. package/skills/uipath-maestro-case/scripts/audit_plan.py +0 -231
  377. package/skills/uipath-maestro-flow/references/author/references/brownfield.md +0 -93
  378. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +0 -545
  379. package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +0 -131
  380. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -638
  381. package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -306
  382. package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +0 -229
  383. package/skills/uipath-maestro-flow/references/author/references/plugins/batch-transform/impl.md +0 -174
  384. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +0 -741
  385. package/skills/uipath-maestro-flow/references/author/references/plugins/delay/impl.md +0 -75
  386. package/skills/uipath-maestro-flow/references/author/references/plugins/end/impl.md +0 -65
  387. package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +0 -204
  388. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +0 -65
  389. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +0 -201
  390. package/skills/uipath-maestro-flow/references/author/references/plugins/merge/impl.md +0 -43
  391. package/skills/uipath-maestro-flow/references/author/references/plugins/merge/planning.md +0 -29
  392. package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +0 -121
  393. package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +0 -230
  394. package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/impl.md +0 -198
  395. package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/planning.md +0 -71
  396. package/skills/uipath-maestro-flow/references/author/references/plugins/switch/planning.md +0 -38
  397. package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +0 -48
  398. package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +0 -287
  399. package/skills/uipath-maestro-flow/references/evaluate/references/eval-sets-guide.md +0 -226
  400. package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +0 -82
  401. package/skills/uipath-maestro-flow/references/operate/references/run.md +0 -99
  402. /package/skills/uipath-maestro-bpmn/references/diagnose/{references/failure-modes.md → failure-modes.md} +0 -0
  403. /package/skills/uipath-maestro-bpmn/references/operate/{references/manage.md → manage.md} +0 -0
  404. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/planning.md +0 -0
  405. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/delay/planning.md +0 -0
  406. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/end/planning.md +0 -0
  407. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/planning.md +0 -0
  408. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/planning.md +0 -0
  409. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/impl.md +0 -0
  410. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/planning.md +0 -0
  411. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/planning.md +0 -0
  412. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/switch/impl.md +0 -0
  413. /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/terminate/planning.md +0 -0
  414. /package/skills/uipath-maestro-flow/references/evaluate/{references/evaluators-guide.md → evaluators-guide.md} +0 -0
  415. /package/skills/uipath-maestro-flow/references/evaluate/{references/running-guide.md → running-guide.md} +0 -0
@@ -16,6 +16,9 @@ Manage UiPath Test Manager resources (projects, test cases, test sets, execution
16
16
  - User wants to **generate a shareable test report** tailored to a QA engineer, developer, or release manager
17
17
  - User asks about **test coverage, regression trends, or failure rates**
18
18
  - User needs a **go/no-go decision summary** based on recent test executions
19
+ - User wants to **triage a failed run** — which cases failed, which assertion broke, which step it died on
20
+ - User asks whether a failure is a **real regression or a flaky test** (result history over past executions)
21
+ - User needs **failure evidence** — screenshots and logs pulled off the failed cases for a defect
19
22
 
20
23
  ## Concepts
21
24
  ### What is Testmanager?
@@ -230,33 +233,15 @@ Object labels are tag-style metadata applied to Requirement, TestCase, TestSet,
230
233
  ## Critical Rules
231
234
 
232
235
  1. **Always check login first** — run `uip login status --output json` before any Test Manager operation. If not authenticated, run `uip login` to sign in.
233
- 2. **Probe the CLI surface once per session, before the first `uip tm` command.** Run `uip tm testcases --help --output json` (any flags accepted). Result `Success` → post-rename CLI; use the command tables above as-is. `unknown command` / non-zero exit → pre-rename CLI; translate via the [Pre-rename fallbacks](#pre-rename-fallbacks) table before each call. Re-probe on any later `unknown command` error.
234
- 3. **Always pass `--output json`** to every `uip` command — no exceptions. Structured JSON output is what you need to reason about results reliably, even when you only plan to summarize them back to the user.
235
- 4. **Cap retries at 3** for any failing `uip` CLI command. After 3 failures, stop and report the error to the user (see Rule — never fall back to direct REST APIs).
236
- 5. **Handle empty results** — if a list command returns an empty array, stop and inform the user rather than proceeding with a null key. Exception: a zero-result `tm testcases list --filter` call may be a prefix miss rather than a truly empty dataset — apply Rule 9's prefix fallback to disambiguate; stop only when the fallback also finds nothing. Filtered lookups on other resources (project, customfield) returning empty are real empty results — stop as usual.
237
- 6. **Confirm before delete** — always confirm the target resource key with the user before running any `delete` command — unless the user already authorized this exact delete. All delete commands require `--yes` (or `-y`) to proceed; omitting it exits without deleting.
238
- 7. **For operations requiring folder key** — use `uip or folders list -n <folder-name> --all --output json` when the user named a folder; when picking one yourself, list without `--all` so you only get folders you are a member of (run `/uipath-platform` for folder management details).
239
- 8. **Discover before assuming** — never guess automation names, folder keys, project IDs, or test case keys. Always run the matching `list` command first (e.g., `uip tm testcases list-automations`, `uip or folders list -n <folder-name> --all`).
240
- 9. **Narrow `list` calls server-side when the user names an entity.** When the user provides a name, key, label, or tag, check `uip tm <resource> list --help` (or `uip or <resource> list --help`) for the narrowing flag the command exposes and pass it on the `list` call. Never list all results and filter client-side — it wastes tokens and misses paginated entries. Applies to every entity across `uip tm` and `uip or`. Exception: `tm testcases list --filter` matches by prefix. A mid-name term returns zero — retry `--filter` with a broader name prefix from context; re-list without `--filter` only when no workable prefix exists, paging through ALL results (`--limit`/`--offset`) before concluding the target is absent.
241
- 10. **`run` needs a default Orchestrator folder — set one only on the exact missing-folder error.** `uip tm testcases run` and `uip tm testsets run` both require a default folder on the project. Attempt the `run` first and match the failure text exactly: a project with **no** default folder fails with `"Message": "HTTP 400: Please assign folder to project level before executing testcases."` (`errorCode: itemNotFound`). Only on that error, set one with `uip tm project set-default-folder --project-key <PROJECT_KEY> --folder-key <FOLDER_KEY> --output json`, then retry once. Get folder keys with `uip or folders list -n <folder-name> --all --output json`. Do NOT treat other errors as folder problems: an unusable default folder surfaces as an opaque `HTTP 5xx` on the run, and `set-default-folder` with a nonexistent folder key fails with `"HTTP 400: Internal Server Error."` (`errorCode: unknown`) — both stop under Rule 11 rather than triggering a folder overwrite. Never overwrite a default folder that is already working — an arbitrary folder picked off `or folders list` may be one Test Manager rejects, breaking every subsequent run on that project. This recovery is the one named run exception to Rule 11; any other run failure still stops.
242
- 11. **On any `uip` command failure or ambiguity, STOP and ask the user — do NOT fall back to direct REST API calls.** When a `uip` command errors, returns malformed output, or the right flag/value is unclear (e.g., multiple matching entities, missing identifier, unexpected schema), interrupt and ask the user before proceeding. This overrides any instinct to "try the underlying API instead." **Two exceptions, both expected outcomes rather than faults, each identified by its exact error:** (a) a `run` failing with `"HTTP 400: Please assign folder to project level before executing testcases."` — the missing-default-folder signal; set the folder per Rule 10 and retry once. (b) `uip tm wait` exiting with code 2 and `"Timed out after <N>s waiting for execution '<EXECUTION_ID>'. Last status: <status>."` — the bounded `--timeout` working as designed; report the non-finish and carry on with the remaining steps. Other `wait` failures (`Polling failed/interrupted/aborted ...`, exit code 1) are real faults, not timeouts. Every other failure still stops here.
243
-
244
- ### Pre-rename fallbacks
245
-
246
- If the probe in Rule #2 shows singular subjects, the CLI predates the closed-verb-set renames. Translate before running:
247
-
248
- | Post-rename (tables above) | Pre-rename equivalent |
249
- |---|---|
250
- | `uip tm testcases <verb>` | `uip tm testcase <verb>` |
251
- | `uip tm testsets <verb>` | `uip tm testset <verb>` |
252
- | `uip tm executions <verb>` | `uip tm execution <verb>` |
253
- | `uip tm testcases run` | `uip tm testcase execute` |
254
- | `uip tm testsets run` | `uip tm testset execute` |
255
- | `uip tm testcases add --test-set-key … --test-case-keys …` | `uip tm testset add-testcases --test-set-key … --test-case-keys …` |
256
- | `uip tm testcases remove --test-set-key … --test-case-keys …` | `uip tm testset remove-testcases …` |
257
- | `uip tm executions testcaselogs list` | `uip tm execution list-testcaselogs` |
258
-
259
- `uip tm wait`, `tm testcaselog`, `tm report`, `tm result`, `tm attachment`, `tm project`, `tm user`, `tm requirement` are unchanged on both surfaces.
236
+ 2. **Always pass `--output json`** to every `uip` command — no exceptions. Structured JSON output is what you need to reason about results reliably, even when you only plan to summarize them back to the user.
237
+ 3. **Cap retries at 3** for any failing `uip` CLI command. After 3 failures, stop and report the error to the user (see Rule — never fall back to direct REST APIs).
238
+ 4. **Handle empty results** — if a list command returns an empty array, stop and inform the user rather than proceeding with a null key. Exception: a zero-result `tm testcases list --filter` call may be a prefix miss rather than a truly empty dataset — apply Rule 8's prefix fallback to disambiguate; stop only when the fallback also finds nothing. Filtered lookups on other resources (project, customfield) returning empty are real empty results — stop as usual.
239
+ 5. **Confirm before delete** — always confirm the target resource key with the user before running any `delete` command — unless the user already authorized this exact delete. All delete commands require `--yes` (or `-y`) to proceed; omitting it exits without deleting.
240
+ 6. **For operations requiring folder key** — use `uip or folders list -n <folder-name> --all --output json` when the user named a folder; when picking one yourself, list without `--all` so you only get folders you are a member of (run `/uipath-platform` for folder management details).
241
+ 7. **Discover before assuming** — never guess automation names, folder keys, project IDs, or test case keys. Always run the matching `list` command first (e.g., `uip tm testcases list-automations`, `uip or folders list -n <folder-name> --all`).
242
+ 8. **Narrow `list` calls server-side when the user names an entity.** When the user provides a name, key, label, or tag, check `uip tm <resource> list --help` (or `uip or <resource> list --help`) for the narrowing flag the command exposes and pass it on the `list` call. Never list all results and filter client-side — it wastes tokens and misses paginated entries. Applies to every entity across `uip tm` and `uip or`. Exception: `tm testcases list --filter` matches by prefix. A mid-name term returns zero — retry `--filter` with a broader name prefix from context; re-list without `--filter` only when no workable prefix exists, paging through ALL results (`--limit`/`--offset`) before concluding the target is absent.
243
+ 9. **`run` needs a default Orchestrator folder — set one only on the exact missing-folder error.** `uip tm testcases run` and `uip tm testsets run` both require a default folder on the project. Attempt the `run` first and match the failure text exactly: a project with **no** default folder fails with `"Message": "HTTP 400: Please assign folder to project level before executing testcases."` (`errorCode: itemNotFound`). Only on that error, set one with `uip tm project set-default-folder --project-key <PROJECT_KEY> --folder-key <FOLDER_KEY> --output json`, then retry once. Get folder keys with `uip or folders list -n <folder-name> --all --output json`. Do NOT treat other errors as folder problems: an unusable default folder surfaces as an opaque `HTTP 5xx` on the run, and `set-default-folder` with a nonexistent folder key fails with `"HTTP 400: Internal Server Error."` (`errorCode: unknown`) — both stop under Rule 10 rather than triggering a folder overwrite. Never overwrite a default folder that is already working — an arbitrary folder picked off `or folders list` may be one Test Manager rejects, breaking every subsequent run on that project. This recovery is the one named run exception to Rule 10; any other run failure still stops.
244
+ 10. **On any `uip` command failure or ambiguity, STOP and ask the user — do NOT fall back to direct REST API calls.** When a `uip` command errors, returns malformed output, or the right flag/value is unclear (e.g., multiple matching entities, missing identifier, unexpected schema), interrupt and ask the user before proceeding. This overrides any instinct to "try the underlying API instead." **Two exceptions, both expected outcomes rather than faults, each identified by its exact error:** (a) a `run` failing with `"HTTP 400: Please assign folder to project level before executing testcases."` — the missing-default-folder signal; set the folder per Rule 9 and retry once. (b) `uip tm wait` exiting with code 2 and `"Timed out after <N>s waiting for execution '<EXECUTION_ID>'. Last status: <status>."` — the bounded `--timeout` working as designed; report the non-finish and carry on with the remaining steps. Other `wait` failures (`Polling failed/interrupted/aborted ...`, exit code 1) are real faults, not timeouts. Every other failure still stops here.
260
245
 
261
246
  ## Quick Start
262
247
 
@@ -316,6 +301,7 @@ If the probe in Rule #2 shows singular subjects, the CLI predates the closed-ver
316
301
 
317
302
  | I want to... | Start here |
318
303
  |---|---|
304
+ | **Triage a failed run to a root cause** (failed logs → assertions → step logs → evidence; flaky vs regression) | [references/failure-triage-guide.md](references/failure-triage-guide.md) |
319
305
  | **Generate a shareable test report** (tester or release manager view) | [references/test-result-report-guide.md](references/test-result-report-guide.md) |
320
306
  | **Publish a project and link it to a Test Manager test case** (Studio/RPA) | [references/publish-and-link-guide.md](references/publish-and-link-guide.md) |
321
307
  | **Pack, ingest, and run a Playwright suite on serverless** (pack → upload → labels → run) | [references/playwright-first-mile-guide.md](references/playwright-first-mile-guide.md) |
@@ -324,6 +310,5 @@ If the probe in Rule #2 shows singular subjects, the CLI predates the closed-ver
324
310
  ## Anti-patterns
325
311
 
326
312
  - **Do NOT proceed if authentication fails** — all Test Manager API calls require a valid bearer token. Fail fast rather than surfacing confusing 401 errors later.
327
- - **Do NOT skip the surface probe** (Critical Rule #2). On a pre-rename CLI, post-rename commands fail with `unknown command`; on a post-rename CLI, pre-rename commands fail the same way. The skill targets the post-rename surface and falls back per the [Pre-rename fallbacks](#pre-rename-fallbacks) table. Picking the wrong shape without probing burns a retry on every call.
328
313
  - **Do NOT guess command names — verb-noun composites are required.** The CLI uses explicit verb-noun forms; bare verbs do not exist. Confirm with `uip tm <resource> --help --output json`.
329
314
  - **Do NOT `link-automation` Playwright test cases.** Playwright ingestion links them to the package automatically; the manual link step belongs to the Studio/RPA pipeline only.
@@ -0,0 +1,90 @@
1
+ # Failure Triage — from a red run to a root cause
2
+
3
+ Diagnose workflow for a Test Manager execution that failed. Answers three questions in order: **what failed**, **why it failed**, **is it a real defect or a flaky test**.
4
+
5
+ All commands take `--output json` (Critical Rule #3). Every `list` below is paginated — `--limit` / `--offset`.
6
+
7
+ ## When to use this
8
+
9
+ - A test set run came back red and you need the cause, not the count
10
+ - Someone asks "is this test actually broken, or just flaky?"
11
+ - A release decision needs evidence attached, not a summary
12
+ - CI reported a failure and you have only the execution ID
13
+
14
+ For a persona-tailored written report, use [test-result-report-guide.md](test-result-report-guide.md) instead — that answers "what do I tell stakeholders", this answers "what is wrong".
15
+
16
+ ## The triage ladder
17
+
18
+ Walk down. Each rung narrows the blast radius; stop at the rung that answers the question.
19
+
20
+ | Rung | Command | Answers |
21
+ |---|---|---|
22
+ | 1. Execution totals | `uip tm executions get-stats --execution-id <UUID> --project-key <KEY>` | How bad? Pass/fail/skip counts as the run reports them |
23
+ | 2. Failed cases only | `uip tm executions testcaselogs list --execution-id <UUID> --project-key <KEY> --only-failed` | Which test cases failed |
24
+ | 3. Failed assertion | `uip tm testcaselog list-assertions --project-key <KEY> --test-case-log-id <UUID>` | Which assertion inside the case broke |
25
+ | 4. Step detail | `uip tm teststeplog list --project-key <KEY> --test-case-log-id <UUID>` | Which step it broke on |
26
+ | 5. Evidence | `uip tm attachment download --execution-id <UUID> --only-failed --result-path <DIR>` | Screenshots / logs for the failures |
27
+
28
+ `--only-failed` on rung 2 is the difference between reading 4 rows and reading 400. Use it — do not pull every log and filter client-side (Critical Rule #9).
29
+
30
+ IDs chain downward: `testcaselogs list` returns the `test-case-log-id` that rungs 3 and 4 need. Do not guess it.
31
+
32
+ ## Real defect, or flaky test?
33
+
34
+ A single red run cannot tell you. Ask the test case's own history:
35
+
36
+ ```bash
37
+ uip tm testcases list-result-history --project-key <KEY> --test-case-id <UUID> --only-failed --output json
38
+ ```
39
+
40
+ Read the pattern:
41
+
42
+ | History | Read |
43
+ |---|---|
44
+ | Fails every run since a known date | Real regression — bisect to what changed at that date |
45
+ | Fails intermittently, same assertion | Flaky test — environment, timing, or test data, not product code |
46
+ | Fails intermittently, different assertions | Unstable environment or shared-state contention between tests |
47
+ | First failure ever | Either a new regression or a new flake — one data point is not a pattern; re-run before concluding |
48
+
49
+ `--only-failed` here narrows to the failures; drop it when you need the pass/fail *ratio* rather than the failure list.
50
+
51
+ ## Narrowing across many executions
52
+
53
+ `executions list` covers the common case. Reach for `list-filtered` only when you need what `list` cannot express:
54
+
55
+ ```bash
56
+ uip tm executions list-filtered --project-key <KEY> \
57
+ --status finished --execution-type automated \
58
+ --labels <Label1> <Label2> --sort-by <expr> --output json
59
+ ```
60
+
61
+ Use it for label filtering, `--updated-by <userId>`, multi-execution lookup via `--test-execution-ids`, or custom ordering. Labels and execution IDs are **space-separated** variadics.
62
+
63
+ `executions testcaselogs list` additionally accepts `--results <results...>`, `--statuses <statuses...>` and `--duration-period <period>` (e.g. `last7Days`) — prefer these over post-filtering a wide list.
64
+
65
+ ## Evidence capture
66
+
67
+ ```bash
68
+ uip tm attachment download --execution-id <UUID> --only-failed --result-path ./evidence --output json
69
+ ```
70
+
71
+ `--test-case-name <name>` narrows to one case (case-insensitive). `--test-set-key` can stand in for `--project-key` when you only have the set. Attach what you downloaded to the defect rather than describing it.
72
+
73
+ ## Symptom → first command
74
+
75
+ | Symptom | Start here |
76
+ |---|---|
77
+ | "The nightly run failed" | Rung 1, then rung 2 |
78
+ | "This one test keeps breaking" | `list-result-history --only-failed` |
79
+ | "Which step does it die on?" | Rung 2 → rung 4 |
80
+ | "Prove it to me" | Rung 5 |
81
+ | "Did anyone re-run it?" | `executions list-filtered --updated-by` |
82
+ | "Is the whole suite degrading?" | `executions list-filtered --status finished --sort-by`, compare `get-stats` across runs |
83
+
84
+ ## Anti-patterns
85
+
86
+ - **Do NOT report a count as a diagnosis.** `get-stats` says how many failed, never why. Descend the ladder.
87
+ - **Do NOT call one red run a regression.** Check `list-result-history` first; a flaky test misreported as a defect burns a developer's day.
88
+ - **Do NOT list every test case log and filter locally.** `--only-failed`, `--results`, `--statuses` and `--duration-period` exist; client-side filtering misses paginated rows entirely.
89
+ - **Do NOT guess a `--test-case-log-id`.** It comes from `testcaselogs list`; a fabricated UUID returns an error the retry cap will burn through (Critical Rule #4).
90
+ - **Do NOT skip evidence on a defect you are filing.** `attachment download --only-failed` is one call.
@@ -75,7 +75,7 @@ Ingestion is asynchronous and automatic. Poll until the auto-created test cases
75
75
  uip tm testcases list --project-key <PROJECT_KEY> --output json
76
76
  ```
77
77
 
78
- - Poll **unfiltered**. Do NOT pass `--filter <PackageName>` — `--filter` matches a test case's name or key by **prefix** (see SKILL.md Rule 9), and an ingested test case is named `"<suite> > <test title>"`, so a package name never matches: the call stays empty forever and reads as a false "ingestion never happened".
78
+ - Poll **unfiltered**. Do NOT pass `--filter <PackageName>` — `--filter` matches a test case's name or key by **prefix** (see SKILL.md Rule 8), and an ingested test case is named `"<suite> > <test title>"`, so a package name never matches: the call stays empty forever and reads as a false "ingestion never happened".
79
79
  - The rows carry `TestCaseKey` (e.g. `SHIP:1`) plus `Id` (the UUID) and `Name` — count `TestCaseKey`, not `Id`, when polling.
80
80
  - Ingestion is done when `TestCount` new test cases from Step 1 are present, each named `"<suite> > <test title>"`. A plain `pack` prints only `Package`, `Output` and `TestCount` — if you want the exact expected names up front, run `--dry-run` first or read `testCases.json` inside the `.nupkg`; otherwise match on the count plus that name shape.
81
81
  - `TestCount` from Step 1 is one test case per Playwright **test** — it is not multiplied by the number of Playwright projects (2 tests × 2 projects → 2 test cases).
@@ -85,7 +85,7 @@ uip tm testcases list --project-key <PROJECT_KEY> --output json
85
85
 
86
86
  ## Step 4 — Set the default folder, create a test set, fill it by label
87
87
 
88
- Set the project's default Orchestrator folder FIRST — both the Step 5 probe and the Step 6 run resolve packages through it (Critical Rule #10):
88
+ Set the project's default Orchestrator folder FIRST — both the Step 5 probe and the Step 6 run resolve packages through it (Critical Rule #9):
89
89
 
90
90
  ```bash
91
91
  uip or folders list --output json # WITHOUT --all: only folders you are a member of
@@ -17,7 +17,6 @@ uip tm wait → block until terminal
17
17
  ## Prerequisites
18
18
 
19
19
  - Logged in: `uip login status --output json`. If not, `uip login`.
20
- - CLI surface probed (see [/uipath:uipath-test § Critical Rules #2](../SKILL.md#critical-rules)). Commands below use the post-rename shape; on a pre-rename CLI, translate via the [Pre-rename fallbacks](../SKILL.md#pre-rename-fallbacks) table (`testcases` → `testcase`, `run` → `execute`, etc.) before each call.
21
20
  - Project builds clean: `uip rpa build "<PROJECT_DIR>" --output json` returns `Result: "Success"`.
22
21
  - Test case exists in Test Manager: `uip tm testcases list --project-key <PROJECT_KEY> --output json`. Capture the `ObjKey` (e.g. `DEMO:1`) — it is the `--test-case-key` value.
23
22
 
@@ -5,7 +5,6 @@ Detailed instructions for generating persona-tailored test reports from UiPath T
5
5
  ## Prerequisites
6
6
 
7
7
  - Authenticated session
8
- - CLI surface probed (see [/uipath:uipath-test § Critical Rules #2](../SKILL.md#critical-rules)). Commands below use the post-rename shape; translate via the [Pre-rename fallbacks](../SKILL.md#pre-rename-fallbacks) table on a pre-rename CLI.
9
8
  - A Test Manager project key
10
9
  - A Test Manager test set key
11
10
 
@@ -108,4 +107,4 @@ Stop when: the user is satisfied, the response has no more data, or 3 retries ha
108
107
 
109
108
  - **Do NOT generate a report without asking for the persona** — a release manager receiving raw test logs is noise; a tester receiving only a pass/fail count is missing the detail they need.
110
109
  - **Do NOT fabricate test results** — only report data returned by the API. If executions are empty, tell the user there are no results for the selected filters.
111
- - **Do NOT build `--output-filter` aggregate expressions to compute counts** — a malformed filter aborts the command, and under Critical Rule 11 that stops the whole report for totals you can tally from the test case logs already fetched.
110
+ - **Do NOT build `--output-filter` aggregate expressions to compute counts** — a malformed filter aborts the command, and under Critical Rule 10 that stops the whole report for totals you can tally from the test case logs already fetched.
@@ -225,7 +225,7 @@ When `healing-fixes.json` contains actionable fixes, present the findings to the
225
225
 
226
226
  1. Match the XAML activity by `ActivityRefId` → `IdRef` attribute (unique within workflow).
227
227
  2. Extract the failed selector and the HA-recommended selector (`enhancedTarget` for self-healing; the chosen detection's `EnhancedTargetDto.PartialSelector`/`FuzzyPartialSelector` for recommendation-only) — these are the `before`/`after` values to surface in the diff and hand to the delegate.
228
- 3. On approval, the apply is **delegated to `uipath-rpa`** per the central apply contract (`SKILL.md` §1 invariant 10 / `references/presenting.md` § Interactive resolutions). `uipath-rpa` owns the XAML selector edit (including XML encoding), runtime selector recovery (it decides when and how to drive the package-bundled `uia-improve-selector`), and validation — all in its own context. Do NOT check for or invoke `uia-improve-selector` here, do NOT run any staging / `--mode recover` / write-back CLI yourself, and do NOT edit the XAML yourself. If approval cannot be obtained, no delegate is available, or the delegation fails, present the concrete change (workflow file, activity, recovered selector) as a recommendation for the user to apply in Studio, and stop. A failed delegation is never a reason to edit the workflow yourself.
228
+ 3. On approval, the apply is **delegated to `uipath-rpa`** per the central apply contract (`SKILL.md` §1 invariant 10 / `references/presenting.md` § Interactive resolutions). `uipath-rpa` owns the XAML selector edit (including XML encoding), runtime selector recovery (it decides when and how to drive the package-bundled recover-selector flow), and validation — all in its own context. Do NOT attempt selector recovery here, do NOT run any staging or write-back CLI yourself, and do NOT edit the XAML yourself. If approval cannot be obtained, no delegate is available, or the delegation fails, present the concrete change (workflow file, activity, recovered selector) as a recommendation for the user to apply in Studio, and stop. A failed delegation is never a reason to edit the workflow yourself.
229
229
 
230
230
  ### Applying `dismiss-popup` Fixes
231
231
 
@@ -130,7 +130,7 @@ For each interactive action, in order:
130
130
 
131
131
  3. **Ask via AskUserQuestion** — the exact apply/dismiss question, plus a project-path follow-up if the path is not already known.
132
132
 
133
- 4. **On accept: delegate the apply — never edit the artifact yourself.** Spawn a subagent that loads the artifact's owning skill (`.xaml`/`.cs`→`uipath-rpa`, which itself drives package-bundled selector recovery such as `uia-improve-selector`) and hand it the confirmed change: the workflow file, the activity matched by `ActivityRefId`, the before→after value, and `project_dir`. The delegate edits **in place at `project_dir`** (the user's real working copy — do NOT spawn it into a fresh isolated worktree, which forks a throwaway copy the edit never reaches), applies any XML encoding, and validates (`uip rpa validate --file-path "<WORKFLOW_FILE>" --output json`) — you run none of those steps and no write-back CLI. **After the delegate applies, 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.
133
+ 4. **On accept: delegate the apply — never edit the artifact yourself.** Spawn a subagent that loads the artifact's owning skill (`.xaml`/`.cs`→`uipath-rpa`, which itself drives the package-bundled selector-recovery flow) and hand it the confirmed change: the workflow file, the activity matched by `ActivityRefId`, the before→after value, and `project_dir`. The delegate edits **in place at `project_dir`** (the user's real working copy — do NOT spawn it into a fresh isolated worktree, which forks a throwaway copy the edit never reaches), applies any XML encoding, and validates (`uip rpa validate --file-path "<WORKFLOW_FILE>" --output json`) — you run none of those steps and no write-back CLI. **After the delegate applies, 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
134
 
135
135
  5. **On decline, non-answer, unavailable `AskUserQuestion`, no usable delegate, or a delegation that fails/errors: do not modify files.** Present the proposed edit as plain text and stop — a missing/failed approval or a failed delegation is never permission to edit the artifact yourself. If a delegation errored or was spawned more than once, verify whether the edit already landed by reading the target file before doing anything else; never self-edit to "finish" or redo a delegate's work.
136
136
 
@@ -13,7 +13,7 @@ What this looks like:
13
13
 
14
14
  What can cause it:
15
15
  - Robot/user account is not assigned to the target folder
16
- - Folder name contains characters Maestro's folder-path resolver historically chokes on — e.g., commas (`"Autopilot, Agentic, and Gen AI"` triggered `PLT-82739`)
16
+ - Folder name contains characters Maestro's folder-path resolver historically chokes on — e.g., a comma in the folder name (`"Autopilot, Agentic, and Gen AI"`)
17
17
  - Folder was renamed or deleted; bindings still reference the old path or key
18
18
  - Solution imported across environments where folder keys differ - keys were baked into the solution. This playbook owns the stale-folder-key diagnosis; the same root cause surfaces as `Request to Integration Services failed with status code '404'` - arrive here from [integration-service-404](integration-service-404.md)
19
19
  - API call missing or pointing the `X-UIPATH-OrganizationUnitId` header at the wrong folder
@@ -16,10 +16,10 @@ What can cause it:
16
16
  - Request headers too long (HA setups with mismatched token-signing certs)
17
17
  - Invalid `Content-Type` (must be `application/json`)
18
18
  - Expired auth token
19
- - Maestro frontend bug — historically `MST-4535` "actionable messages" feature surfaced as generic 400 when a new app version was available
19
+ - Known defect in the Action App "actionable messages" feature — surfaced as a generic 400 when a new app version was available
20
20
 
21
21
  What to look for:
22
- - Whether actionable messages toggle is enabled on the failing app — if yes, this is the known frontend bug
22
+ - Whether actionable messages toggle is enabled on the failing app — if yes, this is the known defect
23
23
  - Whether the workflow uses a custom HTTP request task with hand-crafted headers/body
24
24
  - Whether the issue is tied to a specific HA tenant
25
25
 
@@ -30,12 +30,12 @@ What to look for:
30
30
 
31
31
  1. Get the incident: `uip maestro <type> instance incidents <instance-id> -f <folder-key> --output json` — capture any HTTP body returned upstream
32
32
  2. Pull the activity inputs to see what was actually sent: `uip maestro <type> instance variables <instance-id> -f <folder-key> --output json`
33
- 3. If the failing element is an Action App task with actionable messages enabled, jump straight to the `MST-4535` resolution
33
+ 3. If the failing element is an Action App task with actionable messages enabled, jump straight to the actionable-messages resolution below
34
34
  4. For HA setups, request platform logs from the Maestro service — generic 400 here often points to token-signing certificate mismatch across nodes
35
35
 
36
36
  ## Resolution
37
37
 
38
- - **If actionable messages bug (`MST-4535`):** turn OFF the "Enable actionable messages" toggle on the Action App task. Frontend fix is deployed to disable by default — re-publish to pick it up
38
+ - **If the actionable-messages defect:** turn OFF the "Enable actionable messages" toggle on the Action App task. A fix that disables it by default has shipped — re-publish to pick it up
39
39
  - **If malformed JSON:** validate the payload structure
40
40
  - **If Content-Type:** set `application/json`
41
41
  - **If expired token:** rotate the auth token and retry
@@ -13,8 +13,8 @@ What this looks like:
13
13
 
14
14
  What can cause it:
15
15
  - Malformed or invalid request body for the connector action
16
- - Connector update changed expected `Content-Type` (e.g., Outlook moved from `application/json` to `multipart/form-data` for attachments) breaking already-published activities — historical bug `ENGCE-46376`
17
- - A previously-bound variable was removed but the connector activity still references it, sending an empty string `""` instead of `null` (Office 365 Send Email historical issue, `PLT-77820`)
16
+ - Connector update changed expected `Content-Type` (e.g., Outlook moved from `application/json` to `multipart/form-data` for attachments) breaking already-published activities
17
+ - A previously-bound variable was removed but the connector activity still references it, sending an empty string `""` instead of `null` (historically seen with Office 365 Send Email)
18
18
  - Mismatched connector input schema after a connector version bump
19
19
  - Bad connection state (token, scopes) — connection should be re-provisioned
20
20
 
@@ -14,7 +14,7 @@ What this looks like:
14
14
  What can cause it:
15
15
  - A gateway/proxy (Azure Application Gateway, Cloudflare, nginx) times out before Orchestrator returns. Typical with synchronous call mode where the HTTP connection is held until the job completes
16
16
  - Many concurrent action-center tasks each spawning a job — resource contention pushes individual call latency past the gateway threshold
17
- - Serverless/coded RPA timing out at the serverless layer ("automation cancelled because it reached the time limit") — root cause is on the robot side, not Maestro (tracked in past Slack threads as `MST-6379`)
17
+ - Serverless/coded RPA timing out at the serverless layer ("automation cancelled because it reached the time limit") — root cause is on the robot side, not Maestro
18
18
 
19
19
  What to look for:
20
20
  - Whether the underlying child job is actually `Successful` in Orchestrator while Maestro reports timeout — indicates gateway timeout, not runtime failure
@@ -15,7 +15,7 @@ Ownership: the underlying fault is Orchestrator folder capacity/configuration; t
15
15
 
16
16
  What can cause it:
17
17
  - Folder has no machine templates with Unattended or NonProduction runtime slots assigned
18
- - Folder only has Test Runtimes but Maestro defaults to NonProduction runtime type (tracked historically as `MST-6775`)
18
+ - Folder only has Test Runtimes but Maestro defaults to NonProduction runtime type
19
19
  - Tenant has no available runtime licenses
20
20
  - Machines exist but are all currently busy or disconnected
21
21
 
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "skillsVersion": "1.201.0-preview.621",
4
- "targetCli": "^1.201.0"
3
+ "skillsVersion": "1.202.0-preview.635",
4
+ "targetCli": "^1.202.0"
5
5
  }
@@ -1,231 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Deterministic grammar audit for the compact no-build plan (tasks/tasks.md).
3
-
4
- Usage:
5
- python3 audit_plan.py <tasks/tasks.md> [--sdd <sdd.md>]
6
-
7
- Read-only. Exit 0 = grammar-clean. Exit 1 = numbered findings on stderr;
8
- repair the plan with Write/Edit and re-run until clean. Enforces the compact
9
- `tasks/tasks.md` contract (planning.md § Compact no-build T-entry shape): `## T{N}: task "{Task Name}"` headings, one
10
- `field: value` per line, legal `activation-mode` / `entry-rule` pairs, lanes on
11
- sequential runs, no registry-derived keys.
12
- `--sdd` additionally checks every `sla-status-change(...)` reference in the
13
- SDD for the 2-arg (breach) / 3-arg (at-risk) quoted shape.
14
- """
15
-
16
- from __future__ import annotations
17
-
18
- import re
19
- import sys
20
- from pathlib import Path
21
-
22
- TASK_FIELDS = [
23
- "stage", "type", "activation-mode", "entry-rule", "lane", "required",
24
- "run-only-once", "resource-intent", "identity", "rationale",
25
- ]
26
- # `lane` is only mandatory for sequential runs; checked separately.
27
- ALWAYS_REQUIRED = [f for f in TASK_FIELDS if f != "lane"]
28
-
29
- # Compact form (`## T{N}: task "Name"`) or canonical full-form build title
30
- # (`## T{N}: Add <type> task "Name" to "Stage"`) — both are addressable.
31
- TASK_HEADING = re.compile(
32
- r'^## T\d+: (?:task "[^"\n]+"|Add [a-z][a-z-]* task "[^"\n]+" to "[^"\n]+")\s*$'
33
- )
34
- ANY_T_HEADING = re.compile(r"^## T\d+\s*[:.]", re.M)
35
- FORBIDDEN_KEYS = ["taskTypeId", "activityTypeId", "connectionId", "registry-resolved", "recipients-resolved"]
36
-
37
- # planning.md § Activation-mode audit — the six user-visible task modes plus
38
- # `parallel-after-predecessor`.
39
- ACTIVATION_MODES = {
40
- "sequential", "parallel", "parallel-after-predecessor",
41
- "event-triggered", "adhoc", "fan-in", "conditional-gate",
42
- }
43
- # plugins/conditions/task-entry-conditions/planning.md § activation-mode /
44
- # rule-type table, keyed by rule. Rules outside this map are explicitly
45
- # authored event/condition rules and pair with any mode that permits them.
46
- ENTRY_RULE_MODES = {
47
- "runs-sequentially": {"sequential", "parallel-after-predecessor"},
48
- "current-stage-entered": {"parallel"},
49
- "adhoc": {"adhoc"},
50
- "selected-tasks-completed": {"fan-in", "conditional-gate"},
51
- "wait-for-connector": {"event-triggered"},
52
- }
53
-
54
-
55
- def field_value(section: str, field: str) -> str | None:
56
- match = re.search(rf"(?im)^\s*[-*]?\s*{re.escape(field)}\s*:\s*(.+)$", section)
57
- return match.group(1).strip() if match else None
58
-
59
-
60
- def rule_token(value: str | None) -> str | None:
61
- """Leading canonical identifier, dropping any `("selector")` and trailing prose."""
62
- match = re.match(r"[a-z][a-z0-9-]*", (value or "").strip().strip('`"\' ').casefold())
63
- return match.group(0) if match else None
64
-
65
-
66
- def audit(path: Path) -> list[str]:
67
- findings: list[str] = []
68
- sequential_lanes: dict[str, list[tuple[str, int]]] = {}
69
- text = path.read_text(encoding="utf-8")
70
-
71
- headings = list(re.finditer(r"(?m)^## (T\d+)[^\n]*$", text))
72
- if not headings:
73
- findings.append("no `## T{N}:` entries found — the compact plan uses T-numbered H2 entries")
74
- return findings
75
-
76
- for key in FORBIDDEN_KEYS:
77
- if key in text:
78
- findings.append(f"forbidden key {key!r} — the no-build plan omits registry-derived data")
79
-
80
- for index, heading in enumerate(headings):
81
- end = headings[index + 1].start() if index + 1 < len(headings) else len(text)
82
- section = text[heading.start():end]
83
- head_line = section.splitlines()[0]
84
- label = heading.group(1)
85
-
86
- is_task_entry = TASK_HEADING.match(head_line) is not None
87
- looks_like_task = (
88
- field_value(section, "stage") is not None
89
- and field_value(section, "activation-mode") is not None
90
- ) or re.search(r"(?i)\btask\b[^\n]*\"", head_line) is not None
91
-
92
- if not is_task_entry and looks_like_task:
93
- findings.append(
94
- f'{label}: task heading must be `## {label}: task "{{Task Name}}"` or the canonical '
95
- f'`## {label}: Add <type> task "{{Task Name}}" to "{{Stage}}"` (got: {head_line!r})'
96
- )
97
-
98
- if not (is_task_entry or looks_like_task):
99
- continue
100
-
101
- # One `field: value` per line; semicolon-packed lines hide fields.
102
- for field in ALWAYS_REQUIRED:
103
- if field_value(section, field) is None:
104
- hint = ""
105
- if re.search(rf"(?i)[;,]\s*{re.escape(field)}\s*:", section):
106
- hint = " (present mid-line — each field goes on its own line)"
107
- findings.append(f"{label}: missing `{field}:` line{hint}")
108
-
109
- activation = (field_value(section, "activation-mode") or "").casefold()
110
- mode = rule_token(activation)
111
- rule = rule_token(field_value(section, "entry-rule"))
112
- if mode is not None and mode not in ACTIVATION_MODES:
113
- findings.append(
114
- f"{label}: `activation-mode: {mode}` is not a task mode; use one of "
115
- f"{', '.join(sorted(ACTIVATION_MODES))}"
116
- )
117
- elif mode is not None and rule in ENTRY_RULE_MODES:
118
- allowed = ENTRY_RULE_MODES[rule]
119
- if mode not in allowed:
120
- findings.append(
121
- f"{label}: `activation-mode: {mode}` cannot carry `entry-rule: {rule}` — "
122
- f"that rule pairs with {' or '.join(sorted(allowed))} "
123
- f"(list position never normalizes an authored rule into another mode)"
124
- )
125
- lane = field_value(section, "lane")
126
- if "sequential" in activation and (lane is None or not re.match(r"^\d+$", lane)):
127
- findings.append(f"{label}: sequential task needs an integer `lane:` line")
128
- elif "sequential" in activation and lane is not None:
129
- stage = (field_value(section, "stage") or "").strip('"` ')
130
- sequential_lanes.setdefault(stage, []).append((label, int(lane)))
131
-
132
- # Sequential runs use consecutive single-task lanes: no duplicates, no gaps.
133
- for stage, lanes in sequential_lanes.items():
134
- numbers = [n for _, n in lanes]
135
- if sorted(numbers) != list(range(min(numbers), min(numbers) + len(numbers))):
136
- labels = ", ".join(f"{t}=lane {n}" for t, n in lanes)
137
- findings.append(
138
- f"stage {stage!r}: sequential lanes must be consecutive single-task numbers with no duplicates; got {labels}"
139
- )
140
-
141
- findings.extend(sla_shape_findings(text, path.name))
142
- return findings
143
-
144
-
145
- def sla_shape_findings(text: str, source: str) -> list[str]:
146
- """sla-status-change references need 2 quoted args (breach) or 3 (at-risk).
147
-
148
- Zero-quoted-arg mentions are summary/prose shorthand and are not flagged.
149
- """
150
- findings: list[str] = []
151
- # Every `#### Stage SLA` block declares its title on its own line —
152
- # a collapsed `**SLA Type:** … **SLA Title:** …` line hides the title
153
- # from line-start tooling and reference resolution.
154
- for match in re.finditer(r"(?im)^####\s+Stage SLA\s*$", text):
155
- block_end = re.search(r"(?m)^#{1,4}\s", text[match.end():])
156
- block = text[match.end(): match.end() + block_end.start()] if block_end else text[match.end():]
157
- if not re.search(r"(?im)^\*\*SLA Title:\*\*\s*\S", block):
158
- line_no = text[: match.start()].count("\n") + 1
159
- findings.append(
160
- f"{source}:{line_no}: '#### Stage SLA' block has no line-start '**SLA Title:**' — "
161
- "render '**SLA Type:**' and '**SLA Title:**' as two separate lines"
162
- )
163
- for line_no, line in enumerate(text.splitlines(), 1):
164
- for call in re.finditer(r"sla-status-change\s*\(([^)]*)\)", line, re.I):
165
- args = re.findall(r"[\"“‘']([^\"”’']+)[\"”’']", call.group(1))
166
- if args and len(args) not in (2, 3):
167
- findings.append(
168
- f"{source}:{line_no}: sla-status-change reference needs 2 (breach) "
169
- f"or 3 (at-risk) quoted args; got {len(args)}"
170
- )
171
- if args and args[0].strip().casefold() == "case":
172
- findings.append(
173
- f"{source}:{line_no}: sla-status-change target 'Case' — the case-level target is the literal 'root'"
174
- )
175
- return findings
176
-
177
-
178
- def plan_repeats_sdd_sla_rules(plan: str, sdd: str) -> list[str]:
179
- """Every quoted-arg sla-status-change entry declared in the SDD is repeated
180
- verbatim in the plan (compact-contract requirement) — target + each title."""
181
- findings: list[str] = []
182
- declared: list[list[str]] = []
183
- for call in re.finditer(r"sla-status-change\s*\(([^)]*)\)", sdd, re.I):
184
- args = re.findall(r"[\"“‘']([^\"”’']+)[\"”’']", call.group(1))
185
- if args and args not in declared:
186
- declared.append(args)
187
- if not declared:
188
- return findings
189
- lowered = plan.casefold()
190
- if "sla-status-change" not in lowered:
191
- findings.append(
192
- "the SDD declares sla-status-change entry rules but the plan carries none — "
193
- "each gets its own T-entry with rule-type: sla-status-change, repeating target and titles verbatim"
194
- )
195
- return findings
196
- for args in declared:
197
- missing = [a for a in args if a.casefold() not in lowered]
198
- if missing:
199
- findings.append(
200
- f"plan does not repeat the SDD sla-status-change entry {tuple(args)!r} verbatim — missing: {', '.join(missing)}"
201
- )
202
- return findings
203
-
204
-
205
- def main() -> None:
206
- args = list(sys.argv[1:])
207
- sdd: Path | None = None
208
- if "--sdd" in args:
209
- i = args.index("--sdd")
210
- sdd = Path(args[i + 1])
211
- del args[i:i + 2]
212
- if len(args) != 1:
213
- sys.exit(__doc__)
214
- findings = audit(Path(args[0]))
215
- if sdd is not None:
216
- sdd_text = sdd.read_text(encoding="utf-8")
217
- findings.extend(sla_shape_findings(sdd_text, sdd.name))
218
- findings.extend(plan_repeats_sdd_sla_rules(Path(args[0]).read_text(encoding="utf-8"), sdd_text))
219
- if findings:
220
- shown = findings[:40]
221
- print("AUDIT FAIL — repair these, then re-run:", file=sys.stderr)
222
- for n, f in enumerate(shown, 1):
223
- print(f" {n}. {f}", file=sys.stderr)
224
- if len(findings) > len(shown):
225
- print(f" … and {len(findings) - len(shown)} more", file=sys.stderr)
226
- sys.exit(1)
227
- print("AUDIT OK: tasks.md grammar is clean")
228
-
229
-
230
- if __name__ == "__main__":
231
- main()