Skip to content

feat(uipath-governance): merge gov-aops-policy + gov-access-policy into single uber skill#601

Open
jianjunwang2 wants to merge 1 commit intomainfrom
feat/uipath-governance-merge
Open

feat(uipath-governance): merge gov-aops-policy + gov-access-policy into single uber skill#601
jianjunwang2 wants to merge 1 commit intomainfrom
feat/uipath-governance-merge

Conversation

@jianjunwang2
Copy link
Copy Markdown
Contributor

@jianjunwang2 jianjunwang2 commented May 6, 2026

Summary

Replaces two sibling governance skills (uipath-gov-aops-policy, uipath-gov-access-policy) with a single user-shaped uipath-governance skill. Both old skills front-loaded the same verbs (block, restrict, deny) and produced non-deterministic activation on prompts that fit either layer — the canonical example is "Block ChatGPT for finance using Studio," which both skills would silently authoring on, with no way for the user to tell which interpretation was applied.

The merge puts disambiguation at the top of one skill instead of across two siblings: classify into AOps product policy vs Access ToolUsePolicy first, ask one numbered question only when both branches plausibly fit, then route to the matching mechanic.

New folder structure

skills/uipath-governance/
├── SKILL.md                                        ← uber skill (91 lines): identity, classify, route
└── references/
    ├── disambiguation-guide.md                     ← strong signals + ambiguous-phrase tables + worked example
    │                                                 (loaded by SKILL.md Workflow Step 2)
    │
    ├── aops-policy/                                ← Branch A mechanic library (`uip gov aops-policy`)
    │   ├── aops-policy-overview-guide.md           ← branch entry: critical rules, workflow, completion output
    │   ├── aops-policy-commands.md                 ← CLI flags, input/output shapes, S2S auth
    │   ├── aops-policy-manage-guide.md             ← list / get / create / update / delete lifecycle
    │   ├── aops-policy-deploy-guide.md             ← assign to user / group / tenant
    │   ├── aops-policy-deployed-guide.md           ← query effective rules / deployed policy
    │   ├── aops-governance-recipes-guide.md        ← canonical S / X / A / R / AT recipes
    │   └── configure-aops-policy-data-guide.md     ← form.io component-tree traversal
    │
    └── access-policy/                              ← Branch B mechanic library (`uip gov access-policy`)
        ├── access-policy-overview-guide.md         ← branch entry: critical rules, workflow, completion output
        ├── access-policy-commands.md               ← CLI flags, output shapes, evaluate semantics
        ├── policy-manage-guide.md                  ← list / get / create / update / delete lifecycle
        ├── planning-arch.md                        ← Phase 1: author the Policy Spec
        ├── planning-impl.md                        ← Phase 2: compose JSON via plugins
        ├── sample-policy-guide.md                  ← starter sample when intent is sparse
        ├── resource-lookup-guide.md                ← UUID resolution via `uip or` lookups
        └── plugins/                                ← per-block JSON composers
            ├── selector/                           ←   Selection Rule (`selectors[]`)
            │   ├── planning.md
            │   └── impl.md
            ├── executable/                         ←   Actor Process Rule (`executableRule`)
            │   ├── planning.md
            │   └── impl.md
            ├── actor/                              ←   Actor Identity Rule (`actorRule`)
            │   ├── planning.md
            │   └── impl.md
            └── tags/                               ←   shared tag operators (Or / And / None)
                ├── planning.md
                └── impl.md

tests/tasks/uipath-governance/
├── aops-policy/                                    ← AOps smoke tasks
│   ├── deployed_policy_smoke.yaml
│   ├── deployment_discovery_smoke.yaml
│   ├── discover_catalog_smoke.yaml
│   ├── list_policies_smoke.yaml
│   └── template_bootstrap_smoke.yaml
└── access-policy/                                  ← Access smoke tasks
    ├── get_policy_smoke.yaml
    └── list_policies_smoke.yaml

Progressive disclosure layout:

  • SKILL.md is the only file loaded on activation. It holds routing logic and the disambiguation question template — nothing mechanic-specific.
  • disambiguation-guide.md is loaded at Workflow Step 2 to classify the request.
  • The aops-policy/ and access-policy/ subfolders are mechanic libraries. Each has its own *-overview-guide.md as the branch entry point; the branch's other guides (commands, manage, deploy, etc.) are loaded on demand from there.
  • compliance-pack.md cross-cutting flow + assets/{packs,scripts,templates}/ will land in a follow-up PR.

What changed (file-level)

  • New uber skill: skills/uipath-governance/SKILL.md (91 lines) — routing core only: identity, when-to-use, 6 critical rules, 3-step workflow, disambiguation question template, reference navigation, anti-patterns.
  • New disambiguation priors: references/disambiguation-guide.md (67 lines) — strong signals per branch, ambiguous-phrase tables, canonical worked example.
  • Mechanic libraries (inherit previously-shipped behavior, just relocated):
    • references/aops-policy/aops-policy-overview-guide.md (absorbs old AOps SKILL.md content) plus existing manage / deploy / deployed / commands / configure / recipes guides.
    • references/access-policy/access-policy-overview-guide.md (absorbs old Access SKILL.md content) plus existing planning / impl / policy-manage / commands / sample / resource-lookup / plugins guides.
  • Filename convention: <topic>-overview-guide.md matches <topic>-guide.md per .claude/rules/skill-structure.md.
  • Test tasks moved to tests/tasks/uipath-governance/{aops,access}-policy/ with skill-name references rewritten in YAML.
  • CODEOWNERS collapses two prior governance entries into one /skills/uipath-governance/ (and matching /tests/tasks/uipath-governance/) entry; same owners (@UiPath/AuthZ @sriramva-uipath @bansal-anushree @jianjunwang2).

Description tightening

Old descriptions used [PREVIEW] prefix and verbose Triggers: clauses. New description (543 chars):

UiPath governance via uip gov — author and deploy policies on two layers. AOps product policies (uip gov aops-policy): block/restrict/enforce features in Studio, StudioX, Assistant, Robot, AI Trust Layer, Agent Builder; deploy to user/group/tenant. Access ToolUsePolicy (uip gov access-policy): allow/deny when one workflow invokes another as a tool (Agent→Agent/Maestro/Flow/RPA/API/Case), gated by tag, caller, or actor (User/Group). Skill classifies product-layer vs tool-use intent before authoring. For platform ops→uipath-platform.

  • Brand-leading (UiPath governance via uip gov) ✓
  • Products enumerated (Studio / StudioX / Assistant / Robot / AI Trust Layer / Agent Builder) ✓
  • Tool-use boundary spelled out (Agent→Agent/Maestro/Flow/RPA/API/Case) ✓
  • redirect to uipath-platform
  • No [PREVIEW] prefix; preview status moved to body callout ✓

Validation

  • hooks/validate-skill-descriptions.sh exit 0 (description 543 chars, under 1024 cap)
  • 354 relative links resolve, 0 broken (Python validator)
  • 32 files changed, +325/-189 lines (most files are renames; the +325 are net new SKILL.md + disambiguation-guide.md + the two overview-guide.md headers)

Test plan

  • Activate the new skill in Claude Code and confirm it picks up on each of the trigger verbs (block, restrict, enforce, allow only, who can, compliance).
  • Run the canonical disambiguation prompt: "Block ChatGPT for my finance team using Studio." Expect the numbered question to render verbatim, with options Govern the product and Govern tool-use. Reply with 1 and confirm routing to aops-policy/aops-policy-overview-guide.md.
  • Repeat with reply 2 and confirm routing to access-policy/access-policy-overview-guide.md.
  • Run tests/tasks/uipath-governance/aops-policy/list_policies_smoke.yaml (or any other relocated test) — confirm the new skill name uipath-governance activates correctly.
  • Run an unambiguous AOps prompt (e.g. "Disable Studio feedback") and confirm direct routing to AOps without the disambiguation question.
  • Run an unambiguous Access prompt (e.g. "Only Production-tagged agents may be invoked") and confirm direct routing to Access without the disambiguation question.

🤖 Generated with Claude Code

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

PR Review: feat(uipath-governance) — merge gov-aops-policy + gov-access-policy into single uber skill

  • Read review criteria, project conventions, and skill review framework
  • Read full diff and existing PR conversation
  • Read all new/changed files in full for surrounding context
  • Run skill-specific checks (tests, CODEOWNERS, links, cross-refs, secrets)
  • Post review findings

Working…

View job run

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Claude finished @jianjunwang2's task in 3m 49s —— View job


Coder-eval task lint (advisory)

7 task YAMLs changed (all renames with skill-name rewrites from uipath-gov-aops-policy/uipath-gov-access-policyuipath-governance); verdict counts: 0 Critical, 7 High, 0 Medium, 0 Low, 0 OK. 1 systemic theme at Critical severity.

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

Note: git diff --diff-filter=AM returned empty because all 7 files are git renames (R094/R095). Linting anyway since they have content changes (tags and description skill-name references rewritten).

Evidence of passing run

High — PR body does not claim the changed tasks have been run and passed. The "Validation" section covers description and link validation only; the "Test plan" checkboxes are unchecked TODO items, not passing-run claims. Please edit the PR description to add a line like: Ran skill-gov-aops-policy-list-smoke (and other relocated tasks) locally and they passed.

Per-task lint

tests/tasks/uipath-governance/access-policy/get_policy_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/access-policy/list_policies_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/deployed_policy_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/deployment_discovery_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/discover_catalog_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/list_policies_smoke.yaml — verdict: High (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/template_bootstrap_smoke.yaml — verdict: High (theme-captured; see Theme 1)

Within-PR duplicates

No duplicate clusters detected. All 7 tasks are renames of pre-existing tasks; no new task_id values introduced. Each exercises a materially distinct CLI subcommand tree (access-policy get, access-policy list, deployed-policy get/list, deployment user/tenant, product/license-type list, aops-policy list, template list).

Themes

  • Theme 1 [Critical]: Self-report anti-pattern across all 7 tasks. Every task instructs the agent to write report.json with fields like "get_command": "<exact command you ran>" and "commands_used": [...] (e.g. lines 27–31 in get_policy_smoke.yaml). Criteria then read that file via file_contains (checking namespace strings like "uip gov access-policy") and json_check (asserting length(get_command) >= 10). The agent grades its own homework — it can write the expected strings without the commands succeeding.

    Mitigating factor: All 7 tasks also include command_executed criteria (weight 2.0–2.5) that independently verify the correct CLI commands were invoked. The report.json criteria have lower weights (1.0–1.5) and are supplementary. The test is not fully gameable — command_executed prevents a pure hallucination pass.

    Suggested fix: Drop the report.json machinery entirely. The command_executed patterns already validate the agent invoked the right subcommands with the right flags and arguments. If you want to guard against legacy namespace/flag regressions (currently done via file_contains excludes like "uip admin aops-policy"), add negative command_executed patterns (e.g. command_pattern: 'uip\s+admin\s+aops-policy' with min_count: 0 or an explicit command_not_executed check if the framework supports it). This eliminates the self-report vector while preserving all current signal. Fix this →

Conclusion

⚠ 7 task(s) share a single systemic issue (self-report anti-pattern, Critical at theme level, High per-task after downgrade), mitigated by existing command_executed checks. No evidence of passing run in PR body. Advisory only — not blocking merge.


Copy link
Copy Markdown

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

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: 9ea7cb1b8f

ℹ️ 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".

Comment thread skills/uipath-governance/SKILL.md Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 6, 2026

Claude finished @jianjunwang2's task in 3m 31s —— View job


PR Review: feat(uipath-governance) — merge gov-aops-policy + gov-access-policy

  • Read review criteria, project conventions, and skill review framework
  • Read full diff and existing PR conversation
  • Read all new/changed files in full for surrounding context
  • Run skill-specific checks (tests, CODEOWNERS, links, cross-refs, secrets)
  • Post review findings

Summary

Replaces two sibling governance skills (uipath-gov-aops-policy, uipath-gov-access-policy) with a single uipath-governance uber skill. The merge adds a new SKILL.md (91 lines) with classification-first routing, a disambiguation guide (67 lines), and two overview guides that re-header the existing mechanic content. Reference files are relocated under references/aops-policy/ and references/access-policy/ with internal link rewrites. Test tasks are renamed and have tags + description rewritten to reference uipath-governance. Old CODEOWNERS entries are consolidated.

Change-by-Change Review

1. skills/uipath-governance/SKILL.md (new, 91 lines)

Severity: Low

Well-structured uber skill. Frontmatter is valid: name: uipath-governance matches the folder, description is 549 chars (well under 1024), starts with brand identity (UiPath governance via…), includes →uipath-platform redirect. Body follows the canonical section order (Title, When to Use, Critical Rules, Workflow, Reference Navigation, Anti-patterns). 6 critical rules, 5 anti-patterns.

One issue (Low — also flagged by Codex): Critical Rule #1 says "First action on any governance request is to classify intent," but Workflow Step 1 runs which uip && uip --version + uip login status before Step 2 (classify). This is a contradiction in letter but not in spirit — the agent needs uip installed before either branch can run. However, for an unambiguous non-governance redirect (e.g., a platform-ops request), the current ordering makes the agent check CLI install before routing away. Consider either:

  • Reordering to classify first, then verify CLI only after classification confirms governance, or
  • Softening Critical Rule feat(EvalsBreakdown): break down eval skill #1 to say "First governance action" (making CLI verification a prerequisite, not a governance action).

This is cosmetic — the mechanic overview guides redundantly verify login anyway, so no agent failure path exists. Fix this →

2. skills/uipath-governance/references/disambiguation-guide.md (new, 67 lines)

Severity: OK

Clean and well-organized. Strong-signal tables for both branches, an explicit "phrases that do NOT need disambiguation" section (reduces unnecessary prompting), and a worked example. Links to ../SKILL.md and the two overview guides resolve correctly. No duplication with SKILL.md — the SKILL.md links here for detail instead of inlining the tables.

3. skills/uipath-governance/references/aops-policy/aops-policy-overview-guide.md (renamed + rewritten header)

Severity: OK

Former standalone SKILL.md body, now re-headered as "Branch A of uipath-governance." The ../../SKILL.md back-link resolves. Sibling cross-reference to ../access-policy/access-policy-overview-guide.md stays within the skill (not a cross-skill reference). Content changes are limited to the header paragraph and some SKILL.md link retargeting — the mechanic-specific Critical Rules, workflow, and anti-patterns are preserved intact.

4. skills/uipath-governance/references/access-policy/access-policy-overview-guide.md (renamed + rewritten header)

Severity: OK

Same pattern as AOps — re-headered as "Branch B of uipath-governance." Back-links to ../../SKILL.md and sibling reference to ../aops-policy/aops-policy-overview-guide.md both resolve. Critical Rules, two-phase authoring workflow, anti-patterns, and completion output all preserved.

5. Renamed reference files (access-policy-commands.md, planning-arch.md, planning-impl.md, policy-manage-guide.md, resource-lookup-guide.md, sample-policy-guide.md, plugins/*, aops-policy-commands.md, aops-policy-manage-guide.md, aops-policy-deploy-guide.md, aops-policy-deployed-guide.md, configure-aops-policy-data-guide.md, aops-governance-recipes-guide.md)

Severity: OK

All renames are path-only moves from skills/uipath-gov-{aops,access}-policy/references/ to skills/uipath-governance/references/{aops,access}-policy/. Content changes are limited to internal link rewrites (e.g., SKILL.mdaops-policy-overview-guide.md or ../../SKILL.md). Verified: all ../../ traversals stay within the skill folder boundary. No content drift, no cross-skill references.

6. CODEOWNERS (modified)

Severity: OK

Old entries for /skills/uipath-gov-aops-policy/ and /skills/uipath-gov-access-policy/ replaced with /skills/uipath-governance/ and /tests/tasks/uipath-governance/. Same owner set (@UiPath/AuthZ @sriramva-uipath @bansal-anushree @jianjunwang2). Both paths covered.

7. Test task YAML files (7 files, all renames with tag rewrites)

Severity: Medium

All 7 tasks are renamed from tests/tasks/uipath-gov-{aops,access}-policy/ to tests/tasks/uipath-governance/{aops,access}-policy/. Changes per file are minimal: tags first element rewritten from uipath-gov-aops-policy / uipath-gov-access-policy to uipath-governance, and description references updated. All tasks are tagged smokeno e2e tasks exist for this skill. Per review criteria, this is a Medium gap.

Additionally, the self-report report.json pattern flagged by the CI lint advisory (all 7 tasks ask the agent to write report.json with command summaries, then use file_contains / json_check to grade it) is pre-existing and not introduced by this PR. The mitigating command_executed criteria (weight 2.0–2.5) provide real signal. The lint advisory's suggestion to drop report.json machinery is reasonable for a follow-up PR but not blocking here.

What's Missing

  • No e2e test tasks. All 7 tasks are smoke only. Per CONTRIBUTING.md, at least one e2e task is required. Since the relocated tasks are inherited from the prior skills (which also lacked e2e tests), this is pre-existing debt — Medium, not blocking.
  • No AOps-specific reference navigation entries in SKILL.md for aops-policy-manage-guide.md, configure-aops-policy-data-guide.md, or aops-governance-recipes-guide.md. The Reference Navigation table links to the overview, deploy, deployed, and commands guides but not the manage/configure/recipes guides. These are reachable through the overview guide's own Task Navigation table, so there's no broken path — but if a future agent needs to jump directly to "manage" or "recipes," it must load the overview first. Low — the two-hop path works, and keeping the SKILL.md table lean is a valid choice.
  • Old skill folders not explicitly deleted in this PR. The skills/uipath-gov-aops-policy/ and skills/uipath-gov-access-policy/ directories no longer exist on this branch (confirmed via ls), which means git treats the renames correctly. However, if those folders existed on main, the PR must ensure they are removed on merge. Since git diff --stat shows all files as renames (not copies), the old paths will be deleted on merge. OK.

Area Ratings

Area Status Notes
Frontmatter OK Valid YAML, name matches folder, description 549 chars, brand-leading, redirect present
E2E Tests Medium 7 smoke tasks present and correctly rewritten; no e2e tasks (pre-existing debt)
Skill Body OK Canonical section order, 6 critical rules, disambiguation workflow, anti-patterns
References & Assets OK All 24 files reachable from SKILL.md, all relative links resolve, no orphaned files, no cross-skill refs
Repo Hygiene OK CODEOWNERS updated, no secrets, no binaries, changes scoped to governance skill

Issues for Manual Review

  • Disambiguation accuracy. The strong-signal tables in disambiguation-guide.md and the phrasing-to-branch mappings are domain-specific. I verified structural correctness (links, formatting, completeness) but cannot confirm whether the signal heuristics correctly classify real-world governance prompts. The test plan's manual check items (canonical disambiguation prompt, unambiguous AOps/Access prompts) should cover this.
  • Workflow Step 1 vs Critical Rule feat(EvalsBreakdown): break down eval skill #1 ordering (detailed above). Low severity, but worth aligning for agent clarity.
  • CLI command correctness. All uip gov aops-policy and uip gov access-policy commands are inherited from the prior skills. I verified syntax consistency but cannot confirm they match the current CLI API surface.

Conclusion

Clean, well-structured merge. The new uber skill solves the real non-deterministic activation problem with a clear classify-then-route pattern. SKILL.md is lean (91 lines), description is tight (549 chars), all links resolve, CODEOWNERS is updated, and no cross-skill references or secrets are present. The only gap is the missing e2e test coverage, which is pre-existing debt from the prior skills.

Recommendation: approve. One Low suggestion to align Critical Rule #1 wording with Workflow Step 1 ordering, and a Medium note to add e2e test coverage in a follow-up.

Copy link
Copy Markdown
Collaborator

@uipreliga uipreliga left a comment

Choose a reason for hiding this comment

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

Can you remove the part 'use skill X' from tests - that's too easy and it results in not much being tested.

Comment thread tests/tasks/uipath-governance/aops-policy/template_bootstrap_smoke.yaml Outdated
Comment thread tests/tasks/uipath-governance/aops-policy/list_policies_smoke.yaml Outdated
Comment thread tests/tasks/uipath-governance/aops-policy/discover_catalog_smoke.yaml Outdated
Comment thread tests/tasks/uipath-governance/aops-policy/template_bootstrap_smoke.yaml Outdated
jianjunwang2 added a commit that referenced this pull request May 7, 2026
…eport tests, classify-before-CLI

Three review-comment fixes:

1. Test tasks no longer instruct the agent to "Use the uipath-governance
   skill" (uipreliga, CHANGES_REQUESTED). The skill must self-activate
   from prompt context — naming it explicitly defeats the activation
   test.

2. Replace `report.json` self-narration pattern with actual CLI output
   capture to `output.txt` (uipreliga + lint-task advisory). Previously
   tasks asked the agent to write a self-narrated summary of the
   commands it claimed to have run; that was effectively self-grading.
   Now each task instructs the agent to redirect stdout+stderr of every
   `uip` invocation to ./output.txt via `> output.txt 2>&1` and
   `>> output.txt 2>&1`. `command_executed` criteria (which inspect the
   framework's record of actual Bash tool calls — objective evidence)
   remain as the primary signal; `file_exists ./output.txt` confirms
   the agent ran *something*. Dropped `file_contains` includes/excludes
   and `json_check` assertions that read the agent's own narrative.

3. SKILL.md Workflow steps reordered so classification is Step 1 and
   `uip` verify/login is Step 2 (Codex P2). Critical Rule #1 says "First
   action is to classify intent" — running `which uip` before
   classification contradicted that, especially when the request would
   redirect to a sibling skill anyway. The login check now happens only
   after classification routes to a governance branch. Added an explicit
   "Do not run any CLI command before classification is settled"
   qualifier to Step 1.

Validation: 354 markdown links resolve, hooks/validate-skill-descriptions.sh
exit 0, 8 files changed (+56/-309 lines — net reduction comes from
deleting the per-task self-narration block).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@jianjunwang2 jianjunwang2 force-pushed the feat/uipath-governance-merge branch from 9ea7cb1 to 1232988 Compare May 7, 2026 02:11
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Claude finished @jianjunwang2's task in 3m 25s —— View job


Coder-eval task lint (advisory)

7 task YAMLs changed (all renames with content rewrites from uipath-gov-aops-policy/uipath-gov-access-policyuipath-governance); verdict counts: 0 Critical, 0 High, 0 Medium, 1 Low, 6 OK. 1 systemic theme at Low severity.

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

Note: git diff --diff-filter=AM returned empty because all 7 files are git renames (R050–R054). Linting the full current content since the latest commit (12329885) substantially rewrote all 7 files — dropped the report.json self-report machinery, removed "use skill X" prompt hints, and slimmed criteria to command_executed + file_exists only.

Evidence of passing run

High — PR body does not claim the changed tasks have been run and passed. The "Validation" section covers description and link validation only; the "Test plan" checkboxes are unchecked TODO items. Please edit the PR description to add a line like: Ran skill-gov-aops-policy-list-smoke (and other relocated tasks) locally and they passed.

Per-task lint

tests/tasks/uipath-governance/access-policy/get_policy_smoke.yaml — verdict: OK

tests/tasks/uipath-governance/access-policy/list_policies_smoke.yaml — verdict: OK

tests/tasks/uipath-governance/aops-policy/deployed_policy_smoke.yaml — verdict: OK

tests/tasks/uipath-governance/aops-policy/deployment_discovery_smoke.yaml — verdict: Low

Issues:

  • [Low] Prompt over-specification: lines 20–27 prescribe a 3-step chain ("List every governance user, list every tenant…, then pick the first user… and fetch…") plus an explicit fallback procedure naming the exact subcommand (deployment user get <PLACEHOLDER_ID>). The task tests the list→get chain, but the prompt walks the agent through it step-by-step rather than stating the goal. Suggested fix: Compress to a goal statement like "Audit AOps governance deployment state: discover which users and tenants have policy assignments, and fetch the details for one user. Save command output to ./output.txt." Let the skill teach the list→get workflow.

tests/tasks/uipath-governance/aops-policy/discover_catalog_smoke.yaml — verdict: OK

tests/tasks/uipath-governance/aops-policy/list_policies_smoke.yaml — verdict: OK

tests/tasks/uipath-governance/aops-policy/template_bootstrap_smoke.yaml — verdict: OK

Within-PR duplicates

No duplicate clusters detected. All 7 tasks exercise materially distinct CLI subcommand trees: access-policy get, access-policy list, deployed-policy get/list, deployment user/tenant, product/license-type list, aops-policy list, template list.

Themes

  • Theme 1 [Low]: All 7 tasks prescribe --output json in the prompt (e.g. line 33 in get_policy_smoke.yaml, line 33 in list_policies_smoke.yaml). Per the rubric, the skill should teach the --output json convention; the prompt should state the goal only. Mitigating factor: these are smoke tests against an unauthenticated sandbox — the skill may not be fully loaded, and --output json is a single flag that the success_criteria check for. Borderline between test-fixture hint and over-specification. Not raised per-task (theme-captured).

Conclusion

✅ Significant improvement over the previous revision — the self-report report.json anti-pattern (previously Critical) and the "use skill X" prompt hints have both been removed. All 7 tasks now use clean command_executed + file_exists criteria only. One Low finding on deployment_discovery_smoke.yaml (procedural prompt). No evidence of passing run (High, editorial). Advisory only — not blocking merge.


…to single uber skill

Replaces the two sibling governance skills (uipath-gov-aops-policy,
uipath-gov-access-policy) with a single user-shaped uipath-governance
skill. The two old skills front-loaded the same verbs (block, restrict,
deny) and produced non-deterministic activation on prompts that fit
either layer (e.g. "Block ChatGPT for finance using Studio"). The merge
puts classification at the top — the skill classifies into AOps product
policy vs Access ToolUsePolicy before authoring, and asks one numbered
disambiguation question only when both branches plausibly fit.

Structure follows progressive disclosure:
- skills/uipath-governance/SKILL.md (~95 lines) — routing core: identity,
  when-to-use, critical rules, workflow, disambiguation question
  template, reference navigation, anti-patterns. Classification is
  Workflow Step 1; uip verify/login is Step 2 (only after a governance
  branch is chosen).
- references/disambiguation-guide.md — strong signals per branch,
  ambiguous-phrase tables, canonical worked example.
- references/aops-policy/ and references/access-policy/ — mechanic
  libraries inheriting the previously-shipped behavior, each owning
  its own Critical Rules / Quick Start / Completion Output.
  Filenames follow <topic>-overview-guide.md per skill-structure.md.

Test tasks moved to tests/tasks/uipath-governance/{aops,access}-policy/.
Tasks no longer instruct the agent to "Use the uipath-governance skill"
(skill must self-activate from prompt context). Tasks no longer ask
the agent to write a self-narrated report.json; instead each task
redirects actual stdout+stderr of every uip invocation to ./output.txt.
Self-grading file_contains/json_check criteria removed; objective
command_executed criteria (which inspect the framework's record of
real Bash invocations) plus a single file_exists for output.txt remain.

CODEOWNERS collapses the two prior governance entries into one
/skills/uipath-governance/ owner set.

User-facing terminology: the disambiguation question's option for
Branch B reads "Govern resource/tool use" (was "Govern tool-use") to
align with how the access-policy mechanic describes its own scope as
governing tool-use / resource-use. The branch-B identity table row
and the description follow the same phrasing.

Description: 552 chars, brand-leading, products enumerated, →redirect
to uipath-platform; hooks/validate-skill-descriptions.sh passes.
354 internal markdown links resolve.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@jianjunwang2 jianjunwang2 force-pushed the feat/uipath-governance-merge branch from 1232988 to adf39ef Compare May 7, 2026 05:15
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

Claude finished @jianjunwang2's task in 2m 49s —— View job


Coder-eval task lint (advisory)

7 task YAMLs changed (all renames with content rewrites from uipath-gov-aops-policy/uipath-gov-access-policyuipath-governance); verdict counts: 0 Critical, 0 High, 0 Medium, 1 Low, 6 OK. 1 systemic theme at Low severity.

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

Note: git diff --diff-filter=AM returned empty because all 7 files are git renames (R050–R054). Linting the full current content since the latest commit (adf39efc) substantially rewrote all 7 files — dropped the report.json self-report machinery, removed "use skill X" prompt hints, and slimmed criteria to command_executed + file_exists only.

Evidence of passing run

High — PR body does not claim the changed tasks have been run and passed. The "Validation" section covers description and link validation only; the "Test plan" checkboxes are unchecked TODO items. Please edit the PR description to add a line like: Ran skill-gov-aops-policy-list-smoke (and other relocated tasks) locally and they passed.

Per-task lint

tests/tasks/uipath-governance/access-policy/get_policy_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-governance/access-policy/list_policies_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/deployed_policy_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/deployment_discovery_smoke.yaml — verdict: Low

Issues:

  • [Low] Prompt over-specification: lines 20–27 prescribe a 3-step chain ("List every governance user, list every tenant…, then pick the first user… and fetch…") plus an explicit fallback procedure naming the exact subcommand (deployment user get <PLACEHOLDER_ID>). The task tests the list→get chain, but the prompt walks the agent through it step-by-step rather than stating the goal. Suggested fix: Compress to a goal statement like "Audit AOps governance deployment state: discover which users and tenants have policy assignments, and fetch the details for one user. Save command output to ./output.txt." Let the skill teach the list→get workflow. Move the fallback instruction to a shorter note: "If a list command fails with auth error, still exercise the get subcommand once with a placeholder ID."

tests/tasks/uipath-governance/aops-policy/discover_catalog_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/list_policies_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

tests/tasks/uipath-governance/aops-policy/template_bootstrap_smoke.yaml — verdict: OK (theme-captured; see Theme 1)

Within-PR duplicates

No duplicate clusters detected. All 7 tasks exercise materially distinct CLI subcommand trees: access-policy get, access-policy list, deployed-policy get/list, deployment user/tenant, product/license-type list, aops-policy list, template list.

Themes

  • Theme 1 [Low]: All 7 tasks prescribe --output json in the prompt (e.g. line 33 in get_policy_smoke.yaml, line 33 in list_policies_smoke.yaml). Per the rubric, the skill should teach the --output json convention; the prompt should state the goal only. Mitigating factor: these are smoke tests against an unauthenticated sandbox — the skill may not be fully loaded, and --output json is a single flag that the success_criteria check for. Borderline between test-fixture hint and over-specification. Not raised per-task (theme-captured).

Conclusion

✅ Significant improvement over the previous revision — the self-report report.json anti-pattern (previously Critical) and the "use skill X" prompt hints have both been removed. All 7 tasks now use clean command_executed + file_exists criteria only. One Low finding on deployment_discovery_smoke.yaml (procedural prompt). No evidence of passing run (High, editorial). Advisory only — not blocking merge.


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.

3 participants