Skip to content

test(bpmn): port the live-tier and field-shape Maestro Flow evals to the BPMN suite - #3502

Open
DevMomo wants to merge 31 commits into
mainfrom
test/bpmn-port-live
Open

DevMomo wants to merge 31 commits into
mainfrom
test/bpmn-port-live

Conversation

@DevMomo

@DevMomo DevMomo commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Second half of the Maestro Flow → Maestro BPMN eval port (structural half: #3426). Adds the live tier, where the grader runs the process on the tenant, plus the Integration Service field-shape family. Every task in this PR is green in CI; the eight ports that never went green live on the stacked branch test/bpmn-port-parked, each skip: true with its evidence, and are not part of this diff.

What

22 task directories, their graders, shared helpers, two docs (_porting/LIVE-HANDOFF.md, _porting/LIVE-ADDENDUM.md) and the per-task ledger (_porting/parity-ledger.md).

  • Live ports (15). The grader creates an ephemeral solution, imports the agent's exact .bpmn (sha256-pinned), runs uip maestro bpmn debug with seeded inputs, then grades debug-instance variables-all and incidents, re-reading the tenant where Flow did (Jira issues, Slack posts, Data Service records). Recipe in _shared/bpmn_live.py; every debug call is priced by _shared/test_criterion_budgets.py.
  • Field-shape family (7). Wire-parameter evals (path, query, pagination, enum, multiselect, complex array, searchable joins), ported after confirming none asserts Flow's filter tree.
  • Shared helpers. bpmn_check.body_object/body_fields (identical to test(bpmn): read connector request bodies in both registry forms #3476, so the branches merge cleanly) read a request body in both registry forms; find_bpmn_file treats byte-identical copies as one artifact and drops untyped drafts; resolve_project(exclude_under=…) keeps a live grader's own ephemeral import out of the candidate set; managed-HTTP graders accept Intsvc.UnifiedHttpRequest beside HttpExecution. Graders import these instead of carrying private copies.

Criteria are one-for-one with the Flow source (type, order, weight, threshold); every grader assertion is tagged F (Flow translation), I (plumbing) or T (listed tolerance) in its docstring. Only live criterion timeouts and task_timeout deviate, sized to the BPMN CLI sequence.

CI results (alpha tenant, codex driver)

All 22 pass; run ids per task in _porting/parity-ledger.md:

Task Run
jira_get_issue 35501830119
jira_create_issue, escalation_jira_ticket, escalation_orchestrator_paths 35503094182
escalation_slack_alert 35524004307
slack_channel_description 35525387843
generic_dynamic_node, jdbc_databricks_query, datafabric smoke_error 35538279757
slack_http_fallback, webhook_waitfor_parallel, testmanager_crud_grounded, cli_dice_roller_simulated 35783045540
billing_invoice_lookup, slack_weather_pipeline 35785806030
enum, query_params, multiselect, searchable_joins, complex_array (0.875, advisory miss only) 35789221753
path_params 35790934047
paginated_reference_lookup 35791969905

Parked (branch test/bpmn-port-parked, not in this PR)

bellevue_weather and bellevue_weather_simulated (managed-HTTP response shape), jira_search_triage (multi-instance over a connector response, 400008), jira_lifecycle (three different runtime failures; Flow flaky too), billing_discrepancy_detector (Data Service where clause from a process variable), slack_channel_description_simulated (Slack channel pagination; Flow passes 4/12), ceql_where (Flow's filter tree has no BPMN carrier), enhanced_enum (no WooCommerce connector node). Skill findings for the BPMN skill owners are in _porting/LIVE-HANDOFF.md.

Not in this PR

The 4 probes needing tenant fixtures (billing_dispute_analyst / _resolution / _writer use Flow inline agents; file_attachment needs a file-typed variable). Depends on #3476 only for the smoke gate (per-field body form); the shared helper code here is identical to #3476's, so the merge is clean in either order.

🤖 Generated with Claude Code

https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S

@DevMomo
DevMomo requested a review from a team as a code owner September 23, 2026 19:19
@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @DevMomo's task in 4m 16s —— View job


PR Review: test(bpmn): port the live-tier and field-shape Maestro Flow evals to the BPMN suite

  • Read review criteria and project conventions
  • Analyze the full diff (85 files, +13833/-3)
  • Read existing PR conversation
  • Review shared helpers (_shared/)
  • Review task YAML files (30 tasks)
  • Review setup/teardown scripts
  • Review porting documentation
  • Check for secrets, paths, cross-skill refs
  • Post final review

Summary

Adds 30 task directories (21 live-tier, 9 field-shape) with 30 graders and shared helpers for the BPMN eval suite. This is a well-structured port from the Flow eval suite with meticulous traceability: every grader assertion is tagged F/I/T in its docstring, criteria match the Flow source one-for-one in type/order/weight/threshold, and 23 tasks have passing CI run evidence in parity-ledger.md. The 8 parked tasks have clear CI evidence and skip: true with documented gaps.

Change-by-Change Review

1. _shared/bpmn_check.py — shared helper changes

Severity: OK

Three additions, all well-motivated by CI failures:

  • find_bpmn_file() gains byte-identical copy tolerance (line 57–59, CI run 35538279757) and untyped-draft skipping (line 64–68, CI run 35785806030). Both are narrow disambiguations that fall through to the existing fail() when neither rule applies.
  • _has_typed_node() and _sha256() are clean private helpers.
  • resolve_project() gains exclude_under to prevent a live grader's own ephemeral import from being read as ambiguity (line 85). The is_relative_to() usage is correct (Python 3.9+, which the runner uses).

2. _shared/test_bpmn_check.py — unit tests for the above

Severity: OK

Three new test functions cover all three new behaviors: identical copies, live-run exclusion, and untyped-draft skipping. Each tests both the positive case and the failure/ambiguity case. The existing test_find_bpmn_file_without_hint_prefers_the_project_file gets a one-line fix ("<draft/>" instead of "<x/>") so the draft's content differs from the project's, which is now required by the new identical-copy rule — correct and necessary.

3. Live-tier graders (21 files under _shared/check_*.py)

Severity: OK

Sampled: check_jira_get_issue.py, check_escalation_orchestrator_paths.py, check_billing_invoice_lookup.py, check_dice_runs_simulated.py, check_weather_bpmn.py, check_slack_weather_pipeline.py.

Quality is high:

  • Every grader has a full assertion map in its docstring tracing each check to its Flow source (line numbers cited).
  • Budget arithmetic is documented and matches the criterion timeout: in the YAML.
  • CheckFailure is raised (not bare sys.exit()) so the traceback identifies the failing check.
  • No hardcoded tenant URLs or credentials — connector keys and folder paths match the shared test fixtures.

4. Field-shape graders (9 files under _shared/check_*.py)

Severity: OK

Sampled: check_enum_flow.py, check_complex_array.py, check_multiselect.py, check_searchable_joins.py, check_path_param_value.py, check_paginated_reference_lookup.py.

These correctly translate Flow's JSON node walk to an XML walk over Intsvc.ActivityExecution payloads. The body_fields() function in check_enum_flow.py properly accepts both the single-JSON-blob and per-field body shapes (lines 95–128), consistent with the documented BATCH1-ADDENDUM tolerance.

5. Task YAML files (30 files)

Severity: Medium (3 tasks missing mode:* tag)

All 30 tasks follow the required structure: task_id matches skill-bpmn-*, tags include uipath-maestro-bpmn as the skill tag, and each has at least one success_criteria entry. Prompts are appropriately minimal. The headless boilerplate paragraph is consistent across all tasks.

Three tasks are missing the required mode:* tag (per test-writing rules §Must-Do #1):

  • multi_node/bellevue_weather/bellevue_weather.yaml:22 — tags: [uipath-maestro-bpmn, e2e, "lifecycle:generate", "shape:multi-node", "node:decision", "feature:http"]
  • multi_node/slack_channel_description/slack_channel_description.yaml:22 — tags: [uipath-maestro-bpmn, e2e, "lifecycle:generate", "shape:multi-node", connector]
  • multi_node/slack_weather_pipeline/slack_weather_pipeline.yaml:21 — tags: [uipath-maestro-bpmn, e2e, "lifecycle:generate", "shape:multi-node", "node:decision", connector, "feature:http"]

All three should have "mode:build" added. Fix this →

6. Dual-tier tagging on Jira e2e tasks

Severity: Low

Four tasks under e2e/ carry both integration and e2e tier tags (e.g. jira_get_issue.yaml:25): tags: [uipath-maestro-bpmn, integration, ..., e2e, ...]. Per the tag taxonomy, tier should be a single value. These are live-debug tasks under e2e/ so e2e is the correct tier; integration appears to be carried over from the Flow source. Not blocking, but could be cleaned up for consistency.

7. Setup/teardown scripts

Severity: OK

Sampled: jira_is.py (both the jira_get_issue and escalation_jira_ticket copies), seed.py, seed_jira.py, teardown_jira.py, testmanager_crud_grounded/seed.py.

  • Each jira_is.py is self-contained (no shared module import), with proper --output json usage and --yes flag on delete operations.
  • Teardowns are idempotent (catch-all except → WARN + sys.exit(0)).
  • Seed scripts generate unique identifiers (uuid.uuid4().hex[:8]) per run.
  • No secrets or credentials — connection names and project keys are shared test fixture identifiers, not credentials.

8. escalation_jira_ticket/jira_is.py — robust 404 detection

Severity: OK

The _issue_not_found() function (lines 25–48) requires BOTH a structured HTTP 404 AND an issue-specific signal from the provider's error message. The docstring explains why: a bare 404 could be a missing connection/activity, not a confirmed deletion. This is defensive and correct for a teardown that must not leak CE issues.

9. Porting documentation (_porting/)

Severity: OK

Three documentation files (parity-ledger.md, LIVE-HANDOFF.md, LIVE-ADDENDUM.md) provide excellent traceability: every task has its CI run IDs, iteration history, and parking rationale. LIVE-ADDENDUM.md codifies the live-grader recipe and budget rules that all 21 live graders follow. The methodology section in LIVE-HANDOFF.md documents the port's cross-check script, CI dispatch pattern, and iteration rules.

10. Skipped tasks

Severity: OK

All 8 skip: true tasks carry inline comments with CI evidence (specific run IDs, error codes, and gap descriptions). Criteria are preserved unchanged so they can be unskipped without modifications when the underlying skill/platform gap closes.

What's Missing

  • mode:* tag on 3 tasks (bellevue_weather, slack_channel_description, slack_weather_pipeline) — see finding feat(CodedAgents): group skill by functionality #5 above.
  • Nothing else identified. The PR does not add a new skill folder, so CODEOWNERS / skill-status.json / skills.sh.json updates are not required.

Area Ratings

Area Status Notes
Frontmatter N/A No skill SKILL.md changes
E2E Tests OK 30 tasks with CI evidence, proper structure
Skill Body N/A No skill content changes
References & Assets N/A No skill reference changes
Repo Hygiene Minor 3 tasks missing mode:* tag; no secrets, no personal paths, no cross-skill deps

Issues for Manual Review

  • Budget arithmetic: Each live grader documents its timeout budget (solution init + import + debug + variables-all + incidents + margin). The arithmetic is internally consistent in the files I sampled, but I cannot verify the actual CLI wall-clock times — the budgets are derived from CI observations.
  • Tenant fixture availability: The live tasks depend on specific connections and projects on the alpha tenant (e.g., is-sandboxes-test@uipath.com-uipath-sandbox-380, project CE). These are documented as tenant prerequisites but cannot be verified from code review.
  • check_escalation_orchestrator_paths.py is 600 lines and grades 7 debug runs in one criterion. This is correct (it matches Flow's own grader structure), but is the most complex single grader in the PR — worth a closer read by someone familiar with the escalation scenario.

Conclusion

This is a thorough, well-documented port. The assertion-map discipline (every grader docstring traces each check to its Flow source with line numbers) is excellent and makes future maintenance feasible. The shared helper changes are narrow, CI-motivated, and covered by unit tests. The 3 missing mode:* tags are the only required fix — everything else is clean. Request one small change (add "mode:build" to the 3 multi_node tasks), then this is ready to merge.


@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @DevMomo's task in 1m 35s —— View job


Coder-eval task lint (advisory)

Running advisory lint on 30 changed task YAMLs…

  • Read lint rubric
  • Identify changed task YAMLs (30 files)
  • Check PR body for passing-run evidence
  • Lint each task YAML (4 parallel batches running…)
  • Within-PR duplicate check
  • Post results

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Request changes. Tally: 1 Blocker / 0 Critical / 5 Major / 8 Minor / 1 Nit.

This is a large, careful port, and a lot of it checks out:

  • pytest tests/tasks/uipath-maestro-bpmn/: 767 passed, 1 skipped.
  • check-task-host-paths, check-task-driver and check-cli-verbs are clean. All 22 task IDs validate against pinned coder-eval 0.12.4.
  • The YAMLs are clean: no @uipath/cli in env_packages, no gating --output json check, and no $TASK_DIR/$SKILLS_REPO_PATH. Every referenced grader exists, with matching argv.
  • The graders fail closed on an empty sandbox or a malformed CLI envelope, and the imported artifact is sha256-pinned.
  • The field-shape mutations I tried (enum, showHidden, path param, multiselect, paginated id, searchable joins) fail when wrong and pass when right.

Blocking:

  1. All three path-to-ga escalation graders crash at this head. #3469 (already on main, and identical in this branch's bpmn_live.py) changed index_runtime_connectors to 3-tuple keys, but these graders still unpack two. Every correct artifact scores 0 on the weight-5.0 criterion. The "green" run IDs cited in the PR body and ledger (35503094182, 35524004307) date from 2026-09-20, before #3469.
  2. check_jira_create_issue journals every regex-matched key for deletion before confirming it. Teardown can then permanently delete other people's issues in the shared CE project.
  3. testmanager_crud_grounded gives 6.5 of 9.5 weight for an agent-written result.json. The Flow original was skip: true.
  4. generic_dynamic_node passes on any stray [].
  5. check_enum_flow skips any =-expression.
  6. body_object calls per-field body inputs "valid" and merges them. The skill says those inputs don't merge and fail at runtime, so the static graders pass artifacts the skill forbids.

CI: Run skill smoke tests shows 94.7% against a 95% bar. The failing task (skill-bpmn-operate-diagnose-minimal-fault-triage) isn't in this PR, so this PR doesn't cause it. path-to-ga approval is expected to be pending, but those three tasks carry the Blocker, so they shouldn't be approved as they stand.

Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_jira_ticket.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_jira_create_issue.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_generic_dynamic_node.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_enum_flow.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/bpmn_check.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_jira_ticket.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/e2e/jira_create_issue/_setup/teardown_jira.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_channel_description.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_porting/parity-ledger.md Outdated

@rockymadden rockymadden left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🔴 Changes requested. Three live graders crash on every run, and the Jira cleanup can delete issues this run never created.

What

  • Ports 15 live-tier and 7 field-shape Maestro Flow evals to the BPMN suite, plus shared helpers (body_object/body_fields, find_bpmn_file, resolve_project(exclude_under=)) and the porting docs.
  • Graders import the agent's .bpmn, run uip maestro bpmn debug on alpha and grade variables, incidents and tenant state.

Overall findings

  • 🔴 critical: "every task green" isn't true at head. The cited runs predate #3469 (the fix it introduced was already in this branch's base). The three escalation graders (inline) can't pass now. Fix: re-dispatch all 22 on head and update the run ids in parity-ledger.md.
  • 🟠 major: the live sequence is duplicated, which contradicts the description. "Graders import these instead of carrying private copies" holds for the body helpers only. Solution init/import, sha256 pin, final-status/incident handling, _leaves, the haystack builders and COMPLETED_STATUSES are copied into about 12 graders (e.g. check_channel_description.py:121-262, check_dice_runs_simulated.py:129-264). Several bugs below exist only because the copies drifted. Fix: bpmn_live.import_and_debug() plus output_leaves(skip_inputs=).
  • 🟠 major: shared with #3476. body_object is byte-identical there, so the merge finding (inline, bpmn_check.py) has to land in both, or one PR reintroduces it.
  • 🟡 minor: the docs read like session notes, not repo docs. "One Sonnet subagent per task", dated "Where it stands" and "Resuming" steps, "Learned on CI run …". The ledger's planning tables are stale (inline). Fix: move the process narrative into the PR description and keep only what a future porter acts on.

Not caused by this PR: tags such as negative, uipath-salesforce, lifecycle:execute and missing mode:* are inherited from Flow and are off the tests/README.md vocabulary.

I read the code and ran nothing. The crash, the unpacks and the timeout arithmetic are confirmed by reading; runtime behaviour on alpha is not verified.

tl;dr

  • Three escalation graders crash, and the "all green" runs are stale.
  • Jira cleanup can delete other people's CE issues, and it reports failed deletes as OK.
  • Several graders accept more than their Flow originals did (enum, generic_dynamic_node, path_params, billing, testmanager).
  • body_object endorses a body shape the skill says fails at runtime.

Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_jira_ticket.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_orchestrator_paths.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_slack_alert.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_jira_create_issue.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_porting/LIVE-ADDENDUM.md Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_porting/LIVE-HANDOFF.md Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_porting/parity-ledger.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

Unresolved grader crashes, unsafe Jira cleanup, and false-positive grading paths can invalidate results or affect shared tenant data.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Ports 22 Maestro Flow evaluations to the BPMN suite, adding live tenant execution and Integration Service field-shape coverage.

Changes:

  • Adds 15 live-debug and 7 connector field-shape tasks.
  • Adds shared BPMN grading, artifact discovery, and request-body helpers.
  • Documents the live-port workflow and parity results.
File Description
_porting/​LIVE-ADDENDUM.md Defines live-port rules.
_porting/​LIVE-HANDOFF.md Records port status and handoff.
_porting/​parity-ledger.md Tracks task parity and CI runs.
_shared/​bpmn_check.py Extends artifact and body helpers.
_shared/​check_billing_invoice_lookup.py Grades live invoice lookup.
_shared/​check_channel_description.py Grades Slack description retrieval.
_shared/​check_complex_array.py Checks complex-array artifacts.
_shared/​check_databricks_query.py Checks JDBC query wiring.
_shared/​check_df_smoke_error.py Checks Data Fabric error shape.
_shared/​check_dice_runs_simulated.py Grades simulated dice execution.
_shared/​check_enum_flow.py Checks enum body fields.
_shared/​check_escalation_jira_ticket.py Grades Jira escalation execution.
_shared/​check_escalation_orchestrator_paths.py Grades escalation branches.
_shared/​check_escalation_slack_alert.py Grades Slack escalation alerts.
_shared/​check_generic_dynamic_node.py Grades dynamic connector execution.
_shared/​check_jira_create_issue.py Grades Jira issue creation.
_shared/​check_jira_get_issue.py Grades Jira issue retrieval.
_shared/​check_managed_http_fallback.py Checks HTTP fallback forms.
_shared/​check_multiselect.py Locates multiselect artifacts.
_shared/​check_paginated_reference_lookup.py Checks resolved paginated references.
_shared/​check_path_param_value.py Checks path-parameter values.
_shared/​check_searchable_joins.py Checks Salesforce connector presence.
_shared/​check_slack_http_fallback.py Grades Slack HTTP fallback.
_shared/​check_slack_multiselect.py Checks Slack recipient arrays.
_shared/​check_slack_weather_pipeline.py Grades the weather pipeline.
_shared/​check_testmanager_crud_grounded.py Checks Test Manager round trips.
_shared/​check_webhook_waitfor_parallel.py Checks webhook parallel topology.
_shared/​test_bpmn_check.py Tests shared BPMN helpers.
connector_features/​complex_array/​complex_array.yaml Adds complex-array task.
connector_features/​datafabric_connector/​smoke_error/​smoke_error.yaml Adds Data Fabric error task.
connector_features/​enum/​enum.yaml Adds enum task.
connector_features/​generic_dynamic_node/​generic_dynamic_node.yaml Adds dynamic-node task.
connector_features/​jdbc_databricks_query/​jdbc_databricks_query.yaml Adds JDBC task.
connector_features/​multiselect/​multiselect.yaml Adds multiselect task.
connector_features/​paginated_reference_lookup/​paginated_reference_lookup.yaml Adds pagination task.
connector_features/​path_params/​path_params.yaml Adds path-parameter task.
connector_features/​query_params/​query_params.yaml Adds query-parameter task.
connector_features/​searchable_joins/​searchable_joins.yaml Adds searchable-joins task.
connector_features/​slack_http_fallback/​slack_http_fallback.yaml Adds Slack fallback task.
connector_features/​testmanager_crud_grounded/​_setup/​seed.py Seeds Test Manager data.
connector_features/​testmanager_crud_grounded/​testmanager_crud_grounded.yaml Adds Test Manager CRUD task.
connector_trigger/​webhook_waitfor_parallel/​webhook_waitfor_parallel.yaml Adds webhook wait task.
e2e/​escalation_jira_ticket/​_setup/​jira_is.py Provides Jira operations.
e2e/​escalation_jira_ticket/​_setup/​seed.py Seeds escalation inputs.
e2e/​escalation_jira_ticket/​_setup/​teardown_jira.py Cleans escalation issues.
e2e/​escalation_jira_ticket/​escalation_jira_ticket.yaml Adds Jira escalation task.
e2e/​escalation_jira_ticket/​test_jira_is.py Tests Jira deletion behavior.
e2e/​escalation_orchestrator_paths/​_setup/​seed.py Seeds routing cases.
e2e/​escalation_orchestrator_paths/​escalation_orchestrator_paths.yaml Adds orchestrator-path task.
e2e/​escalation_slack_alert/​_setup/​seed.py Seeds Slack alert input.
e2e/​escalation_slack_alert/​escalation_slack_alert.yaml Adds Slack alert task.
e2e/​jira_create_issue/​_setup/​jira_is.py Provides Jira create helpers.
e2e/​jira_create_issue/​_setup/​seed_jira.py Seeds Jira creation data.
e2e/​jira_create_issue/​_setup/​teardown_jira.py Cleans created issues.
e2e/​jira_create_issue/​jira_create_issue.yaml Adds Jira creation task.
e2e/​jira_get_issue/​_setup/​jira_is.py Provides Jira retrieval helpers.
e2e/​jira_get_issue/​_setup/​seed_jira.py Creates a seed issue.
e2e/​jira_get_issue/​_setup/​teardown_jira.py Removes the seed issue.
e2e/​jira_get_issue/​jira_get_issue.yaml Adds Jira retrieval task.
interactive/​cli_dice_roller_simulated/​cli_dice_roller_simulated.yaml Adds interactive dice task.
multi_node/​billing_invoice_lookup/​billing_invoice_lookup.yaml Adds invoice lookup task.
multi_node/​slack_channel_description/​slack_channel_description.yaml Adds Slack description task.
multi_node/​slack_weather_pipeline/​slack_weather_pipeline.yaml Adds Slack/weather pipeline task.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_paginated_reference_lookup.py Outdated
rockymadden added a commit that referenced this pull request Sep 24, 2026
Several target="body" inputs do not merge at runtime (registry-workflow.md,
"Body shape"), so body_object now raises BodyShapeError on them, on a
whole-body expression, and on a non-object. Graders fail on a designated
node's bad body and record it per node where they loop. Same helper as
#3502.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@rockymadden rockymadden left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🟡 Commented. Every critical and major from the last round is fixed. What remains is minor, and the alpha re-run on these commits hasn't finished.

What changed since the last review (ee738ed1f..d0bd27cf2)

  • The three escalation graders unpack the three-part connector keys.
  • Jira cleanup: keys come only from the Create step, are recorded before any status check, and teardown reports failed deletes.
  • body_object accepts only one JSON object. #3476 got the same change.
  • About 11 graders use the shared helpers in bpmn_live.py (import_exact, fetch_variables, fetch_incidents, require_clean_run, output_leaves, input_echo_ids).
  • enum, path_params, generic_dynamic_node, billing, weather, databricks, smoke_error, multiselect and webhook are tightened back toward Flow.
  • testmanager_crud_grounded is skipped again, as in Flow.

✅ Fixed

All 32 findings from my last review, and 11 of Nikhil's 16 threads. They are resolved, each with a reply.

⏳ Still standing (existing threads, not repeated here)

  • 🟡 minor: tags outside the vocabulary. Inherited from Flow; needs a decision.
  • 🟡 minor: public_value_present in the orchestrator grader still matches echoed inputs, plus the dice, channel_description and df-spelling items in that thread.
  • 🟡 minor: the typed-draft preference in find_bpmn_file applies to every caller.
  • 🟡 minor: _fail wrappers are still duplicated.
  • 🟡 minor: paginated_reference_lookup only checks the first send node (Copilot thread).

Overall findings

  • 🟡 minor: nothing on this head is verified live yet. Eval run 36053143338 (21 tasks, alpha) is still running on faaf738e3. b587e0670 only changes how an empty body input reads. Until the run is green, the tightened graders could reject correct processes. Fix: wait for the run, then update the run ids in parity-ledger.md.
  • Checked: the path_params artifact from run 35790934047 puts the key in target="path" (issueId), so the narrowed path check matches what agents actually emit.

Local tests pass (776, Python 3.13). I read the code and ran nothing against the tenant.

tl;dr

  • The blockers are gone; about ten minor findings remain.
  • Approval waits on the alpha re-run.

Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_jira_create_issue.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/connector_features/path_params/path_params.yaml Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_df_smoke_error.py
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_escalation_jira_ticket.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_webhook_waitfor_parallel.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_jira_get_issue.py
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/bpmn_live.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_porting/LIVE-ADDENDUM.md Outdated

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of d0bd27cf2 — Approve. New findings: 0 Blocker / 0 Critical / 0 Major / 3 Minor / 1 Nit. This replaces my Request changes.

The Blocker and all five Majors are fixed. Each was re-checked on this head against the original failing fixtures:

  • [BLOCKER] 3-tuple unpack: fixed. All three escalation graders now unpack (key, path, _object_name) (jira_ticket:234, slack_alert:179, orchestrator_paths:165). resolve_contract returns a Contract on the Slack and Jira fixtures. With the uip stub, correct runs pass, and a wrong channel, missing text, wrong summary or literal severity fails.
  • [MAJOR] Jira keys journaled before confirmation: mostly fixed. A passing run journals only CE-100, since Globals are no longer scanned. A narrower failing-run case is left over (new Minor 1).
  • [MAJOR] testmanager self-report: fixed. It's back to skip: true, with a comment saying why.
  • [MAJOR] generic_dynamic_node stray []: fixed. Start-event {"meta":{"tags":[]}} now fails, and a declared records=[] passes.
  • [MAJOR] enum =js:'low': fixed. It now fails importance='high'.
  • [MAJOR] body_object merge: fixed. It raises BodyShapeError on several target="body" inputs, an expression body, invalid JSON or a non-object, matching the skill's one-body rule. A correct single-body artifact still passes, and an empty body reads as {}. Nothing on main calls body_object.
  • Minors resolved: dead TimeoutExpired recovery, teardown_jira envelope, copied agent: block, webhook fork-branch check, path_param, slack_channel_description timeout, ledger/handoff notes.

Gates: pytest tests/tasks/uipath-maestro-bpmn/ 776 passed / 1 skipped. check-task-host-paths and check-task-driver are OK. All required CI checks pass. The mutation tests of the new bpmn_live helpers (require_clean_run, output_leaves, input_echo_ids) behave correctly. path-to-ga approval needs an allowlisted approver, which is now reasonable since the Blocker is fixed.

Earlier minors that are still open (not blocking; the inline comments from my first review still apply):

  • Task timeouts: jira_create_issue and jira_get_issue are 1800 (formula: 2160), and jdbc_databricks_query is 1500 (formula: 1680).
  • Tag taxonomy: a missing mode:*, lifecycle:execute, double tier tags, and connector-key tags.
  • Input-echo gaps: check_escalation_orchestrator_paths.py:341 and check_channel_description.py:166 still read Globals with no echo skip.
  • Dice: INT_RE still reads 7.5 as 5.
  • find_bpmn_file: it still prefers a typed draft over the untyped deliverable.
  • Duplication: _fail, find_connector_nodes, normalized and CANDIDATE_TAGS are still copied across graders.
  • Nits: unused NS/HTTP_TYPE, and resolve_project without exclude_under.

Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_jira_create_issue.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/bpmn_live.py
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/check_df_smoke_error.py Outdated
Comment thread tests/tasks/uipath-maestro-bpmn/_shared/bpmn_live.py Outdated

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of a0c3e4641 — Approve. New findings: 0 Blocker / 0 Critical / 0 Major / 1 Minor / 0 Nit.

All four findings from my d0bd27cf2 review are fixed:

  • [MINOR] Nested Jira keys journaled: fixed. collect_candidate_keys now reads only the top-level response.key via connector_response_values, which is documented as "never same-named nested metadata". Probe: {"response":{"key":"CE-100","fields":{"parent":{"key":"CE-7"}},"self":"x CE-9"}} → ['CE-100'].
    • Intermediate aae6853c8 had regressed this further: it dropped the PASS-branch narrowing, so a passing run journaled and deleted a nested CE-7. Moving to connector_response_values in a0c3e4641 makes the narrowing unnecessary.
  • [MINOR] input_echo_ids start-only: fixed. Verbatim =vars.X copies are now followed transitively through every element's uipath:output, including output names. output_leaves skips echoed top-level output names too, and there's a new test for it (test_input_echo_ids_follows_copies_through_any_element).
  • [MINOR] df_smoke_error vs BATCH1-ADDENDUM: fixed. mentions_entity accepts the objectName, an exact value on any input (context_inputs is .//uipath:input, so path, query, body and untargeted all count), or an exact context-path segment. The docstring matches.
  • [NIT] Elements guard and regression test: fixed. There are isinstance(..., list) guards on Variables/Elements/Outputs. test_graders_unpack_the_full_connector_key walks the graders' AST for the connector-key unpack, so the 3-tuple Blocker can't come back unnoticed.

Also resolved since last round: the tag taxonomy (connector-key, negative, simulation and double-tier tags removed; mode:build added; lifecycle:generate), the typed-draft preference in find_bpmn_file (the rule is gone and ambiguity fails again), the 7 private _fail copies, the orchestrator start-event echo, dice 7.5, and the channel_description echo half.

Gates: pytest tests/tasks/uipath-maestro-bpmn/ 852 passed / 1 skipped, and check-task-host-paths is OK. Every required check passes. path-to-ga approval needs an allowlisted approver, and smoke is pending.

Still open, none of it blocking:

  • jira_create_issue and jira_get_issue task timeouts are 1800 and jdbc_databricks_query is 1500, all below the LIVE-HANDOFF formula.
  • channel_description counts any Slack node.
  • The weather null-readback fallback has no echo skip.
  • jira_get still reads root non-input Globals.
  • billing uses a substring match and managed_http accepts the key anywhere (both inherited from Flow).
  • Remaining duplication: find_connector_nodes, normalized, CANDIDATE_TAGS.
  • Nits: unused NS/HTTP_TYPE, and resolve_project without exclude_under.

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of 995cfe4a9 — Approve. Tally: 0 Blocker / 0 Critical / 0 Major / 0 Minor / 0 Nit.

This fixes a false failure. The task contract sets caseKey = the incoming correlationId (escalation_orchestrator_paths.yaml:106), so excluding input echoes for caseKey failed every correct run (eval run 36056004092). PASSTHROUGH_FIELDS = {"caseKey"} drops the echo exclusion for that field only. The classifier exclusion stays, and the other classification fields (escalationPath, severity, engineeringNeeded, responseMode) still skip echoes. The docstring's assertion map is updated to match.

Everything else is unchanged since my approval of a0c3e4641, and that approval's open minors (dice 5.0, timeouts, and the inherited loose graders) still apply.

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of 0e48eec6d — Approve. Tally: 0 Blocker / 0 Critical / 0 Major / 1 Minor / 0 Nit.

This commit only touches the docs: _porting/parity-ledger.md now lists the post-review eval runs (36053143338, 36056004092, 36058708886) as each row's final result and keeps the earlier result in the notes. That's the right way to keep the ledger, and it's honest. It records two tasks that went from PASS to FAIL after the review fixes: escalation_slack_alert, where the Slack step faulted at runtime in both runs, and paginated_reference_lookup, where the agent never resolved the channel id.

Both failures are attributed to agent or runtime behaviour, not the graders. That fits what I verified last round: the escalation graders pass correct stubbed runs and fail wrong ones, and paginated check_wired still rejects wrong channels. One of the two carries a gate tag, so there's one inline Minor. No code changed, and my approval of 995cfe4a9 otherwise stands.

Comment thread tests/tasks/uipath-maestro-bpmn/_porting/parity-ledger.md Outdated

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of 739f53975 — Approve. Tally: 0 Blocker / 0 Critical / 0 Major / 0 Minor / 0 Nit.

Both of my last open items are addressed:

  • [MINOR] dice 5.0: fixed. find_int_in_range now accepts a whole-valued float (after the bool check, as int(leaf)). The new test_check_dice_runs_simulated.py pins the boundaries: 5.0/5/"5" pass, and 7.5, 0, 7, 6.5 and True fail. I ran it and it passes.
  • [MINOR] escalation_slack_alert path-to-ga: resolved as option (a). The ledger row now records per-run incident evidence showing the grader judged correctly. Run 36053143338 had no folderKey input on the Slack node (102010, "Value cannot be null (Parameter 'Folder')"). Run 36056004092 had the binding but omitted the required send_as (102003, IS 400). Both are agent authoring faults. The row also names the skill gap (Slack send node: folderKey binding and required send_as), which is worth a follow-up skill issue.

The rest of the diff since my last review is main merged in.

DevMomo and others added 15 commits September 25, 2026 01:34
Re-adds the live-tier ports removed from test/bpmn-port-connectors so the
work continues here: Jira get/create/lifecycle/search, escalation jira/slack/
orchestrator_paths, bellevue_weather, slack_channel_description,
slack_weather_pipeline, billing_invoice_lookup, billing_discrepancy_detector,
generic_dynamic_node, jdbc_databricks_query, slack_http_fallback,
testmanager_crud_grounded, Data Fabric smoke_error, webhook_waitfor_parallel.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Adds the porting brief, connector and live addenda, normalization contract,
parity ledger and a handoff document describing what is done, what remains
and how each port is made, so the live-tier work can resume on this branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Faithful port of Flow interactive/bellevue_weather_simulated: same simulation persona and constraints, same five criteria and weights. Live grader runs the ephemeral solution + bpmn debug sequence, so that criterion's timeout is 1050 and task_timeout is raised to cover turns plus grading; every other run_limit is Flow's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Faithful port of Flow interactive/cli_dice_roller_simulated: same simulation, criteria, weights and criterion timeouts. Only task_timeout grows (2400 to 2800) so the multi-run live check fits under the single turns-plus-grading watchdog.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
… user)

Faithful port of Flow interactive/slack_channel_description_simulated with all five criteria kept (validate, advisory debug command, live grader, static channel regex, name advisory). Live criterion timeout sized to the BPMN CLI sequence (1050); everything else is Flow's verbatim.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Pilot for the twelve Integration Service field-shape evals. Same prompt, criteria and weights as Flow connector_features/ceql_where; the grader reads the CEQL where clause off the connector node's query inputs in either curated or generic form. Verdict for the other eleven is recorded in _porting/LIVE-HANDOFF.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Batch 10 (run 35538279757) failed four ports on the grader, not the agent:
identical .bpmn copies read as ambiguity, a live grader reading its own
ephemeral import as a second project, wait-for-event classified by BPMN tag
instead of the Intsvc.WaitForEvent wrapper, and HttpExecution-only where the
skill also teaches Intsvc.UnifiedHttpRequest. Slack's generic resource for
emoji.list is emoji_list_GET, so the fallback grader accepts both spellings.
All four replay green on the downloaded CI artifacts. Ledger and handoff
record the batch, including the two real failures left for iteration 2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
The two remaining Jira live graders raised FileNotFoundError when pre_run's seed did not run; jira_get_issue already reports it as a FAIL line.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…ity ledger

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…d batch 11

registry-workflow.md lists Intsvc.UnifiedHttpRequest beside HttpExecution for
the managed HTTP sendTask and the eval agent emits either, so the weather,
pipeline, fallback and billing graders classify by both. Ledger and handoff
record run 35783045540: four green, one infra 504, one harness stop, three
agent failures at Flow-level flakiness, billing_discrepancy_detector parked.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…ord batch 12

The agent left a bpmn-init draft under <Name>Solution/ beside its real solution
(run 35785806030, slack_channel_description_simulated); both had project.uiproj.
find_bpmn_file now drops candidates that carry no registry-typed node before
declaring ambiguity. Ledger and handoff record batch 12: two green, two parked
with runtime evidence, one grader defect fixed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Faithful ports of three Integration Service field-shape evals: same criteria, weights and run limits. A shared check_managed_http_fallback grader accepts the native connector node or the managed HTTP fallback (HttpExecution, UnifiedHttpRequest, or the generic uipath-uipath-http connector), mirroring Flow's acceptance; the Jira path parameter and the Gmail enum body are read from inputs in either registry body form.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Same Slack group-DM scenario and criteria as Flow. The shared users-multiselect grader ports Flow's parse_users and is_users_key tolerance verbatim and reads the request body in both registry forms.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…nd searchable_joins evals

Criteria one-for-one with Flow, including the two advisory CLI-discovery checks on the paged Slack channel listing. Connector presence is graded on the Intsvc.ActivityExecution connectorKey; the resolved channel id is searched across the send-message node's inputs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
DevMomo and others added 16 commits September 25, 2026 01:34
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…tform gap closes

Each carries its CI evidence in a comment. Criteria stay one-for-one with
Flow so the tasks resume unchanged once the gap is fixed; skipping keeps
known failures out of the nightly and smoke gates, as the structural PR's
review asked for its own parked tasks.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
They never went green in CI (skill or platform gaps, evidence in each YAML)
and were carried as skip: true. A PR of passing tasks should not ship eight
skipped ones; they live on a stacked branch until their gap closes. The
ledger is collapsed to one final row per task and points at that branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…n_check

body_object/body_fields come over verbatim from #3476 so the two branches
merge cleanly; eight graders drop their private copies of context_value,
context_inputs, has_type, all_node_values and body readers in favour of the
shared ones. Assertions unchanged; every touched grader replays green on its
passing CI artifact.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
Answer the GUESS blocks CI has since settled (connector-mode HTTP is
Intsvc.ActivityExecution; the Slack fallback uses emoji_list_GET; the
Slack send objectName is send_message_to_channel_v2), wrap docstring and
code lines over 120 characters, and cut the handoff to status, methodology,
recipe, runtime facts, skill findings and resume steps; batch narratives
live in the ledger.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
- Escalation graders unpack index_runtime_connectors' 3-tuple keys.
- Jira create keys come only from the Create node's outputs in the seed
  project and are journaled before any status check; teardown reports
  failed deletes and keeps going; a debug timeout still journals its key.
- body_object reads the one target="body" object the runtime consumes and
  raises BodyShapeError on several inputs or a non-object.
- enum, path_params, generic_dynamic_node, billing, weather, databricks,
  df smoke_error, multiselect and webhook graders no longer accept what
  their Flow originals rejected.
- The live sequence moves into bpmn_live (import_exact, fetch_variables,
  fetch_incidents, require_clean_run, output_leaves, input_echo_ids).
- testmanager_crud_grounded is skipped again, as in Flow.
- slack_channel_description task_timeout follows the stated formula.
- Porting docs drop session notes and stale planning claims.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Tags follow the tests/README.md vocabulary: one tier, mode and lifecycle
  per task, the flat connector marker, outcome-graded on live graders.
- find_bpmn_file fails on ambiguity again; only the parked task needed
  the typed-draft preference.
- Output checks skip input echoes (orchestrator, channel description);
  dice reads whole integers only; df smoke_error accepts the context path
  and plain curated names; paginated and webhook check every candidate.
- Jira graders keep every key the Create node reported for teardown, and
  the escalation grader matches the Create op on objectName too.
- Graders use bpmn_check.fail and output_leaves(elements=) instead of
  private copies; LIVE_OVERHEAD_SECONDS is gone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Jira create journals only the Create node's top-level response.key, so
  a nested foreign key is never deleted.
- input_echo_ids follows verbatim copies through any element, and
  output_leaves drops the copied output names; both tolerate a malformed
  Variables/Elements shape.
- df smoke_error accepts the entity as an exact value on any input.
- Regression tests pin index_runtime_connectors' key shape and fail any
  grader that unpacks it short.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The contract sets caseKey to the correlationId input, so skipping input
echoes for it failed every correct run (eval run 36056004092).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…lack_alert faulted

Jint serialises numbers as doubles, so a correct dice roll can read back as
5.0 from variables-all; find_int_in_range now takes it (7.5, 0, 7 and
booleans still fail), with a unit test. The ledger row for
escalation_slack_alert now carries the per-run incident evidence: no
folderKey input in run 36053143338, missing required send_as in run
36056004092. The grader judged both correctly.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
…oxes

Main's task-driver gate (2026-09-23) forbids a template_sources entry for
skills/uipath-maestro-bpmn: the skill arrives through agent.plugins, which is
what selects the generation under test, and a cwd copy hands a preview-arm
run the shipped v1 guidance. The 22 ported tasks drop the entry; sandbox
blocks that only carried it are removed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162cmh6J5y8h6rZtzwyT37S
@DevMomo
DevMomo force-pushed the test/bpmn-port-live branch from 739f539 to 9b7f450 Compare September 25, 2026 08:35

@nikhil-maryala nikhil-maryala left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Re-review of 9b7f45096 — Approve. Tally: 0 Blocker / 0 Critical / 0 Major / 0 Minor / 0 Nit.

The branch was rebased onto main. The PR's file set is unchanged, and the only content change is the new commit, which drops the template_dir entry that staged skills/uipath-maestro-bpmn into all 22 ported tasks' sandboxes.

  • The removal is exactly those entries. The removed lines are 22 × - type: template_dir plus 22 × path: …/skills/uipath-maestro-bpmn. In slack_weather_pipeline.yaml a blank line also goes, and the 6-level path belongs to the nested smoke_error.yaml. No criteria, prompts, weights or timeouts changed.
  • The remaining template_sources are all _setup mounts, so seed and teardown scripts still stage. No PR task references skills/uipath-maestro-bpmn any more.
  • Gates on this head:
    • check-task-driver.py tests/tasks tests/experiments → "OK — no task stages a skill directory via template_sources", which is main's new gate this commit satisfies.
    • check-task-host-paths --base-ref origin/main → OK.
    • pytest tests/tasks/uipath-maestro-bpmn/ → 853 passed / 1 skipped.

The rationale holds: the skill under test arrives through agent.plugins, and a cwd copy would hand a preview-arm run the shipped v1 guidance. The ledger's post-review runs were taken with the staged copy present, so one dispatch on this head would confirm nothing depended on it. That's optional.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants