From 653b86df77c7289bd1185ac78bbb1fefbe0fef16 Mon Sep 17 00:00:00 2001 From: rockymadden Date: Fri, 4 Sep 2026 10:38:43 -0600 Subject: [PATCH 1/6] feat(uipath-maestro-flow): one canonical headless preamble on every zero-shot flow task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the 2026-09-04 nightly, 5 of 8 `skill-flow-*` tasks built and validated a flow, reported success, and never executed it. The checker then ran `flow debug` and found a null End-node output mapping, a faulted script, and an empty result. `flow validate` had passed on all of them. Every one of those prompts contained "Do NOT ask for approval, confirmation, or feedback". That phrasing forbids asking. It does not say nobody is there to ask, so an agent can honor it and still stop at a consent gate waiting for a reply that never arrives. Measured across the 128-task suite: 0 tasks said the run was headless, 51 of the 119 non-simulated tasks said nothing about autonomy at all, and the 68 that did were spread across 9 wording variants — the ninth found by the guard added here, not by the sweep. Task prompts, not an experiment config: flow tasks run under nightly.yaml via daily.sh in coder_eval_uipath, smoke.yaml on every PR, default.yaml locally, and whatever a dispatch selects. coder_eval has no pattern-scoped defaults, so a config carrying this would either miss those runners or reach the 319 simulated tasks of every other skill. Keeping it in the prompt makes it travel with the task and work everywhere today, with no cross-repo change. - One canonical paragraph on all 119 zero-shot tasks. It states that nobody is present, that the task's implied actions are authorized including tenant writes, and the two things to hold back on: do not delete or overwrite what this run did not create, and exhaust the documented resolution path before giving up on a lookup. - _shared/test_headless_preamble.py enforces presence, identical wording, absence on the 9 simulated tasks, and that no superseded variant comes back. Each guard verified by breaking it. - test-task-template.yaml points authors at the canonical block instead of telling them to hand-write autonomy language. Skill side, both true with a user watching: - `flow debug` consent comes from the mandate. A request to build something that does X is a request for it to work. Debug also overwrites the Studio Web solution behind the local .uipx SolutionId, so never debug a solution this run did not scaffold. - "Publish to Studio Web" is no longer marked `(default)` in either What's next dropdown — rule #5's non-interactive fallback takes the marked option, which would have auto-published to a tenant. Both menus also stopped gating Debug on consent, which contradicted rule #2. Modifies Critical Rules 2 and 5, per CONTRIBUTING. Co-Authored-By: Claude Opus 5 (1M context) --- skills/uipath-maestro-flow/SKILL.md | 4 +- .../references/author/brownfield.md | 4 +- .../references/author/greenfield.md | 4 +- .../references/operate/run.md | 2 +- .../_shared/test_headless_preamble.py | 101 ++++++++++++++++++ .../bindings/idempotent_reconfigure.yaml | 10 ++ .../multi_connector_independence.yaml | 10 ++ .../no_duplicate_connection_bindings.yaml | 10 ++ .../reconfigure_different_connection.yaml | 10 ++ .../connector_features/ceql_where.yaml | 10 ++ .../connector_features/complex_array.yaml | 10 ++ .../contractregistry_crud_filters.yaml | 13 ++- .../e2e_contract_intake_pipeline.yaml | 13 ++- .../integration_create_get.yaml | 13 ++- .../smoke_activation_negative.yaml | 10 ++ .../smoke_activation_positive.yaml | 10 ++ .../smoke_create_all_types.yaml | 13 ++- .../datafabric_connector/smoke_error.yaml | 13 ++- .../smoke_file_activities.yaml | 13 ++- .../datafabric_connector/smoke_query.yaml | 13 ++- .../datafabric_connector/smoke_update.yaml | 13 ++- .../smoke_update_existing_flow.yaml | 13 ++- .../trigger_lifecycle.yaml | 13 ++- .../connector_features/drive_to_slack.yaml | 22 +++- .../dtl_load_by_default_false.yaml | 10 ++ .../dtl_load_by_default_true.yaml | 10 ++ .../connector_features/enhanced_enum.yaml | 10 ++ .../connector_features/enum.yaml | 10 ++ .../connector_features/generate_schema.yaml | 10 ++ .../generic_dynamic_node.yaml | 14 ++- .../jdbc_databricks_query.yaml | 13 ++- .../connector_features/multiselect.yaml | 10 ++ .../non_catalog_http_fallback.yaml | 12 ++- .../paginated_reference_lookup.yaml | 12 ++- .../connector_features/path_params.yaml | 10 ++ .../connector_features/query_params.yaml | 10 ++ .../connector_features/searchable_joins.yaml | 10 ++ .../slack_http_fallback.yaml | 12 ++- .../testmanager_attachments.yaml | 13 ++- .../testmanager_crud_grounded.yaml | 13 ++- .../testmanager_execution_results.yaml | 13 ++- .../testmanager_generic_records.yaml | 13 ++- .../testmanager_requirement_lifecycle.yaml | 13 ++- .../testmanager_testcase_lifecycle.yaml | 13 ++- .../testmanager_testset_lifecycle.yaml | 13 ++- .../trigger_with_filter.yaml | 11 +- .../webhook_waitfor_parallel.yaml | 12 ++- .../batch_transform/batch_transform.yaml | 12 ++- .../summarize/summarize.yaml | 12 ++- .../e2e/devcon_expense_approval.yaml | 10 ++ .../escalation_jira_ticket.yaml | 13 ++- .../escalation_orchestrator_paths.yaml | 13 ++- .../escalation_slack_alert.yaml | 14 ++- .../jira_create_issue/jira_create_issue.yaml | 10 ++ .../e2e/jira_get_issue/jira_get_issue.yaml | 10 ++ .../e2e/jira_lifecycle/jira_lifecycle.yaml | 10 ++ .../jira_search_triage.yaml | 10 ++ .../edit/add_node/add_node.yaml | 11 +- .../edit/add_output/add_output.yaml | 11 +- .../group_to_subflow/group_to_subflow.yaml | 11 +- .../edit/move_node/move_node.yaml | 11 +- .../edit/remove_node/remove_node.yaml | 11 +- .../edit/update_node/update_node.yaml | 11 +- .../child_simulation_crud.yaml | 10 ++ .../evaluate/evaluator_type_choice.yaml | 10 ++ .../inline_agent_eval/inline_agent_eval.yaml | 12 ++- .../evaluate/local_crud.yaml | 10 ++ .../evaluate/no_auto_upload.yaml | 10 ++ .../evaluate/simulation/simulation_crud.yaml | 10 ++ .../hitl/quality_01_schema_design.yaml | 10 ++ .../hitl/quality_02_result_downstream.yaml | 10 ++ .../hitl/quality_03_boolean_decision.yaml | 10 ++ .../hitl/quality_04_brownfield_insert.yaml | 10 ++ .../hitl/smoke_01_hitl_node_placed.yaml | 10 ++ .../hitl/smoke_02_completed_port_wired.yaml | 10 ++ .../hitl/smoke_03_multi_outcome_routing.yaml | 10 ++ .../e2e_01_invoice_extraction_greenfield.yaml | 12 ++- .../ixp/e2e_02_project_selection.yaml | 10 ++ .../e2e_03_project_creation_handoff.yaml | 12 ++- .../ixp/integration_handle_routing.yaml | 10 ++ .../uipath-maestro-flow/ixp/routing.yaml | 10 ++ .../ixp/routing_listing.yaml | 10 ++ .../ixp/routing_negative.yaml | 10 ++ .../ixp/scaffold_minimal.yaml | 10 ++ .../ixp/scaffold_multinode.yaml | 10 ++ .../bellevue_weather/bellevue_weather.yaml | 11 +- .../billing_discrepancy_detector.yaml | 11 ++ .../billing_dispute_analyst.yaml | 11 ++ .../billing_dispute_resolution.yaml | 11 ++ .../billing_invoice_lookup.yaml | 11 ++ .../billing_resolution_writer.yaml | 11 ++ .../multi_node/calculator/calculator.yaml | 11 +- .../customer_escalation.yaml | 13 ++- .../multi_node/dice_roller/dice_roller.yaml | 11 +- .../multi_node/feet_inches/feet_inches.yaml | 12 ++- .../loop_multiply/loop_multiply.yaml | 11 +- .../multi_city_weather.yaml | 11 +- .../multi_node/reading_list/reading_list.yaml | 11 +- .../slack_channel_description.yaml | 11 +- .../slack_weather_pipeline.yaml | 11 +- .../wiki_pageviews/wiki_pageviews.yaml | 12 ++- .../api_workflow/api_workflow.yaml | 11 +- .../single_node/coded_agent/coded_agent.yaml | 12 ++- .../single_node/decision/decision.yaml | 11 +- .../single_node/delay/delay.yaml | 12 ++- .../file_attachment/file_attachment.yaml | 14 ++- .../lowcode_agent/lowcode_agent.yaml | 11 +- .../openmeteo_weather/openmeteo_weather.yaml | 14 ++- .../outlook_trigger_inbox.yaml | 13 ++- .../outlook_waitfor_email.yaml | 14 ++- .../single_node/rpa/rpa.yaml | 11 +- .../single_node/subflow/subflow.yaml | 11 +- .../single_node/switch/switch.yaml | 11 +- .../single_node/terminate/terminate.yaml | 11 +- .../transform_filter/transform_filter.yaml | 14 ++- .../transform_group_by.yaml | 12 ++- .../transform_map/transform_map.yaml | 12 ++- .../smoke/init_validate.yaml | 10 ++ .../smoke/inline_agent_robust.yaml | 10 ++ .../smoke/merge_parallel_sync.yaml | 13 ++- .../smoke/registry_discovery.yaml | 10 ++ .../smoke/scheduled_trigger.yaml | 13 ++- .../voice/voice_inbound_call.yaml | 10 ++ .../voice/voice_outbound_call.yaml | 10 ++ tests/templates/test-task-template.yaml | 10 +- 125 files changed, 1331 insertions(+), 149 deletions(-) create mode 100644 tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py diff --git a/skills/uipath-maestro-flow/SKILL.md b/skills/uipath-maestro-flow/SKILL.md index bd3fb65a15..2463da2399 100644 --- a/skills/uipath-maestro-flow/SKILL.md +++ b/skills/uipath-maestro-flow/SKILL.md @@ -61,7 +61,7 @@ Guide for creating, editing, validating, debugging, publishing, diagnosing, and > **Tool vocabulary.** `Edit` means in-place replacement, `Write` a full-file write, `Read`/`Glob`/`Grep` file access, `Bash` shell, and a progress list the harness task list. Map them to equivalent tools elsewhere; preserve reviewable diffs and use shell file edits only as a last resort. 1. **Use `--output json`; prefer `--output-filter` for extraction.** Filters are global and run against the `Data` envelope, so expressions start at `Data` without a `Data.` prefix. Registry search returns a flat PascalCase array (`NodeType`, `DisplayName`, `Description`, `AvailableOnTenant`), not `Data.Nodes` or lowercase fields. Example: `uip maestro flow registry search --output json --output-filter "[*].{NodeType:NodeType,DisplayName:DisplayName,Description:Description,AvailableOnTenant:AvailableOnTenant}"`. With `--local`, omit `AvailableOnTenant`. Use `python3 -c` or `jq` only after verifying shape and when JMESPath cannot express the transform. See [cli-conventions.md §3](references/shared/cli-conventions.md#3-prefer---output-filter-for-extraction). -2. **Do not run `flow debug` without explicit user consent.** It executes the flow for real (sends emails, posts messages, calls APIs). +2. **`flow debug` consent comes from the mandate.** It executes the flow for real (sends emails, posts messages, calls APIs), so run it only when the request is for a flow that *works*: the user asked for something that does X, or said make it work, get it running, iterate until it passes. Building and validating does not discharge that, and a flow that was never executed is not finished. Ask when the request stops short of a working artifact (review this, add a node, validate only); with nobody to ask, report debug as the step not run. Debug also overwrites the Studio Web solution matching the local `.uipx` `SolutionId`, so never debug a solution this run did not scaffold. 3. **Search before creating or declaring resources absent.** For named agents, API workflows, RPA processes, and similar resources: (a) pull and search the tenant registry with `uip maestro flow registry pull --force && uip maestro flow registry search "" --output json`; pull first because the cache expires after 30 minutes, login is required, and only published resources are returned; (b) search locally with `uip maestro flow registry list --local --output json` or `search "" --local` (no login; returns sibling projects in the same `.uipx` solution); an empty keyword search does not prove absence, so confirm with `list --local`; (c) scaffold, mock, or create only when both searches find no match and the user explicitly requests embedding/creation or no published resource satisfies the need. "Coded" and "low-code" describe implementation style, not inline status. Use `uipath.agent.autonomous` only when explicitly asked to embed/inline/create an agent. Use `core.logic.mock` only when the resource is neither in the solution nor published. See [rpa](references/author/plugins/rpa/impl.md) and [agent](references/author/plugins/agent/impl.md). @@ -73,7 +73,7 @@ Guide for creating, editing, validating, debugging, publishing, diagnosing, and **Two tells that you skipped the search and took the brand-name shortcut — both are build defects, not valid manual-mode HTTP:** (a) you authored a manual-mode `core.action.http.v2` node whose `url` targets a well-known SaaS API domain that has a connector (`slack.com/api/*`, `api.github.com`, `*.salesforce.com`, `graph.microsoft.com`, …); (b) you declared an `in` variable to hold that service's API token or secret (e.g. a `slackToken` holding an `xoxb-…` bot token, an `apiKey`, a bearer token). A connector-backed flow never carries the raw credential — the IS connection does. If you find yourself writing either, **stop**: run `uip maestro flow registry search ""` and `uip is connections list "" --all-folders`, then use the connector activity (or connector-mode HTTP: `authentication:"connector"` + `targetConnector` + a bound `connectionId`/`folderKey`). Manual mode is legitimate only for a service the search proves has no connector. 4. **Never invoke other skills automatically** — when a flow needs an RPA process, agent, or app, identify the gap and provide handoff instructions. Let the user decide when to switch skills. **One exception — IXP extraction with documents in hand:** when the flow needs document extraction, the user supplied sample documents, and `registry search "uipath.ixp"` shows no extractor covering them, invoke the `uipath-ixp` skill to build and deploy the model, then resume the flow ([plugins/ixp/impl.md — If the Model Does Not Exist Yet](references/author/plugins/ixp/impl.md#if-the-model-does-not-exist-yet)). Resolve the target Orchestrator folder for the deployment before invoking — from the user's request when it names one, otherwise per rule #5 (its non-interactive fallback applies) — and pass it in the handoff; the sibling stops rather than guess a folder. There is deliberately no separate consent gate on the tenant writes this creates: the project and folder deployment fulfil the extraction request itself, and the one consequential choice — where the deployment lands (deployments have no delete API) — is exactly the folder decision rule #5 just routed. Do NOT drive `uip ixp` project or deployment commands from this skill instead of invoking it — the sibling's guides carry guardrails this skill does not. If `uipath-ixp` is unavailable in the session, fall back to `core.logic.mock` plus an Open Questions entry, exactly as when no documents were supplied. -5. **Always present finite decisions as a dropdown with a final "Something else" escape hatch.** Whenever the skill needs a decision (which solution, publish vs debug vs deploy, which connector, trigger type, or resource to bind, etc.), ask with the enumerated choices plus **"Something else"** last for free-form input; never ask open-ended in chat when a finite set of sensible defaults exists. If the user picks "Something else", parse their answer and continue. No structured-question facility on the harness → ask in chat as a numbered list with "Something else" last. Non-interactively (CI/headless, no user available) → take the marked recommended option, proceed, and record the decision prominently in the final report; if none is recommended, stop and report the open decision instead of guessing. Consent gates (`flow debug`, destructive operations) are never auto-answered — in non-interactive mode, stop and report the blocked step. These fallbacks define "ask the user" / "confirm with the user" wherever this skill's references require it. +5. **Always present finite decisions as a dropdown with a final "Something else" escape hatch.** Whenever the skill needs a decision (which solution, publish vs debug vs deploy, which connector, trigger type, or resource to bind, etc.), ask with the enumerated choices plus **"Something else"** last for free-form input; never ask open-ended in chat when a finite set of sensible defaults exists. If the user picks "Something else", parse their answer and continue. No structured-question facility on the harness → ask in chat as a numbered list with "Something else" last. Non-interactively (CI/headless, no user available) → take the marked recommended option, proceed, and record the decision prominently in the final report; if none is recommended, stop and report the open decision instead of guessing. Consent gates (destructive operations, tenant writes) are never auto-answered — in non-interactive mode, stop and report the blocked step; `flow debug` is not one of them, and is governed by the mandate rule above. These fallbacks define "ask the user" / "confirm with the user" wherever this skill's references require it. diff --git a/skills/uipath-maestro-flow/references/author/brownfield.md b/skills/uipath-maestro-flow/references/author/brownfield.md index 707203f2a1..501122d6fc 100644 --- a/skills/uipath-maestro-flow/references/author/brownfield.md +++ b/skills/uipath-maestro-flow/references/author/brownfield.md @@ -81,8 +81,8 @@ Authoring ends here. For any selected option, read [operate/CAPABILITY.md](../op | Option | What it does | |---|---| -| **Publish to Studio Web** (default) | Push the solution to Studio Web so the user can visualize, edit, and publish from the browser. | -| **Debug the solution** | Execute the flow end-to-end against real systems. Confirm consent first because debug has real side effects (see the consent-before-debug rule in [SKILL.md](../../SKILL.md)). | +| **Publish to Studio Web** | Push the solution to Studio Web so the user can visualize, edit, and publish from the browser. | +| **Debug the solution** | Execute the flow end-to-end against real systems. Consent comes from the mandate, not from this menu — see the `flow debug` rule in [SKILL.md](../../SKILL.md). Selecting it here is the user asking for a run. | | **Deploy to Orchestrator** | Pack and publish directly to Orchestrator (bypasses Studio Web). Only when explicitly chosen; see [/uipath:uipath-platform](/uipath:uipath-platform). | | **Something else** | Last option. Accept free-form string input and act on it. | diff --git a/skills/uipath-maestro-flow/references/author/greenfield.md b/skills/uipath-maestro-flow/references/author/greenfield.md index 9f2d049dc1..162b44b3c0 100644 --- a/skills/uipath-maestro-flow/references/author/greenfield.md +++ b/skills/uipath-maestro-flow/references/author/greenfield.md @@ -373,8 +373,8 @@ Authoring terminates here. Each option below hands off to Operate — read [oper | Option | What it does | | --- | --- | -| **Publish to Studio Web** (default) | Push the solution to Studio Web so the user can visualize, edit, and publish from the browser. | -| **Debug the solution** | Execute the flow end-to-end against real systems. Confirm consent first — debug has real side effects (see the consent-before-debug rule in [SKILL.md](../../SKILL.md)). | +| **Publish to Studio Web** | Push the solution to Studio Web so the user can visualize, edit, and publish from the browser. | +| **Debug the solution** | Execute the flow end-to-end against real systems. Consent comes from the mandate, not from this menu — see the `flow debug` rule in [SKILL.md](../../SKILL.md). Selecting it here is the user asking for a run. | | **Deploy to Orchestrator** | Pack and publish directly to Orchestrator (bypasses Studio Web). Only when explicitly chosen — see [/uipath:uipath-platform](/uipath:uipath-platform). | | **Something else** | Last option. Accept free-form string input and act on it (e.g., "just leave it", "pack but don't publish", "upload to a different tenant"). | diff --git a/skills/uipath-maestro-flow/references/operate/run.md b/skills/uipath-maestro-flow/references/operate/run.md index 0c808e8d61..98aa1abf0c 100644 --- a/skills/uipath-maestro-flow/references/operate/run.md +++ b/skills/uipath-maestro-flow/references/operate/run.md @@ -13,7 +13,7 @@ Execute a flow on demand and monitor progress. Three modes: **debug** (controlle ## Debug — controlled end-to-end run -> **Confirm consent first.** `flow debug` executes the flow for real — sends emails, posts messages, calls APIs. See the consent-before-debug rule in [SKILL.md](../../SKILL.md). Do not run without explicit user authorization. +> **Consent comes from the mandate.** `flow debug` executes the flow for real — sends emails, posts messages, calls APIs. Run it when the request is for a flow that works; ask when the request stops at build or validate. Never debug a solution this run did not scaffold: debug overwrites the Studio Web solution matching the local `.uipx` `SolutionId`. See rule #2 in [SKILL.md](../../SKILL.md). ```bash UIP_LOG_LEVEL=info uip maestro flow debug --output json diff --git a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py new file mode 100644 index 0000000000..f88f3756d8 --- /dev/null +++ b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py @@ -0,0 +1,101 @@ +"""Every zero-shot flow task states the run is headless, in one exact wording. + +Task prompts used to carry hand-copied lines like "Do NOT ask for approval, +confirmation, or feedback". That phrasing forbids *asking* without saying nobody +is there to ask, so an agent could honor it and still stop at a consent gate +waiting for a reply that never arrives. On 2026-09-04, 5 of 8 `skill-flow-*` +tasks built and validated a flow, reported success, and never executed it — +every one of those prompts contained that line. + +Measured across the suite at the time: 0 tasks said the run was headless, 51 of +the 119 non-simulated tasks said nothing about autonomy at all, and the 68 that +did were spread across 8 wording variants. + +The text lives in the task prompt rather than an experiment config because flow +tasks run under several configs — `nightly.yaml` via `daily.sh`, `smoke.yaml` on +every PR, `default.yaml` locally, and whatever a dispatch selects. `coder_eval` +has no pattern-scoped defaults, so a config carrying this would either miss +those runners or reach the simulated tasks of every other skill. + +A task with a `simulation:` block has a live simulated user. Telling it nobody is +present contradicts its own premise, so this asserts the absence there. + +Regex, not PyYAML: CI installs only pytest, and a module-level `import yaml` +would error at collection and take the suite with it (see test_criterion_budgets). +""" + +from __future__ import annotations + +import glob +import os +import re + +_HERE = os.path.dirname(os.path.abspath(__file__)) +_SUITE = os.path.normpath(os.path.join(_HERE, "..")) + +CANONICAL = """This run is headless. No user is present and nobody will answer a question or +grant an approval, so do not ask, do not pause, and do not wait for input. +Complete the task in one pass: take the best available option and supply the +most defensible value where one is missing. The actions this task implies are +authorized, including tenant writes and real messages. Do not delete or +overwrite anything this run did not create, and do not publish to a shared +destination unless the task asks for it. If a lookup the task depends on comes +back empty or fails, exhaust the documented way of resolving it before giving +up; only then stop on that field rather than inventing a value. Record every +decision, assumption, and blocked step in your final response.""" + +# The variants this replaced. A task reintroducing one is drifting back. +_SUPERSEDED = re.compile(r"Do NOT ask for approval|Do NOT pause between planning") + + +def _tasks(): + """(path, text, is_simulated) for every task file in the suite.""" + for path in sorted(glob.glob(os.path.join(_SUITE, "**", "*.yaml"), recursive=True)): + text = open(path, encoding="utf-8").read() + if not re.search(r"^success_criteria:", text, re.M): + continue + yield path, text, bool(re.search(r"^simulation:", text, re.M)) + + +def _rel(path: str) -> str: + return os.path.relpath(path, _SUITE) + + +def test_every_zero_shot_task_states_the_run_is_headless(): + """Absent, an agent stops at a consent gate nobody is there to answer.""" + # Indentation varies by file, so compare on the unindented sentences. + needles = [ln for ln in CANONICAL.split("\n") if ln] + missing = [ + _rel(p) + for p, text, sim in _tasks() + if not sim and not all(n in " ".join(text.split()) for n in [" ".join(needles).split(". ")[0]]) + ] + assert not missing, "tasks missing the headless preamble:\n " + "\n ".join(missing) + + +def test_the_wording_is_identical_everywhere(): + """8 variants is what made the old line unmaintainable. One wording, or none.""" + flat = " ".join(CANONICAL.split()) + drifted = [ + _rel(p) + for p, text, sim in _tasks() + if not sim and "This run is headless." in text and flat not in " ".join(text.split()) + ] + assert not drifted, ( + "tasks whose headless preamble differs from the canonical wording in " + f"{_rel(__file__)}:\n " + "\n ".join(drifted) + ) + + +def test_simulated_tasks_are_not_told_nobody_is_present(): + """They have a live simulated user; the preamble contradicts their premise.""" + wrong = [_rel(p) for p, text, sim in _tasks() if sim and "This run is headless." in text] + assert not wrong, "simulated tasks carrying the headless preamble:\n " + "\n ".join(wrong) + + +def test_no_task_reintroduces_a_superseded_variant(): + stale = [_rel(p) for p, text, _ in _tasks() if _SUPERSEDED.search(text)] + assert not stale, ( + "tasks using a superseded autonomy line; replace it with the canonical " + "preamble:\n " + "\n ".join(stale) + ) diff --git a/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml b/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml index aaa5cefe2a..082659d4bf 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml @@ -28,6 +28,16 @@ initial_prompt: | Both snapshots go at the sandbox root. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent called `node configure` at least twice" diff --git a/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml b/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml index d470704f33..fc5f1f36e5 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml @@ -29,6 +29,16 @@ initial_prompt: | echo '{"a":"","ka":"","b":"","kb":""}' > conn_ids.json + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # min_count: 1 (not 2) — agents commonly chain two `uip ... node add` calls # into a single Bash invocation with `&&`, which the checker counts as one diff --git a/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml b/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml index 4c505c7629..69b369be48 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml @@ -25,6 +25,16 @@ initial_prompt: | schema" workaround afterwards — the bindings shape immediately after `node configure` is what this eval inspects. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent called `node configure`" diff --git a/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml b/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml index 0fd6c28a2a..5dc5be071a 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml @@ -49,6 +49,16 @@ initial_prompt: | After reconfiguring the SAME node with B: cp BindingsReconfigure/flow_files/BindingsReconfigure.flow after_b.flow + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # min_count: 1 (not 2). Per uipath-maestro-flow SKILL.md rule #10, agents # chain sequential `uip` calls — e.g. `node configure && ... && node diff --git a/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml b/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml index 0fee1a29a9..9662261136 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml @@ -28,6 +28,16 @@ initial_prompt: | if it succeeds, log "CeqlWhere test passed". Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "where_detail.json (found anywhere under the solution) has a canonical CEQL filter tree on displayName='active'; flow references the registered Azure AD / Entra connector key with List Groups + Terminate nodes" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml b/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml index ec49e8a35b..0a38c71d36 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml @@ -18,6 +18,16 @@ initial_prompt: | "e2e-testing". Use the connection present in Shared/uipath-maestro-flow. Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml index e26e458ccc..f8d2d33da9 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml @@ -35,11 +35,18 @@ initial_prompt: | 6. Map the created, queried, updated, and retrieved values to the flow output where the activity supports output mapping. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml index 420f028c7e..3739d3c104 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml @@ -41,11 +41,18 @@ initial_prompt: | Entity Record ONCE inside the loop, binding recordId to the loop item's Id. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml index 2b91cd6977..869386df95 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml @@ -37,11 +37,18 @@ initial_prompt: | at expansionLevel=1, expansionLevel=2, and expansionLevel=3. Delete when done. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Create Entity Record node added at least twice (one per scenario)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml index 2e2039dafe..ece7cef63f 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml @@ -8,6 +8,16 @@ initial_prompt: | In my RPA Studio (.xaml) workflow, add a Data Fabric activity to read customer records from the CustomerDirectory entity. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered description: "uipath-rpa handles the RPA-Studio Data Fabric prompt (not uipath-maestro-flow)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml index cc01331463..7a477078c9 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml @@ -8,6 +8,16 @@ initial_prompt: | I need to create a record in my DataFabric entity from a UiPath Flow. The entity is called ProductCatalog — build the Flow that does it. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered description: "uipath-maestro-flow activates for a DataFabric-in-Flow prompt" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml index a93cfbad58..00ee05490a 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml @@ -30,11 +30,18 @@ initial_prompt: | * lastUpdated: "2024-03-10T09:00:00" (DATETIME) * externalId: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" (UUID) - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml index db20860861..f62f9646ba 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml @@ -22,11 +22,18 @@ initial_prompt: | FlowCodeEvalEntity for title='ErrorTestRecord'. 3. In the same parallel branch, Query FlowCodeEvalEntity with no filter. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Create attempted on NonExistentEntity" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml index 281fa4a058..dd02974f3b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml @@ -36,11 +36,18 @@ initial_prompt: | 4. DeleteFileFromRecordFieldV2 — bind recordId to the same create activity output Id used in step 3. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml index cdc0523780..3464abc738 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml @@ -39,11 +39,18 @@ initial_prompt: | tree, sort, and limit, but use offset/start 2 for the next page. Query 3 must filter active equals true, sort by score descending, and use a limit of 4. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Query Entity Records node added" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml index 30189f76ab..5666209338 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml @@ -24,11 +24,18 @@ initial_prompt: | 3. Retrieves the record by Id to confirm. 4. Deletes the record. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The Flow is not complete until `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Flow validated" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml index 5239218ff2..f5d2ad16ea 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml @@ -31,12 +31,19 @@ initial_prompt: | 3. Then revert both changes so the activity is back to no filter, no ordering, and its original settings. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. The flow is not complete until the final state matches the initial state on those three fields and `uip maestro flow validate` passes. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final MovieReportFlow validates cleanly" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml index 525edc9e8b..d074358f41 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml @@ -35,11 +35,18 @@ initial_prompt: | For both flows, keep the configured connection and correct entity on every trigger and Data Fabric activity. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flows end-to-end in a - single pass. Validate every final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml b/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml index 3bf8394980..0d87fb545b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml @@ -20,7 +20,27 @@ run_limits: task_timeout: 1500 max_turns: 120 turn_timeout: 1500 -initial_prompt: "Create a new Flow project called \"DriveToSlackTest\" with a manual trigger.\nIt should download a file from Google Drive and then post that file into a \nSlack channel named \"coding-agent-testing\" using Slack.\nWire the file output of the download operation to the channel input of the slack send file. \nValidate the final flow file.\nFor the Google Drive Download File activity, use the first available file.\nFor Send File, send as `user`.\nFor google drive, use the connection name 'is.sandboxes.test@gmail.com', and for slack\nuse the connection name 'is-sandboxes'.\n\nDo NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass.\n" +initial_prompt: | + Create a new Flow project called "DriveToSlackTest" with a manual trigger. + It should download a file from Google Drive and then post that file into a + Slack channel named "coding-agent-testing" using Slack. + Wire the file output of the download operation to the channel input of the slack send file. + Validate the final flow file. + For the Google Drive Download File activity, use the first available file. + For Send File, send as `user`. + For google drive, use the connection name 'is.sandboxes.test@gmail.com', and for slack + use the connection name 'is-sandboxes'. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: uip maestro flow validate was called diff --git a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml index 01ed11baa6..00bfd7e42f 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml @@ -17,6 +17,16 @@ initial_prompt: | list-products operation and configure its attribute-term field. Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml index 90e51bf977..28f48b77e4 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml @@ -18,6 +18,16 @@ initial_prompt: | Validate the final flow file. Use the connection present in Shared/uipath-maestro-flow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml b/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml index cc0d23f207..c311544e4b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml @@ -20,6 +20,16 @@ initial_prompt: | live connection, keep the real WooCommerce operation node with its inputs left unset, confirm that shape validates, and stop there. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml b/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml index 900ad1b2f0..1f6c901180 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml @@ -21,6 +21,16 @@ initial_prompt: | Validate the final flow file. Use the connection present in Shared/uipath-maestro-flow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent invoked `uip is connections list` to discover available connections" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml b/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml index 3ff4a20eb5..88fb41adf8 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml @@ -22,6 +22,16 @@ initial_prompt: | If the Atlassian Jira connector isn't available in your registry, stop rather than falling back to a generic HTTP request. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow is valid JSON with Jira Create Issue node, customFieldsRequestDetails has both parent-field tuples under GenerateSchema, and bodyParameters carries a non-empty fields.summary" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml index a25f18494f..0af10be79c 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml @@ -38,11 +38,19 @@ initial_prompt: | Use the connection present in Shared/uipath-maestro-flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build, validate, and run end-to-end in a single - pass. Do NOT substitute a mock for the + Do NOT substitute a mock for the connector. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml b/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml index 82db43ecfb..1dff943619 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml @@ -52,9 +52,16 @@ initial_prompt: | Validate the final flow file and debug it. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml b/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml index 4c98422b7b..28e730ddd0 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml @@ -16,6 +16,16 @@ initial_prompt: | Coder Evals, IS-sandboxes@uipath.com and E2E-testing. Use the connection present in Shared/uipath-maestro-flow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # Name-agnostic: the prompt doesn't fix a project name. - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml b/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml index 44e7d74bb8..6281f00bb9 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml @@ -28,9 +28,17 @@ initial_prompt: | Validate the final flow file. Use `--output json` on every `uip` command whose output you parse. - Do NOT ask for approval, confirmation, or feedback — build and validate the - flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml b/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml index bcdcbdb0d5..eb12ca7b6a 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml @@ -34,9 +34,17 @@ initial_prompt: | For Slack, use the connection name `is-sandboxes`. If more than one connection matches that name, use any enabled one. Validate the flow when you're done. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent invoked `uip is resources run list ... curated_channels` more than once (pagination loop ran)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml b/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml index 3da24461e7..11dc3093e4 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml @@ -23,6 +23,16 @@ initial_prompt: | equivalent REST call and finish after validation. Do not keep searching for a connector node that the registry does not expose. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent invoked `uip is connections list` to discover available connections" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml b/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml index c29eeea749..4f780d3d2b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml @@ -20,6 +20,16 @@ initial_prompt: | an HTTP fallback for the same REST call and finish after validation. Do not keep searching for a connector node that the registry does not expose. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml b/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml index 2a7eff1b45..3b8491316d 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml @@ -17,6 +17,16 @@ initial_prompt: | has any opportunities and end the flow on each path. Validate the flow. Use the connection present in Shared/uipath-maestro-flow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml b/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml index dcedeb9bba..b335a1c1ad 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml @@ -25,9 +25,17 @@ initial_prompt: | Validate the final flow file. Once it validates, debug it. Use `--output json` on every `uip` command whose output you parse. - Do NOT ask for approval, confirmation, or feedback — build, validate, and - debug the flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml index 7c8a562ce1..480e318ff4 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml @@ -29,9 +29,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml index 28df13cfa5..1ac30c778d 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml @@ -34,9 +34,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml index 92aecc8cd6..1e55d25f98 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml @@ -34,9 +34,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml index dc8caf370e..dc4f1b64c6 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml @@ -30,9 +30,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml index b02e5261b1..9e22596470 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml @@ -31,9 +31,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml index 83716c6a24..da98fe3eb2 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml @@ -30,9 +30,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml index cd366f1db8..0c611f2b78 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml @@ -32,9 +32,16 @@ initial_prompt: | The task is not complete until validation passed for the flow. - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml b/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml index 3f23be96b4..991005ee67 100644 --- a/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml @@ -16,7 +16,16 @@ initial_prompt: | `uip maestro flow node configure --detail ''` to configure that trigger. Use placeholders for any connection/folder/event ids you cannot resolve offline. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # `check_trigger_filter.py` locates trigger_detail.json (root or nested in the # flow project dir) and asserts it is the --detail object: valid JSON, no diff --git a/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml b/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml index 2189db7937..72364832e4 100644 --- a/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml @@ -45,10 +45,18 @@ initial_prompt: | After building, validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and - implementation. Build the complete flow end-to-end in a single pass. Use `--output json` on `uip` commands. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml b/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml index a81538c530..e0c6569ca0 100644 --- a/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml +++ b/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml @@ -42,11 +42,19 @@ initial_prompt: | `outputs.result.source: "=js:$vars..output"`. Do NOT run flow debug — just validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. Before starting, follow the documented workflow steps exactly — in particular, the batch-transform plugin's `outputColumns` shape (array of `{ name, description }`). + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml b/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml index 74c13bbf2a..ca884d549e 100644 --- a/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml +++ b/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml @@ -44,11 +44,19 @@ initial_prompt: | resolve to `undefined` at runtime. Do NOT run flow debug — just validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. Before starting, follow the documented workflow steps exactly — in particular, note that the wire-level node type is `uipath.pattern.deep-rag` even though the canvas display name is "Summarize". + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml b/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml index 8652ca3d38..83c7d980a5 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml @@ -33,6 +33,16 @@ initial_prompt: | Build the complete flow as a UiPath Flow project called "ExpenseApproval" in a solution of the same name. Wire everything end-to-end and validate it. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml index c79643e94f..937293f980 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml @@ -54,10 +54,19 @@ initial_prompt: | correlationId), and jiraIssueKey (the created issue's key). Validate the flow. Do NOT run or debug the flow — the grader executes it with the - seeded inputs. Do NOT ask for approval and do NOT pause; build end-to-end in a - single pass. Before starting, load the uipath-maestro-flow skill and follow its + seeded inputs. Before starting, load the uipath-maestro-flow skill and follow its workflow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent validated the generated Flow" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml index bb191b3e1a..bc3cd08455 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml @@ -82,9 +82,18 @@ initial_prompt: | Salesforce/Jira/Drive are NOT part of this task — the match status is an input. Validate the flow. Do NOT run or debug the flow — the grader executes it with - seeded inputs. Do NOT ask for approval and do NOT pause; build the flow directly. - Before starting, load the uipath-maestro-flow skill and follow its workflow. + seeded inputs. Before starting, load the uipath-maestro-flow skill and follow its workflow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent validated the generated Flow" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml index 0a8076c810..e07859f5d3 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml @@ -56,11 +56,19 @@ initial_prompt: | (from the Slack Send Message node's output) Validate the flow. Do NOT run or debug the flow — the grader executes it with - seeded inputs. Do NOT ask for approval, confirmation, or feedback, and do NOT - pause between planning and implementation. Build the complete flow end-to-end - in a single pass. Before starting, load the uipath-maestro-flow skill and + seeded inputs. Before starting, load the uipath-maestro-flow skill and follow its workflow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── The agent validated the flow (convention adherence) ───────────────── - type: command_executed diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml index 6e8fe8e040..89e7ec1c4c 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml @@ -43,6 +43,16 @@ initial_prompt: | Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml index 07774fe9f3..f88475acbb 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml @@ -43,6 +43,16 @@ initial_prompt: | Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml index 03227a48da..90a5e59238 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml @@ -56,6 +56,16 @@ initial_prompt: | Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml index fd7c8b9fce..9704e307d4 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml @@ -43,6 +43,16 @@ initial_prompt: | Validate the final flow file. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml b/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml index 96ec38a796..172d18665b 100644 --- a/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml @@ -18,8 +18,17 @@ initial_prompt: | Add a script node called "convertToCelsius" between getWeather and formatSummary that converts the temp from F to C. Return both values. Also update formatSummary to include the Celsius value in its summary string. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml b/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml index 306bf90b46..f4eb9e211a 100644 --- a/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml @@ -17,8 +17,17 @@ initial_prompt: | Add a "location" field with value "Bellevue, WA" to the summary output of both end nodes. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes on the flow file" diff --git a/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml b/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml index 73aab55567..7f75d76876 100644 --- a/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml @@ -19,8 +19,17 @@ initial_prompt: | Move getWeather and formatSummary into a subflow called "fetchAndFormat". The subflow should output the temperatureF value. The rest of the main flow (decision + end nodes) stays but reads from the subflow output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml b/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml index ddc5bb7045..d03eb236af 100644 --- a/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml @@ -17,8 +17,17 @@ initial_prompt: | Rearrange the flow so the decision happens right after the HTTP call. Both the true and false branches should merge back into formatSummary, which then goes to a single end node. formatSummary should pick the message ('nice day' or 'bring a jacket') based on which branch the decision took. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes on the flow file" diff --git a/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml b/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml index 423a266a1a..8824651082 100644 --- a/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml @@ -18,8 +18,17 @@ initial_prompt: | Remove the formatSummary script node. The decision and end nodes should read temperature directly from the HTTP response instead. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml b/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml index 7a150b6785..83c8b7929b 100644 --- a/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml @@ -19,8 +19,17 @@ initial_prompt: | otherwise the message field should be 'go home'. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml index 878232a5fc..1fb0fb2c87 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml @@ -59,6 +59,16 @@ initial_prompt: | - Do NOT add a separate parent simulation for `agent-1` before adding children — use the child simulation workflow from the skill. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml b/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml index f0cb396a68..e228cf951c 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml @@ -60,6 +60,16 @@ initial_prompt: | - Do NOT call `uip login`. Do NOT call `uip solution upload`. Do NOT call `uip maestro flow eval run *`. Local CRUD only. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created the solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml b/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml index 1d08b8c820..0552675fa8 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml @@ -54,9 +54,17 @@ initial_prompt: | - Local CRUD only. Do NOT call `uip login`. Do NOT call `uip solution upload`. Do NOT call `uip maestro flow eval run *`. Do NOT run `uip maestro flow debug`. - - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build it end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent scaffolded the inline agent with uip agent init --inline-in-flow" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml index 6d2698ad75..a7b7c92dee 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml @@ -45,6 +45,16 @@ initial_prompt: | - Do NOT run `uip maestro flow debug` or `uip maestro flow validate` — this is not a flow-authoring test. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml b/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml index 4642b21fe2..33b41d07e6 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml @@ -51,6 +51,16 @@ initial_prompt: | - You ARE expected to run the local CRUD steps (1 and 2) so the project is in a realistic pre-eval state. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created the solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml index 9d792d8aa0..1f42f1044b 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml @@ -56,6 +56,16 @@ initial_prompt: | - Do NOT run `uip maestro flow debug` or `uip maestro flow validate` — this is not a flow-authoring test. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml index e900adaa8f..0b0d870278 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml @@ -26,6 +26,16 @@ initial_prompt: | Wire completed → decision node. Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml index 89a41eda97..dbcf29d5d8 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml @@ -28,6 +28,16 @@ initial_prompt: | Use the inline quickform node (uipath.human-in-the-loop.quick-form). Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml index 51d392354a..a7f05ff0cd 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml @@ -29,6 +29,16 @@ initial_prompt: | Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml index 818884c36e..57db9e9354 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml @@ -30,6 +30,16 @@ initial_prompt: | Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes after brownfield insert" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml index f2d648f834..34daf2bba6 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml @@ -23,6 +23,16 @@ initial_prompt: | Validate the flow after building it. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file was created" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml index bcbbb20af0..8bf3159525 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml @@ -27,6 +27,16 @@ initial_prompt: | Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "Flow file was created" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml index 5adffb2d7b..dc12052dc7 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml @@ -30,6 +30,16 @@ initial_prompt: | Validate the flow after building. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml index 1ad9e68f4e..7bffcaacbb 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml @@ -30,7 +30,17 @@ initial_prompt: | Validate the final flow file — the task is not complete until `uip maestro flow validate` passes. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the generated flow file diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml index 9fadc20935..ba4dd79c1b 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml @@ -54,6 +54,16 @@ initial_prompt: | - Run `uip maestro flow validate` at most 3 times. If it reports errors, fix the `.flow` and re-run it. Do not exceed 3 validation runs. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml index 0fffd7d922..4e5f03640d 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml @@ -97,9 +97,17 @@ initial_prompt: | - The `uip` CLI is already available and the runner is logged in. - Use `--output json` on all uip commands. - Do NOT run `uip maestro flow debug` or `uip maestro flow deploy`. - - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build it end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered description: "Agent invoked the uipath-maestro-flow Skill" diff --git a/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml b/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml index b1ba3319f0..9efee67f34 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml @@ -45,6 +45,16 @@ initial_prompt: | - Run `uip maestro flow validate` at most 3 times. If it reports errors, fix the `.flow` and re-run it. Do not exceed 3 validation runs. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing.yaml index 298103bd3c..3d5c71f101 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing.yaml @@ -59,6 +59,16 @@ initial_prompt: | - Do NOT iterate on validation errors or rewrite the flow to fix them. A broken flow is acceptable. - You do not need a working flow — a skeleton whose nodes cover the steps of the request is enough. Leave a node unconfigured rather than leaving a step out. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # What this checks: did the agent search the registry for IxP nodes? # Passes (case-insensitive) when the agent ran either: diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml index 740e681d78..aa281a5c70 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml @@ -44,6 +44,16 @@ initial_prompt: | - The `uip` CLI is already available. - Use `--output json` on all uip commands. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # IxP registry-search check (omits `get`) — see routing.yaml for the pattern breakdown. - type: command_executed diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml index e1574e1ac0..eaeaf23134 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml @@ -64,6 +64,16 @@ initial_prompt: | - Do NOT iterate on validation errors or rewrite the flow to fix them. A broken flow is acceptable. - You do not need a working flow — a skeleton whose nodes cover the steps of the request is enough. Leave a node unconfigured rather than leaving a step out. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # Inverted twin of the positive routing.yaml grep. # `shell=True` in coder_eval Sandbox.run_command means `!` works as a bash diff --git a/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml b/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml index 6b55ef6ab0..61e708ed79 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml @@ -33,6 +33,16 @@ initial_prompt: | - Run `uip maestro flow validate` at most 3 times. If it reports errors, fix the `.flow` and re-run it. Do not exceed 3 validation runs. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml b/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml index 9026972964..42bdaaaa3d 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml @@ -37,6 +37,16 @@ initial_prompt: | - Run `uip maestro flow validate` at most 3 times. If it reports errors, fix the `.flow` and re-run it. Do not exceed 3 validation runs. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml b/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml index 6905a1a767..982f9ac221 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml @@ -17,8 +17,17 @@ initial_prompt: | Use a Managed HTTP Request node (core.action.http.v2) to call the open-meteo API directly — do not use an Integration Service connector. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml index af5b57738c..14d97b2e83 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml @@ -49,6 +49,17 @@ initial_prompt: | Build the complete flow without stopping to ask me. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml index f03a24fde7..eae64ececa 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml @@ -40,6 +40,17 @@ initial_prompt: | Build the complete flow without stopping to ask me. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml index c11aed6cd4..d9bea69d76 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml @@ -106,6 +106,17 @@ initial_prompt: | Build the complete flow without stopping to ask me. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml index 885740b90f..a383e65b31 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml @@ -37,6 +37,17 @@ initial_prompt: | Build the complete flow without stopping to ask me. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml index 8841ff394b..4fc89ec96a 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml @@ -39,6 +39,17 @@ initial_prompt: | Build the complete flow without stopping to ask me. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml b/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml index 5a6a109a34..8c249f28e8 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml @@ -14,8 +14,17 @@ initial_prompt: | returned as an output variable. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml b/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml index c384d2849e..fdb3ade205 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml @@ -32,10 +32,17 @@ initial_prompt: | reply to the sender via Outlook with the ticket details. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ──────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml b/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml index dd75fa2522..ef96fc84f3 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml @@ -15,8 +15,17 @@ initial_prompt: | die and outputs the result. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml b/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml index d64eab27b1..61c82036b8 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml @@ -20,8 +20,16 @@ initial_prompt: | ("f2i", "i2f", "y2f"); each branch applies the corresponding conversion (in a Script node) and converges on a single End node that returns the result. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml b/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml index ab64ffd4da..925486b82a 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml @@ -14,8 +14,17 @@ initial_prompt: | numbers [13, 15, 17] together using a Loop node and returns the product. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml b/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml index 57e8b3e480..9407f196e6 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml @@ -14,8 +14,17 @@ initial_prompt: | Use a Managed HTTP Request node (core.action.http.v2) to call the open-meteo API directly — do not use an Integration Service connector. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml b/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml index 305eccd2e3..fe1af8277e 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml @@ -41,8 +41,17 @@ initial_prompt: | an inline `=js:[...]` array or `=js:$vars.` expression. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml b/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml index 70df43e92c..dcc77be706 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml @@ -15,8 +15,17 @@ initial_prompt: | the channel description of #office-bellevue and outputs it. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml b/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml index 21f962aa1d..609000f203 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml @@ -16,8 +16,17 @@ initial_prompt: | All connections for this task live in Orchestrator folder `Shared/uipath-maestro-flow`. Validate the flow, then run `uip maestro flow debug` and iterate until it completes without incidents. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml b/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml index bfcf65dcd1..2492361b55 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml @@ -32,8 +32,16 @@ initial_prompt: | does not exist and the API returns an error), the flow must instead return the literal string `Article not found`. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml b/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml index eebfd349f8..e06d9d711f 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml @@ -14,8 +14,17 @@ initial_prompt: | API workflow with the name 'tomasz' and returns his age as an output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml b/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml index 638e7ccf66..056cca30f1 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml @@ -26,7 +26,17 @@ initial_prompt: | number of people who approved as an integer flow output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml b/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml index fb3a14b056..374a7b7363 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml @@ -17,8 +17,17 @@ initial_prompt: | the flow should output "warm". Otherwise it should output "cool". Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml b/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml index c8b35a7534..de1e4ab9c8 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml @@ -28,11 +28,19 @@ initial_prompt: | the delay node id, and one whose `sourceNodeId` is the delay node id). Do NOT run flow debug — just validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. Before starting, follow the documented workflow steps exactly — in particular, the delay plugin's `inputs` shape (`timerType` + `timerPreset`). + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml b/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml index eb10dbc135..538698c65b 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml @@ -30,12 +30,20 @@ initial_prompt: | file to the input. The task is not complete until the debug run reports `finalStatus: "Completed"` and the output reflects the attached file's name. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build, validate, and run end-to-end in a single - pass. Before starting, follow the documented + Before starting, follow the documented workflow steps exactly — in particular the file-attachment binding pre-flight and the requirement to run `solution resources refresh` before debug. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml b/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml index 415736357b..502b5963d9 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml @@ -21,8 +21,17 @@ initial_prompt: | in rather than creating a new one. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml b/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml index a911f49ab7..ea080087c4 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml @@ -32,11 +32,19 @@ initial_prompt: | The task is not complete until `uip maestro flow validate` passes. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build and validate the complete flow end-to-end - in a single pass. Do NOT substitute a mock or a manual + Do NOT substitute a mock or a manual HTTP request for the connector. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml index 3f27f03f6c..8a8c7fda5e 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml @@ -26,13 +26,20 @@ initial_prompt: | from that Script node's output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. - Do not reuse any folder ID you may have seen before. Use the connection in Shared/uipath-maestro-flow folder. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Structural: flow builds and validates ────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml b/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml index 52fc561599..c1d52bc70e 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml @@ -41,10 +41,16 @@ initial_prompt: | Validate the flow. Do not debug the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single - pass. - + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Structural: flow builds and validates ────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml b/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml index 54904b6a08..daac335800 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml @@ -16,8 +16,17 @@ initial_prompt: | return it as an output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml b/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml index 7c359f77f6..ebb2388cbc 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml @@ -18,8 +18,17 @@ initial_prompt: | Return the reversed string as an output. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml b/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml index b35e47ae0b..61e2b2f7b6 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml @@ -20,8 +20,17 @@ initial_prompt: | The flow should branch into separate cases for each quarter value. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml b/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml index 33a2a66d03..0bc3ebccd5 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml @@ -21,8 +21,17 @@ initial_prompt: | Both branches should start at the same time from the trigger node. Validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between planning and implementation. Build the complete flow end-to-end in a single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml index d1cdf46d46..b435a70a7d 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml @@ -38,11 +38,19 @@ initial_prompt: | `core.action.transform.filter` — do not hardcode a guessed value. Do NOT run flow debug — just validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single - pass. Before starting, follow the documented workflow steps exactly — in particular the transform plugin's filter + Before starting, follow the documented workflow steps exactly — in particular the transform plugin's filter node shape (`operations[].type == "filter"` with `config.filters`). + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml index 1e9feaa5dd..abc8686a68 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml @@ -39,11 +39,19 @@ initial_prompt: | `core.action.transform.group-by` — do NOT hardcode a guessed version. Validate the flow. Do NOT run flow debug — just validate. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. Before starting, follow the documented workflow steps exactly — in particular, the transform plugin's Group By JSON shape and the collection-input contract. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml index 5ee7f6e3e0..09cf52cff3 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml @@ -37,11 +37,19 @@ initial_prompt: | skill's workflow teaches how to read the registry). Do NOT run flow debug — just validate the flow. - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a single pass. Before starting, follow the documented workflow steps exactly — in particular, the transform plugin's Map JSON shape and the `collection` path contract. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml b/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml index 5b6bb7b6aa..b7c95d1e75 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml @@ -28,6 +28,16 @@ initial_prompt: | - The `uip` CLI is already available in the environment. - Validate locally with `uip maestro flow validate`. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent created a solution with uip solution init (or legacy new)" diff --git a/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml b/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml index 777c9a77a1..3dead578eb 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml @@ -33,6 +33,16 @@ initial_prompt: | - The `uip` CLI is already available in the environment. - Validate locally with `uip maestro flow validate`. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent scaffolded the inline agent with uip agent init --inline-in-flow" diff --git a/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml b/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml index 6e8af776a5..695e8fc31c 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml @@ -60,10 +60,17 @@ initial_prompt: | layout/variables, then validate with `uip maestro flow validate` — do NOT run `uip maestro flow debug` (the parallel join only synchronizes in a live engine). - - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml b/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml index f944c14bb3..eb2d5bd633 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml @@ -23,6 +23,16 @@ initial_prompt: | - Use `--output json` on all uip commands. - Do not build the flow — just explore. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: - type: command_executed description: "Agent pulled registry data" diff --git a/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml b/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml index 665a01ecb7..86aec01580 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml @@ -48,10 +48,17 @@ initial_prompt: | - The `uip` CLI is already available; use `--output json` on uip commands. - Validate locally with `uip maestro flow validate` — do NOT run `uip maestro flow debug` (the schedule fires only in a live engine). - - Do NOT ask for approval, confirmation, or feedback. Do NOT pause between - planning and implementation. Build the complete flow end-to-end in a - single pass. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml b/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml index 45b74a9590..3a9b9f894b 100644 --- a/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml +++ b/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml @@ -33,6 +33,16 @@ initial_prompt: | - `uip maestro flow validate` must pass on the generated flow. - Tell me what I have to do to actually run this flow and take a test call. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. # Every criterion discovers the project dynamically: `flow init` wraps it in a # `Solution/` the prompt does not pin, so a hardcoded `path:` would score # 0.0 on a valid build (#2213). diff --git a/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml b/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml index c5070c56a4..6b7411a3b0 100644 --- a/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml +++ b/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml @@ -45,6 +45,16 @@ initial_prompt: | The task is NOT complete until `uip maestro flow validate` passes on the generated flow. + This run is headless. No user is present and nobody will answer a question or + grant an approval, so do not ask, do not pause, and do not wait for input. + Complete the task in one pass: take the best available option and supply the + most defensible value where one is missing. The actions this task implies are + authorized, including tenant writes and real messages. Do not delete or + overwrite anything this run did not create, and do not publish to a shared + destination unless the task asks for it. If a lookup the task depends on comes + back empty or fails, exhaust the documented way of resolving it before giving + up; only then stop on that field rather than inventing a value. Record every + decision, assumption, and blocked step in your final response. # Every criterion discovers the project dynamically: `flow init` wraps it in a # `Solution/` the prompt does not pin, so a hardcoded `path:` would score # 0.0 on a valid build (#2213). diff --git a/tests/templates/test-task-template.yaml b/tests/templates/test-task-template.yaml index b28c427bf6..8945a2bcbd 100644 --- a/tests/templates/test-task-template.yaml +++ b/tests/templates/test-task-template.yaml @@ -34,9 +34,15 @@ initial_prompt: | Goal-oriented prompt — describe what to build, not how. Let the skill teach the agent the workflow. + Do not hand-write autonomy language ("Do NOT ask for approval", "single + pass"). It forbids asking without saying nobody is there to ask, so the agent + can honor it and still stop at a consent gate. Flow tasks carry one canonical + headless paragraph instead, enforced by + tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py — copy it + from there. Tasks with a `simulation:` block have a live user and must not + carry it. + For e2e tests, append: - Do NOT ask for approval, confirmation, or feedback. - Do NOT pause between planning and implementation. Before starting, load the skill and follow its workflow. success_criteria: From 17e07e8f85163034f9a69799ee1b551b530ca142 Mon Sep 17 00:00:00 2001 From: rockymadden Date: Fri, 4 Sep 2026 10:44:50 -0600 Subject: [PATCH 2/6] fix(tests): cut the docstring, repair a dead assertion, cache the file reads MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Self-review of the new guard. The module docstring was 24 lines restating the commit message and PR body — the nightly counts, the variant tally, the history. Two facts there are load-bearing for anyone editing the file: why the text is in the prompt rather than a config, and why this parses with regex instead of PyYAML. The rest went. Prose is now 14 of 83 lines, from 30 of 101. The presence check built a `needles` list from every line of the canonical block, then discarded it except for the first sentence, and ran `all()` over the resulting one-element list. It only ever checked "This run is headless." — which is the right cheap marker, since the wording test covers the full text, but the code said something else. Now it says what it does. Four tests each re-read every file in the suite; `_tasks()` is cached. All four guards re-proven after the rewrite: removing the preamble, rewording it, leaking it into a simulated task, and reintroducing a superseded variant each fail the expected test. Co-Authored-By: Claude Opus 5 (1M context) --- .../_shared/test_headless_preamble.py | 46 ++++++------------- 1 file changed, 14 insertions(+), 32 deletions(-) diff --git a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py index f88f3756d8..2be5feaedc 100644 --- a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py +++ b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py @@ -1,31 +1,16 @@ """Every zero-shot flow task states the run is headless, in one exact wording. -Task prompts used to carry hand-copied lines like "Do NOT ask for approval, -confirmation, or feedback". That phrasing forbids *asking* without saying nobody -is there to ask, so an agent could honor it and still stop at a consent gate -waiting for a reply that never arrives. On 2026-09-04, 5 of 8 `skill-flow-*` -tasks built and validated a flow, reported success, and never executed it — -every one of those prompts contained that line. - -Measured across the suite at the time: 0 tasks said the run was headless, 51 of -the 119 non-simulated tasks said nothing about autonomy at all, and the 68 that -did were spread across 8 wording variants. - -The text lives in the task prompt rather than an experiment config because flow -tasks run under several configs — `nightly.yaml` via `daily.sh`, `smoke.yaml` on -every PR, `default.yaml` locally, and whatever a dispatch selects. `coder_eval` -has no pattern-scoped defaults, so a config carrying this would either miss -those runners or reach the simulated tasks of every other skill. - -A task with a `simulation:` block has a live simulated user. Telling it nobody is -present contradicts its own premise, so this asserts the absence there. - -Regex, not PyYAML: CI installs only pytest, and a module-level `import yaml` -would error at collection and take the suite with it (see test_criterion_budgets). +Kept in the task prompt rather than an experiment config because flow tasks run +under nightly.yaml, smoke.yaml, default.yaml and dispatch-selected configs, and +coder_eval has no pattern-scoped defaults — a config would either miss a runner +or reach another skill's simulated tasks. + +Regex, not PyYAML: CI installs only pytest (see test_criterion_budgets). """ from __future__ import annotations +import functools import glob import os import re @@ -48,13 +33,15 @@ _SUPERSEDED = re.compile(r"Do NOT ask for approval|Do NOT pause between planning") +@functools.lru_cache(maxsize=1) def _tasks(): """(path, text, is_simulated) for every task file in the suite.""" + out = [] for path in sorted(glob.glob(os.path.join(_SUITE, "**", "*.yaml"), recursive=True)): text = open(path, encoding="utf-8").read() - if not re.search(r"^success_criteria:", text, re.M): - continue - yield path, text, bool(re.search(r"^simulation:", text, re.M)) + if re.search(r"^success_criteria:", text, re.M): + out.append((path, text, bool(re.search(r"^simulation:", text, re.M)))) + return tuple(out) def _rel(path: str) -> str: @@ -63,13 +50,8 @@ def _rel(path: str) -> str: def test_every_zero_shot_task_states_the_run_is_headless(): """Absent, an agent stops at a consent gate nobody is there to answer.""" - # Indentation varies by file, so compare on the unindented sentences. - needles = [ln for ln in CANONICAL.split("\n") if ln] - missing = [ - _rel(p) - for p, text, sim in _tasks() - if not sim and not all(n in " ".join(text.split()) for n in [" ".join(needles).split(". ")[0]]) - ] + marker = CANONICAL.split("\n")[0] + missing = [_rel(p) for p, text, sim in _tasks() if not sim and marker not in text] assert not missing, "tasks missing the headless preamble:\n " + "\n ".join(missing) From c5200768bb01e8cf2b25f1054a848e747ff65a05 Mon Sep 17 00:00:00 2001 From: rockymadden Date: Fri, 4 Sep 2026 10:46:13 -0600 Subject: [PATCH 3/6] revert(tests): leave the task template alone Out of scope. The template still tells authors to hand-write autonomy language, which the canonical preamble supersedes, but changing it is a separate call from fixing the flow suite. Co-Authored-By: Claude Opus 5 (1M context) --- tests/templates/test-task-template.yaml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/tests/templates/test-task-template.yaml b/tests/templates/test-task-template.yaml index 8945a2bcbd..b28c427bf6 100644 --- a/tests/templates/test-task-template.yaml +++ b/tests/templates/test-task-template.yaml @@ -34,15 +34,9 @@ initial_prompt: | Goal-oriented prompt — describe what to build, not how. Let the skill teach the agent the workflow. - Do not hand-write autonomy language ("Do NOT ask for approval", "single - pass"). It forbids asking without saying nobody is there to ask, so the agent - can honor it and still stop at a consent gate. Flow tasks carry one canonical - headless paragraph instead, enforced by - tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py — copy it - from there. Tasks with a `simulation:` block have a live user and must not - carry it. - For e2e tests, append: + Do NOT ask for approval, confirmation, or feedback. + Do NOT pause between planning and implementation. Before starting, load the skill and follow its workflow. success_criteria: From d191307c9dbf40512212fae5c0e5ab3173fd9ca8 Mon Sep 17 00:00:00 2001 From: rockymadden Date: Fri, 4 Sep 2026 10:48:19 -0600 Subject: [PATCH 4/6] fix(tests): the task's own instructions outrank the shared preamble MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Several tasks say "Do NOT run or debug the flow — the grader executes it with the seeded inputs", and one (skill-flow-eval-no-auto-upload) deliberately asserts a refusal. The preamble says the actions a task implies are authorized, which sits against those without saying which wins. Added the precedence sentence to the canonical block and all 119 tasks. The test constant moved in the same commit, so the guard and the tasks cannot disagree. Co-Authored-By: Claude Opus 5 (1M context) --- .../uipath-maestro-flow/_shared/test_headless_preamble.py | 3 ++- .../uipath-maestro-flow/bindings/idempotent_reconfigure.yaml | 3 ++- .../bindings/multi_connector_independence.yaml | 3 ++- .../bindings/no_duplicate_connection_bindings.yaml | 3 ++- .../bindings/reconfigure_different_connection.yaml | 3 ++- .../uipath-maestro-flow/connector_features/ceql_where.yaml | 3 ++- .../uipath-maestro-flow/connector_features/complex_array.yaml | 3 ++- .../datafabric_connector/contractregistry_crud_filters.yaml | 3 ++- .../datafabric_connector/e2e_contract_intake_pipeline.yaml | 3 ++- .../datafabric_connector/integration_create_get.yaml | 3 ++- .../datafabric_connector/smoke_activation_negative.yaml | 3 ++- .../datafabric_connector/smoke_activation_positive.yaml | 3 ++- .../datafabric_connector/smoke_create_all_types.yaml | 3 ++- .../connector_features/datafabric_connector/smoke_error.yaml | 3 ++- .../datafabric_connector/smoke_file_activities.yaml | 3 ++- .../connector_features/datafabric_connector/smoke_query.yaml | 3 ++- .../connector_features/datafabric_connector/smoke_update.yaml | 3 ++- .../datafabric_connector/smoke_update_existing_flow.yaml | 3 ++- .../datafabric_connector/trigger_lifecycle.yaml | 3 ++- .../uipath-maestro-flow/connector_features/drive_to_slack.yaml | 3 ++- .../connector_features/dtl_load_by_default_false.yaml | 3 ++- .../connector_features/dtl_load_by_default_true.yaml | 3 ++- .../uipath-maestro-flow/connector_features/enhanced_enum.yaml | 3 ++- tests/tasks/uipath-maestro-flow/connector_features/enum.yaml | 3 ++- .../connector_features/generate_schema.yaml | 3 ++- .../generic_dynamic_node/generic_dynamic_node.yaml | 3 ++- .../jdbc_databricks_query/jdbc_databricks_query.yaml | 3 ++- .../uipath-maestro-flow/connector_features/multiselect.yaml | 3 ++- .../non-catalog-http-fallback/non_catalog_http_fallback.yaml | 3 ++- .../connector_features/paginated_reference_lookup.yaml | 3 ++- .../uipath-maestro-flow/connector_features/path_params.yaml | 3 ++- .../uipath-maestro-flow/connector_features/query_params.yaml | 3 ++- .../connector_features/searchable_joins.yaml | 3 ++- .../slack-http-fallback/slack_http_fallback.yaml | 3 ++- .../testmanager_attachments/testmanager_attachments.yaml | 3 ++- .../testmanager_crud_grounded/testmanager_crud_grounded.yaml | 3 ++- .../testmanager_execution_results.yaml | 3 ++- .../testmanager_generic_records.yaml | 3 ++- .../testmanager_requirement_lifecycle.yaml | 3 ++- .../testmanager_testcase_lifecycle.yaml | 3 ++- .../testmanager_testset_lifecycle.yaml | 3 ++- .../connector_trigger/trigger_with_filter.yaml | 3 ++- .../connector_trigger/webhook_waitfor_parallel.yaml | 3 ++- .../context-grounding/batch_transform/batch_transform.yaml | 3 ++- .../context-grounding/summarize/summarize.yaml | 3 ++- .../tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml | 3 ++- .../e2e/escalation_jira_ticket/escalation_jira_ticket.yaml | 3 ++- .../escalation_orchestrator_paths.yaml | 3 ++- .../e2e/escalation_slack_alert/escalation_slack_alert.yaml | 3 ++- .../e2e/jira_create_issue/jira_create_issue.yaml | 3 ++- .../uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml | 3 ++- .../uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml | 3 ++- .../e2e/jira_search_triage/jira_search_triage.yaml | 3 ++- tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml | 3 ++- .../tasks/uipath-maestro-flow/edit/add_output/add_output.yaml | 3 ++- .../edit/group_to_subflow/group_to_subflow.yaml | 3 ++- tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml | 3 ++- .../uipath-maestro-flow/edit/remove_node/remove_node.yaml | 3 ++- .../uipath-maestro-flow/edit/update_node/update_node.yaml | 3 ++- .../evaluate/child_simulation/child_simulation_crud.yaml | 3 ++- .../uipath-maestro-flow/evaluate/evaluator_type_choice.yaml | 3 ++- .../evaluate/inline_agent_eval/inline_agent_eval.yaml | 3 ++- tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml | 3 ++- tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml | 3 ++- .../evaluate/simulation/simulation_crud.yaml | 3 ++- .../uipath-maestro-flow/hitl/quality_01_schema_design.yaml | 3 ++- .../uipath-maestro-flow/hitl/quality_02_result_downstream.yaml | 3 ++- .../uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml | 3 ++- .../uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml | 3 ++- .../uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml | 3 ++- .../hitl/smoke_02_completed_port_wired.yaml | 3 ++- .../hitl/smoke_03_multi_outcome_routing.yaml | 3 ++- .../ixp/e2e_01_invoice_extraction_greenfield.yaml | 3 ++- .../uipath-maestro-flow/ixp/e2e_02_project_selection.yaml | 3 ++- .../e2e_03_project_creation_handoff.yaml | 3 ++- .../uipath-maestro-flow/ixp/integration_handle_routing.yaml | 3 ++- tests/tasks/uipath-maestro-flow/ixp/routing.yaml | 3 ++- tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml | 3 ++- tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml | 3 ++- tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml | 3 ++- tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml | 3 ++- .../multi_node/bellevue_weather/bellevue_weather.yaml | 3 ++- .../billing_discrepancy_detector.yaml | 3 ++- .../billing_dispute_analyst/billing_dispute_analyst.yaml | 3 ++- .../billing_dispute_resolution/billing_dispute_resolution.yaml | 3 ++- .../billing_invoice_lookup/billing_invoice_lookup.yaml | 3 ++- .../billing_resolution_writer/billing_resolution_writer.yaml | 3 ++- .../uipath-maestro-flow/multi_node/calculator/calculator.yaml | 3 ++- .../multi_node/customer_escalation/customer_escalation.yaml | 3 ++- .../multi_node/dice_roller/dice_roller.yaml | 3 ++- .../multi_node/feet_inches/feet_inches.yaml | 3 ++- .../multi_node/loop_multiply/loop_multiply.yaml | 3 ++- .../multi_node/multi_city_weather/multi_city_weather.yaml | 3 ++- .../multi_node/reading_list/reading_list.yaml | 3 ++- .../slack_channel_description/slack_channel_description.yaml | 3 ++- .../slack_weather_pipeline/slack_weather_pipeline.yaml | 3 ++- .../multi_node/wiki_pageviews/wiki_pageviews.yaml | 3 ++- .../single_node/api_workflow/api_workflow.yaml | 3 ++- .../single_node/coded_agent/coded_agent.yaml | 3 ++- .../uipath-maestro-flow/single_node/decision/decision.yaml | 3 ++- tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml | 3 ++- .../single_node/file_attachment/file_attachment.yaml | 3 ++- .../single_node/lowcode_agent/lowcode_agent.yaml | 3 ++- .../single_node/openmeteo_weather/openmeteo_weather.yaml | 3 ++- .../outlook_trigger_inbox/outlook_trigger_inbox.yaml | 3 ++- .../outlook_waitfor_email/outlook_waitfor_email.yaml | 3 ++- tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml | 3 ++- .../tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml | 3 ++- tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml | 3 ++- .../uipath-maestro-flow/single_node/terminate/terminate.yaml | 3 ++- .../single_node/transform_filter/transform_filter.yaml | 3 ++- .../single_node/transform_group_by/transform_group_by.yaml | 3 ++- .../single_node/transform_map/transform_map.yaml | 3 ++- tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml | 3 ++- tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml | 3 ++- tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml | 3 ++- tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml | 3 ++- tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml | 3 ++- tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml | 3 ++- tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml | 3 ++- 120 files changed, 240 insertions(+), 120 deletions(-) diff --git a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py index 2be5feaedc..147538b5f5 100644 --- a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py +++ b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py @@ -27,7 +27,8 @@ destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every -decision, assumption, and blocked step in your final response.""" +decision, assumption, and blocked step in your final response. Instructions in +the task take precedence over this paragraph.""" # The variants this replaced. A task reintroducing one is drifting back. _SUPERSEDED = re.compile(r"Do NOT ask for approval|Do NOT pause between planning") diff --git a/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml b/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml index 082659d4bf..a5f9f848b5 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/idempotent_reconfigure.yaml @@ -37,7 +37,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent called `node configure` at least twice" diff --git a/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml b/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml index fc5f1f36e5..6b6aa15df7 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/multi_connector_independence.yaml @@ -38,7 +38,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # min_count: 1 (not 2) — agents commonly chain two `uip ... node add` calls # into a single Bash invocation with `&&`, which the checker counts as one diff --git a/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml b/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml index 69b369be48..6ce5c1b543 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/no_duplicate_connection_bindings.yaml @@ -34,7 +34,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent called `node configure`" diff --git a/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml b/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml index 5dc5be071a..5d6dbbb508 100644 --- a/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml +++ b/tests/tasks/uipath-maestro-flow/bindings/reconfigure_different_connection.yaml @@ -58,7 +58,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # min_count: 1 (not 2). Per uipath-maestro-flow SKILL.md rule #10, agents # chain sequential `uip` calls — e.g. `node configure && ... && node diff --git a/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml b/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml index 9662261136..0d8ad64a43 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/ceql_where.yaml @@ -37,7 +37,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "where_detail.json (found anywhere under the solution) has a canonical CEQL filter tree on displayName='active'; flow references the registered Azure AD / Entra connector key with List Groups + Terminate nodes" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml b/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml index 0a38c71d36..e8c8bb9210 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/complex_array.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml index f8d2d33da9..893aa2578c 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/contractregistry_crud_filters.yaml @@ -46,7 +46,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml index 3739d3c104..0cfccde500 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/e2e_contract_intake_pipeline.yaml @@ -52,7 +52,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml index 869386df95..9c98bb645a 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/integration_create_get.yaml @@ -48,7 +48,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Create Entity Record node added at least twice (one per scenario)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml index ece7cef63f..fecf7a9ada 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_negative.yaml @@ -17,7 +17,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered description: "uipath-rpa handles the RPA-Studio Data Fabric prompt (not uipath-maestro-flow)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml index 7a477078c9..6de4831e7c 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_activation_positive.yaml @@ -17,7 +17,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered description: "uipath-maestro-flow activates for a DataFabric-in-Flow prompt" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml index 00ee05490a..5f7c81af5a 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_create_all_types.yaml @@ -41,7 +41,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml index f62f9646ba..031229063b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_error.yaml @@ -33,7 +33,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Create attempted on NonExistentEntity" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml index dd02974f3b..41ef7bf5ac 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_file_activities.yaml @@ -47,7 +47,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml index 3464abc738..d3de8b3b61 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_query.yaml @@ -50,7 +50,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Query Entity Records node added" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml index 5666209338..7aab21e52b 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update.yaml @@ -35,7 +35,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Flow validated" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml index f5d2ad16ea..4ecca7e1bb 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/smoke_update_existing_flow.yaml @@ -43,7 +43,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final MovieReportFlow validates cleanly" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml index d074358f41..9c4fe6024d 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/datafabric_connector/trigger_lifecycle.yaml @@ -46,7 +46,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Final .flow passes `uip maestro flow validate`" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml b/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml index 0d87fb545b..d42edea705 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/drive_to_slack.yaml @@ -40,7 +40,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: uip maestro flow validate was called diff --git a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml index 00bfd7e42f..cb51705ed3 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_false.yaml @@ -26,7 +26,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml index 28f48b77e4..96fddd144f 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/dtl_load_by_default_true.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml b/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml index c311544e4b..b9ec264475 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/enhanced_enum.yaml @@ -29,7 +29,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml b/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml index 1f6c901180..d28793f0cd 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/enum.yaml @@ -30,7 +30,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent invoked `uip is connections list` to discover available connections" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml b/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml index 88fb41adf8..b062b2ca06 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/generate_schema.yaml @@ -31,7 +31,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow is valid JSON with Jira Create Issue node, customFieldsRequestDetails has both parent-field tuples under GenerateSchema, and bodyParameters carries a non-empty fields.summary" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml index 0af10be79c..23a701a596 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml @@ -50,7 +50,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml b/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml index 1dff943619..6ae8b595b0 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/jdbc_databricks_query/jdbc_databricks_query.yaml @@ -61,7 +61,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml b/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml index 28e730ddd0..acacff7471 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/multiselect.yaml @@ -25,7 +25,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # Name-agnostic: the prompt doesn't fix a project name. - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml b/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml index 6281f00bb9..de0ded0ef8 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/non-catalog-http-fallback/non_catalog_http_fallback.yaml @@ -38,7 +38,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml b/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml index eb12ca7b6a..78c855fbf4 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/paginated_reference_lookup.yaml @@ -44,7 +44,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent invoked `uip is resources run list ... curated_channels` more than once (pagination loop ran)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml b/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml index 11dc3093e4..2e9355f5dc 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/path_params.yaml @@ -32,7 +32,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent invoked `uip is connections list` to discover available connections" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml b/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml index 4f780d3d2b..c859018779 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/query_params.yaml @@ -29,7 +29,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml b/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml index 3b8491316d..51b6e799c3 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/searchable_joins.yaml @@ -26,7 +26,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file exists and is valid JSON" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml b/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml index b335a1c1ad..ed0fd49d7d 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/slack-http-fallback/slack_http_fallback.yaml @@ -35,7 +35,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml index 480e318ff4..4cc6dbeb42 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_attachments/testmanager_attachments.yaml @@ -38,7 +38,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml index 1ac30c778d..eed6d75e0f 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_crud_grounded/testmanager_crud_grounded.yaml @@ -43,7 +43,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`)" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml index 1e55d25f98..59f2c80c61 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_execution_results/testmanager_execution_results.yaml @@ -43,7 +43,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml index dc4f1b64c6..1f697bc8ec 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_generic_records/testmanager_generic_records.yaml @@ -39,7 +39,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml index 9e22596470..64a26a2c02 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_requirement_lifecycle/testmanager_requirement_lifecycle.yaml @@ -40,7 +40,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml index da98fe3eb2..e659c59a5f 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testcase_lifecycle/testmanager_testcase_lifecycle.yaml @@ -39,7 +39,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml index 0c611f2b78..a30e0dd5b9 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/testmanager_testset_lifecycle/testmanager_testset_lifecycle.yaml @@ -41,7 +41,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent refreshed the node manifest (`uip maestro flow registry pull`) before searching" diff --git a/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml b/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml index 991005ee67..69e2d5e857 100644 --- a/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_trigger/trigger_with_filter.yaml @@ -25,7 +25,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # `check_trigger_filter.py` locates trigger_detail.json (root or nested in the # flow project dir) and asserts it is the --detail object: valid JSON, no diff --git a/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml b/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml index 72364832e4..51ae0062b8 100644 --- a/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_trigger/webhook_waitfor_parallel.yaml @@ -56,7 +56,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml b/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml index e0c6569ca0..7a72011768 100644 --- a/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml +++ b/tests/tasks/uipath-maestro-flow/context-grounding/batch_transform/batch_transform.yaml @@ -54,7 +54,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml b/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml index ca884d549e..d57b247b99 100644 --- a/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml +++ b/tests/tasks/uipath-maestro-flow/context-grounding/summarize/summarize.yaml @@ -56,7 +56,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml b/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml index 83c7d980a5..d46837477c 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/devcon_expense_approval.yaml @@ -42,7 +42,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml index 937293f980..f01a5552ec 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_jira_ticket/escalation_jira_ticket.yaml @@ -66,7 +66,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent validated the generated Flow" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml index bc3cd08455..9f73e3b270 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_orchestrator_paths/escalation_orchestrator_paths.yaml @@ -93,7 +93,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent validated the generated Flow" diff --git a/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml b/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml index e07859f5d3..062d4b3c20 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/escalation_slack_alert/escalation_slack_alert.yaml @@ -68,7 +68,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── The agent validated the flow (convention adherence) ───────────────── - type: command_executed diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml index 89e7ec1c4c..2185c80264 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_create_issue/jira_create_issue.yaml @@ -52,7 +52,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml index f88475acbb..dec7b9a3d3 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_get_issue/jira_get_issue.yaml @@ -52,7 +52,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml index 90a5e59238..9f11d6378b 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_lifecycle/jira_lifecycle.yaml @@ -65,7 +65,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml b/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml index 9704e307d4..69d81ef67c 100644 --- a/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml +++ b/tests/tasks/uipath-maestro-flow/e2e/jira_search_triage/jira_search_triage.yaml @@ -52,7 +52,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "uip maestro flow validate was called" diff --git a/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml b/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml index 172d18665b..8d0a7230cf 100644 --- a/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/add_node/add_node.yaml @@ -28,7 +28,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml b/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml index f4eb9e211a..20b05d484a 100644 --- a/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/add_output/add_output.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes on the flow file" diff --git a/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml b/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml index 7f75d76876..6ddb25ff31 100644 --- a/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/group_to_subflow/group_to_subflow.yaml @@ -29,7 +29,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml b/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml index d03eb236af..9880165f8e 100644 --- a/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/move_node/move_node.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes on the flow file" diff --git a/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml b/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml index 8824651082..c7cbbd5d34 100644 --- a/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/remove_node/remove_node.yaml @@ -28,7 +28,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml b/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml index 83c8b7929b..e5e952c9d6 100644 --- a/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml +++ b/tests/tasks/uipath-maestro-flow/edit/update_node/update_node.yaml @@ -29,7 +29,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml index 1fb0fb2c87..722412cd79 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/child_simulation/child_simulation_crud.yaml @@ -68,7 +68,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml b/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml index e228cf951c..76cac0db7b 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/evaluator_type_choice.yaml @@ -69,7 +69,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created the solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml b/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml index 0552675fa8..44515e4f3e 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/inline_agent_eval/inline_agent_eval.yaml @@ -64,7 +64,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent scaffolded the inline agent with uip agent init --inline-in-flow" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml index a7b7c92dee..0e087cd42f 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/local_crud.yaml @@ -54,7 +54,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml b/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml index 33b41d07e6..6d90cb3763 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/no_auto_upload.yaml @@ -60,7 +60,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created the solution" diff --git a/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml b/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml index 1f42f1044b..c1ec336127 100644 --- a/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml +++ b/tests/tasks/uipath-maestro-flow/evaluate/simulation/simulation_crud.yaml @@ -65,7 +65,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml index 0b0d870278..61135dd14d 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_01_schema_design.yaml @@ -35,7 +35,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml index dbcf29d5d8..9fd1f3fd94 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_02_result_downstream.yaml @@ -37,7 +37,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml index a7f05ff0cd..ca08ef778b 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_03_boolean_decision.yaml @@ -38,7 +38,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml b/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml index 57db9e9354..a258d2c52c 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/quality_04_brownfield_insert.yaml @@ -39,7 +39,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes after brownfield insert" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml index 34daf2bba6..8da394aa9c 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_01_hitl_node_placed.yaml @@ -32,7 +32,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file was created" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml index 8bf3159525..7fea7d40df 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_02_completed_port_wired.yaml @@ -36,7 +36,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "Flow file was created" diff --git a/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml b/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml index dc12052dc7..54beaa7235 100644 --- a/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml +++ b/tests/tasks/uipath-maestro-flow/hitl/smoke_03_multi_outcome_routing.yaml @@ -39,7 +39,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml index 7bffcaacbb..aed4e6d897 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_01_invoice_extraction_greenfield.yaml @@ -40,7 +40,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the generated flow file diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml index ba4dd79c1b..e0b9008635 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_02_project_selection.yaml @@ -63,7 +63,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml b/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml index 4e5f03640d..3ed5e77dd5 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/e2e_03_project_creation_handoff/e2e_03_project_creation_handoff.yaml @@ -107,7 +107,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered description: "Agent invoked the uipath-maestro-flow Skill" diff --git a/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml b/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml index 9efee67f34..bc077bfdbe 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/integration_handle_routing.yaml @@ -54,7 +54,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing.yaml index 3d5c71f101..3bd72c7054 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing.yaml @@ -68,7 +68,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # What this checks: did the agent search the registry for IxP nodes? # Passes (case-insensitive) when the agent ran either: diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml index aa281a5c70..82f165ca1a 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing_listing.yaml @@ -53,7 +53,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # IxP registry-search check (omits `get`) — see routing.yaml for the pattern breakdown. - type: command_executed diff --git a/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml b/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml index eaeaf23134..61f98247b4 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/routing_negative.yaml @@ -73,7 +73,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # Inverted twin of the positive routing.yaml grep. # `shell=True` in coder_eval Sandbox.run_command means `!` works as a bash diff --git a/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml b/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml index 61e708ed79..51b4423583 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/scaffold_minimal.yaml @@ -42,7 +42,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml b/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml index 42bdaaaa3d..2c489aca37 100644 --- a/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml +++ b/tests/tasks/uipath-maestro-flow/ixp/scaffold_multinode.yaml @@ -46,7 +46,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: skill_triggered skill_name: "uipath-maestro-flow" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml b/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml index 982f9ac221..d4be6e8eff 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/bellevue_weather/bellevue_weather.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml index 14d97b2e83..4845245f00 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml @@ -59,7 +59,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml index eae64ececa..35ddf85588 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml @@ -50,7 +50,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml index d9bea69d76..8ea66bfd0d 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml @@ -116,7 +116,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml index a383e65b31..7874faefab 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml @@ -47,7 +47,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml index 4fc89ec96a..a91735f4f7 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml @@ -49,7 +49,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml b/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml index 8c249f28e8..600ab56741 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/calculator/calculator.yaml @@ -24,7 +24,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml b/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml index fdb3ade205..e896822ef3 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/customer_escalation/customer_escalation.yaml @@ -42,7 +42,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ──────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml b/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml index ef96fc84f3..6a05aaa795 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/dice_roller/dice_roller.yaml @@ -25,7 +25,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml b/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml index 61c82036b8..6df0d53636 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/feet_inches/feet_inches.yaml @@ -29,7 +29,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml b/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml index 925486b82a..f715d216a0 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/loop_multiply/loop_multiply.yaml @@ -24,7 +24,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml b/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml index 9407f196e6..5dda9ee47f 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/multi_city_weather/multi_city_weather.yaml @@ -24,7 +24,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml b/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml index fe1af8277e..eda77be31e 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/reading_list/reading_list.yaml @@ -51,7 +51,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml b/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml index dcc77be706..de1547175c 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/slack_channel_description/slack_channel_description.yaml @@ -25,7 +25,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml b/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml index 609000f203..be6765dbee 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml @@ -26,7 +26,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: "uip maestro flow validate passes" diff --git a/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml b/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml index 2492361b55..c62753b860 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/wiki_pageviews/wiki_pageviews.yaml @@ -41,7 +41,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml b/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml index e06d9d711f..5052621811 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/api_workflow/api_workflow.yaml @@ -24,7 +24,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml b/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml index 056cca30f1..a90db2de50 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/coded_agent/coded_agent.yaml @@ -36,7 +36,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: run_command description: uip maestro flow validate passes on the flow file diff --git a/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml b/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml index 374a7b7363..33168541ee 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/decision/decision.yaml @@ -27,7 +27,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml b/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml index de1e4ab9c8..9afa47baff 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/delay/delay.yaml @@ -40,7 +40,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml b/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml index 538698c65b..e1b4f7bde8 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/file_attachment/file_attachment.yaml @@ -43,7 +43,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml b/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml index 502b5963d9..cefd781716 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/lowcode_agent/lowcode_agent.yaml @@ -31,7 +31,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml b/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml index ea080087c4..f44cef504c 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/openmeteo_weather/openmeteo_weather.yaml @@ -44,7 +44,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml index 8a8c7fda5e..c9bb6ced57 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml @@ -39,7 +39,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Structural: flow builds and validates ────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml b/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml index c1d52bc70e..760e75f43b 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/outlook_waitfor_email/outlook_waitfor_email.yaml @@ -50,7 +50,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Structural: flow builds and validates ────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml b/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml index daac335800..1a72b3cfa7 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/rpa/rpa.yaml @@ -26,7 +26,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml b/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml index ebb2388cbc..a26a12b1c8 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/subflow/subflow.yaml @@ -28,7 +28,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml b/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml index 61e2b2f7b6..04f02ca617 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/switch/switch.yaml @@ -30,7 +30,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml b/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml index 0bc3ebccd5..1f058d0724 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/terminate/terminate.yaml @@ -31,7 +31,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml index b435a70a7d..f435e4adfe 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_filter/transform_filter.yaml @@ -50,7 +50,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml index abc8686a68..4d8ba07bd9 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_group_by/transform_group_by.yaml @@ -51,7 +51,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # -- Flow file validity -- - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml b/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml index 09cf52cff3..8d79e6c4c3 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/transform_map/transform_map.yaml @@ -49,7 +49,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml b/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml index b7c95d1e75..07cd098222 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/init_validate.yaml @@ -37,7 +37,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent created a solution with uip solution init (or legacy new)" diff --git a/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml b/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml index 3dead578eb..0d95df39d1 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/inline_agent_robust.yaml @@ -42,7 +42,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent scaffolded the inline agent with uip agent init --inline-in-flow" diff --git a/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml b/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml index 695e8fc31c..e1cd17fada 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/merge_parallel_sync.yaml @@ -70,7 +70,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml b/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml index eb2d5bd633..4fe39bdeaf 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/registry_discovery.yaml @@ -32,7 +32,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: - type: command_executed description: "Agent pulled registry data" diff --git a/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml b/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml index 86aec01580..9da12584a7 100644 --- a/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml +++ b/tests/tasks/uipath-maestro-flow/smoke/scheduled_trigger.yaml @@ -58,7 +58,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml b/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml index 3a9b9f894b..22cb4636cd 100644 --- a/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml +++ b/tests/tasks/uipath-maestro-flow/voice/voice_inbound_call.yaml @@ -42,7 +42,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. # Every criterion discovers the project dynamically: `flow init` wraps it in a # `Solution/` the prompt does not pin, so a hardcoded `path:` would score # 0.0 on a valid build (#2213). diff --git a/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml b/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml index 6b7411a3b0..6fd7a95913 100644 --- a/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml +++ b/tests/tasks/uipath-maestro-flow/voice/voice_outbound_call.yaml @@ -54,7 +54,8 @@ initial_prompt: | destination unless the task asks for it. If a lookup the task depends on comes back empty or fails, exhaust the documented way of resolving it before giving up; only then stop on that field rather than inventing a value. Record every - decision, assumption, and blocked step in your final response. + decision, assumption, and blocked step in your final response. Instructions in + the task take precedence over this paragraph. # Every criterion discovers the project dynamically: `flow init` wraps it in a # `Solution/` the prompt does not pin, so a hardcoded `path:` would score # 0.0 on a valid build (#2213). From e8e0aadad3196d31088c61dc4e39285c01c24a53 Mon Sep 17 00:00:00 2001 From: rockymadden Date: Fri, 4 Sep 2026 10:59:19 -0600 Subject: [PATCH 5/6] =?UTF-8?q?fix:=20address=20Copilot=20review=20?= =?UTF-8?q?=E2=80=94=20a=2010th=20variant,=20an=20unconditional=20menu,=20?= =?UTF-8?q?unbounded=20consent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A 10th autonomy variant survived the sweep: five billing tasks carried "Build the complete flow / without stopping to ask me." The guard advertised catching superseded variants and did not match that wording, so it passed with the duplication in place. Removed from the five, and the matcher now covers it — verified by reintroducing the phrase and watching the test fail. devcon_expense_approval's "Build the complete flow as a UiPath Flow project called ..." is task text and is untouched. Both What's next menus were unconditional, so a request that already named the next step ("run debug and iterate") still stopped for a redundant selection — the exact gate this work removes elsewhere. An instruction in the original request is now the selection; the menu shows only when the next step was unspecified. Rule #2's mandate said an ordinary build request authorizes a real run. That is too broad for side effects reaching someone who is not the user: a phone call, an email to a real person. Those now need the run asked for explicitly, whoever is watching, and rule #2 points at the outbound-call case in inline-voice-agent/impl.md, whose own gate this never touched. Co-Authored-By: Claude Opus 5 (1M context) --- skills/uipath-maestro-flow/SKILL.md | 2 +- skills/uipath-maestro-flow/references/author/brownfield.md | 2 +- skills/uipath-maestro-flow/references/author/greenfield.md | 2 +- skills/uipath-maestro-flow/references/operate/run.md | 2 +- .../uipath-maestro-flow/_shared/test_headless_preamble.py | 4 +++- .../billing_discrepancy_detector.yaml | 3 --- .../billing_dispute_analyst/billing_dispute_analyst.yaml | 3 --- .../billing_dispute_resolution.yaml | 3 --- .../billing_invoice_lookup/billing_invoice_lookup.yaml | 3 --- .../billing_resolution_writer/billing_resolution_writer.yaml | 3 --- 10 files changed, 7 insertions(+), 20 deletions(-) diff --git a/skills/uipath-maestro-flow/SKILL.md b/skills/uipath-maestro-flow/SKILL.md index 2463da2399..b7493f37ba 100644 --- a/skills/uipath-maestro-flow/SKILL.md +++ b/skills/uipath-maestro-flow/SKILL.md @@ -61,7 +61,7 @@ Guide for creating, editing, validating, debugging, publishing, diagnosing, and > **Tool vocabulary.** `Edit` means in-place replacement, `Write` a full-file write, `Read`/`Glob`/`Grep` file access, `Bash` shell, and a progress list the harness task list. Map them to equivalent tools elsewhere; preserve reviewable diffs and use shell file edits only as a last resort. 1. **Use `--output json`; prefer `--output-filter` for extraction.** Filters are global and run against the `Data` envelope, so expressions start at `Data` without a `Data.` prefix. Registry search returns a flat PascalCase array (`NodeType`, `DisplayName`, `Description`, `AvailableOnTenant`), not `Data.Nodes` or lowercase fields. Example: `uip maestro flow registry search --output json --output-filter "[*].{NodeType:NodeType,DisplayName:DisplayName,Description:Description,AvailableOnTenant:AvailableOnTenant}"`. With `--local`, omit `AvailableOnTenant`. Use `python3 -c` or `jq` only after verifying shape and when JMESPath cannot express the transform. See [cli-conventions.md §3](references/shared/cli-conventions.md#3-prefer---output-filter-for-extraction). -2. **`flow debug` consent comes from the mandate.** It executes the flow for real (sends emails, posts messages, calls APIs), so run it only when the request is for a flow that *works*: the user asked for something that does X, or said make it work, get it running, iterate until it passes. Building and validating does not discharge that, and a flow that was never executed is not finished. Ask when the request stops short of a working artifact (review this, add a node, validate only); with nobody to ask, report debug as the step not run. Debug also overwrites the Studio Web solution matching the local `.uipx` `SolutionId`, so never debug a solution this run did not scaffold. +2. **`flow debug` consent comes from the mandate.** It executes the flow for real (sends emails, posts messages, calls APIs), so run it only when the request is for a flow that *works*: the user asked for something that does X, or said make it work, get it running, iterate until it passes. Building and validating does not discharge that, and a flow that was never executed is not finished. Ask when the request stops short of a working artifact (review this, add a node, validate only); with nobody to ask, report debug as the step not run. **The mandate does not extend to side effects that reach a third party** — a real phone call, an email or message to someone who is not the user. Those need the run asked for explicitly, whoever is watching; see [inline-voice-agent/impl.md](references/author/plugins/inline-voice-agent/impl.md) for the outbound-call case. Debug also overwrites the Studio Web solution matching the local `.uipx` `SolutionId`, so never debug a solution this run did not scaffold. 3. **Search before creating or declaring resources absent.** For named agents, API workflows, RPA processes, and similar resources: (a) pull and search the tenant registry with `uip maestro flow registry pull --force && uip maestro flow registry search "" --output json`; pull first because the cache expires after 30 minutes, login is required, and only published resources are returned; (b) search locally with `uip maestro flow registry list --local --output json` or `search "" --local` (no login; returns sibling projects in the same `.uipx` solution); an empty keyword search does not prove absence, so confirm with `list --local`; (c) scaffold, mock, or create only when both searches find no match and the user explicitly requests embedding/creation or no published resource satisfies the need. "Coded" and "low-code" describe implementation style, not inline status. Use `uipath.agent.autonomous` only when explicitly asked to embed/inline/create an agent. Use `core.logic.mock` only when the resource is neither in the solution nor published. See [rpa](references/author/plugins/rpa/impl.md) and [agent](references/author/plugins/agent/impl.md). diff --git a/skills/uipath-maestro-flow/references/author/brownfield.md b/skills/uipath-maestro-flow/references/author/brownfield.md index 501122d6fc..1d8cf5b4b2 100644 --- a/skills/uipath-maestro-flow/references/author/brownfield.md +++ b/skills/uipath-maestro-flow/references/author/brownfield.md @@ -86,4 +86,4 @@ Authoring ends here. For any selected option, read [operate/CAPABILITY.md](../op | **Deploy to Orchestrator** | Pack and publish directly to Orchestrator (bypasses Studio Web). Only when explicitly chosen; see [/uipath:uipath-platform](/uipath:uipath-platform). | | **Something else** | Last option. Accept free-form string input and act on it. | -Do not run any option without explicit user selection. \ No newline at end of file +When the original request already named the next step ("publish it", "deploy to Orchestrator", "run debug and iterate"), that instruction **is** the selection — act on it and skip the menu. Show the menu only when the next step was left unspecified, and then do not run any option without explicit user selection. \ No newline at end of file diff --git a/skills/uipath-maestro-flow/references/author/greenfield.md b/skills/uipath-maestro-flow/references/author/greenfield.md index 162b44b3c0..f974a5dffa 100644 --- a/skills/uipath-maestro-flow/references/author/greenfield.md +++ b/skills/uipath-maestro-flow/references/author/greenfield.md @@ -378,4 +378,4 @@ Authoring terminates here. Each option below hands off to Operate — read [oper | **Deploy to Orchestrator** | Pack and publish directly to Orchestrator (bypasses Studio Web). Only when explicitly chosen — see [/uipath:uipath-platform](/uipath:uipath-platform). | | **Something else** | Last option. Accept free-form string input and act on it (e.g., "just leave it", "pack but don't publish", "upload to a different tenant"). | -Do not run any of these actions without explicit user selection. Once the user picks an option, read [operate/CAPABILITY.md](../operate/CAPABILITY.md) and follow that capability's flow — do not run operate commands from inside this doc. +When the original request already named the next step ("publish it", "deploy to Orchestrator", "run debug and iterate"), that instruction **is** the selection — act on it and skip the menu. Show the menu only when the next step was left unspecified, and then do not run any of these actions without explicit user selection. Once the option is settled, read [operate/CAPABILITY.md](../operate/CAPABILITY.md) and follow that capability's flow — do not run operate commands from inside this doc. diff --git a/skills/uipath-maestro-flow/references/operate/run.md b/skills/uipath-maestro-flow/references/operate/run.md index 98aa1abf0c..070acacc14 100644 --- a/skills/uipath-maestro-flow/references/operate/run.md +++ b/skills/uipath-maestro-flow/references/operate/run.md @@ -13,7 +13,7 @@ Execute a flow on demand and monitor progress. Three modes: **debug** (controlle ## Debug — controlled end-to-end run -> **Consent comes from the mandate.** `flow debug` executes the flow for real — sends emails, posts messages, calls APIs. Run it when the request is for a flow that works; ask when the request stops at build or validate. Never debug a solution this run did not scaffold: debug overwrites the Studio Web solution matching the local `.uipx` `SolutionId`. See rule #2 in [SKILL.md](../../SKILL.md). +> **Consent comes from the mandate.** `flow debug` executes the flow for real — sends emails, posts messages, calls APIs. Run it when the request is for a flow that works; ask when the request stops at build or validate. The mandate does not cover side effects that reach a third party (a real call, a message to someone who is not the user) — those need the run asked for explicitly. Never debug a solution this run did not scaffold: debug overwrites the Studio Web solution matching the local `.uipx` `SolutionId`. See rule #2 in [SKILL.md](../../SKILL.md). ```bash UIP_LOG_LEVEL=info uip maestro flow debug --output json diff --git a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py index 147538b5f5..aad78aaf82 100644 --- a/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py +++ b/tests/tasks/uipath-maestro-flow/_shared/test_headless_preamble.py @@ -31,7 +31,9 @@ the task take precedence over this paragraph.""" # The variants this replaced. A task reintroducing one is drifting back. -_SUPERSEDED = re.compile(r"Do NOT ask for approval|Do NOT pause between planning") +_SUPERSEDED = re.compile( + r"Do NOT ask for approval|Do NOT pause between planning|without stopping to ask" +) @functools.lru_cache(maxsize=1) diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml index 4845245f00..1b9e663333 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_discrepancy_detector/billing_discrepancy_detector.yaml @@ -47,9 +47,6 @@ initial_prompt: | flow validate` passes. Grading then runs the flow under debug against live tenant data, so build it to actually run, not merely validate. - Build the complete flow - without stopping to ask me. - This run is headless. No user is present and nobody will answer a question or grant an approval, so do not ask, do not pause, and do not wait for input. Complete the task in one pass: take the best available option and supply the diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml index 35ddf85588..6012ac9e56 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_analyst/billing_dispute_analyst.yaml @@ -38,9 +38,6 @@ initial_prompt: | flow validate` passes. Grading then runs the flow under debug, so build it to actually run, not merely validate. - Build the complete flow - without stopping to ask me. - This run is headless. No user is present and nobody will answer a question or grant an approval, so do not ask, do not pause, and do not wait for input. Complete the task in one pass: take the best available option and supply the diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml index 8ea66bfd0d..35dac97b68 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_dispute_resolution/billing_dispute_resolution.yaml @@ -104,9 +104,6 @@ initial_prompt: | and re-run — stop after 3 debug attempts and report the last incident instead of looping. Grading then runs debug against live tenant data. - Build the complete flow - without stopping to ask me. - This run is headless. No user is present and nobody will answer a question or grant an approval, so do not ask, do not pause, and do not wait for input. Complete the task in one pass: take the best available option and supply the diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml index 7874faefab..8a9aa38680 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_invoice_lookup/billing_invoice_lookup.yaml @@ -35,9 +35,6 @@ initial_prompt: | flow validate` passes. Grading then runs the flow under debug against live tenant data, so build it to actually run, not merely validate. - Build the complete flow - without stopping to ask me. - This run is headless. No user is present and nobody will answer a question or grant an approval, so do not ask, do not pause, and do not wait for input. Complete the task in one pass: take the best available option and supply the diff --git a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml index a91735f4f7..223b005042 100644 --- a/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml +++ b/tests/tasks/uipath-maestro-flow/multi_node/billing_resolution_writer/billing_resolution_writer.yaml @@ -37,9 +37,6 @@ initial_prompt: | flow validate` passes. Grading then runs the flow under debug, so build it to actually run, not merely validate. - Build the complete flow - without stopping to ask me. - This run is headless. No user is present and nobody will answer a question or grant an approval, so do not ask, do not pause, and do not wait for input. Complete the task in one pass: take the best available option and supply the From c82dc70b574de11cd9e979042e19a07d5a3494e6 Mon Sep 17 00:00:00 2001 From: Rocky Madden Date: Fri, 4 Sep 2026 11:55:46 -0600 Subject: [PATCH 6/6] fix(tests): report a broken tenant as ERROR, not as an agent failure (#3090) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2026-09-04 two flow tasks were scored FAILURE for reasons that had nothing to do with the agent: skill-flow-outlook-trigger-inbox AADSTS50173 — the Outlook grant was revoked on 2026-08-31 skill-flow-generic-dynamic-node the ServiceNow developer instance was hibernating, so every metadata call 403'd Both were root-caused as skill defects first. The 403 is several thousand characters into the checker output, and nothing above it says the tenant is down, so the reports read as "the agent wrote a display name where an ID belongs" — which it did, but only because the lookup it was told to use could not answer. A `pre_run` failure lands the run as FinalStatus.ERROR rather than FAILURE, and PreRunCommand's own docstring gives the reason: "the agent should not run against a broken environment." This uses that. preflight_connections.py takes connector keys, lists their connections with --all-folders (without it an empty result is a false negative), and exits non-zero unless at least one is Enabled. Wired into the two tasks above. Behaviour verified against six tenant states: all-enabled, hibernating, mixed with one up, no connections in any folder, CLI non-zero, and a Failure envelope. Only those two tasks are wired. 23 others name a connector, but that list comes from grepping prompts for `uipath-*` and it catches non-connectors like uipath-rpa and uipath-platform — worth doing deliberately, not from a crude match. Co-authored-by: Claude Opus 5 (1M context) --- .../_shared/preflight_connections.py | 77 +++++++++++++++++++ .../generic_dynamic_node.yaml | 4 + .../outlook_trigger_inbox.yaml | 4 + 3 files changed, 85 insertions(+) create mode 100644 tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py diff --git a/tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py b/tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py new file mode 100644 index 0000000000..99e5ca7132 --- /dev/null +++ b/tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +"""Fail a task as ERROR, not FAILURE, when the tenant connection it needs is down. + +Usage: + preflight_connections.py [ ...] + +A `pre_run` failure lands the run as ``FinalStatus.ERROR``; a criterion failure +lands it as ``FAILURE``. Without this, a revoked grant or an asleep tenant reads +as an agent mistake: + + skill-flow-outlook-trigger-inbox AADSTS50173, grant revoked 2026-08-31 + skill-flow-generic-dynamic-node ServiceNow developer instance hibernating + +Both were scored FAILURE on 2026-09-04 and root-caused as skill defects before +anyone read far enough into the checker output to find the 403. + +Passes when at least one connection for each key reports Enabled. Connections +live in several folders, so `--all-folders` is required; without it an empty +result is a false negative. +""" + +from __future__ import annotations + +import json +import subprocess +import sys + + +def _connections(key: str) -> list[dict]: + proc = subprocess.run( + ["uip", "is", "connections", "list", key, "--all-folders", "--output", "json"], + capture_output=True, + text=True, + timeout=90, + ) + if proc.returncode != 0: + raise RuntimeError(f"`uip is connections list {key}` exited {proc.returncode}: {proc.stderr.strip()}") + payload = json.loads(proc.stdout) + if payload.get("Result") != "Success": + raise RuntimeError(f"connections list for {key} failed: {payload.get('Message', payload)}") + return payload.get("Data") or [] + + +def main(keys: list[str]) -> int: + broken: list[str] = [] + for key in keys: + try: + conns = _connections(key) + except Exception as exc: # noqa: BLE001 — any failure here is a blocked tenant + broken.append(f"{key}: {exc}") + continue + if not conns: + broken.append(f"{key}: no connection in any folder") + continue + enabled = [c for c in conns if c.get("State") == "Enabled"] + if not enabled: + states = ", ".join(f"{c.get('Name')}={c.get('State')}" for c in conns) + broken.append(f"{key}: no Enabled connection ({states})") + continue + print(f"OK: {key} — {len(enabled)}/{len(conns)} connection(s) Enabled") + + if broken: + print( + "TENANT NOT READY — this is an environment failure, not an agent failure.\n " + + "\n ".join(broken) + + "\n\nReauthorize the connection, or wake the provider instance, then re-run.", + file=sys.stderr, + ) + return 1 + return 0 + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print(__doc__, file=sys.stderr) + sys.exit(2) + sys.exit(main(sys.argv[1:])) diff --git a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml index 23a701a596..9816a70d59 100644 --- a/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml +++ b/tests/tasks/uipath-maestro-flow/connector_features/generic_dynamic_node/generic_dynamic_node.yaml @@ -52,6 +52,10 @@ initial_prompt: | up; only then stop on that field rather than inventing a value. Record every decision, assumption, and blocked step in your final response. Instructions in the task take precedence over this paragraph. +pre_run: + - command: 'python3 "$SKILLS_REPO_PATH/tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py" uipath-servicenow-servicenow' + timeout: 120 + success_criteria: # ── Flow file validity ───────────────────────────────────────────────── - type: run_command diff --git a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml index c9bb6ced57..567936b1b4 100644 --- a/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml +++ b/tests/tasks/uipath-maestro-flow/single_node/outlook_trigger_inbox/outlook_trigger_inbox.yaml @@ -41,6 +41,10 @@ initial_prompt: | up; only then stop on that field rather than inventing a value. Record every decision, assumption, and blocked step in your final response. Instructions in the task take precedence over this paragraph. +pre_run: + - command: 'python3 "$SKILLS_REPO_PATH/tests/tasks/uipath-maestro-flow/_shared/preflight_connections.py" uipath-microsoft-outlook365' + timeout: 120 + success_criteria: # ── Structural: flow builds and validates ────────────────────────────── - type: run_command