@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +41 -29
- package/README.md +1 -0
- package/assets/skill-status.json +13 -2
- package/assets/uip-catalog-snapshot.json +95 -46
- package/package.json +2 -1
- package/skills/uipath-admin/SKILL.md +107 -197
- package/skills/uipath-admin/references/audit-commands.md +69 -120
- package/skills/uipath-admin/references/audit-workflow-guide.md +101 -152
- package/skills/uipath-admin/references/authorization/authorization-commands.md +121 -210
- package/skills/uipath-admin/references/authorization/check-access.md +39 -63
- package/skills/uipath-admin/references/authorization/grant-permissions.md +38 -49
- package/skills/uipath-admin/references/authorization/permission-catalog.md +32 -34
- package/skills/uipath-admin/references/authorization/role-assignment-management.md +96 -99
- package/skills/uipath-admin/references/authorization/role-management.md +113 -142
- package/skills/uipath-admin/references/diagnose/CAPABILITY.md +13 -14
- package/skills/uipath-admin/references/diagnose/{references/failure-modes.md → failure-modes.md} +90 -46
- package/skills/uipath-admin/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +21 -14
- package/skills/uipath-admin/references/external-app-management.md +42 -39
- package/skills/uipath-admin/references/identity-commands.md +72 -625
- package/skills/uipath-admin/references/identity-troubleshoot-guide.md +73 -95
- package/skills/uipath-admin/references/ip-restriction/bypass-rule-management.md +25 -54
- package/skills/uipath-admin/references/ip-restriction/enforcement-management.md +19 -31
- package/skills/uipath-admin/references/ip-restriction/ip-range-management.md +48 -45
- package/skills/uipath-admin/references/ip-restriction/ip-restriction-commands.md +89 -146
- package/skills/uipath-admin/references/key-concepts.md +24 -0
- package/skills/uipath-admin/references/organization-management.md +49 -70
- package/skills/uipath-admin/references/organizations-commands.md +39 -74
- package/skills/uipath-admin/references/pat-management.md +25 -38
- package/skills/uipath-admin/references/robot-account-management.md +16 -14
- package/skills/uipath-admin/references/smtp-management.md +19 -14
- package/skills/uipath-admin/references/tenant-management.md +1 -1
- package/skills/uipath-admin/references/tenants-commands.md +82 -148
- package/skills/uipath-admin/references/user-management.md +70 -56
- package/skills/uipath-agents/SKILL.md +4 -3
- package/skills/uipath-agents/references/authentication.md +4 -3
- package/skills/uipath-agents/references/coded/capabilities/datafabric.md +465 -0
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -0
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +2 -0
- package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +12 -6
- package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
- package/skills/uipath-agents/references/coded/frameworks/langgraph-integration.md +48 -16
- package/skills/uipath-agents/references/coded/frameworks/openai-agents-integration.md +1 -1
- package/skills/uipath-agents/references/coded/lifecycle/deployment.md +11 -1
- package/skills/uipath-agents/references/coded/quickstart.md +11 -8
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +3 -3
- package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +19 -2
- package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -2
- package/skills/uipath-agents/references/lowcode/evaluations/orchestrator-eval-run.md +409 -155
- package/skills/uipath-agents/references/lowcode/evaluations/running-evaluations.md +2 -2
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-aops/SKILL.md +313 -0
- package/skills/uipath-aops/assets/templates/pipeline-dto-template.json +15 -0
- package/skills/uipath-aops/references/discovery-flow.md +312 -0
- package/skills/uipath-aops/references/migration-guide.md +146 -0
- package/skills/uipath-aops/references/pipeline-dto-guide.md +276 -0
- package/skills/uipath-aops/references/save-and-run-guide.md +156 -0
- package/skills/uipath-api-workflow/SKILL.md +48 -6
- package/skills/uipath-api-workflow/assets/templates/file-base64-roundtrip-example.json +154 -0
- package/skills/uipath-api-workflow/assets/templates/nested-control-flow-example.json +0 -1
- package/skills/uipath-api-workflow/references/cli-reference.md +20 -1
- package/skills/uipath-api-workflow/references/expressions-and-context.md +19 -0
- package/skills/uipath-api-workflow/references/files-and-base64.md +153 -0
- package/skills/uipath-api-workflow/references/operating-published-workflows.md +3 -2
- package/skills/uipath-api-workflow/references/task-types.md +89 -3
- package/skills/uipath-api-workflow/references/testing-and-evals.md +224 -0
- package/skills/uipath-api-workflow/references/troubleshooting.md +124 -4
- package/skills/uipath-coded-apps/SKILL.md +4 -2
- package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1 -1
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +11 -1
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +5 -3
- package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +1 -0
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +2 -0
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +18 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +4 -0
- package/skills/uipath-connector-builder/SKILL.md +7 -5
- package/skills/uipath-connector-builder/references/debugging.md +5 -1
- package/skills/uipath-connector-builder/references/element-json.md +3 -1
- package/skills/uipath-connector-builder/references/standard-resources.md +37 -6
- package/skills/uipath-functions/SKILL.md +134 -222
- package/skills/uipath-functions/references/js/authoring-guide.md +141 -0
- package/skills/uipath-functions/references/js/bindings-guide.md +120 -0
- package/skills/uipath-functions/references/js/calling-uipath-apis-guide.md +112 -0
- package/skills/uipath-functions/references/js/coded-app-wiring-guide.md +103 -0
- package/skills/uipath-functions/references/js/deployment-guide.md +109 -0
- package/skills/uipath-functions/references/js/http-semantics-guide.md +80 -0
- package/skills/uipath-functions/references/js/job-mode-guide.md +114 -0
- package/skills/uipath-functions/references/js/local-dev-guide.md +107 -0
- package/skills/uipath-functions/references/python/workflow-guide.md +224 -0
- package/skills/uipath-governance/SKILL.md +9 -8
- package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +36 -8
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +14 -12
- package/skills/uipath-governance/references/compliance-pack/disable/impl.md +5 -3
- package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +7 -5
- package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +14 -7
- package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +3 -1
- package/skills/uipath-governance/references/compliance-pack/preview-gate.md +1 -1
- package/skills/uipath-governance/references/compliance-pack/query/impl.md +4 -2
- package/skills/uipath-governance/references/diagnose/CAPABILITY.md +12 -12
- package/skills/uipath-governance/references/diagnose/{references/failure-modes.md → failure-modes.md} +5 -5
- package/skills/uipath-governance/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +2 -2
- package/skills/uipath-governance/references/disambiguation-guide.md +15 -7
- package/skills/uipath-human-in-the-loop/SKILL.md +107 -9
- package/skills/uipath-human-in-the-loop/references/hitl-casetask-action.md +413 -0
- package/skills/uipath-insights/SKILL.md +21 -14
- package/skills/uipath-insights/references/alerts-reads-guide.md +242 -0
- package/skills/uipath-insights/references/filter-discovery-guide.md +1 -1
- package/skills/uipath-insights/references/jobs-commands-guide.md +2 -2
- package/skills/uipath-ixp/references/cli-reference.md +1 -1
- package/skills/uipath-ixp/references/improve-prompts-guide.md +5 -6
- package/skills/uipath-maestro-bpmn/SKILL.md +87 -15
- package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +10 -10
- package/skills/uipath-maestro-bpmn/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +1 -1
- package/skills/uipath-maestro-bpmn/references/expression-authoring.md +12 -2
- package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +12 -12
- package/skills/uipath-maestro-bpmn/references/operate/{references/run.md → run.md} +2 -2
- package/skills/uipath-maestro-bpmn/references/operate/{references/ship.md → ship.md} +3 -3
- package/skills/uipath-maestro-bpmn/references/patterns/ai-decision-review-guide.md +138 -0
- package/skills/uipath-maestro-bpmn/references/patterns/approval-chain-guide.md +136 -0
- package/skills/uipath-maestro-bpmn/references/patterns/composing-guide.md +113 -0
- package/skills/uipath-maestro-bpmn/references/patterns/external-wait-guide.md +145 -0
- package/skills/uipath-maestro-bpmn/references/patterns/failure-escalation-guide.md +103 -0
- package/skills/uipath-maestro-bpmn/references/patterns/high-volume-batch-guide.md +107 -0
- package/skills/uipath-maestro-bpmn/references/patterns/queue-distribution-guide.md +129 -0
- package/skills/uipath-maestro-bpmn/references/patterns/smart-triage-guide.md +129 -0
- package/skills/uipath-maestro-bpmn/references/registry-workflow.md +15 -0
- package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +67 -36
- package/skills/uipath-maestro-bpmn/references/shared/project-layout.md +6 -5
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +23 -5
- package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +101 -53
- package/skills/uipath-maestro-case/SKILL.md +23 -24
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +30 -17
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -5
- package/skills/uipath-maestro-case/references/brownfield.md +3 -3
- package/skills/uipath-maestro-case/references/case-commands.md +8 -4
- package/skills/uipath-maestro-case/references/case-editing-operations.md +19 -19
- package/skills/uipath-maestro-case/references/case-schema.md +17 -3
- package/skills/uipath-maestro-case/references/connector-integration.md +25 -16
- package/skills/uipath-maestro-case/references/connector-trigger-impl.md +15 -15
- package/skills/uipath-maestro-case/references/connector-trigger-planning.md +32 -29
- package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -1
- package/skills/uipath-maestro-case/references/evals/evals.json +11 -11
- package/skills/uipath-maestro-case/references/implementation.md +74 -44
- package/skills/uipath-maestro-case/references/phased-execution.md +23 -21
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +28 -23
- package/skills/uipath-maestro-case/references/planning.md +37 -252
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +8 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +11 -10
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +12 -12
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +10 -9
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +16 -14
- package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +15 -15
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +20 -21
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +38 -38
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +24 -20
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +24 -20
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +25 -21
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +30 -22
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +44 -28
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -10
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +27 -23
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +25 -22
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +25 -21
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +5 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -9
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +30 -19
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +4 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +8 -7
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +3 -3
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +5 -4
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +7 -7
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +21 -17
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +29 -21
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +23 -21
- package/skills/uipath-maestro-case/references/registry-discovery.md +5 -5
- package/skills/uipath-maestro-flow/.maintenance/README.md +35 -28
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +19 -1
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +3 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +2 -2
- package/skills/uipath-maestro-flow/SKILL.md +66 -76
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +75 -72
- package/skills/uipath-maestro-flow/references/author/brownfield.md +90 -0
- package/skills/uipath-maestro-flow/references/author/{references/editing-operations-cli.md → editing-operations-cli.md} +9 -4
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +373 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +103 -0
- package/skills/uipath-maestro-flow/references/author/{references/greenfield.md → greenfield.md} +32 -20
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +342 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +283 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +227 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agent/planning.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/agentic-process/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/api-workflow/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/batch-transform/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +449 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector/planning.md +3 -3
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/impl.md +20 -18
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/connector-trigger/planning.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +427 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +185 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/impl.md +5 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/impl.md +2 -2
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +178 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/hitl/planning.md +14 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/impl-connector.md +4 -4
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/http/planning.md +3 -3
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/impl.md +6 -6
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-agent/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/impl.md +4 -4
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/inline-voice-agent/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/impl.md +8 -8
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/impl.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/loop/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/rpa/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/impl.md +6 -8
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/impl.md +5 -5
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/script/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/subflow/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +241 -0
- package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/transform/planning.md +1 -1
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +39 -37
- package/skills/uipath-maestro-flow/references/diagnose/{references/failure-modes.md → failure-modes.md} +22 -22
- package/skills/uipath-maestro-flow/references/diagnose/{references/troubleshooting-guide.md → troubleshooting-guide.md} +60 -1
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +27 -25
- package/skills/uipath-maestro-flow/references/evaluate/{references/commands-reference.md → commands-reference.md} +58 -7
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +21 -21
- package/skills/uipath-maestro-flow/references/operate/{references/manage.md → manage.md} +4 -4
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/{references/ship.md → ship.md} +5 -5
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +30 -22
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +76 -184
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +49 -60
- package/skills/uipath-maestro-flow/references/shared/file-format.md +32 -11
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +49 -104
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +66 -103
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +4 -4
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-planner/assets/templates/case/case-sdd-template.md +5 -3
- package/skills/uipath-planner/references/case/case-design-lane-guide.md +1 -1
- package/skills/uipath-planner/references/case/case-design-layers-guide.md +2 -2
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -1
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +3 -2
- package/skills/uipath-planner/references/sdd-generation-guide.md +1 -0
- package/skills/uipath-planner/scripts/case/audit_sdd.py +77 -1
- package/skills/uipath-platform/SKILL.md +6 -4
- package/skills/uipath-platform/references/integration-service/activities.md +7 -4
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +28 -0
- package/skills/uipath-platform/references/integration-service/resources.md +11 -0
- package/skills/uipath-platform/references/integration-service/triggers.md +2 -2
- package/skills/uipath-platform/references/licensing/diagnose/CAPABILITY.md +80 -0
- package/skills/uipath-platform/references/licensing/diagnose/references/failure-modes.md +147 -0
- package/skills/uipath-platform/references/licensing/diagnose/references/troubleshooting-guide.md +125 -0
- package/skills/uipath-platform/references/licensing/licensing.md +3 -0
- package/skills/uipath-platform/references/licensing/user-licenses-allocations.md +5 -0
- package/skills/uipath-platform/references/orchestrator/run-jobs.md +11 -2
- package/skills/uipath-platform/references/traces/feedback.md +4 -4
- package/skills/uipath-platform/references/traces/traces.md +1 -1
- package/skills/uipath-process-mining/SKILL.md +6 -6
- package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +10 -8
- package/skills/uipath-process-mining/references/model-editing.md +1 -1
- package/skills/uipath-process-mining/references/querying.md +4 -3
- package/skills/uipath-review/SKILL.md +171 -541
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +73 -92
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +4 -0
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +73 -180
- package/skills/uipath-review/references/architecture-assessment-guide.md +93 -105
- package/skills/uipath-review/references/review-workflow-guide.md +1 -1
- package/skills/uipath-review/references/rpa/modern-studio-issues.md +44 -44
- package/skills/uipath-review/references/rpa/rpa-common-issues.md +251 -321
- package/skills/uipath-review/references/rpa/rpa-review-checklist.md +1 -1
- package/skills/uipath-review/references/rule-catalog-workflow.md +25 -45
- package/skills/uipath-review/references/rule-format.md +21 -21
- package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +1 -1
- package/skills/uipath-rpa/CLAUDE.md +4 -5
- package/skills/uipath-rpa/SKILL.md +40 -246
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/FindText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetColorAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetCursorPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetField.md +13 -13
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetFieldAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetScreenArea.md +27 -8
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetText.md +2 -14
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/GetTextAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursor.md +3 -11
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/MoveCursorToText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendControlKey.md +2 -8
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeys.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SendKeysSecure.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetField.md +14 -13
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/SetFieldAtPosition.md +4 -7
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/_common-options.md +29 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession/authoring-paths.md +58 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/TerminalSession.md +197 -11
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitFieldText.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenReady.md +9 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitScreenText.md +2 -14
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities/WaitTextAtPosition.md +2 -10
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/activities.json +271 -0
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/coded/coded-api.md +61 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Terminal.Activities/2.10/overview.md +76 -0
- package/skills/uipath-rpa/references/cli-reference.md +63 -29
- package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +59 -1
- package/skills/uipath-rpa/references/coded/operations-guide.md +2 -1
- package/skills/uipath-rpa/references/debugging.md +29 -12
- package/skills/uipath-rpa/references/environment-setup.md +54 -1
- package/skills/uipath-rpa/references/execution-maps-guide.md +10 -9
- package/skills/uipath-rpa/references/legacy/activity-docs/_INVOKE-CODE.md +1 -1
- package/skills/uipath-rpa/references/uia-starter-guide.md +46 -8
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +3 -4
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +7 -8
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +132 -42
- package/skills/uipath-solution/SKILL.md +9 -6
- package/skills/uipath-solution/references/activate-and-manage.md +11 -6
- package/skills/uipath-solution/references/develop-solution.md +39 -28
- package/skills/uipath-solution/references/pack-and-deploy.md +49 -1
- package/skills/uipath-solution/references/scenarios/failure-modes.md +1 -1
- package/skills/uipath-solution/references/scenarios/intra-solution-references.md +3 -3
- package/skills/uipath-solution/references/scenarios/manual-edits.md +1 -1
- package/skills/uipath-solution/references/scenarios.md +2 -2
- package/skills/uipath-solution/references/solution-overview.md +15 -6
- package/skills/uipath-tasks/SKILL.md +11 -6
- package/skills/uipath-tasks/references/task-assignment.md +5 -0
- package/skills/uipath-tasks/references/task-catalogs.md +7 -4
- package/skills/uipath-tasks/references/task-completion.md +3 -1
- package/skills/uipath-tasks/references/task-data.md +3 -3
- package/skills/uipath-tasks/references/task-lifecycle.md +11 -0
- package/skills/uipath-tasks/references/task-metadata.md +4 -3
- package/skills/uipath-test/SKILL.md +13 -28
- package/skills/uipath-test/references/failure-triage-guide.md +90 -0
- package/skills/uipath-test/references/playwright-first-mile-guide.md +2 -2
- package/skills/uipath-test/references/publish-and-link-guide.md +0 -1
- package/skills/uipath-test/references/test-result-report-guide.md +1 -2
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/interpretations/healing-agent-data.md +1 -1
- package/skills/uipath-troubleshoot/references/presenting.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/folder-not-accessible.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/generic-error-400.md +4 -4
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/integration-service-400.md +2 -2
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/job-operation-timeout.md +1 -1
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/no-suitable-runtime-machine.md +1 -1
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-case/scripts/audit_plan.py +0 -231
- package/skills/uipath-maestro-flow/references/author/references/brownfield.md +0 -93
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +0 -545
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +0 -131
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -638
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -306
- package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +0 -229
- package/skills/uipath-maestro-flow/references/author/references/plugins/batch-transform/impl.md +0 -174
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +0 -741
- package/skills/uipath-maestro-flow/references/author/references/plugins/delay/impl.md +0 -75
- package/skills/uipath-maestro-flow/references/author/references/plugins/end/impl.md +0 -65
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +0 -204
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +0 -65
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +0 -201
- package/skills/uipath-maestro-flow/references/author/references/plugins/merge/impl.md +0 -43
- package/skills/uipath-maestro-flow/references/author/references/plugins/merge/planning.md +0 -29
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +0 -121
- package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +0 -230
- package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/impl.md +0 -198
- package/skills/uipath-maestro-flow/references/author/references/plugins/summarize/planning.md +0 -71
- package/skills/uipath-maestro-flow/references/author/references/plugins/switch/planning.md +0 -38
- package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +0 -48
- package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +0 -287
- package/skills/uipath-maestro-flow/references/evaluate/references/eval-sets-guide.md +0 -226
- package/skills/uipath-maestro-flow/references/evaluate/references/upload-safety.md +0 -82
- package/skills/uipath-maestro-flow/references/operate/references/run.md +0 -99
- /package/skills/uipath-maestro-bpmn/references/diagnose/{references/failure-modes.md → failure-modes.md} +0 -0
- /package/skills/uipath-maestro-bpmn/references/operate/{references/manage.md → manage.md} +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/decision/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/delay/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/end/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/flow/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/ixp/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/impl.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/queue/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/scheduled-trigger/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/switch/impl.md +0 -0
- /package/skills/uipath-maestro-flow/references/author/{references/plugins → plugins}/terminate/planning.md +0 -0
- /package/skills/uipath-maestro-flow/references/evaluate/{references/evaluators-guide.md → evaluators-guide.md} +0 -0
- /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. **
|
|
234
|
-
3. **
|
|
235
|
-
4. **
|
|
236
|
-
5. **
|
|
237
|
-
6. **
|
|
238
|
-
7. **
|
|
239
|
-
8. **
|
|
240
|
-
9.
|
|
241
|
-
10.
|
|
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
|
|
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 #
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/skills/uipath-troubleshoot/references/products/maestro/playbooks/folder-not-accessible.md
CHANGED
|
@@ -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.,
|
|
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
|
package/skills/uipath-troubleshoot/references/products/maestro/playbooks/generic-error-400.md
CHANGED
|
@@ -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
|
-
-
|
|
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
|
|
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
|
|
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
|
|
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
|
package/skills/uipath-troubleshoot/references/products/maestro/playbooks/integration-service-400.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
package/skills/uipath-troubleshoot/references/products/maestro/playbooks/job-operation-timeout.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
package/version-manifest.json
CHANGED
|
@@ -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()
|