Skip to content

test(uipath-test): Playwright integration and e2e tasks (hold until C… - #2401

Draft
addyGarg wants to merge 3 commits into
mainfrom
test/tm-playwright-integration-e2e
Draft

test(uipath-test): Playwright integration and e2e tasks (hold until C…#2401
addyGarg wants to merge 3 commits into
mainfrom
test/tm-playwright-integration-e2e

Conversation

@addyGarg

@addyGarg addyGarg commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

What

The Playwright integration and e2e eval tasks for the uipath-test skill, split out of #2322 so that PR can merge now while these wait for the capability they exercise.

Task Tier Covers Needs serverless execution?
playwright_ingest_and_select_integration.yaml integration pack → upload → ingestion → label-filled test set → single-Playwright-package check No — stops before running
playwright_first_mile_e2e.yaml e2e the same flow through a chromium-only run to real results Yes

Both grade saved artifacts (context.json, report.json) rather than live tenant state, so the agent can delete the project it created without breaking the assertions — and a stale execution from an earlier run cannot satisfy an outcome check. Both carry a teardown criterion, so scheduled runs leave nothing behind.

Why separate

The eval runner installs @uipath/cli@latest before any task runs, and tasks are forbidden from pinning a version (tests/README.md). Until the external-package commands reach npm latest, these can only fail — and a scheduled task that always fails is noise that also desensitises people to real failures. So the skill and its passing smoke task ship in #2322; these wait here.

Do not merge until

  1. The commands are on npm latest — check npm view @uipath/cli version reports 1.200.x. The 1.200 cut is not sufficient: stable promotion is a separate manual dispatch.
  2. UiPath/cli#3336 is in that released line — the integration task reads playwright-context output, which a stable CLI only registers once that fix ships.
  3. The eval tenant has Test Manager Playwright support enabled (both tasks), and working serverless Playwright execution (e2e task only).

Then run each once by hand and merge on green:

SKILLS_REPO_PATH=$(cd .. && pwd) .venv/bin/coder-eval run \
  tasks/uipath-test/playwright_ingest_and_select_integration.yaml -e experiments/default.yaml

Validation

The flows these tasks assert are proven manually: on a local serverless stack and on alpha testmanagerdev/DevTest, a context-free agent using only the skill reached 2/2 passed on a chromium-only run, including a fix-and-republish loop. What is unproven is these YAMLs executing under coder-eval on a capable tenant — hence the manual run in the merge checklist above.

The e2e task is a candidate for the path-to-ga tag (must-pass, currently blocked); it is left off so this PR stays mergeable on demand, since that tag needs an allowlisted approval on the head commit.

Related

addyGarg and others added 3 commits July 31, 2026 02:32
…LI ships)

Two tasks for the Playwright first mile, deliberately kept out of the
skill PR because they cannot pass until the external-package commands
reach npm `latest` (the eval runner installs @uipath/cli@latest):

- ingest-and-select (integration): pack, upload, ingestion, label fill,
  and the single-package check — stops before execution, so it needs
  only a Playwright-enabled tenant, no serverless runtime.
- first-mile (e2e): the same flow through a chromium-only run to real
  results.

Both grade saved artifacts rather than tenant state, so the agent can
delete the project it created without breaking the assertions, and both
carry a teardown criterion so runs leave nothing behind.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0138XHhf1Jg5ozDUdbpX19Zr
Two clever regex lookaheads become plain positive+negative criterion
pairs, which is how the repo expresses "must not" and reads without
decoding: the unfiltered-poll check and the chromium-only check each
split into a command_executed plus a command_not_executed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0138XHhf1Jg5ozDUdbpX19Zr
…ndency

The IsPlaywright check matched a bare "true" anywhere in the file, so an
unrelated boolean could satisfy it; it now matches the field. Header
records that the assertion reads playwright-context output, which needs
UiPath/cli#3336 in the released line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0138XHhf1Jg5ozDUdbpX19Zr
@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR Review: test(uipath-test) Playwright integration and e2e tasks

  • Gather context — read review criteria, project conventions, and diff
  • Read full task YAML files
  • Validate against test-writing rules and task conventions
  • Check for anti-patterns and issues
  • Post review findings

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Claude finished @addyGarg's task in 3m 37s —— View job


Coder-eval task lint (advisory)

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

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

Evidence of passing run

High — PR body explicitly states these tasks "cannot pass until the external-package commands reach npm latest". No passing-run claim is present. Once the CLI ships the required verbs, please edit the PR description to add a line like:

Ran skill-test-playwright-first-mile-e2e and skill-test-playwright-ingest-and-select locally and they passed.

Per-task lint

tests/tasks/uipath-test/playwright_first_mile_e2e.yaml — verdict: Medium

Issues:

  • [Medium] Meaningful coverage (lines 53–57): command_not_executed pattern --playwright-projects\s+\S+\s+\S is over-broad — it matches any token after the project value, including legitimate flags like --output json. If the agent runs uip tm testsets run --playwright-projects chromium --output json, the \S matches --output and the criterion incorrectly fails. This penalises correct agents that don't put --playwright-projects last.

Suggested fixes:

  • Replace --playwright-projects\s+\S+\s+\S with a pattern that specifically matches a second project name rather than any subsequent token, e.g. --playwright-projects\s+\S+\s+[^-]\S* (second token must not start with -, so flags are excluded) or list the concrete unwanted case: --playwright-projects\s+chromium\s+firefox|--playwright-projects\s+firefox.

tests/tasks/uipath-test/playwright_ingest_and_select_integration.yaml — verdict: OK

Within-PR duplicates

No duplicate clusters detected. The two tasks share the pack → upload → ingest → label-fill scaffold but exercise materially different scopes: ingest_and_select stops before execution (integration tier), first_mile_e2e continues through a chromium-only run to real results and grades on pass/fail counts (e2e tier).

Conclusion

⚠ 1 task has a medium-severity issue (over-broad command_not_executed regex). Evidence of passing run is absent (acknowledged by author — tasks are on hold until the CLI ships). Advisory only — not blocking merge.


@addyGarg
addyGarg marked this pull request as draft July 30, 2026 23:32
@addyGarg

Copy link
Copy Markdown
Contributor Author

Split out of #2322 (skill content + the zero-prerequisite smoke task). Also depends on UiPath/cli#3336 — the integration task reads playwright-context output, which a stable CLI only registers once that fix is in the released line.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1ff7a879cb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


- type: run_command
description: "Both tests passed — the run reached real results"
command: "grep -qE '\"Passed\":[[:space:]]*2' report.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Bind the report assertion to the actual execution

If the upload, run, wait, or report retrieval fails, an agent can still write {"Passed":2,"Failed":0} to report.json; the other criteria only prove that commands were attempted, while this grep accepts the fabricated file. The e2e task can therefore report success without reaching real Test Manager results. Verify the execution through a deterministic checker or require and validate the successful uip tm report get output instead.

AGENTS.md reference: AGENTS.md:L40-L42

Useful? React with 👍 / 👎.

Comment on lines +20 to +23
projects "chromium" and "firefox", then get it running from the Test Manager
project PWE2E (create it if needed) on chromium only — not firefox.
Save the final test report to ./report.json, then delete the project so my
tenant stays clean.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Use a per-run project key before deleting the project

When this task overlaps another run or PWE2E remains after an earlier failure, the prompt reuses that fixed project and then requires its deletion. The workflow-dispatch runner executes tasks with -j 4 in .github/workflows/run-coder-eval.yml, so one run can delete the project while another is ingesting or executing tests, and it can delete a project it did not create. Seed a unique project key per run and clean up only that owned project; the companion PWINT task needs the same isolation.

Useful? React with 👍 / 👎.

- type: command_not_executed
description: "Did not widen the run to a second Playwright project"
tool_name: "Bash"
command_pattern: '--playwright-projects\s+\S+\s+\S'

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Stop treating trailing flags as extra Playwright projects

For a correct invocation such as uip tm testsets run ... --playwright-projects chromium --output json, this regex matches chromium --output as two project tokens and fails the negative criterion. Since the skill requires --output json on every uip command, the natural conforming command order produces a false negative; constrain the match to actual project arguments rather than arbitrary subsequent tokens.

Useful? React with 👍 / 👎.


- type: run_command
description: "Test set resolves to a single Playwright package, with its projects listed"
command: "grep -qiE '\"IsPlaywright\"[^,}]*true' context.json && grep -qi 'chromium' context.json"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Verify context through the Playwright-context command

If ingestion or context lookup fails, the agent can create a local file containing {"IsPlaywright":true,"project":"chromium"} and satisfy this primary assertion; no criterion even requires testsets playwright-context to be executed successfully. Consequently the integration task can pass without proving that the test set resolves to a Playwright package. Run the lookup in a deterministic checker or otherwise bind context.json to successful CLI output.

AGENTS.md reference: AGENTS.md:L40-L42

Useful? React with 👍 / 👎.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant