Skip to content

M2: process-family tools — capabilities/process.md + 8 tasks migrated to the flow file - #2433

Merged
andreibalas-uipath merged 4 commits into
feat/inline-agent-flow-filefrom
feat/inline-agent-m2-process-tools
Aug 4, 2026
Merged

M2: process-family tools — capabilities/process.md + 8 tasks migrated to the flow file#2433
andreibalas-uipath merged 4 commits into
feat/inline-agent-flow-filefrom
feat/inline-agent-m2-process-tools

Conversation

@andreibalas-uipath

Copy link
Copy Markdown
Contributor

Roadmap milestone M2 of the inline-agent flow-file rewrite (roadmap § M2). Targets the long-lived feat/inline-agent-flow-file branch (rebased on main at milestone start — no upstream twin changes to fold).

Docs

  • New plugins/inline-agent/capabilities/process.md — class-B mirror of uipath-agents/references/lowcode/capabilities/process/process.md: discovery (uip solution resources list/get) kept verbatim; the "author resource.json" half replaced by the flow-node contract — uipath.agent.resource.tool.<process|agent|api|processorchestration>.<key> node with full inputs (per-argument ValueSourceField {mode: prompt|variable|text-builder}, properties {processName, folderPath}, inputSchema/outputSchema from the manifest's inputDefaults), top-level bindings[] rows mirroring model.bindings, name authority, and the derived-fields-never-author list (type/location/argumentProperties/guardrail.policies).
  • impl.md §8 worked example extended with an RPA tool (variable-mode argument + bindings rows); §intro/§7 and planning.md rows now link the capability doc. Mirror map M2 row marked landed.

Probes (resolve two M0 leftovers)

  • The D.8 registry get --local divergence (bindings values object-vs-array) is fixed in uip 1.200.0 — proper array both local and remote; no repair recipe needed.
  • flow validate enforces missing bindings[] rows with an actionable error, so the w3.0 validate criterion covers them and the checkers don't duplicate.
  • Both authored shapes (external + in-solution, prompt- and variable-mode args) validate clean against alpha/codereval.

Tests

  • 8 tasks migrated: inline_{solution,external}_{rpa,agent,apiworkflow,maestro}_toolinline_agent/tool_{rpa,agent,api,maestro}_{solution,external} (skill-flow-inline-tool-*), graded on the .flow (sidecar neither required nor forbidden); fixtures git mved; old task dirs deleted (global transforms per roadmap §7).
  • _shared/flow_inline_wiring.py gains find_wired_resource, assert_resource_source_uuid, assert_resource_inputs, assert_tool_type_key_uuid, assert_cluster_vars_ref; pytest suite 64/64; every checker verified against a synthetic passing flow + 4 negative variants.
  • Deviation from the M2 spec ("discovery gates KEEP"): the external tasks' enforced resources list gate is downgraded to advisory — in the flow-file architecture the registry manifest's bindings defaults carry name+folder, so the gate is outcome-invisible (a gate-failing replicate produced a fully correct artifact). Registry search/get gates stay enforced. Per .claude/rules/test-writing.md "grade the outcome, not the literal flag".
  • /lint-task: 0 Critical/High; one Medium theme (validate-only e2e) with the rationale documented in every description — same accepted posture as M1 (flow debug cannot yet run flow-only inline agents; M0 CLI gap).

Gate evidence (claude-sonnet-5, experiments/default.yaml, 3 replicates)

Task Result
tool_rpa_solution / tool_rpa_external / tool_api_solution / tool_api_external / tool_maestro_solution / tool_maestro_external 3/3 each
tool_agent_external 2/3 raw → 3/3 under the corrected advisory criterion (the failing rep's only unmet criterion was the old resources list gate; artifact fully correct)
tool_agent_solution 2/3 in the main run (failing rep authored properties.folderPath: "" during a window where the machine's uip token had expired and solution resources list failed tenant-wide) → 3/3 on a dedicated rerun after re-auth + doc hardening (§ In-Solution now separates "bindings default: copy verbatim" from "properties.folderPath: never empty")

M1 regression (base / robust / eval, 1 rep): 3/3 at 1.000. Artifact audit: 27/27 authored flows carry bindings[]; zero sidecar directories created; no uip agent init/refresh/validate invocations.

Reviewers: plugin dir = agents team; flow-skill refs = Maestro team; tests = agents team (per roadmap review coordination).

🤖 Generated with Claude Code

… to the flow file

Docs: mirror lowcode/capabilities/process/process.md into
plugins/inline-agent/capabilities/process.md (discovery verbatim; authoring
swapped to the uipath.agent.resource.tool.<family>.<key> node — full inputs
incl. per-argument ValueSourceField modes, properties, schemas from manifest
inputDefaults, top-level bindings[] rows, derived-fields-never-author list).
Extend impl.md §8 worked example with an RPA tool (variable-mode argument);
link the capability doc from impl.md §7 and planning.md.

Probes resolve two M0 leftovers: the registry get --local bindings
object-vs-array divergence is fixed in uip 1.200.0 (no repair recipe
needed), and flow validate enforces missing bindings[] rows, so the
validate criterion covers them.

Tests: inline_{solution,external}_{rpa,agent,apiworkflow,maestro}_tool →
inline_agent/tool_{rpa,agent,api,maestro}_{solution,external}
(skill-flow-inline-tool-*), graded on the .flow via new flow_inline_wiring
helpers (find_wired_resource, assert_resource_source_uuid,
assert_resource_inputs, assert_tool_type_key_uuid, assert_cluster_vars_ref);
pytest 64/64; checkers verified against synthetic pass/fail flows. External
tasks' resources-list gate downgraded to advisory — outcome-invisible in the
flow-file architecture (registry manifest bindings carry name+folder); per
tests rule 'grade the outcome, not the literal flag'.

Gate (claude-sonnet-5, 3 reps): 7/8 tasks 3/3; tool_agent_solution 2/3 in
the main run (expired-auth window) then 3/3 on a dedicated rerun after doc
hardening (folderPath never-empty vs bindings-default-verbatim separation).
M1 regression 1-rep: 3/3 at 1.000. No sidecar directories authored in any
of the 27 run artifacts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Claude finished @andreibalas-uipath's task in 4m 13s —— View job


PR Review: M2 process-family tools

  • Read review criteria and project conventions
  • Analyze PR diff against base branch
  • Review new capability doc (process.md)
  • Review updated impl.md and planning.md
  • Review migrated test tasks (8 tasks)
  • Review shared test utilities (flow_inline_wiring.py)
  • Review test checker files
  • Check for cross-skill dependencies, broken links, secrets
  • Post final review

Summary

M2 of the inline-agent flow-file rewrite: adds capabilities/process.md (class-B mirror covering discovery and node authoring for RPA/agent/API/process-orchestration tools), extends impl.md §8 with an RPA tool worked example, and migrates 8 test tasks from the old sidecar-based uipath-agents/lowcode/ structure to the flow-file-first uipath-maestro-flow/inline_agent/ structure with new shared checker helpers.

Change-by-Change Review

1. capabilities/process.md (new, 215 lines)

OK

Comprehensive, prescriptive capability doc. Well-structured with clear sections: When to Use, Node Type and Subtypes, Discovery (3-step CLI flow), Tool Node Shape, Per-Argument Value Sources, Bindings, Derived Fields, Walkthrough, In-Solution Targets, Gotchas. All relative links resolve (../impl.md, ../planning.md, ../critical-rules.md, ../prompting/autonomous-agent-prompting-guide.md — all verified to exist). Follows token-optimization rules. Code examples are copy-paste ready. The folderPath hardening (line 200: "ALWAYS the literal string "solution_folder" for a local target — never """) directly addresses the failure mode seen during gate runs.

2. impl.md (modified, +29/-8)

OK

Intro paragraph updated to link capabilities/process.md. §7 Resource Nodes table adds the process-family row with correct type pattern and link. §8 Worked Example extended with an RPA tool node (variable-mode argument, bindings rows) — the example is complete and internally consistent (bindings resourceKey matches folderPath.name, edge wires toolinput, tool node has properties, inputSchema, outputSchema).

3. planning.md (modified, +2/-2)

OK

tool port description and Resource Nodes section updated to link capabilities/process.md. No content duplication — just bridge references.

4. flow_inline_wiring.py — shared helpers (modified, +158/-3)

OK

Five new helpers added for M2 resource-node checking:

  • find_wired_resource — finds a resource node by type prefix and verifies the artifact edge
  • assert_resource_source_uuid — validates lowercase UUID + no instance model block
  • assert_resource_inputs — validates properties, name, description
  • assert_tool_type_key_uuid — validates the type suffix is a real GUID (discovered, not hand-constructed)
  • assert_cluster_vars_ref — validates $vars/$metadata refs across the cluster (prompt tokens OR variable-mode argumentPath)

All helpers follow the same pattern as the M1 helpers (exit with FAIL: message on failure, descriptive error messages). The RAW_VARS_RE regex correctly matches both braced prompt tokens and raw structured refs. TYPE_KEY_UUID_RE is case-insensitive (appropriate since the key is registry-owned, unlike author-minted inputs.source).

5. test_flow_inline_wiring.py — unit tests (modified, +202/-0)

OK

Adds 22 new tests covering all 5 new helpers with positive and negative cases (wrong port, missing edge, non-UUID source, uppercase source, instance model block, hand-constructed type, empty name/description, missing properties, wrong process name, empty folder path, variable-mode argumentPath vs prompt token). Test coverage is thorough, including the specific failure mode from the 2026-07-23 codex nightly (empty folderPath).

6. Task YAMLs — 8 migrated tasks

OK

All 8 tasks follow conventions:

  • task_id follows skill-flow-inline-tool-* pattern
  • Tags include uipath-maestro-flow as first tag, e2e tier, mode:build, lifecycle:generate, node:inline-agent, shape:multi-node
  • No env_packages (correct per test-writing rules)
  • initial_prompt is minimal — describes the goal, not the steps
  • Success criteria grade outcomes, not self-reports
  • Weight hierarchy is consistent: advisory discovery 0.5, enforced commands 1.0-1.5, artifact checks 1.5, checker 5.0, validate 3.0
  • Validate-only rationale documented in all 8 descriptions
  • Solution (brownfield) tasks correctly prevent re-init and ship proper fixtures via pre_run
  • External (greenfield) tasks correctly scaffold from scratch

7. Checker scripts — 8 files

OK

All 8 checkers follow the same structure: load flow → find agent → assert embedded + tokens + input vars → assert definition with serviceType → find wired resource → assert type key UUID + source UUID + resource inputs (with correct expected_properties) → assert definition present. External variants additionally check assert_agent_output_vars and assert_cluster_vars_ref. Solution variants don't check typed outputs or cluster vars ref (correct — solution tasks don't mandate specific output types or flow-data wiring in their prompts).

8. Deleted old tasks

OK

8 old task directories under uipath-agents/lowcode/ cleanly removed. No stale references to old task names in any remaining YAML files (verified with grep). Fixtures properly git mved to new locations.

9. Roadmap and mirror map updates

OK

Status board M2 row marked done with PR reference and detailed gate evidence. Mirror map M2 row marked . Baseline table updated with 8 new rows showing gate results. Notes are thorough and document the criteria deviation, doc hardening, and env issues.

What's Missing

Nothing identified. The PR is well-scoped to the M2 milestone deliverables.

Area Ratings

Area Status Notes
Frontmatter N/A No skill SKILL.md changes — this is a references + tests PR
E2E Tests OK 8 tasks, all e2e tagged, all with comprehensive outcome-based checks
Skill Body N/A No SKILL.md changes
References & Assets OK capabilities/process.md is well-structured; impl.md/planning.md updates are minimal and correct
Repo Hygiene OK No secrets, no cross-skill deps, all links resolve, clean deletions, no env_packages

Issues for Manual Review

  • Domain accuracy: The reviewer cannot verify that the CLI commands (uip solution resources list/get, uip maestro flow registry search/get), the model.bindings mirroring contract, and the per-argument ValueSourceField shape (mode: prompt|variable|text-builder) match the actual current behavior of @uipath/cli@latest and the flow-workbench runtime. The PR's gate evidence (3/3 across 8 tasks with flow validate passing) provides strong indirect evidence of correctness, but the specific field names and semantics should be verified by a domain expert.
  • Expected folderPath values in external checkers (e.g. Shared/uipath-agents/FibonacciRPA, Shared/uipath-agents/EmailDrafter, Shared/uipath-agents/WeatherAPI, Shared/uipath-agents/ProcurementProcess): These are hardcoded to match the tenant's deployed resources. If the tenant layout changes, all external checkers would need updating. This is inherent to e2e tests against a live tenant — not an issue per se, but worth noting.

Conclusion

Clean, well-executed milestone delivery. The capability doc is comprehensive and prescriptive. Test migration is thorough with good shared helper reuse. The resources list gate downgrade is well-reasoned and documented per the test-writing rules. The code is consistent, follows all repo conventions, and the gate evidence is strong (7/8 tasks at 3/3, with the 8th explained by an auth expiry and confirmed at 3/3 on rerun). No blocking issues found.


@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Claude finished @andreibalas-uipath's task in 3m 48s —— View job


Coder-eval task lint (advisory)

8 task YAMLs changed; verdicts: 0 Critical, 0 High, 0 Medium, 8 Low, 0 OK.

Rubric: .claude/commands/lint-task.md. This check is advisory and never blocks merge.

Evidence of passing run

✅ Author confirms passing run: "Gate evidence (claude-sonnet-5, experiments/default.yaml, 3 replicates) — tool_rpa_solution / tool_rpa_external / tool_api_solution / tool_api_external / tool_maestro_solution / tool_maestro_external: 3/3 each; tool_agent_external: 2/3 raw → 3/3 under the corrected advisory criterion; tool_agent_solution: 2/3 → 3/3 on a dedicated rerun after re-auth + doc hardening"

Per-task lint

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

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

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

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

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

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

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

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

Within-PR duplicates

No duplicate clusters detected. The 8 tasks form a deliberate 2×4 matrix (external/solution × 4 tool types: process, agent, api, processorchestration). Each exercises a materially distinct tool-type operation with a type-specific checker (check_tool_*_.py) validating different node type keys, expected properties, and output schemas. External vs. solution variants further diverge in fixture setup, discovery criteria (tenant vs. --local), and brownfield guardrails (command_not_executed for solution init / existing-project re-creation). This is scaffold reuse, not duplication per the rubric.

Themes

  • Theme 1 [Medium]: Validate-only e2e — all 8 tasks. All tasks are tagged e2e but grade only flow validate, not flow debug. Each task documents the rationale in description: "Validate-only by design: uip maestro flow debug cannot yet run flow-only inline agents (no sidecar synthesis — known CLI gap pinned at roadmap M0), so flow validate is the grading ceiling." Severity downgraded High → Medium per the description-rationale carve-out. This matches the accepted posture from M1 and is explicitly documented in the PR body. Per-task verdicts downgraded Medium → Low (theme-captured).

Conclusion

⚠ 8 task(s) have issues, max severity Medium (theme-level only; per-task max Low). Advisory only — not blocking merge. The validate-only posture is well-documented, consistent with M1, and gated by a known CLI limitation. No other rubric axes raised issues: prompts are goal-focused, criteria are outcome-graded with substantive Python checkers, CLI verbs are reachable, and no self-report / sandbox / run-limit anti-patterns detected.


andreibalas-uipath and others added 2 commits August 3, 2026 20:20
coder-eval milestone gate runs only with explicit owner approval —
interactive uip login (alpha/codereval/DefaultTenant) and time-consuming.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- process.md discovery: '--kind Process covers all four families' clause
  (agents/API/agentic list as Kind Process; family is in Type)
- process.md gotcha 6: never wire a conversational agent as a tool
  (twin anti-pattern 24, lost in the mirror)
- roadmap M2 notes: record the referenceKey not-authored spec deviation
  and the early-M3 checker-hardening + Low-triage item

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@andreibalas-uipath
andreibalas-uipath merged commit 7d5067c into feat/inline-agent-flow-file Aug 4, 2026
20 checks passed
@andreibalas-uipath
andreibalas-uipath deleted the feat/inline-agent-m2-process-tools branch August 4, 2026 13:39
andreibalas-uipath added a commit that referenced this pull request Aug 4, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant