fix(uipath-maestro-flow): assert one project after scaffold, and stop the task demanding two - #3091
Conversation
|
Claude finished @rockymadden's task in 2m 43s —— View job PR Review: fix(uipath-maestro-flow): assert one project after scaffold
SummaryAdds a post-scaffold uniqueness assertion (Step 2c in greenfield.md) that catches stray Change-by-Change Review1.
|
| Area | Status | Notes |
|---|---|---|
| Frontmatter | OK | No frontmatter changes |
| E2E Tests | OK | Existing task updated; criteria and glob still match canonical path |
| Skill Body | OK | No SKILL.md changes |
| References & Assets | OK | greenfield.md change is inside the correct flavor block; all links resolve |
| Repo Hygiene | OK | No secrets, no cross-skill refs, changes scoped to one skill |
Issues for Manual Review
- The
cdpersistence contradiction (line 135 vs. 201 in greenfield.md) is a clarity/consistency nit, not a functional blocker — thefindcheck and "delete the stray" instruction are correct regardless of what caused the duplicate. - The
studiowebflavor has noproject-creationoverride, so the canonical change applies cleanly — but confirm thefindcommand works in Studio Web's sandbox if that environment restricts filesystem access.
Conclusion
Clean PR. The test task fix is correct and the new scaffold-uniqueness assertion operationalizes a rule (#6) that was previously stated but not checkable. One low-severity wording inconsistency about cd persistence — worth a quick fix but not blocking.
|
Claude finished @rockymadden's task in 3m 1s —— View job Coder-eval task lint (advisory)1 task YAML changed; verdicts: 0 Critical, 0 High, 1 Medium, 0 Low, 0 OK. Rubric: .claude/commands/lint-task.md. This check is advisory and never blocks merge. Evidence of passing run❌ High — PR body does not claim the modified task has been run through coder-eval and passed. "775 pytest pass" covers the unit/integration test suite, not a coder-eval execution of Per-task lint
|
… the task demanding two
skill-flow-bindings-no-duplicates failed on 2026-09-04 with all four
structural criteria reporting the same thing:
FAIL: Multiple files found for '**/BindingsRegression*.flow':
['BindingsRegression/BindingsRegression/BindingsRegression.flow',
'BindingsRegression/flow_files/BindingsRegression.flow']
The regression it exists to catch — no empty-keyed Connection bindings, no
duplicate (name, propertyAttribute) rows — passed. The bindings were
clean. It failed on housekeeping.
Two causes, one on each side.
The skill's Step 2c self-check confirms the flow file exists and never
confirms it is the only one. `cd` does not persist between tool calls, so
a later `uip maestro flow init` outside the solution auto-scaffolds
`<Project>Solution/` beside the real project rather than failing, and
nothing downstream objects: validate passes on either file, and format and
node configure operate on whichever path they are handed. The duplicate
surfaces only when something globs. Step 2c now asserts exactly one
project.uiproj and one .flow, and says to delete the stray rather than
`mv` it into place — moving the auto-created project leaves the original
behind, which is exactly how this run ended up with two.
The task also asked for `BindingsRegression/flow_files/BindingsRegression.flow`
with `BindingsRegression/project.uiproj`, which is not the canonical
`<Solution>/<Project>/<Project>.flow` and put the project file at the
solution root. `flow validate` said so at the time ("does not match
canonical", "not registered as a project of solution"). The agent
scaffolded correctly, then hand-moved to satisfy the prompt — the one
thing Step 2c tells it not to do. The layout was never load-bearing for a
bindings regression, so the prompt now asks for the canonical one. The
checker glob matches it unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
d2832e5 to
74c6d53
Compare
Resolves one conflict for #2756, from main #3091 (assert one project after scaffold, and stop the task demanding two) in bindings/no_duplicate_connection_bindings.yaml. Main replaced the `BindingsRegression/flow_files/...` layout demand with "in a solution of the same name, so the layout is the canonical `BindingsRegression/BindingsRegression/BindingsRegression.flow`". The campaign had already removed the layout demand entirely (loop-neutral prompt). Result keeps the campaign sentence and adds "inside a solution of the same name" without the literal path, which the SDK arm does not produce; the task is structure-graded through a `**/BindingsRegression*.flow` glob that matches either layout. #3091's greenfield.md Step 2c change auto-merged. Verified: uipath-maestro-flow 1159 passed, uipath-maestro-case 124 passed / 14 skipped, tests/scripts 109 passed / 26 skipped, uipath-maestro-bpmn 12 passed; scripts/check-cli-verbs.py OK. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JSsrfZwCh4tJeqpzjMeixP
Stacked on #3090 → #3088. Retarget as those land.
Problem
skill-flow-bindings-no-duplicatesfailed on 2026-09-04 with all four structural criteria reporting the same thing:The regression it exists to catch passed. No empty-keyed Connection bindings, no duplicate
(name, propertyAttribute)rows,resourceKeymatching the default. The bindings were clean. It failed on housekeeping, and the real result was invisible behind it.Two causes, one on each side.
1. The skill checks the flow exists, never that it is the only one
cddoes not persist between tool calls, so a lateruip maestro flow initissued outside the solution auto-scaffolds<Project>Solution/beside the real project rather than failing. Nothing downstream objects —flow validatepasses on either file,formatandnode configureoperate on whichever path they are handed. The duplicate surfaces only when something globs and resolves to two.Step 2c now asserts it:
and says to delete the stray rather than
mvit into place. Moving the auto-created project leaves the original where it was, which is exactly how this run ended up with two files that both validate.SKILL.mdrule #6 already said "finish with oneproject.uiproj; remove strays" — Step 2c is where that becomes checkable.2. The task asked for a layout the skill forbids
The prompt demanded:
That is not the canonical
<Solution>/<Project>/<Project>.flow, and it putsproject.uiprojat the solution root instead of in the project directory.flow validatesaid so during the run — "does not match canonical" and "not registered as a project of solution".So the agent scaffolded correctly, then hand-moved to satisfy the prompt, which is the one thing Step 2c tells it not to do. The task set up the failure the skill then got blamed for.
The layout was never load-bearing for a bindings regression, so the prompt now asks for the canonical one. The checker glob
**/BindingsRegression*.flowmatches it unchanged.Verification
main; both flavors compose.Note
This is the one of the eight nightly failures where the skill was already right and the eval was wrong. Worth flagging as a pattern: a task that asks for something the skill forbids will produce a failure that reads as a skill defect.
🤖 Generated with Claude Code