test(process-mining): cover model editing, publish, query info and source templates - #2547
test(process-mining): cover model editing, publish, query info and source templates#2547Cellcote wants to merge 1 commit into
Conversation
…urce templates Coverage audit of the process-mining eval set found 20 of 44 `uip pm` verbs referenced by any criterion, and three Critical Rules with no task at all. These five tasks close the largest gaps. - model_fields_data_kind (integration) — Rule 10 and DNA-46960, which had ZERO coverage despite `references/model-editing.md` being a full reference and the duration lockout being named in the frontmatter. Grades that the agent reconciles the comparison in the same edit rather than only flipping the kind, which is how the customer app got into the state where no dashboard opens. - data_model_inspect_smoke (smoke) — `apps data-model get`. Pins the structural vs semantic namespace split; foreign keys live only in the structural model. This is the distinction whose confusion produced the `apps model add-table` grader bug. - query_info_percentile (smoke) — Rule 7's mechanism rather than its sugar. `percentile` takes `--field <id>` with no shorthand, so field-id discovery via `query info` cannot be skipped. Also pins the 0..1 domain of `--values`. - publish_promote_to_dashboards (integration) — Rule 8 and the publish loop. `apps publish` promotes the definition, not the rows, so `IngestionNeeded` demands a re-ingest; and `query --stage published` is a documented dead end. First task to assert `--wait` (Rule 6), which nothing covered. - source_template_selection (integration) — Rule 2's untested half. A real multi-table SAP extract must pick `uipath.p2p.sap`; reaching for `uipath.custom` discards the template's extraction layer. Also pins that a source template's expected input tables come from the generated transformations, not the model object. Verb coverage 20/44 → 31/44. New verbs exercised: `app-types get`, `apps data-model get`, `apps model fields list`, `apps model fields set`, `apps publish`, `query info`, `query percentile`. Tasks inherit `agent:` and `sandbox:` from the experiment and follow the command-construction pattern the existing process-mining tasks use — no live tenant, graded on which commands the agent chooses. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Claude finished @Cellcote's task in 3m 33s —— View job Coder-eval task lint (advisory)
Coder-eval task lint (advisory)5 task YAMLs changed; verdict counts: 0 Critical, 0 High, 0 Medium, 0 Low, 5 OK. Rubric: .claude/commands/lint-task.md. This check is advisory and never blocks merge. Evidence of passing run❌ High — PR body explicitly states: "Passing-run claim: these are new tasks and have not been run end-to-end against a tenant — I do not have one wired up here." The author has done thorough static validation (parse, tags, verb reachability) and is transparent about the gap, but the convention requires a passing-run claim. Please edit the PR description to add a claim once someone with tenant access runs the set, e.g.: Per-task lint
|
| Task | Primary verbs | Skill rule |
|---|---|---|
data_model_inspect_smoke |
apps data-model get |
structural vs. semantic namespace |
model_fields_data_kind |
apps model fields list, fields set |
Rule 10 (DNA-46960) |
publish_promote_to_dashboards |
apps publish, ingestions create --wait |
Rules 6, 8 |
query_info_percentile |
query info, query percentile |
Rule 7 mechanism |
source_template_selection |
app-types list/get, apps create, transformations list/get |
Rule 2 |
Conclusion
✅ All 5 changed tasks pass the rubric — well-scoped, goal-oriented prompts, strong criteria with both positive and negative assertions, no self-report anti-patterns, no gameability concerns, no duplicates.
⚠ Evidence of passing run is missing (High, advisory). The author is transparent about this and explicitly asks for someone with tenant access to run the set before merge. Static validation (parse, tags, verb reachability) is confirmed clean.
Note: Could not run scripts/check-cli-verbs.py due to sandbox permissions. PR body reports 0 High, 0 Medium on the new tasks from the patched checker.
|
Claude finished @Cellcote's task in 3m 29s —— View job PR Review: test(process-mining) — model editing, publish, query info, source templates
SummaryAdds five new coder_eval task YAMLs for the Change-by-Change Review1.
|
| Area | Status | Notes |
|---|---|---|
| Frontmatter | N/A | Task YAMLs, not skill definitions |
| E2E Tests | OK | 3 smoke + 1 e2e already existed; this adds 2 smoke + 3 integration — good coverage expansion |
| Skill Body | N/A | No skill files changed |
| References & Assets | N/A | No references or assets changed |
| Repo Hygiene | OK | CODEOWNERS already covers tests/tasks/uipath-process-mining/. No secrets, no cross-skill refs, no binary files. Changes are scoped to the process-mining test directory |
Issues for Manual Review
- Verb and flag accuracy: The graded CLI verbs (
apps model fields set --kind,apps publish,query percentile --field,query info,apps data-model get,transformations list/get,app-types list/get) and their flags are taken from the skill's own references. A domain expert should verify these match the actual CLI behavior, especially the--expressionflag onfields setand the--valuesfraction semantics onquery percentile. - End-to-end run: As the author notes, weights and criteria may need tuning after the first live run.
model_fields_data_kindis the most likely candidate for adjustment given its multi-step grading (kind flip + expression rewrite + file content check). [\s\S]*bridging in patterns: Severalcommand_patternregexes use[\s\S]*to bridge between the verb and a flag (e.g., line 66 inpublish_promote_to_dashboards.yaml, line 72 insource_template_selection.yaml). This works correctly if coder_eval matches each command invocation individually. If the pattern were ever matched against a concatenated transcript, it could false-positive across separate commands. The existing process-mining tasks use the same pattern, so this is validated, but worth noting for future maintainers.
Conclusion
This is a well-structured, well-documented PR that fills significant coverage gaps in the process-mining eval set (20/44 → 31/44 CLI verbs covered). The tasks are internally consistent, follow the established command-construction pattern, and the weight/threshold choices align with repo guidance. The only actionable item is the missing passing-run claim, which the author has flagged transparently. Approve once someone with tenant access confirms a first run (or accepts the static-validation-only claim for merge).
Passing-run claim — all five tasks green on first runRan locally with Full process-mining set in the same run: 10/11 SUCCESS. The one failure, This replaces the "not run end-to-end" caveat in the description above. I expected Caveats on how much this proves
Static checks, unchanged
|
Part 3 of the process-mining eval-set work, after #2545 (grader fix) and #2546
(linter fix). Independent of both — merges in any order.
Why
Auditing the process-mining eval set while chasing the flaky nightly turned up
two things beyond the grader bug:
uip pmverbs were referenced by any criterion.the skill's own frontmatter.
--waiton async commandsapps publishuntestedapps model fields/ DNA-46960Rule 10 was the worst:
references/model-editing.mdis a full reference, thenumeric→duration lockout is called out in both
descriptionandwhen_to_use,and nothing exercised it.
The five tasks
model_fields_data_kind— integrationRule 10 and the DNA-46960 footgun. A throughput field is
numeric; a metriccompares it to a numeric constant; the user wants
duration.Flipping the kind alone is the bug — that is exactly how the customer app
reached the state where no dashboard opens ("Must be duration, not numeric, for
the 'lt' input"). So the task grades
fields set --kind durationand afollow-up
--expressionedit, plus the pushed expression's constant viafile_containson a fixed path (the patternadd_table_queryablealready usesfor
table.json). Negatives cover kinds outside the settable enum and thestructural
id/refkinds.data_model_inspect_smoke— smokeapps data-model get. Foreign keys live only in the structural model, notthe semantic one — the exact namespace confusion that produced the
apps model add-tablegrader bug fixed in #2545. Pins the read half of theadd-table workflow;
add_table_queryablepins the write. Negatives guardagainst mutating on a read-only request.
query_info_percentile— smokeRule 7's mechanism rather than its sugar.
query_group_by_sugarcovers thepath where
--group-by/--metricresolves ids for the agent;percentilehas nosuch shorthand — it takes
--field <id>, so discovery viaquery infocannot beskipped without hitting
UserError_FieldNotFound. Also pins that--valuesarefractions in 0..1, and that
--stage publishedis a dead end.publish_promote_to_dashboards— integrationRule 8 and the publish loop.
apps publishpromotes the definition, not therows: the result carries
IngestionNeeded: trueand published data is staleuntil a re-ingest. Also the first task anywhere to assert
--wait(Rule 6), andit pins the documented CLI caveat that
query --stage publishedis unreachable(
UserError_InvalidOrNoIngestion) — an agent that "verifies" the promotion thatway has followed a dead end instead of pointing the user at the dashboards.
source_template_selection— integrationRule 2's untested half.
custom_app_pipeline_e2ecovers a flat log choosinguipath.custom; nothing covered the other branch. A real multi-table SAP P2Pextract must choose
uipath.p2p.sap— reaching foruipath.customthrows awaythe template's entire extraction and event-log construction layer. Also pins
where a source template's expected input tables come from (the generated
transformations /
sources.yml, not themodelobject) and that theCases.sqlgotcha isuipath.custom-only.Coverage delta
20/44 → 31/44 verbs. Newly exercised:
app-types get,apps data-model get,apps model fields list,apps model fields set,apps publish,query info,query percentile.Still uncovered, deliberately — these need a live tenant with real data to grade
anything meaningful, so command-construction tasks would only assert that a verb
was typed:
query rca/insights/layout/details,transformations run/
status/logs,ingestions logs,apps model get/update,apps model fields remove.Conventions
skill+tier+mode:*+lifecycle:*, closed vocabularies only.agent:orsandbox:blocks — inherited from the experiment. Noenv_packages.tenant, graded on which commands the agent chooses, with the same "commands
will fail with auth errors, run each exactly once" prompt caveat.
command_executed,command_not_executed,file_contains,skill_triggered. No criterion gates on--output json.Verification
tests/README.md— all clean.on the new tasks. (Running it over the whole directory reports 1 High on
add_table_queryable.yaml— that is the bug fix(process-mining): grade the real add-table verb and fix required tags #2545 fixes, not somethingintroduced here.)
.claude/rules/test-writing.md: 3.0 primaryvalidation, 2.0–2.5 core command/artifact content, 1.0–1.5 supporting.
Passing-run claim: these are new tasks and have not been run end-to-end
against a tenant — I do not have one wired up here. They are validated
statically (parse, tags, verb reachability against catalog 1.200.0-dev.8173) and
every graded verb and flag is taken from the skill's own references. Someone with
tenant access should run the set once before merge; expect the first run to
retune weights or drop a criterion rather than pass clean, particularly
model_fields_data_kind, which is the most demanding of the five.🤖 Generated with Claude Code