Skip to content

docs(uipath-maestro-flow): add IxP extraction plugin#515

Open
joe-prosser wants to merge 5 commits into
mainfrom
docs/uipath-maestro-flow-add-ixp-plugin
Open

docs(uipath-maestro-flow): add IxP extraction plugin#515
joe-prosser wants to merge 5 commits into
mainfrom
docs/uipath-maestro-flow-add-ixp-plugin

Conversation

@joe-prosser
Copy link
Copy Markdown

Summary

New plugin under references/plugins/ixp/ for IxP document-extraction nodes (PDFs, invoices, receipts, contracts, forms). Adds planning.md, impl.md, a self-check.py, parent-skill registration, CODEOWNERS, and 7 test scenarios.

What changed

  • New plugin: planning.md, impl.md (sanitization, discovery, listing, build procedure, 6 numbered authoring rules, self-check, output-access path, mock fallback, debug table), self-check.py (canonical) + logically-equivalent heredoc in impl.md.
  • Parent skill registration: SKILL.md description, When-to-Use bullet, Reference Navigation + Plugin Index rows, Critical Rule 14 link. planning-arch.md resource-node table + ports + decision branch. planning-impl.md "context-dispatched, no bindings" subsection.
  • Tests (tests/tasks/uipath-maestro-flow/single_node/ixp/): activation (6 rows), activation_listing (3 rows, asserts no .flow written), activation_negative (3 rows, asserts no uipath.ixp.* node lands), smoke_01/smoke_02, integration_handle_routing (canonical Fields.find path), e2e_01 (SharePoint→IxP→HTTP), e2e_02 (10-row per-domain project selection).
  • CODEOWNERS: 8-owner block for the plugin dir + matching test dir.

@joe-prosser joe-prosser self-assigned this May 1, 2026
@joe-prosser joe-prosser force-pushed the docs/uipath-maestro-flow-add-ixp-plugin branch from 49e1957 to 9008c70 Compare May 1, 2026 16:36
@uipreliga uipreliga self-requested a review May 4, 2026 15:05

The `definitions[]` entry is copied verbatim from `registry get` (`Data.Node`). Critical Rule #7 applies unchanged.

### Self-check before `uip maestro flow validate`
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be part of uip maestro flow validate as a per-node-type hook?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally, yes we should have that Bai.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks - Submitted PR here: https://github.com/UiPath/cli/pull/1866

>
> The Authoring rules above are the source of truth for the instance contract. The registry's `inputDefinition.properties` is **not** a license to override them: it is the schema of the property catalog (current keys only — `digitizationMode`, `documentTaxonomy`, `attachmentId`, `fileName`, `mimeType` are NOT returned by `registry get`). If a forbidden field appears in your `inputs`, you put it there from training-data recall, not from the registry response.

```bash
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this validation logic shouldn't be part of the skill - the agent just needs to run the validation script not produce it. Or better move it into the flow validate command.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

echo "no .flow file under ../.." >&2
exit 1
fi
python3 - "$f" <<'PY'
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this duplicating the self check script again?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -0,0 +1,114 @@
task_id: skill-flow-ixp-activation
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the current file structure is misleading because they're all under single_node but are not actually. Let's put them all under uipath-maestro-flow/ixp.


dataset:
rows:
- id: aviation
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR currently adds a very large number of test cases (26 in total) which will substantially increase the cost and time of the daily run (currently there are 54 test cases in the whole flow project). Let's avoid multiple similar tests as much as possible.

Comment thread skills/uipath-maestro-flow/SKILL.md Outdated
---
name: uipath-maestro-flow
description: "UiPath Maestro Flow (.flow) — read, edit, author, debug. `uip` CLI: nodes, edges, subflows, scripts, variables, triggers, End nodes, registry. For C#/XAML→uipath-rpa. For agents→uipath-agents."
description: "UiPath Maestro Flow (.flow) — read, edit, author, debug. `uip` CLI: nodes, edges, subflows, scripts, variables, triggers, End nodes, registry, IxP document extraction (PDFs, invoices, receipts, forms). For C#/XAML→uipath-rpa. For agents→uipath-agents."
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase should show a conflict. I could see adding a keyword to it, but we should be mindful of our character limits and what keywords we want this skill to trigger for -- which are more likely centered around flow keywords. Open to adding a few if we can spare the chars :)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks - rebased and shortened insertion; finding activation is flakey without it

Smoke: minimal scaffold — manual trigger → IxP extract → script (logs "ok")
→ validate. Tests that the agent picks the IxP plugin, authors a single
extraction node via Direct JSON, and produces a flow that passes
`uip maestro flow validate`.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing task timeout.


Validate-only: no `uip maestro flow debug`.

tags: [uipath-maestro-flow, smoke, lifecycle:generate, shape:multi-node, node:ixp]
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing task timeout.

- Move IxP test suite from single_node/ixp/ to ixp/ (matches uipath-data-fabric layout; the suite contains multi-node and e2e flows that don't belong under single_node).
- Replace impl.md self-check heredoc with a single invocation of the canonical self-check.py (the heredoc duplicated the script logic).
- Trim activation/listing/negative test rows (6/3/3 to 2/1/1) to reduce daily-run cost.
- Add task_timeout: 600 to smoke_01 and smoke_02.
- Trim SKILL.md description: drop "document" and "receipts" to free flow-keyword tokens.
- Update CODEOWNERS path to match the new test dir.
- Drop 8 of 10 dataset rows (kept aviation, birth-certificate); shrink the case statement to match.
- Replace the inline self-check Python with a call to the canonical self-check.py shipped alongside impl.md.
Delete `self-check.py` and the "Self-check before uip maestro flow validate"
section in `impl.md`. The rules now run inside `uip maestro flow validate`
via the new `ixpNodeValidator` (UiPath/cli#1866). Drops the corresponding
`run_command` stanza from `e2e_02_project_selection.yaml`.
UiPath/cli#1866's `ixpNodeValidator` emits self-contained error messages
with `path` like `nodes[<nodeId>].inputs.model` (not "Rule #1 ..."), so
the impl.md callout was misdescribing what an agent will see when
`flow validate` fails on an IxP node.
@joe-prosser joe-prosser force-pushed the docs/uipath-maestro-flow-add-ixp-plugin branch from 9008c70 to 596af4d Compare May 6, 2026 16:05
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Claude finished @joe-prosser's task in 4m 31s —— View job


Coder-eval task lint (advisory)

8 task YAMLs changed; verdicts: 0 Critical, 0 High, 0 Medium, 2 Low, 6 OK. One theme at Medium (validate-only e2e/integration). This check is advisory and never blocks merge.

Rubric: .claude/commands/lint-task.md.

Evidence of passing run

High — PR body does not claim the changed tasks have been run and passed. Please consider editing the PR description to add a line like:

Ran skill-flow-ixp-activation (and other changed task IDs) locally and they passed.

Per-task lint

tests/tasks/uipath-maestro-flow/ixp/activation.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/ixp/activation_listing.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/ixp/activation_negative.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml — verdict: Low (theme-captured; see Theme 1)

tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml — verdict: Low (theme-captured; see Theme 1)

tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-maestro-flow/ixp/smoke_01_scaffold_minimal.yaml — verdict: OK

tests/tasks/uipath-maestro-flow/ixp/smoke_02_scaffold_multinode.yaml — verdict: OK

Within-PR duplicates

No duplicate clusters detected. The 8 tasks cover distinct aspects: 3 activation variants (positive/listing/negative), 2 smoke tiers (minimal scaffold vs fan-out wiring), 2 e2e tiers (greenfield multi-node vs per-domain model selection), and 1 integration (Decision routing from IxP output). Prompts in activation.yaml row invoice-extraction and e2e_01 share similar invoice-processing phrasing but differ in test depth (activation checks skill-triggering only; e2e validates flow structure and content).

Themes

  • Theme 1 (Medium): Validate-only flow tests without flow debuge2e_01, e2e_02, integration_handle_routing are all tagged e2e or integration but include no command_executed matching flow\s+debug. All three document the rationale in their description field (IxP runtime + connectors require a tenant deployment CI doesn't have), which triggers the description-rationale carve-out and downgrades each by one level (e2e: High→Medium→Low after theme downgrade; integration: Medium→Low→OK after theme downgrade). This is a known constraint of the IxP sandbox — the tests verify offline structural correctness only. Consider adding a flow debug step if/when a CI tenant with published IxP projects becomes available.

Conclusion

⚠ 2 task(s) have issues at Low (theme-downgraded from Medium), plus 1 theme at Medium severity. Evidence of passing run is missing from the PR body. Advisory only — not blocking merge.


@joe-prosser
Copy link
Copy Markdown
Author

Addressed review comments:

  • Self-check moved into uip maestro flow validate — new per-node ixpNodeValidator in UiPath/cli#1866. self-check.py + the matching impl.md section are deleted; held until the CLI PR ships in a release.
  • e2e_02 inline self-check Python deduplicated — replaced with a self-check.py invocation, then dropped entirely once the CLI PR took over.
  • Tests moved from tests/tasks/uipath-maestro-flow/single_node/ixp/tests/tasks/uipath-maestro-flow/ixp/. CODEOWNERS updated.
  • Test Row count trimmed 26 → 10 — activation 6→2, listing 3→1, negative 3→1, e2e_02 10→2. Smokes / integration / e2e_01 unchanged.
  • task_timeout: 600 added to smoke_01 and smoke_02.
  • SKILL.md description trimmed — dropped document and receipts to free flow-keyword tokens.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants