@uipath/skills 1.199.0 → 1.200.0
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/CODEOWNERS +14 -8
- package/README.md +18 -3
- package/assets/skill-status.json +9 -1
- package/assets/uip-catalog-snapshot.json +227 -21
- package/package.json +11 -2
- package/scripts/npm-package-lifecycle.mjs +46 -0
- package/skills/uipath-admin/SKILL.md +5 -1
- package/skills/uipath-admin/references/audit-commands.md +1 -1
- package/skills/uipath-admin/references/audit-workflow-guide.md +9 -0
- package/skills/uipath-agents/SKILL.md +2 -2
- package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +7 -0
- package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +5 -6
- package/skills/uipath-agents/references/lowcode/critical-rules/critical-rules.md +1 -1
- package/skills/uipath-agents/references/lowcode/evaluations/evaluation-sets.md +5 -0
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +3 -3
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +3 -2
- package/skills/uipath-api-workflow/SKILL.md +2 -1
- package/skills/uipath-api-workflow/references/cli-reference.md +3 -3
- package/skills/uipath-coded-apps/SKILL.md +3 -2
- package/skills/uipath-coded-apps/assets/fixtures/governance-dashboard-starter-kit.tar.gz +0 -0
- package/skills/uipath-coded-apps/assets/templates/web-app-template.md +1 -1
- package/skills/uipath-coded-apps/references/create-web-app.md +60 -48
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +2 -2
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +2 -2
- package/skills/uipath-coded-apps/references/dashboards/primitives/tier-resolution.md +16 -16
- package/skills/uipath-coded-apps/references/oauth-scopes.md +28 -272
- package/skills/uipath-coded-apps/references/sdk/action-center.md +26 -243
- package/skills/uipath-coded-apps/references/sdk/agents.md +20 -130
- package/skills/uipath-coded-apps/references/sdk/conversational-agent.md +52 -706
- package/skills/uipath-coded-apps/references/sdk/data-fabric.md +20 -237
- package/skills/uipath-coded-apps/references/sdk/feedback.md +4 -139
- package/skills/uipath-coded-apps/references/sdk/governance-traces.md +7 -55
- package/skills/uipath-coded-apps/references/sdk/governance.md +4 -44
- package/skills/uipath-coded-apps/references/sdk/imports.md +77 -35
- package/skills/uipath-coded-apps/references/sdk/maestro.md +29 -406
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +30 -324
- package/skills/uipath-coded-apps/references/sdk/pagination.md +9 -67
- package/skills/uipath-coded-apps/references/sdk/traces.md +8 -43
- package/skills/uipath-functions/SKILL.md +23 -23
- package/skills/uipath-governance/SKILL.md +5 -4
- package/skills/uipath-governance/references/cli-cheatsheet.md +2 -1
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +143 -58
- package/skills/uipath-governance/references/compliance-pack/restore/impl.md +61 -0
- package/skills/uipath-human-in-the-loop/SKILL.md +4 -2
- package/skills/uipath-insights/SKILL.md +17 -18
- package/skills/uipath-ixp/SKILL.md +12 -7
- package/skills/uipath-ixp/references/cli-reference.md +71 -9
- package/skills/uipath-ixp/references/improve-prompts-guide.md +23 -9
- package/skills/uipath-ixp/references/label-documents-guide.md +33 -5
- package/skills/uipath-maestro-bpmn/SKILL.md +15 -14
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +15 -6
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +18 -17
- package/skills/uipath-maestro-case/SKILL.md +46 -33
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +77 -37
- package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +0 -2
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +3 -1
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +2 -2
- package/skills/uipath-maestro-case/references/brownfield.md +15 -5
- package/skills/uipath-maestro-case/references/case-commands.md +19 -3
- package/skills/uipath-maestro-case/references/case-editing-operations.md +24 -21
- package/skills/uipath-maestro-case/references/case-schema.md +38 -16
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +15 -8
- package/skills/uipath-maestro-case/references/evals/evals.json +35 -18
- package/skills/uipath-maestro-case/references/implementation.md +86 -71
- package/skills/uipath-maestro-case/references/phase-0-interview.md +92 -23
- package/skills/uipath-maestro-case/references/phased-execution.md +70 -55
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +5 -5
- package/skills/uipath-maestro-case/references/planning.md +57 -9
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +7 -5
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +41 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +27 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +20 -7
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +37 -4
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +24 -13
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +9 -3
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +4 -0
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +4 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +4 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +17 -14
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +13 -10
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +18 -16
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +2 -2
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +11 -9
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +6 -2
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +19 -1
- package/skills/uipath-maestro-case/references/registry-discovery.md +3 -3
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +155 -51
- package/skills/uipath-maestro-case/references/sla-response-shapes.md +74 -0
- package/skills/uipath-maestro-flow/SKILL.md +4 -3
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +3 -0
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +10 -17
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +8 -6
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +4 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/agentic-process/impl.md +3 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/api-workflow/impl.md +5 -8
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +11 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/flow/impl.md +3 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +14 -17
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +60 -13
- package/skills/uipath-maestro-flow/references/author/references/plugins/queue/impl.md +2 -14
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +4 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +3 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +5 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +13 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +2 -2
- package/skills/uipath-maestro-flow/references/shared/file-format.md +16 -12
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +3 -3
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +1 -1
- package/skills/uipath-platform/SKILL.md +1 -1
- package/skills/uipath-platform/references/data-fabric/bulk-import.md +10 -27
- package/skills/uipath-platform/references/data-fabric/choice-sets.md +7 -64
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +76 -267
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +23 -99
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +5 -28
- package/skills/uipath-platform/references/data-fabric/filter-platform-contract.md +2 -2
- package/skills/uipath-platform/references/data-fabric/records-query.md +11 -32
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +6 -2
- package/skills/uipath-platform/references/licensing/consumables-report.md +18 -0
- package/skills/uipath-platform/references/licensing/licensing.md +1 -1
- package/skills/uipath-platform/references/orchestrator/run-jobs.md +9 -2
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +9 -0
- package/skills/uipath-platform/references/traces/feedback.md +4 -1
- package/skills/uipath-process-mining/SKILL.md +97 -0
- package/skills/uipath-process-mining/references/app-types.md +66 -0
- package/skills/uipath-process-mining/references/data-model.md +130 -0
- package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +67 -0
- package/skills/uipath-process-mining/references/model-editing.md +112 -0
- package/skills/uipath-process-mining/references/pre-flight.md +119 -0
- package/skills/uipath-process-mining/references/querying.md +66 -0
- package/skills/uipath-process-mining/references/transformations.md +80 -0
- package/skills/uipath-process-mining/references/uip-pm-cli.md +145 -0
- package/skills/uipath-review/SKILL.md +23 -18
- package/skills/uipath-review/references/agents/agent-grading-rubric.md +1 -1
- package/skills/uipath-review/references/agents/agent-review-checklist.md +0 -4
- package/skills/uipath-review/references/agents/agents-coded-rules.md +1 -10
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +3 -6
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +62 -14
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +60 -4
- package/skills/uipath-review/references/review-workflow-guide.md +3 -2
- package/skills/uipath-review/references/rule-catalog-workflow.md +4 -5
- package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +20 -0
- package/skills/uipath-rpa/SKILL.md +57 -55
- package/skills/uipath-rpa/agents/uipath-project-discovery-agent.md +75 -19
- package/skills/uipath-rpa/assets/codedworkflow-template.md +245 -11
- package/skills/uipath-rpa/references/cli-reference.md +229 -6
- package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +158 -2
- package/skills/uipath-rpa/references/coded/integration-service-guide.md +6 -5
- package/skills/uipath-rpa/references/coded/operations-guide.md +273 -5
- package/skills/uipath-rpa/references/coded-vs-xaml-guide.md +3 -3
- package/skills/uipath-rpa/references/common-pattern-card.md +303 -0
- package/skills/uipath-rpa/references/data-manipulation-guide.md +18 -3
- package/skills/uipath-rpa/references/debugging.md +0 -2
- package/skills/uipath-rpa/references/environment-setup.md +309 -1
- package/skills/uipath-rpa/references/error-handling-guide.md +1 -1
- package/skills/uipath-rpa/references/execution-maps-guide.md +110 -0
- package/skills/uipath-rpa/references/is-connector-xaml-guide.md +58 -4
- package/skills/uipath-rpa/references/legacy/activity-docs/Excel.md +1 -1
- package/skills/uipath-rpa/references/legacy/activity-docs/_DU-PROCESS.md +0 -2
- package/skills/uipath-rpa/references/legacy/activity-docs/_INDEX.md +2 -2
- package/skills/uipath-rpa/references/legacy/activity-docs/_PATTERNS.md +1 -1
- package/skills/uipath-rpa/references/legacy/activity-docs/_REFRAMEWORK.md +2 -7
- package/skills/uipath-rpa/references/legacy/cli-reference.md +599 -0
- package/skills/uipath-rpa/references/legacy/error-handling-guide.md +2 -2
- package/skills/uipath-rpa/references/legacy/legacy-mode-guide.md +16 -16
- package/skills/uipath-rpa/references/legacy/project-organization-guide.md +2 -2
- package/skills/uipath-rpa/references/legacy/selector-guide.md +163 -1
- package/skills/uipath-rpa/references/legacy/testing-guide.md +246 -3
- package/skills/uipath-rpa/references/legacy/xaml-basics-and-rules.md +267 -2
- package/skills/uipath-rpa/references/library-authoring-guide.md +4 -3
- package/skills/uipath-rpa/references/testing-guide.md +2 -28
- package/skills/uipath-rpa/references/trigger-pattern-guide.md +1 -1
- package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +140 -33
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +57 -240
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +42 -2
- package/skills/uipath-rpa/references/xaml/long-running-workflow-guide.md +1 -1
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +194 -228
- package/skills/uipath-solution/references/activate-and-manage.md +22 -0
- package/skills/uipath-solution/references/develop-solution.md +26 -2
- package/skills/uipath-solution/references/pack-and-deploy.md +43 -9
- package/skills/uipath-test/SKILL.md +4 -4
- package/skills/uipath-test/references/playwright-first-mile-guide.md +5 -4
- package/skills/uipath-test/references/publish-and-link-guide.md +2 -2
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/click-silent-no-op.md +5 -5
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/queue-operation-failed.md +20 -4
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/summary.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/csv-activities/playbooks/read-csv-file-not-found.md +12 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/send-outlook-mail-failures.md +12 -1
- package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-activity-bug-silent-failure.md +2 -1
- package/skills/uipath-troubleshoot/references/activity-packages/terminal-activities/playbooks/terminal-session-connection-failed.md +5 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/click-silent-no-op.md +5 -5
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/dependency-version-conflict.md +27 -6
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/napplicationcard-view-generation-failed.md +10 -0
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/summary.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/overview.md +4 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-auth-401-403.md +44 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-connection-failure.md +2 -1
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-content-type-rejected.md +37 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-proxy-blocked.md +39 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/package-version-mismatch.md +42 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/securestring-misuse-analyzer.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/summary.md +5 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-null-reference.md +14 -1
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-runtime-exception.md +2 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/is-activities-prerelease-not-found.md +39 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/response-content-too-large.md +41 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/summary.md +9 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/console-conflict-login-to-console.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/credential-store-unavailable.md +42 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/executor-start-transient-rerun.md +49 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-consecutive-system-exceptions.md +47 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-faulted-session-timeout.md +19 -19
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-output-too-large.md +47 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-stopped-generic-exit-code.md +55 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/known-issue-robot-defect.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/platform-incident-correlation.md +45 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/screen-capture-handle-invalid.md +43 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/serverless-license-quota.md +43 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/serverless-time-limit-exceeded.md +34 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/workstation-in-use-machine-slots.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/summary.md +13 -1
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-bpmn/validator/README.md +0 -224
- package/skills/uipath-maestro-bpmn/validator/model.mjs +0 -419
- package/skills/uipath-maestro-bpmn/validator/package.json +0 -17
- package/skills/uipath-maestro-bpmn/validator/rules.mjs +0 -1403
- package/skills/uipath-maestro-bpmn/validator/samples/invalid-conditional-and-variable.bpmn +0 -25
- package/skills/uipath-maestro-bpmn/validator/samples/valid-baseline.bpmn +0 -52
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.0.bpmn +0 -157
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.1.bpmn +0 -333
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.1.0.bpmn +0 -598
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.2.0.bpmn +0 -1709
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.2.0.bpmn +0 -564
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.3.0.bpmn +0 -671
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.4.0.bpmn +0 -1045
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.5.0.bpmn +0 -1176
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.6.0.bpmn +0 -670
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.7.0.bpmn +0 -466
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Can_Parse_Complex_Process_With_Task_Gateway_BoundaryEvent_etc.bpmn +0 -74
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExclusiveGatewayDefaultFlow.bpmn +0 -32
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExternalAgentWorkflow.bpmn +0 -62
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Golden_Scenario.initial.bpmn +0 -361
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/InclusiveJoinRouteAwayBranch.bpmn +0 -62
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_AsyncExecution_And_Create_CorrectModel.bpmn +0 -74
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_ExtractionValidation_And_Create_CorrectModel.bpmn +0 -35
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_FileUpload_And_Create_CorrectModel.bpmn +0 -33
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_JobAttachment_And_Create_CorrectModel.bpmn +0 -35
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_SubProcess_With_Multiple_Element_Types.bpmn +0 -76
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartEventWithOutputs.bpmn +0 -36
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartGatewayEnd.bpmn +0 -44
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all elements.bpmn +0 -516
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all_sequence_flow_types.bpmn +0 -173
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/demo.bpmn +0 -181
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-collapsed.bpmn +0 -126
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-expanded.bpmn +0 -122
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-003-collapsed_deeply-nested.bpmn +0 -438
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.1.0.bpmn +0 -87
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.3.0.bpmn +0 -165
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ApiWorkflow.bpmn +0 -39
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnNestedSubProcessTests.bpmn +0 -102
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnTimerBoundaryEvents.bpmn +0 -160
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithCatchAllErrorEventSubProcess.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithSpecificErrorEventSubProcess.bpmn +0 -46
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/CaseManagementWithConstantIdentifier.bpmn +0 -218
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorBoundary.bpmn +0 -78
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorPropagationInEventSubprocess.bpmn +0 -340
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/EventBasedGatewayFirstCatcherWins.bpmn +0 -56
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Example-EventBasedGateway.bpmn +0 -117
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewayConditional.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewaySharedEndEvent.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveWithParallelGateway.bpmn +0 -68
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/FourScriptTasks.bpmn +0 -84
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/HitlTaskOnly.bpmn +0 -55
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/InclusiveGatewayForkJoin.bpmn +0 -69
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_BPMN_Elements_And_Create_CorrectModel.bpmn +0 -20
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_HttpRequest_ServiceTask_And_Create_Correct_Model.bpmn +0 -34
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_MessageBoundaryEvent_And_Create_CorrectModel.bpmn +0 -87
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Script_Task_V2_And_Create_Correct_Model.bpmn +0 -31
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Sets_Containers_Properly.bpmn +0 -129
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ScriptWritesVariableThenGatewayBranches.bpmn +0 -59
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/boundaryevent.bpmn +0 -30
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/collapsed-subprocess.bpmn +0 -83
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/connectable-types.bpmn +0 -85
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/extensions-orchestrator-start-job.bpmn +0 -80
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/multiparticipantpool.bpmn +0 -77
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/nestedsubprocess.bpmn +0 -36
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/simple.bpmn +0 -59
- package/skills/uipath-maestro-bpmn/validator/test/integration.test.mjs +0 -146
- package/skills/uipath-maestro-bpmn/validator/test/model-helpers.mjs +0 -42
- package/skills/uipath-maestro-bpmn/validator/test/ported-rule-tests.mjs +0 -983
- package/skills/uipath-maestro-bpmn/validator/test/run-tests.mjs +0 -530
- package/skills/uipath-maestro-bpmn/validator/uipath-moddle.v1.json +0 -715
- package/skills/uipath-maestro-bpmn/validator/validate-bpmn.mjs +0 -164
- package/skills/uipath-review/references/agents/agents-common-rules.md +0 -32
- package/skills/uipath-rpa/assets/before-after-hooks-template.md +0 -115
- package/skills/uipath-rpa/assets/helper-utility-template.md +0 -22
- package/skills/uipath-rpa/assets/testcase-template.md +0 -92
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +0 -255
- package/skills/uipath-rpa/references/coded/inspect-package-guide.md +0 -80
- package/skills/uipath-rpa/references/coded/third-party-packages-guide.md +0 -67
- package/skills/uipath-rpa/references/connector-capabilities.md +0 -79
- package/skills/uipath-rpa/references/legacy/activity-docs/Testing.md +0 -95
- package/skills/uipath-rpa/references/legacy/activity-docs/UIAutomation.md +0 -159
- package/skills/uipath-rpa/references/legacy/common-pitfalls.md +0 -318
- package/skills/uipath-rpa/references/legacy/discovery-workflow.md +0 -147
- package/skills/uipath-rpa/references/legacy/environment-setup.md +0 -78
- package/skills/uipath-rpa/references/legacy/project-structure.md +0 -206
- package/skills/uipath-rpa/references/legacy/test-data-guide.md +0 -142
- package/skills/uipath-rpa/references/legacy/validation-and-fixing.md +0 -154
- package/skills/uipath-rpa/references/project-structure-guide.md +0 -168
- package/skills/uipath-rpa/references/project-structure.md +0 -135
- package/skills/uipath-rpa/references/publishing-guide.md +0 -80
- package/skills/uipath-rpa/references/validation-guide.md +0 -170
- package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +0 -43
- package/skills/uipath-rpa/references/xaml/flowchart-guide.md +0 -113
- package/skills/uipath-rpa/references/xaml/workflow-guide.md +0 -258
|
@@ -1,530 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// Rule-coverage test harness. For each of the 19 PO.Frontend rules (+ the
|
|
3
|
-
// Maestro-original variable-existence check) it builds a minimal invalid BPMN
|
|
4
|
-
// that should trip exactly that rule, and asserts the rule's code is emitted.
|
|
5
|
-
// It also asserts a valid twin produces NO finding for that code.
|
|
6
|
-
//
|
|
7
|
-
// Run: node test/run-tests.mjs (exit 0 = all rules fire correctly)
|
|
8
|
-
import BpmnModdle from "bpmn-moddle";
|
|
9
|
-
import descriptor from "../uipath-moddle.v1.json" with { type: "json" };
|
|
10
|
-
import { buildModel, collectKnownVariableIds, allNodes, allEdges } from "../model.mjs";
|
|
11
|
-
import { validateDiagram, validateVariableExistence, validateVariableNotSet } from "../rules.mjs";
|
|
12
|
-
import { execFileSync } from "child_process";
|
|
13
|
-
import { fileURLToPath } from "url";
|
|
14
|
-
import { dirname, join } from "path";
|
|
15
|
-
import { writeFileSync, mkdtempSync } from "fs";
|
|
16
|
-
import { tmpdir } from "os";
|
|
17
|
-
|
|
18
|
-
const moddle = new BpmnModdle({ uipath: descriptor });
|
|
19
|
-
|
|
20
|
-
async function findingsFor(xml) {
|
|
21
|
-
const { rootElement } = await moddle.fromXML(xml);
|
|
22
|
-
const cs = buildModel(rootElement);
|
|
23
|
-
const knownIds = collectKnownVariableIds(cs);
|
|
24
|
-
const out = [];
|
|
25
|
-
for (const d of Object.values(cs.diagramsById)) {
|
|
26
|
-
out.push(...validateDiagram(d, cs, { enableMissingRootVariableValidation: true }));
|
|
27
|
-
}
|
|
28
|
-
out.push(...validateVariableExistence(allNodes(cs), allEdges(cs), knownIds));
|
|
29
|
-
out.push(...validateVariableNotSet(allNodes(cs), allEdges(cs), knownIds, cs));
|
|
30
|
-
return out;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ---- XML builders -------------------------------------------------------
|
|
34
|
-
const DEFS = (inner) =>
|
|
35
|
-
`<?xml version="1.0" encoding="UTF-8"?>
|
|
36
|
-
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:uipath="http://uipath.org/schema/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Defs" targetNamespace="urn:test">
|
|
37
|
-
${inner}
|
|
38
|
-
</bpmn:definitions>`;
|
|
39
|
-
const PROC = (body, ext = "") => ` <bpmn:process id="P" name="P" isExecutable="true">${ext}\n${body}\n </bpmn:process>`;
|
|
40
|
-
const COND = (s, t, expr) =>
|
|
41
|
-
` <bpmn:sequenceFlow id="${s}_${t}" sourceRef="${s}" targetRef="${t}"><bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${expr}</bpmn:conditionExpression></bpmn:sequenceFlow>`;
|
|
42
|
-
const FLOW = (s, t, id) => ` <bpmn:sequenceFlow id="${id ?? s + "_" + t}" sourceRef="${s}" targetRef="${t}" />`;
|
|
43
|
-
|
|
44
|
-
// ---- Per-rule cases -----------------------------------------------------
|
|
45
|
-
const cases = [];
|
|
46
|
-
const add = (code, xml, note) => cases.push({ code, xml, note });
|
|
47
|
-
|
|
48
|
-
// 1 MISSING_CONDITION_EXPRESSION: XOR with 2 outgoing, no default, no conditions
|
|
49
|
-
add(
|
|
50
|
-
"MISSING_CONDITION_EXPRESSION",
|
|
51
|
-
DEFS(
|
|
52
|
-
PROC(
|
|
53
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_G</bpmn:outgoing></bpmn:startEvent>
|
|
54
|
-
<bpmn:exclusiveGateway id="G"><bpmn:incoming>S_G</bpmn:incoming><bpmn:outgoing>G_A</bpmn:outgoing><bpmn:outgoing>G_B</bpmn:outgoing></bpmn:exclusiveGateway>
|
|
55
|
-
<bpmn:task id="A"><bpmn:incoming>G_A</bpmn:incoming></bpmn:task>
|
|
56
|
-
<bpmn:task id="B"><bpmn:incoming>G_B</bpmn:incoming></bpmn:task>
|
|
57
|
-
${FLOW("S", "G", "S_G")}
|
|
58
|
-
${FLOW("G", "A", "G_A")}
|
|
59
|
-
${FLOW("G", "B", "G_B")}`,
|
|
60
|
-
),
|
|
61
|
-
),
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
// 2 INVALID_CONNECTION_TYPE: EndEvent -> Task
|
|
65
|
-
add(
|
|
66
|
-
"INVALID_CONNECTION_TYPE",
|
|
67
|
-
DEFS(
|
|
68
|
-
PROC(
|
|
69
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_E</bpmn:outgoing></bpmn:startEvent>
|
|
70
|
-
<bpmn:endEvent id="E"><bpmn:incoming>S_E</bpmn:incoming><bpmn:outgoing>E_T</bpmn:outgoing></bpmn:endEvent>
|
|
71
|
-
<bpmn:task id="T"><bpmn:incoming>E_T</bpmn:incoming></bpmn:task>
|
|
72
|
-
${FLOW("S", "E", "S_E")}
|
|
73
|
-
${FLOW("E", "T", "E_T")}`,
|
|
74
|
-
),
|
|
75
|
-
),
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
// 3 DUPLICATE_ERROR_EVENT_SUBPROCESS: two event subprocesses, same error code
|
|
79
|
-
add(
|
|
80
|
-
"DUPLICATE_ERROR_EVENT_SUBPROCESS",
|
|
81
|
-
DEFS(
|
|
82
|
-
` <bpmn:error id="Err1" name="E1" errorCode="CODE_X" />
|
|
83
|
-
${PROC(
|
|
84
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
85
|
-
<bpmn:task id="T"><bpmn:incoming>S_T</bpmn:incoming><bpmn:outgoing>T_E</bpmn:outgoing></bpmn:task>
|
|
86
|
-
<bpmn:endEvent id="E"><bpmn:incoming>T_E</bpmn:incoming></bpmn:endEvent>
|
|
87
|
-
<bpmn:subProcess id="SP1" triggeredByEvent="true">
|
|
88
|
-
<bpmn:startEvent id="SP1S"><bpmn:errorEventDefinition id="ed1" errorRef="Err1" /></bpmn:startEvent>
|
|
89
|
-
</bpmn:subProcess>
|
|
90
|
-
<bpmn:subProcess id="SP2" triggeredByEvent="true">
|
|
91
|
-
<bpmn:startEvent id="SP2S"><bpmn:errorEventDefinition id="ed2" errorRef="Err1" /></bpmn:startEvent>
|
|
92
|
-
</bpmn:subProcess>
|
|
93
|
-
${FLOW("S", "T", "S_T")}
|
|
94
|
-
${FLOW("T", "E", "T_E")}`,
|
|
95
|
-
)}`,
|
|
96
|
-
),
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
// 4 START_EVENT_WITH_DEFINITION_IN_SUBPROCESS: regular subprocess start has timer def
|
|
100
|
-
add(
|
|
101
|
-
"START_EVENT_WITH_DEFINITION_IN_SUBPROCESS",
|
|
102
|
-
DEFS(
|
|
103
|
-
PROC(
|
|
104
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_SP</bpmn:outgoing></bpmn:startEvent>
|
|
105
|
-
<bpmn:subProcess id="SP"><bpmn:incoming>S_SP</bpmn:incoming><bpmn:outgoing>SP_E</bpmn:outgoing>
|
|
106
|
-
<bpmn:startEvent id="SPS"><bpmn:timerEventDefinition id="t1"><bpmn:timeDuration>PT5M</bpmn:timeDuration></bpmn:timerEventDefinition></bpmn:startEvent>
|
|
107
|
-
</bpmn:subProcess>
|
|
108
|
-
<bpmn:endEvent id="E"><bpmn:incoming>SP_E</bpmn:incoming></bpmn:endEvent>
|
|
109
|
-
${FLOW("S", "SP", "S_SP")}
|
|
110
|
-
${FLOW("SP", "E", "SP_E")}`,
|
|
111
|
-
),
|
|
112
|
-
),
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
// 4b START_EVENT_WITHOUT_DEFINITION_IN_EVENT_SUBPROCESS
|
|
116
|
-
add(
|
|
117
|
-
"START_EVENT_WITHOUT_DEFINITION_IN_EVENT_SUBPROCESS",
|
|
118
|
-
DEFS(
|
|
119
|
-
PROC(
|
|
120
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
121
|
-
<bpmn:task id="T"><bpmn:incoming>S_T</bpmn:incoming></bpmn:task>
|
|
122
|
-
<bpmn:subProcess id="SP" triggeredByEvent="true">
|
|
123
|
-
<bpmn:startEvent id="SPS" />
|
|
124
|
-
</bpmn:subProcess>
|
|
125
|
-
${FLOW("S", "T", "S_T")}`,
|
|
126
|
-
),
|
|
127
|
-
),
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
// 5 ERROR_BOUNDARY_EVENT_REQUIRES_ERROR_CODE: boundary refs an Error with no errorCode
|
|
131
|
-
add(
|
|
132
|
-
"ERROR_BOUNDARY_EVENT_REQUIRES_ERROR_CODE",
|
|
133
|
-
DEFS(
|
|
134
|
-
` <bpmn:error id="ErrNoCode" name="NoCode" />
|
|
135
|
-
${PROC(
|
|
136
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
137
|
-
<bpmn:task id="T"><bpmn:incoming>S_T</bpmn:incoming></bpmn:task>
|
|
138
|
-
<bpmn:boundaryEvent id="BE" attachedToRef="T"><bpmn:errorEventDefinition id="bed" errorRef="ErrNoCode" /></bpmn:boundaryEvent>
|
|
139
|
-
${FLOW("S", "T", "S_T")}`,
|
|
140
|
-
)}`,
|
|
141
|
-
),
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
// 5b MULTIPLE_CATCH_ALL_BOUNDARY_EVENTS_ON_TASK: two catch-all error boundaries on one task
|
|
145
|
-
add(
|
|
146
|
-
"MULTIPLE_CATCH_ALL_BOUNDARY_EVENTS_ON_TASK",
|
|
147
|
-
DEFS(
|
|
148
|
-
PROC(
|
|
149
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
150
|
-
<bpmn:task id="T"><bpmn:incoming>S_T</bpmn:incoming></bpmn:task>
|
|
151
|
-
<bpmn:boundaryEvent id="BE1" attachedToRef="T"><bpmn:errorEventDefinition id="bed1" /></bpmn:boundaryEvent>
|
|
152
|
-
<bpmn:boundaryEvent id="BE2" attachedToRef="T"><bpmn:errorEventDefinition id="bed2" /></bpmn:boundaryEvent>
|
|
153
|
-
${FLOW("S", "T", "S_T")}`,
|
|
154
|
-
),
|
|
155
|
-
),
|
|
156
|
-
);
|
|
157
|
-
|
|
158
|
-
// 6 ERROR_END_EVENT_MISSING_EXCEPTION: error end event with no errorRef
|
|
159
|
-
add(
|
|
160
|
-
"ERROR_END_EVENT_MISSING_EXCEPTION",
|
|
161
|
-
DEFS(
|
|
162
|
-
PROC(
|
|
163
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_E</bpmn:outgoing></bpmn:startEvent>
|
|
164
|
-
<bpmn:endEvent id="E"><bpmn:incoming>S_E</bpmn:incoming><bpmn:errorEventDefinition id="eed" /></bpmn:endEvent>
|
|
165
|
-
${FLOW("S", "E", "S_E")}`,
|
|
166
|
-
),
|
|
167
|
-
),
|
|
168
|
-
);
|
|
169
|
-
|
|
170
|
-
// 7 FAKE_JOIN: NOTE — this rule fires only on literal abstract node types
|
|
171
|
-
// ("bpmn:Activity"/"bpmn:Event"), which the frontend canvas never assigns to a
|
|
172
|
-
// real node (it uses concrete $types), so the rule is dormant on exported BPMN.
|
|
173
|
-
// It is therefore NOT triggerable via this XML harness; the rule LOGIC is proven
|
|
174
|
-
// at the model level in test/ported-rule-tests.mjs (FakeJoinRule suite, which
|
|
175
|
-
// mirrors the frontend unit test verbatim). We mark it as covered there.
|
|
176
|
-
// (No XML case added; see FakeJoinRule drift note in rules.mjs / README.)
|
|
177
|
-
|
|
178
|
-
// 8 SAME_POOL_MESSAGE_FLOW: message flow between two nodes in the same pool
|
|
179
|
-
add(
|
|
180
|
-
"SAME_POOL_MESSAGE_FLOW",
|
|
181
|
-
DEFS(
|
|
182
|
-
` <bpmn:collaboration id="C">
|
|
183
|
-
<bpmn:participant id="Pool1" name="Pool 1" processRef="P" />
|
|
184
|
-
<bpmn:messageFlow id="MF" sourceRef="T1" targetRef="T2" />
|
|
185
|
-
</bpmn:collaboration>
|
|
186
|
-
<bpmn:process id="P" isExecutable="true">
|
|
187
|
-
<bpmn:task id="T1" />
|
|
188
|
-
<bpmn:task id="T2" />
|
|
189
|
-
</bpmn:process>`,
|
|
190
|
-
),
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
// 9 MISSING_RESOURCE: Orchestrator.StartJob with no resource binding (WARNING)
|
|
194
|
-
add(
|
|
195
|
-
"MISSING_RESOURCE",
|
|
196
|
-
DEFS(
|
|
197
|
-
PROC(
|
|
198
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
199
|
-
<bpmn:serviceTask id="T" name="Start Job"><bpmn:incoming>S_T</bpmn:incoming>
|
|
200
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="Orchestrator.StartJob" version="v1" /></uipath:activity></bpmn:extensionElements>
|
|
201
|
-
</bpmn:serviceTask>
|
|
202
|
-
${FLOW("S", "T", "S_T")}`,
|
|
203
|
-
),
|
|
204
|
-
),
|
|
205
|
-
);
|
|
206
|
-
|
|
207
|
-
// 10 MISSING_ROOT_VARIABLE: node output var not declared at root (WARNING)
|
|
208
|
-
add(
|
|
209
|
-
"MISSING_ROOT_VARIABLE",
|
|
210
|
-
DEFS(
|
|
211
|
-
PROC(
|
|
212
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
213
|
-
<bpmn:serviceTask id="T" name="Job"><bpmn:incoming>S_T</bpmn:incoming>
|
|
214
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="Orchestrator.StartJob" version="v1" />
|
|
215
|
-
<uipath:context><uipath:input name="name" value="X" /></uipath:context>
|
|
216
|
-
<uipath:output name="JobState" type="string" var="Var_Undeclared" source="state" custom="true" />
|
|
217
|
-
</uipath:activity></bpmn:extensionElements>
|
|
218
|
-
</bpmn:serviceTask>
|
|
219
|
-
${FLOW("S", "T", "S_T")}`,
|
|
220
|
-
`\n <bpmn:extensionElements><uipath:variables version="v1"><uipath:input id="Var_Other" name="other" type="string" /></uipath:variables></bpmn:extensionElements>`,
|
|
221
|
-
),
|
|
222
|
-
),
|
|
223
|
-
);
|
|
224
|
-
|
|
225
|
-
// 11 ASSIGNMENT_NOT_ALLOWED: condition contains an assignment (WARNING)
|
|
226
|
-
add(
|
|
227
|
-
"ASSIGNMENT_NOT_ALLOWED",
|
|
228
|
-
DEFS(
|
|
229
|
-
PROC(
|
|
230
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_G</bpmn:outgoing></bpmn:startEvent>
|
|
231
|
-
<bpmn:exclusiveGateway id="G" default="G_B"><bpmn:incoming>S_G</bpmn:incoming><bpmn:outgoing>G_A</bpmn:outgoing><bpmn:outgoing>G_B</bpmn:outgoing></bpmn:exclusiveGateway>
|
|
232
|
-
<bpmn:task id="A"><bpmn:incoming>G_A</bpmn:incoming></bpmn:task>
|
|
233
|
-
<bpmn:task id="B"><bpmn:incoming>G_B</bpmn:incoming></bpmn:task>
|
|
234
|
-
${FLOW("S", "G", "S_G")}
|
|
235
|
-
${COND("G", "A", "=vars.x = 5")}
|
|
236
|
-
${FLOW("G", "B", "G_B")}`,
|
|
237
|
-
),
|
|
238
|
-
),
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
// 12 EMPTY_REQUIRED_FIELD: HttpExecution with required 'url' present but empty
|
|
242
|
-
add(
|
|
243
|
-
"EMPTY_REQUIRED_FIELD",
|
|
244
|
-
DEFS(
|
|
245
|
-
PROC(
|
|
246
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
247
|
-
<bpmn:serviceTask id="T" name="HTTP"><bpmn:incoming>S_T</bpmn:incoming>
|
|
248
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="Intsvc.HttpExecution" version="v1" />
|
|
249
|
-
<uipath:context><uipath:input name="method" value="GET" /><uipath:input name="url" value="" /></uipath:context>
|
|
250
|
-
</uipath:activity></bpmn:extensionElements>
|
|
251
|
-
</bpmn:serviceTask>
|
|
252
|
-
${FLOW("S", "T", "S_T")}`,
|
|
253
|
-
),
|
|
254
|
-
),
|
|
255
|
-
);
|
|
256
|
-
|
|
257
|
-
// 12b EMPTY_REQUIRED_FIELD (absent): HttpExecution missing required 'method'/'mode'
|
|
258
|
-
// entirely (only 'url' present+valid). Frontend treats an unbound required field
|
|
259
|
-
// as present-with-empty-value, so an absent required field must fire too.
|
|
260
|
-
add(
|
|
261
|
-
"EMPTY_REQUIRED_FIELD",
|
|
262
|
-
DEFS(
|
|
263
|
-
PROC(
|
|
264
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
265
|
-
<bpmn:serviceTask id="T" name="HTTP"><bpmn:incoming>S_T</bpmn:incoming>
|
|
266
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="Intsvc.HttpExecution" version="v1" />
|
|
267
|
-
<uipath:context><uipath:input name="url" value="https://example.com" /></uipath:context>
|
|
268
|
-
</uipath:activity></bpmn:extensionElements>
|
|
269
|
-
</bpmn:serviceTask>
|
|
270
|
-
${FLOW("S", "T", "S_T")}`,
|
|
271
|
-
),
|
|
272
|
-
),
|
|
273
|
-
"absent required field",
|
|
274
|
-
);
|
|
275
|
-
|
|
276
|
-
// 13 CROSSING_POOL_BOUNDARY: sequence flow between two pools (non-start target)
|
|
277
|
-
add(
|
|
278
|
-
"CROSSING_POOL_BOUNDARY",
|
|
279
|
-
DEFS(
|
|
280
|
-
` <bpmn:collaboration id="C">
|
|
281
|
-
<bpmn:participant id="Pool1" name="P1" processRef="P" />
|
|
282
|
-
<bpmn:participant id="Pool2" name="P2" processRef="P2" />
|
|
283
|
-
</bpmn:collaboration>
|
|
284
|
-
<bpmn:process id="P" isExecutable="true">
|
|
285
|
-
<bpmn:task id="T1"><bpmn:outgoing>T1_T2</bpmn:outgoing></bpmn:task>
|
|
286
|
-
${FLOW("T1", "T2", "T1_T2")}
|
|
287
|
-
</bpmn:process>
|
|
288
|
-
<bpmn:process id="P2" isExecutable="true">
|
|
289
|
-
<bpmn:task id="T2"><bpmn:incoming>T1_T2</bpmn:incoming></bpmn:task>
|
|
290
|
-
</bpmn:process>`,
|
|
291
|
-
),
|
|
292
|
-
"cross-pool",
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
// 14 CROSSING_SUBPROCESS_BOUNDARY: flow from outside into a subprocess child
|
|
296
|
-
add(
|
|
297
|
-
"CROSSING_SUBPROCESS_BOUNDARY",
|
|
298
|
-
DEFS(
|
|
299
|
-
PROC(
|
|
300
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_C</bpmn:outgoing></bpmn:startEvent>
|
|
301
|
-
<bpmn:subProcess id="SP">
|
|
302
|
-
<bpmn:task id="C" />
|
|
303
|
-
</bpmn:subProcess>
|
|
304
|
-
${FLOW("S", "C", "S_C")}`,
|
|
305
|
-
),
|
|
306
|
-
),
|
|
307
|
-
);
|
|
308
|
-
|
|
309
|
-
// 15 MULTIPLE_BLANK_START_EVENTS: process with two blank start events
|
|
310
|
-
add(
|
|
311
|
-
"MULTIPLE_BLANK_START_EVENTS",
|
|
312
|
-
DEFS(
|
|
313
|
-
PROC(
|
|
314
|
-
` <bpmn:startEvent id="S1"><bpmn:outgoing>S1_T</bpmn:outgoing></bpmn:startEvent>
|
|
315
|
-
<bpmn:startEvent id="S2"><bpmn:outgoing>S2_T</bpmn:outgoing></bpmn:startEvent>
|
|
316
|
-
<bpmn:task id="T"><bpmn:incoming>S1_T</bpmn:incoming></bpmn:task>
|
|
317
|
-
<bpmn:task id="T2"><bpmn:incoming>S2_T</bpmn:incoming></bpmn:task>
|
|
318
|
-
${FLOW("S1", "T", "S1_T")}
|
|
319
|
-
${FLOW("S2", "T2", "S2_T")}`,
|
|
320
|
-
),
|
|
321
|
-
),
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
// 16 MULTIPLE_START_EVENTS_IN_EVENT_SUBPROCESS
|
|
325
|
-
add(
|
|
326
|
-
"MULTIPLE_START_EVENTS_IN_EVENT_SUBPROCESS",
|
|
327
|
-
DEFS(
|
|
328
|
-
PROC(
|
|
329
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
330
|
-
<bpmn:task id="T"><bpmn:incoming>S_T</bpmn:incoming></bpmn:task>
|
|
331
|
-
<bpmn:subProcess id="SP" triggeredByEvent="true">
|
|
332
|
-
<bpmn:startEvent id="SPS1"><bpmn:timerEventDefinition id="t1"><bpmn:timeDuration>PT5M</bpmn:timeDuration></bpmn:timerEventDefinition></bpmn:startEvent>
|
|
333
|
-
<bpmn:startEvent id="SPS2"><bpmn:timerEventDefinition id="t2"><bpmn:timeDuration>PT5M</bpmn:timeDuration></bpmn:timerEventDefinition></bpmn:startEvent>
|
|
334
|
-
</bpmn:subProcess>
|
|
335
|
-
${FLOW("S", "T", "S_T")}`,
|
|
336
|
-
),
|
|
337
|
-
),
|
|
338
|
-
);
|
|
339
|
-
|
|
340
|
-
// 17 SUPERFLUOUS_GATEWAY: gateway with exactly one in and one out
|
|
341
|
-
add(
|
|
342
|
-
"SUPERFLUOUS_GATEWAY",
|
|
343
|
-
DEFS(
|
|
344
|
-
PROC(
|
|
345
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_G</bpmn:outgoing></bpmn:startEvent>
|
|
346
|
-
<bpmn:exclusiveGateway id="G"><bpmn:incoming>S_G</bpmn:incoming><bpmn:outgoing>G_T</bpmn:outgoing></bpmn:exclusiveGateway>
|
|
347
|
-
<bpmn:task id="T"><bpmn:incoming>G_T</bpmn:incoming></bpmn:task>
|
|
348
|
-
${FLOW("S", "G", "S_G")}
|
|
349
|
-
${FLOW("G", "T", "G_T")}`,
|
|
350
|
-
),
|
|
351
|
-
),
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
// 18 TASK_TIMER_OUT_OF_RANGE: actions task Timer below 15 minutes (WARNING)
|
|
355
|
-
add(
|
|
356
|
-
"TASK_TIMER_OUT_OF_RANGE",
|
|
357
|
-
DEFS(
|
|
358
|
-
PROC(
|
|
359
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_T</bpmn:outgoing></bpmn:startEvent>
|
|
360
|
-
<bpmn:userTask id="T" name="HITL"><bpmn:incoming>S_T</bpmn:incoming>
|
|
361
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="actions" version="v1" />
|
|
362
|
-
<uipath:context><uipath:input name="Timer" value="5" /></uipath:context>
|
|
363
|
-
</uipath:activity></bpmn:extensionElements>
|
|
364
|
-
</bpmn:userTask>
|
|
365
|
-
${FLOW("S", "T", "S_T")}`,
|
|
366
|
-
),
|
|
367
|
-
),
|
|
368
|
-
);
|
|
369
|
-
|
|
370
|
-
// 19 TIMER_DURATION_INVALID: timer intermediate event with bad ISO duration
|
|
371
|
-
add(
|
|
372
|
-
"TIMER_DURATION_INVALID",
|
|
373
|
-
DEFS(
|
|
374
|
-
PROC(
|
|
375
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_I</bpmn:outgoing></bpmn:startEvent>
|
|
376
|
-
<bpmn:intermediateCatchEvent id="I"><bpmn:incoming>S_I</bpmn:incoming><bpmn:outgoing>I_E</bpmn:outgoing>
|
|
377
|
-
<bpmn:timerEventDefinition id="td"><bpmn:timeDuration>NOT_A_DURATION</bpmn:timeDuration></bpmn:timerEventDefinition>
|
|
378
|
-
</bpmn:intermediateCatchEvent>
|
|
379
|
-
<bpmn:endEvent id="E"><bpmn:incoming>I_E</bpmn:incoming></bpmn:endEvent>
|
|
380
|
-
${FLOW("S", "I", "S_I")}
|
|
381
|
-
${FLOW("I", "E", "I_E")}`,
|
|
382
|
-
),
|
|
383
|
-
),
|
|
384
|
-
);
|
|
385
|
-
|
|
386
|
-
// 19b TIMER_DURATION_WEEK_UNSUPPORTED: valid ISO with week designator (WARNING)
|
|
387
|
-
add(
|
|
388
|
-
"TIMER_DURATION_WEEK_UNSUPPORTED",
|
|
389
|
-
DEFS(
|
|
390
|
-
PROC(
|
|
391
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_I</bpmn:outgoing></bpmn:startEvent>
|
|
392
|
-
<bpmn:intermediateCatchEvent id="I"><bpmn:incoming>S_I</bpmn:incoming><bpmn:outgoing>I_E</bpmn:outgoing>
|
|
393
|
-
<bpmn:timerEventDefinition id="td"><bpmn:timeDuration>P1W</bpmn:timeDuration></bpmn:timerEventDefinition>
|
|
394
|
-
</bpmn:intermediateCatchEvent>
|
|
395
|
-
<bpmn:endEvent id="E"><bpmn:incoming>I_E</bpmn:incoming></bpmn:endEvent>
|
|
396
|
-
${FLOW("S", "I", "S_I")}
|
|
397
|
-
${FLOW("I", "E", "I_E")}`,
|
|
398
|
-
),
|
|
399
|
-
),
|
|
400
|
-
);
|
|
401
|
-
|
|
402
|
-
// 20 VARIABLE_DOES_NOT_EXIST: condition references undeclared vars.X (Maestro-original)
|
|
403
|
-
add(
|
|
404
|
-
"VARIABLE_DOES_NOT_EXIST",
|
|
405
|
-
DEFS(
|
|
406
|
-
PROC(
|
|
407
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_G</bpmn:outgoing></bpmn:startEvent>
|
|
408
|
-
<bpmn:exclusiveGateway id="G" default="G_B"><bpmn:incoming>S_G</bpmn:incoming><bpmn:outgoing>G_A</bpmn:outgoing><bpmn:outgoing>G_B</bpmn:outgoing></bpmn:exclusiveGateway>
|
|
409
|
-
<bpmn:task id="A"><bpmn:incoming>G_A</bpmn:incoming></bpmn:task>
|
|
410
|
-
<bpmn:task id="B"><bpmn:incoming>G_B</bpmn:incoming></bpmn:task>
|
|
411
|
-
${FLOW("S", "G", "S_G")}
|
|
412
|
-
${COND("G", "A", '=vars.DoesNotExist == "x"')}
|
|
413
|
-
${FLOW("G", "B", "G_B")}`,
|
|
414
|
-
),
|
|
415
|
-
),
|
|
416
|
-
);
|
|
417
|
-
|
|
418
|
-
// 21 VARIABLE_NOT_SET: task A references vars.fromB, produced by B downstream
|
|
419
|
-
// (so it is declared/known but NOT reachable at A). WARNING-severity; mirrors
|
|
420
|
-
// the frontend's flow-order check distinct from VARIABLE_DOES_NOT_EXIST.
|
|
421
|
-
add(
|
|
422
|
-
"VARIABLE_NOT_SET",
|
|
423
|
-
DEFS(
|
|
424
|
-
PROC(
|
|
425
|
-
` <bpmn:startEvent id="S"><bpmn:outgoing>S_A</bpmn:outgoing></bpmn:startEvent>
|
|
426
|
-
<bpmn:serviceTask id="A"><bpmn:incoming>S_A</bpmn:incoming><bpmn:outgoing>A_B</bpmn:outgoing>
|
|
427
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="x" version="v1" /><uipath:input name="i" value="=vars.fromB" /></uipath:activity></bpmn:extensionElements>
|
|
428
|
-
</bpmn:serviceTask>
|
|
429
|
-
<bpmn:serviceTask id="B"><bpmn:incoming>A_B</bpmn:incoming>
|
|
430
|
-
<bpmn:extensionElements><uipath:activity version="v1"><uipath:type value="x" version="v1" /><uipath:output name="o" var="fromB" custom="true" source="x" /></uipath:activity></bpmn:extensionElements>
|
|
431
|
-
</bpmn:serviceTask>
|
|
432
|
-
${FLOW("S", "A", "S_A")}
|
|
433
|
-
${FLOW("A", "B", "A_B")}`,
|
|
434
|
-
),
|
|
435
|
-
),
|
|
436
|
-
"declared but unreachable",
|
|
437
|
-
);
|
|
438
|
-
|
|
439
|
-
// ---- Run: 1) crafted-invalid XML coverage harness -----------------------
|
|
440
|
-
let failures = 0;
|
|
441
|
-
const fired = new Set();
|
|
442
|
-
console.log("== Crafted-invalid XML coverage ==");
|
|
443
|
-
for (const c of cases) {
|
|
444
|
-
const findings = await findingsFor(c.xml);
|
|
445
|
-
const codes = findings.map((f) => f.code);
|
|
446
|
-
const ok = codes.includes(c.code);
|
|
447
|
-
if (ok) fired.add(c.code);
|
|
448
|
-
const tag = ok ? "PASS" : "FAIL";
|
|
449
|
-
if (!ok) failures++;
|
|
450
|
-
console.log(`${tag} ${c.code}${c.note ? " (" + c.note + ")" : ""} -> [${[...new Set(codes)].join(", ") || "none"}]`);
|
|
451
|
-
}
|
|
452
|
-
console.log(`${cases.length} crafted cases, ${cases.length - failures} passed, ${failures} failed.`);
|
|
453
|
-
|
|
454
|
-
// FAKE_JOIN is dormant on real/exported BPMN (matches the frontend — it keys off
|
|
455
|
-
// abstract node types the canvas never assigns). Its logic is proven in the
|
|
456
|
-
// ported rule suite, so it is intentionally not triggerable via this XML harness.
|
|
457
|
-
import { RULE_CODES } from "../rules.mjs";
|
|
458
|
-
|
|
459
|
-
// ---- Run: 2) ported per-rule tests (1:1 with PO.Frontend rule tests) -----
|
|
460
|
-
console.log("\n== Ported PO.Frontend rule tests ==");
|
|
461
|
-
const ported = (await import("./ported-rule-tests.mjs")).default;
|
|
462
|
-
console.log(`${ported.passed + ported.failed} ported assertions, ${ported.passed} passed, ${ported.failed} failed.`);
|
|
463
|
-
for (const f of ported.failures) console.log(" FAIL " + f);
|
|
464
|
-
failures += ported.failed;
|
|
465
|
-
// Codes the ported suite positively asserts (incl. FAKE_JOIN, dormant in XML).
|
|
466
|
-
const COVERED_BY_PORTED = ported.firedCodes;
|
|
467
|
-
|
|
468
|
-
// ---- Run: 3) integration over real .bpmn files ---------------------------
|
|
469
|
-
console.log("\n== Integration over real .bpmn files ==");
|
|
470
|
-
const runIntegration = (await import("./integration.test.mjs")).default;
|
|
471
|
-
const integ = await runIntegration({ verbose: true });
|
|
472
|
-
console.log(
|
|
473
|
-
`${integ.ranFiles} real files (${integ.knownGood} known-good, ${integ.expected} expected-findings), ${integ.passed} passed, ${integ.failed} failed.`,
|
|
474
|
-
);
|
|
475
|
-
for (const f of integ.failures) console.log(" FAIL " + f);
|
|
476
|
-
failures += integ.failed;
|
|
477
|
-
|
|
478
|
-
// ---- Run: 4) CLI well-formedness gate ------------------------------------
|
|
479
|
-
// bpmn-moddle's SAX parser is lenient and accepts "--" inside comments, which
|
|
480
|
-
// strict parsers and the canvas import reject. The CLI applies a pre-parse
|
|
481
|
-
// well-formedness gate; assert it fires (exit 2) and does not false-positive.
|
|
482
|
-
console.log("\n== CLI well-formedness gate ==");
|
|
483
|
-
{
|
|
484
|
-
const cli = join(dirname(fileURLToPath(import.meta.url)), "..", "validate-bpmn.mjs");
|
|
485
|
-
const tmp = mkdtempSync(join(tmpdir(), "wf-"));
|
|
486
|
-
const runExit = (xml) => {
|
|
487
|
-
const p = join(tmp, "case.bpmn");
|
|
488
|
-
writeFileSync(p, xml);
|
|
489
|
-
try {
|
|
490
|
-
execFileSync("node", [cli, p], { stdio: "pipe" });
|
|
491
|
-
return 0;
|
|
492
|
-
} catch (e) {
|
|
493
|
-
return e.status ?? 1;
|
|
494
|
-
}
|
|
495
|
-
};
|
|
496
|
-
const head = '<?xml version="1.0"?><bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"';
|
|
497
|
-
// Each malformed case is well-formedness-invalid (strict parsers / canvas import
|
|
498
|
-
// reject it) but bpmn-moddle's lenient SAX parser would accept it.
|
|
499
|
-
const malformed = {
|
|
500
|
-
'"--" inside comment': `${head}><!-- uip foo --connection-id x --><bpmn:process id="P"/></bpmn:definitions>`,
|
|
501
|
-
"unescaped ampersand": `${head}><bpmn:process id="P" name="Tom & Jerry"/></bpmn:definitions>`,
|
|
502
|
-
"&& in text (not CDATA)": `${head}><bpmn:process id="P">a && b</bpmn:process></bpmn:definitions>`,
|
|
503
|
-
"stray <": `${head}><bpmn:process id="P">a < b</bpmn:process></bpmn:definitions>`,
|
|
504
|
-
};
|
|
505
|
-
for (const [name, xml] of Object.entries(malformed)) {
|
|
506
|
-
const exit = runExit(xml);
|
|
507
|
-
const ok = exit !== 0;
|
|
508
|
-
console.log(`${ok ? "PASS" : "FAIL"} rejects ${name} (exit ${exit})`);
|
|
509
|
-
if (!ok) failures++;
|
|
510
|
-
}
|
|
511
|
-
const okComment = `${head}><!-- uip foo with connection id and json output --><bpmn:process id="P"/></bpmn:definitions>`;
|
|
512
|
-
const okExit = runExit(okComment);
|
|
513
|
-
const okOk = okExit !== 2;
|
|
514
|
-
console.log(`${okOk ? "PASS" : "FAIL"} clean comment not flagged for well-formedness (exit ${okExit})`);
|
|
515
|
-
if (!okOk) failures++;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
// ---- Coverage assertion: every rule code is exercised somewhere -----------
|
|
519
|
-
const portedOnly = [...COVERED_BY_PORTED].filter((c) => !fired.has(c));
|
|
520
|
-
const portedCoverageNote = portedOnly.length ? ` (+${portedOnly.join(",")} via ported suite)` : "";
|
|
521
|
-
const allFired = new Set([...fired, ...COVERED_BY_PORTED]);
|
|
522
|
-
const missing = RULE_CODES.filter((c) => !allFired.has(c));
|
|
523
|
-
console.log(`\nRule codes exercised: ${allFired.size}/${RULE_CODES.length}${portedCoverageNote}`);
|
|
524
|
-
if (missing.length) {
|
|
525
|
-
console.log(` MISSING coverage for: ${missing.join(", ")}`);
|
|
526
|
-
failures += missing.length;
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
console.log(`\n${failures === 0 ? "ALL GREEN" : failures + " FAILURE(S)"}`);
|
|
530
|
-
process.exit(failures === 0 ? 0 : 1);
|