Skip to content

feat(uipath-maestro-case): wire connector-activity to case spec --input-details#592

Open
song-zhao-25 wants to merge 5 commits intomainfrom
feat/case-skill-spec-cli
Open

feat(uipath-maestro-case): wire connector-activity to case spec --input-details#592
song-zhao-25 wants to merge 5 commits intomainfrom
feat/case-skill-spec-cli

Conversation

@song-zhao-25
Copy link
Copy Markdown
Contributor

Summary

  • Switch the case skill's connector-activity plugin from the legacy case tasks describe + is resources describe two-call dance to the unified uip maestro case spec command (CLI shipped on uipcli feat/connector-task-spec).
  • Phase 3 now builds the connector task by passing user-collected input-values + filter through case spec --input-details, reading the populated caseShape, substituting {{CONN_BINDING_ID}} / {{FOLDER_BINDING_ID}} placeholders with minted ids, and dropping caseShape.{context, inputs, outputs} straight into caseplan.json.
  • Cross-skill borrowing from uipath-maestro-flow's connector plugin: cross-link uipath-platform for filter-trees-ceql / reference-resolution / connections rather than restate; adopt flow's Step-5 hard gate + Step-6a FilterBuilder detection wording.
  • Trigger plugins (connector-trigger, triggers/event) are intentionally out of scope here — they follow in PR 2.

What's wired

Doc Change
connector-activity/planning.md Resolution pipeline now uses case spec --skip-case-shape for required-field discovery, references with pre-built discoverCommand, and filter contract.
connector-activity/impl-json.md Phase 3 collapses to one case spec --input-details call → placeholder substitution → mint var/id/elementId → write task. Drops the legacy is resources describe re-fetch.
SKILL.md Rule 10 Connector tasks discover output names via case spec; non-connector tasks via case tasks describe.
connector-integration.md Top-level orientation rewritten to establish the case-spec-first contract.
registry-discovery.md Note that case spec is the unified post-pull endpoint for connector tasks.
implementation.md Phase 2 / Phase 3 step references switched to case spec.
case-commands.md Adds a full case spec section above the existing case tasks describe (which stays for non-connector tasks).
skeleton-tasks.md Schema-fetch references include case spec for connector tasks.
references/evals/evals.json Adds eval #6 — Outlook Send Email end-to-end through the new flow.
.maintenance/case-spec-cli-migration-plan.md (NEW) Internal planning doc tracking PR 1 + PR 2 split.

Test plan

  • Lint pass on changed markdown (no broken cross-links — paths verified during write).
  • Eval feat(CodedAgents): file-sync skill and deployment fixes #6 (Outlook Send Email) manual run end-to-end: planning → case spec --skip-case-shape → required-field gate → reference resolution → tasks.md → Phase 3 case spec --input-details → placeholder substitution → caseplan.json populated.
  • Verify trigger plugins still run the legacy flow (no accidental cross-pollination from this PR).
  • Spot-check the essentialConfiguration round-trip on a real Outlook 365 Send Email task — confirm Studio Web re-renders cleanly.

🤖 Generated with Claude Code

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

Claude finished @song-zhao-25's task in 3m 43s —— View job


PR Review: feat(uipath-maestro-case): wire connector-activity to case spec --input-details

  • Read review criteria and project conventions
  • Read PR conversation for existing feedback
  • Run full diff and read changed files
  • Verify relative links resolve
  • Check for cross-skill references, secrets, paths
  • Post review

Summary

Migrates the connector-activity plugin from the legacy three-call CLI dance (case registry get-connection + case tasks describe + is resources describe) to the unified uip maestro case spec command. The PR rewrites planning.md and impl-json.md for the connector-activity plugin, adds a case spec section to case-commands.md, and cross-links uipath-platform for filter/reference/connection docs rather than restating them. Eval #6 exercises the new end-to-end flow. A new .maintenance/ planning doc tracks the PR 1 + PR 2 split.

Change-by-Change Review

1. .maintenance/case-spec-cli-migration-plan.md (NEW, +329)

Severity: High

The planning doc contains personal filesystem paths on 3 lines:

  • Line 4: /Users/song.zhao/Vscode/skills-spec-cli
  • Line 139: /Users/song.zhao/Vscode/skills-spec-cli
  • Line 159: /Users/song.zhao/Vscode/skills-spec-cli-triggers

Per .github/code_review.md and CLAUDE.md: "No secrets, tokens, API keys, or personal filesystem paths in any file." Fix this →

Additionally, the doc contains links to an external repo that don't resolve within this repo (e.g., ../../../../uipcli/packages/case-tool/docs/spec-input-details.md). These are informational references in a .maintenance/ planning doc so they're not broken from an agent perspective, but noting for awareness.

2. SKILL.md (+1/-1)

Severity: OK

Rule 10 now correctly routes connector tasks to uip maestro case spec and non-connector tasks to uip maestro case tasks describe. Clean, minimal change.

3. references/case-commands.md (+33/-2)

Severity: OK

Adds the case spec command entry above case tasks describe. Well-structured with clear flag table, examples for both planning and Phase 3 usage, and an accurate note that case tasks describe stays for non-connector tasks. The --input-details flag doc includes a cross-link to the external CLI repo doc — this link doesn't resolve locally but the inline description is self-sufficient.

4. references/connector-integration.md (+79/-49)

Severity: OK

Top-level rewrite establishes the case-spec-first contract. The resolution pipeline now has 4 steps instead of the old multi-call dance. Cross-links to uipath-platform for filter/reference/connection rules rather than restating — good reference-pointer discipline. The "Applying Results to caseplan.json" and "Output Contract to Tasks.md" sections are clear.

5. references/evals/evals.json (+18/-0)

Severity: OK

Eval #6 covers the Outlook Send Email happy path end-to-end. Expectations are specific — checks for case spec --skip-case-shape during planning, --input-details during Phase 3, placeholder substitution, and explicitly verifies the agent does NOT fall back to legacy commands. Well-written eval.

6. references/implementation.md (+5/-4)

Severity: OK

Step 9.7 now references case spec instead of is resources describe. The "get-connection (each task runs its own)" instruction is preserved. Clean update.

7. references/plugins/tasks/connector-activity/impl-json.md (+126/-200)

Severity: Medium

The rewrite is the core of this PR and is well-structured. Phase 3 collapses to a clean 10-step flow. However:

a) Personal path (line 217): ~/Documents/knowledge/Skill_CLI/connector/case-spec-fe-discrepancies.md in the Known Limitations section. This is a local filesystem path that no agent or reviewer can access. Fix this →

b) Unresolvable external links: 4 references to ../../../../../../uipcli/packages/case-tool/docs/spec-input-details.md (line 45) and similar. These point to an external repo and won't resolve. The surrounding text is self-sufficient, but the links are misleading. Consider either removing them or noting they're CLI-repo-only.

8. references/plugins/tasks/connector-activity/planning.md (+72/-33)

Severity: Medium (pre-existing)

a) Cache path inconsistency (line 21, pre-existing): Uses ~/.uip/case-resources/ while registry-discovery.md and connector-integration.md use ~/.uipcli/case-resources/. This is pre-existing (not introduced in this PR) but since the file was substantially rewritten, it's worth fixing. Fix this →

Otherwise, the planning rewrite is clean. Step 3 correctly swaps in case spec --skip-case-shape. Steps 4-8 build a clear pipeline from reference resolution through filter authoring to input-values.

9. references/registry-discovery.md (+3/-1)

Severity: OK

Adds a note that case spec is the unified metadata endpoint for connector tasks after registry pull. Well-placed at the end of the Connector Tasks section.

10. references/skeleton-tasks.md (+2/-2)

Severity: OK

Updates the schema-fetch reference in the Upgrade Procedure section to include case spec for connector tasks alongside tasks describe for non-connector tasks. Clean update.

What's Missing

  • No new e2e test task YAML in tests/tasks/uipath-maestro-case/ for the case spec workflow. Existing tasks (init_validate.yaml, registry_discovery.yaml) don't cover the connector-activity planning/implementation flow. The eval in evals.json is a specification, not an executable test. Severity: Medium — existing tests don't cover the new capability, though this is consistent with the overall test gap for this skill.

Area Ratings

Area Status Notes
Frontmatter OK SKILL.md frontmatter unchanged; name matches folder
E2E Tests Issue No test YAML for the new case spec workflow (Medium — consistent with existing gap)
Skill Body OK Rule 10 update is correct and minimal
References & Assets Issue Personal paths in .maintenance/ doc and impl-json.md; cache path inconsistency in planning.md; unresolvable external repo links
Repo Hygiene Issue Personal filesystem paths committed (3 in .maintenance/, 1 in impl-json.md)

Duplication Assessment

The reference-pointer discipline is generally good. Cross-skill content (filter trees, reference resolution, connections) is linked to uipath-platform rather than restated. Within the skill, some content appears in both connector-integration.md and planning.md (connection-scoped warning, pagination note, filter anti-pattern), but these are single-sentence warnings appropriate for both the top-level reference and the plugin-level guide — borderline acceptable.

Issues for Manual Review

  • CLI correctness: Cannot verify that uip maestro case spec --type activity --activity-type-id <id> --connection-id <id> --skip-case-shape --output json is the exact CLI syntax. The PR states this is shipped on feat/connector-task-spec in the uipcli repo.
  • caseShape structure accuracy: Cannot verify the exact shape of caseShape.context[] (8-entry array with {{CONN_BINDING_ID}} / {{FOLDER_BINDING_ID}} placeholders) matches the CLI's actual output.
  • essentialConfiguration round-trip: The Known Limitations note says the FE may not render certain fields — confirm this is acceptable for the target use case (Studio Web re-rendering).

Conclusion

Request changes — two actionable items to fix before merge:

  1. High: Remove personal filesystem paths from .maintenance/case-spec-cli-migration-plan.md (3 instances of /Users/song.zhao/...) and impl-json.md line 217 (~/Documents/knowledge/...). Per repo rules, no personal paths in committed files.
  2. Medium: Fix cache path in planning.md:21~/.uip/ should be ~/.uipcli/ to match the rest of the skill (pre-existing but touched in this PR).

The overall design is sound — collapsing three CLI calls into one, using cross-links instead of duplication, and cleanly separating activity (this PR) from trigger (PR 2).


song-zhao-25 added a commit that referenced this pull request May 5, 2026
…history

Remove `.maintenance/case-spec-cli-migration-plan.md` — a maintainer-only
planning doc that captured the case-spec CLI migration approach + the
file-by-file deltas. Activity migration shipped in PR #592 (this branch);
trigger migration is the explicit subject of PR 2 and will be re-planned
in its own branch when we get there.

Net effect was unloaded prose drift: the doc was already updated for
each CLI surface change (`--skip-case-shape` → `--sections`,
spec-input-details vendoring), so it carried real upkeep cost without
runtime value. The work it described is preserved in:

- This branch's commits (`46b835ce` activity-first migration,
  `59a1afba` --sections adoption, `8396312d` doc vendoring,
  `041bcf4c` filter-content trim).
- PR #592's description.

Recoverable from git history if useful for PR 2 planning.
Migrate the uipath-maestro-case skill's connector-activity task from the
legacy `is resources describe` + `case tasks describe` flow to the new
`uip maestro case spec` command (uipcli PR #1519).

Two named section bundles defined:
- PLANNING_SECTIONS       = identity,operation,connection,inputs,outputs,filter,webhook,references
- IMPLEMENTATION_SECTIONS = identity,connection,caseShape

Phase 2 planning runs PLANNING_SECTIONS for the leaner payload (no
caseShape, essentialConfiguration, diagnostics). Phase 3 implementation
runs IMPLEMENTATION_SECTIONS with `--input-details` to mint the
populated caseShape. `diagnostics` is opt-in; append `,diagnostics` when
surfacing fallbacks to `build-issues.md`.

## Skill changes

- `connector-activity/planning.md` — Step 3 uses PLANNING_SECTIONS;
  diagnostics opt-in noted.
- `connector-activity/impl-json.md` — Phase 3 calls `case spec
  --input-details` with IMPLEMENTATION_SECTIONS, copies caseShape, mints
  var/id/elementId, syncs bindings_v2.json. Drops `is resources
  describe` re-fetch entirely. Adopts flow's hard-gate framing for
  required-field validation and FilterBuilder detection.
- `connector-integration.md` — top-level rewrite establishing the
  case-spec-first contract; cross-links platform Filter Trees (CEQL)
  doc instead of restating CEQL.
- `case-commands.md` — `case spec` flag table replaces
  `--skip-case-shape` with `--sections`, with bundle definitions and
  diagnostics opt-in spelled out.
- `case-spec-input-details.md` — vendored input-details contract into
  the skill (was previously only in the case-tool package).
- `SKILL.md` Rule 10 — `case spec` for connector tasks; `case tasks
  describe` stays for non-connector tasks.

## Cleanup

- Drop `.maintenance/case-spec-cli-migration-plan.md` (work captured in
  this PR's history).

Trigger plugins remain on the legacy path until a follow-up PR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@song-zhao-25 song-zhao-25 force-pushed the feat/case-skill-spec-cli branch from fe0acf9 to d4a3968 Compare May 5, 2026 19:04
song-zhao-25 and others added 4 commits May 5, 2026 12:23
…`case spec`

Migrate trigger plugins (in-stage `wait-for-connector` task and case-level
event trigger) from the legacy `get-connection` + `case tasks describe
--type connector-trigger` / `is triggers describe` two-call pattern to a
single `uip maestro case spec --type trigger` call per phase, mirroring
PR 1's activity migration.

The CLI's `buildTriggerCaseShape` + `buildTriggerContext` emit the
FE-canonical inputs / outputs / context with placeholders the skill
substitutes at write-time:

- `{{CONN_BINDING_ID}}`         → minted connection binding id
- `{{FOLDER_BINDING_ID}}`       → minted folder binding id (when present)
- `{{TRIGGER_REGISTRATION_KEY}}`→ minted eventTriggerKey
                                  (`<connection-id>_<startNode.id>` per
                                  FE `PackagingUtil.ts:227`); only present
                                  when the trigger has event parameters

`--input-details.filter` writes all three trigger filter sinks at once:
the FilterTree in `essentialConfiguration.filter` (design-time round-trip),
the compiled JMESPath in `activityPropertyConfiguration.filterExpression`
(FE projection), and the runtime expression in `body.filters.expression`.

## What changes

- `references/connector-trigger-common.md` — major rewrite. Planning
  Pipeline collapses 7 → 7 (renumbered, but Step 3 swaps `is triggers
  describe` for `case spec --type trigger --sections <PLANNING_SECTIONS>`).
  Implementation section drops the 2-step shared metadata fetch +
  shared metadata construction (context array, metadata body,
  essentialConfiguration, input body — all CLI-built now). Replaced with
  a 5-step Phase 3 flow: build input-details → run case spec → mint
  binding ids + trigger registration key → substitute placeholders →
  mint var/id/elementId. Cross-link platform Filter Trees (CEQL),
  reference resolution, and connections (PR 1 patterns inherited).
- `connector-trigger/planning.md` — refresh ref to common pipeline
  (drop the "7-step" framing).
- `connector-trigger/impl-json.md` — collapse Steps 1-2 (legacy CLI)
  into one `case spec` call. New Step 4 substitutes placeholders. Step 5
  mints var/id/elementId. Step 6 writes the task with `serviceType:
  "Intsvc.WaitForEvent"`. eventTriggerKey uses the case's startNode id
  (NOT the stage id) per FE convention.
- `triggers/event/planning.md` — same ref refresh.
- `triggers/event/impl-json.md` — same Step 1-2 collapse for the
  case-level trigger node. Trigger inputs get NO elementId (different
  from in-stage task inputs); outputs get simplified shape (strip body /
  target / set _jsonSchema: null) for the trigger node, with full body
  schema flowing into `variables.inputOutputs[]` (Step 7). For event
  triggers the eventTriggerKey uses the trigger node's own id.
- `references/implementation.md` — Phase 2 table: `case spec` is the
  Phase 3 call; "Do NOT call case spec in Phase 2" replaces the longer
  list of legacy commands.
- `references/phased-execution.md` — same Phase 2 update + Phase 3
  re-entry step now mentions case spec instead of the legacy fetches.

Cross-skill cross-links inherited from PR 1 stay: filter-trees-ceql,
reference-resolution, connections (all from `uipath-platform`).
…-shape

Follow-up to the CLI revert (uipcli `feat/connector-task-spec` /
PR #1519): the case skill's --sections + PLANNING_SECTIONS /
IMPLEMENTATION_SECTIONS bundle convention reverts to the binary
--skip-case-shape flag the CLI now exposes.

The bundle indirection didn't earn its complexity. The only meaningful
saving was dropping caseShape during planning (~6-10K tokens for a
typical Outlook activity); the granularity past "with-vs-without
caseShape" wasn't load-bearing. --skip-case-shape captures ~90% of the
saving with ~10% of the surface area.

## What changes

- `connector-activity/planning.md` Step 3 — `--skip-case-shape` replaces
  the PLANNING_SECTIONS csv. Drops the diagnostics-opt-in note (no
  granular control any more).
- `connector-activity/impl-json.md` Step 2 — Phase 3 call drops the
  IMPLEMENTATION_SECTIONS csv (just `--input-details` now). Step 3
  required-field gate refs the lean planning spec via
  `--skip-case-shape`.
- `connector-integration.md` — top-level case spec recipes revert to
  `--skip-case-shape` / `--input-details` pair. Output table
  `caseShape` row reverts to the `--skip-case-shape` framing.
- `case-commands.md` — `--skip-case-shape` row replaces `--sections
  <csv>` row + bundle definitions. Returns description reverts.
- `connector-trigger-common.md` — same revert across the planning
  pipeline (Step 3) and Phase 3 implementation (Step 2). Drops
  diagnostics-opt-in note + the references to PLANNING_SECTIONS /
  IMPLEMENTATION_SECTIONS.
- `case-spec-input-details.md` (vendored doc) — validation-rule table
  + Discovery section revert.

PR #592 retains the 2-commit shape (squashed activity migration +
trigger migration); this revert lands on top as a third commit and can
be folded into the squash before merge if desired.
…adoption

Six post-review fixes across the activity + trigger migration:

1. Unify `data.typeId` / `data.connectionId` (camelCase) — replace
   kebab-case `data.type-id` / `data.connection-id` introduced in
   `connector-activity/impl-json.md` (lines 5, 184) and
   `connector-trigger/impl-json.md` (lines 5, 104). Matches the
   dominant repo convention in `implementation.md`, `skeleton-tasks.md`,
   `connector-integration.md`, `registry-discovery.md`.

2. Surface `case-spec-input-details.md` in SKILL.md Reference
   Navigation — the 331-line vendored doc was reachable via 7
   transitive links but missing from the top-level "I need to..." nav
   table.

3. Add Step 3 Required-event-param hard gate to trigger plugins
   (`connector-trigger/impl-json.md`, `triggers/event/impl-json.md`),
   mirroring activity Step 3. Renumbers subsequent steps (3-8 → 4-9
   for connector-trigger; 3-9 → 4-10 for event), updates internal
   step cross-references in JSON examples and Graceful Degradation
   tables, updates §6a/§6b → §7a/§7b and §7a → §8a in event plugin,
   updates the common-doc cross-link to match the new event Step 4
   anchor. Both plugins' Graceful Degradation tables already mention
   the gate; this pairs the orphaned row with a numbered workflow
   step.

4. Update Post-Write item 10 in `connector-activity/impl-json.md` (and
   item 7 in `connector-trigger/impl-json.md`) to handle both v19
   (`root.data.uipath.bindings[]`) and v20 (top-level `bindings[]`)
   binding paths — Rule 17/18 make v20 a real path.

5. Add per-plugin override note in `connector-trigger-common.md` for
   the `eventTriggerKey` `<connection-id>_<startNode.id>` formula —
   for case-level event triggers, `startNode.id` is the trigger
   node's own id, not the case start node id.

6. Fix broken anchor link in `connector-activity/impl-json.md:57` —
   `#mutual-exclusion-with---skip-case-shape` was not a heading in
   `case-spec-input-details.md`. Re-link to `§ Validation rules`
   where the mutual-exclusion rule lives.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Follow-up to 62121cf — the Phase 2 connector-task shape row in the
"Tasks" table referenced `data` keys in kebab-case. JSON keys are
camelCase per implementation.md:92 and the plugin impl-json.md docs.
Tasks.md field-name occurrences in column 2 stay kebab.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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