docs(guardrails): document bring-your-own (BYOG) guardrail configurations [AL-513] - #2516
docs(guardrails): document bring-your-own (BYOG) guardrail configurations [AL-513]#2516apetraru-uipath wants to merge 8 commits into
Conversation
|
Claude finished @apetraru-uipath's task in 2m 23s —— View job Coder-eval task lint (advisory)1 task YAML changed; verdicts: 0 Critical, 0 High, 0 Medium, 1 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 a full coder-eval run of the changed task passed. The author describes component-level verification ("The check script passes on a correctly pinned artifact and fails a pin mismatch against a stubbed This is understandable given the task is tagged
…or note explicitly that the full task cannot be run on any available tenant until the feature flag is flipped. Per-task lint
|
|
Claude finished @apetraru-uipath's task in 5m 19s —— View job PR Review: docs(guardrails) — BYOG configurations AL-513
SummaryDocuments the bring-your-own guardrail (BYOG) feature across the Change-by-Change Review1.
|
| Area | Status | Notes |
|---|---|---|
| Frontmatter | Issue | description 1038 chars — 14 over the 1024 cap |
| E2E Tests | OK | byog_pinning task is well-structured with smoke-blocked tier and documented unblock criteria |
| Skill Body | OK | Bullet points, table rows, and reference links are clean |
| References & Assets | OK | New byo-configurations.md is thorough; all relative links resolve |
| Repo Hygiene | OK | No secrets, no cross-skill file imports, scoped changes; CODEOWNERS coverage via parent path (dedicated entry recommended) |
Issues for Manual Review
- CLI flag accuracy: The
--byofilter foruip agent guardrails listand the--output-filterJMESPath expressions forbyo-configurations listcannot be verified without the actual CLI. If--byois not yet shipped in the@latestCLI, agents will hit a flag-not-recognized error. FallbackOnUiPathdefault: The docs state--fallback-on-ui-pathdefaults tofalseoncreate. Verify this matches the backend — a wrong default here means agents omitting the flag get the opposite behavior.
Conclusion
Clean PR. One Medium issue: the uipath-platform description is 14 chars over the 1024-char repo cap — shorten it before merging. The CODEOWNERS gap is low-severity but worth adding. The documentation is well-structured, consistent across skills, and the test task is thoughtfully designed with fail-closed seeding, live re-fetch verification, and documented unblock criteria.
|
| ## How this feeds agent authoring | ||
|
|
||
| Agents reference a BYOG configuration **by `ValidatorName` alone** — the platform resolves the connection server-side from the stored configuration; agents never pass a connection id. The agent-authoring side (discovery from an agent-design context, not admin) is `uip agent guardrails list --byo` in `uipath-agents` — see: | ||
| - [Low-code guardrails](/uipath:uipath-agents) — `builtInValidator` guardrails authored against a specific BYOG configuration via `byoConfigurationId`. |
There was a problem hiding this comment.
byoConfigurationId is not used. byoValidatorName is the one used by the lo coded agents
There was a problem hiding this comment.
Good catch — byoConfigurationId isn't a real field. Fixed to ByoValidatorName (matches the coded-agent ByoValidator(<ValidatorName>) pattern — both low-code and coded now reference a configuration the same way). This file has since moved to a dedicated PR (#2550) so it doesn't ride on this PR's approvals — the fix is there: d4ace1ec4
|
|
||
| Empty `Data: []` is a valid result — it means the tenant has no BYOG configurations registered. | ||
|
|
||
| ## `create` |
There was a problem hiding this comment.
Confirmed against the CLI source — guardrails byo-configurations create/update run no server-side validate/probe, unlike llm-configuration byo-connections which always does POST .../validate before saving. That's a real CLI feature gap (a validate step, or a dedicated test verb), not something a docs PR can add on its own — worth a follow-up ticket against the guardrails-tool CLI. In the meantime I added a 'Known gap' section documenting this explicitly and pointing at uip is connections ping <connection-id> as the closest available partial check (confirms the connection is alive, not that it implements the guardrail contract). Moved with the rest of this file to #2550: d4ace1ec4
| - **[Integration Service](references/integration-service/integration-service.md)** — Connectors, connections, activities, resources | ||
| - **[Data Fabric](references/data-fabric/data-fabric.md)** — Entity schemas, records CRUD, query filters and aggregates, choice sets, file attachments, CSV bulk import, folder scoping | ||
| - **[LLM Gateway — BYO Connections](references/llmgateway/byo-connections.md)** — Register tenant-owned LLM keys against UiPath products | ||
| - **[Guardrails — BYOG Configurations](references/guardrails/byo-configurations.md)** — Manage tenant-registered bring-your-own guardrail (BYOG) configurations and diagnose their underlying Integration Service connections |
There was a problem hiding this comment.
Do we need to refer to this here as well? Isn't it enough to have it on line 177?
There was a problem hiding this comment.
This mirrors the existing convention for every other reference doc in this file, not something new for BYOG — LLM Gateway, Traces, Integration Service, and Data Fabric are each listed in both the Task Navigation table (quick 'I need to...' lookup) and the bottom References list (the file's own index). Line 177 and line 314 serve different browsing patterns; dropping just the BYOG entry from References would make it the one exception. Happy to revisit the whole file's convention separately if that duplication should go away everywhere, but keeping it consistent for now. This content is now on #2550.
…ions [AL-513] Covers the new BYOG CLI surface across every guardrail area: agent-authoring (low-code + coded) discovery and wiring via `--byo`/`IsByo`, the disambiguation needed once a validator has both a built-in and a BYO entry sharing the same name, review-side awareness, troubleshoot diagnosis, and a new admin-side reference for `uip guardrails byo-configurations list` mirroring the existing BYO LLM Gateway doc. `uip guardrails byo-configurations list` isn't in the published CLI catalog yet (it ships on cli's feat/al-512-agent-guardrails-byo-configurations, not yet merged), so this trips the CLI Verb Gate until that lands and the catalog snapshot refreshes — expected, not a doc error. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
cli#3298 (AL-512) merged with one review-driven change: non-404 errors now surface the backend's response body, confirming the endpoint requires an org-admin user token (rejects application tokens) and returns 403 with a detail message otherwise. Field names and command shape are unchanged from what this repo already documented. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
cli#3346 merged with two things the docs had to catch up on: - Full CRUD: `uip guardrails byo-configurations create|update|delete` (update merges supplied fields, ValidatorName/ValidatorType locked at creation, delete needs --force, 404s split into ByoGuardrailsUnavailable vs ByoGuardrailConfigurationNotFound, no `get` verb). The admin reference now documents all verbs and their exact flags (create's off-switch is `--disabled`; update's pair is `--enabled`/`--disabled`). - Semantics correction from the Agents backend: ValidatorName is unique per tenant and coded agents pass ONLY the name to ByoValidator(...) — no connection_id; the platform resolves the connection server-side. Dropped every connection_id-passing claim across platform/agents/review docs, and the troubleshoot playbook now re-enables a config via `update --enabled` instead of claiming Admin UI is the only way. Also adds the deferred BYOG lifecycle smoke task (create -> list -> disable via update -> delete --force), shape-graded like the llmgateway siblings, with a best-effort post_run sweep so a real create on the smoke tenant never leaks. New CODEOWNERS entry for the test dir. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…horing prompt Review feedback on the first cut: prompting the LLM to run the admin byo-configurations CRUD tests the wrong thing. The admin registration is now a deterministic pre_run script (seed_byog.py: reset + create the fixed-name config directly via the CLI), and the task under test is the real user thread — "add a guardrail backed by that BYO configuration to my agent." The check re-fetches the live configuration id at grade time and requires the agent.json guardrail to pin it via byoConfigurationId (no seed file in the workspace to shortcut discovery with). Replaces tests/tasks/uipath-platform/guardrails/ (admin-CRUD-via-LLM lifecycle task) with tests/tasks/uipath-agents/lowcode/guardrails/ byog_pinning/. Tagged smoke-blocked: the shared smoke tenant returns ByoGuardrailsUnavailable (feature flag off), so the seed cannot provision yet — flip to smoke once the flag is enabled (same pattern as the discovery task's CLI-version block). Verified without the flag: `uip agent validate` accepts a guardrail carrying byoConfigurationId (Status: Valid, live probe); the check script passes on a correctly pinned artifact and fails a pin mismatch (negative control) against a stubbed byo-configurations list; CLI verb and task-driver gates green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Security review on the previous commit flagged two real problems in seed_byog.py: - It bound the tenant's first arbitrary Integration Service connection to the guardrail configuration. A live credentialed connection there routes guardrail payloads (which can carry PII) to whatever third-party service it points at. The config now always uses an inert placeholder GUID — this task only pins the configuration in agent.json and never executes the guardrail, so the connection doesn't need to resolve. - It proceeded past an unreadable `list` response and swallowed failed deletes (fail-open). Now any unreadable tenant state or failed reset delete exits non-zero before touching anything. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The guardrails-reference CODEOWNERS entry isn't needed for this PR, and the conditional_unconfirm.yaml driver-pin removal landed on main on its own — both now match main. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Moves skills/uipath-platform/references/guardrails/byo-configurations.md and its SKILL.md wiring to docs/al-513-byog-admin-reference, so this PR (agent-authoring side of BYOG) doesn't need uipath-platform CODEOWNERS approval. Every remaining cross-reference to that content already goes through the skill-level /uipath:uipath-platform link, not a literal file path, so nothing here breaks while the admin-reference PR is pending. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
7124a54 to
61dccce
Compare
…ationId Same review correction (valentinabojan, on the admin-doc PR #2550) applies here too, and this is the more important place to fix it — this is what actually teaches an agent how to write agent.json. byoConfigurationId was never a real field in the guardrail schema; ByoValidatorName is what both low-code and coded agents reference a BYOG configuration by, and it's unique per tenant so no id lookup is needed. Fixed across: lowcode guardrails.md (mapping table, authoring guidance, anti-pattern rule), lowcode + review disambiguation notes, and the byog_pinning test (task description + check script's actual match key, re-verified against positive/negative stubs — including a stub asserting the old byoConfigurationId-only shape now correctly fails). Left untouched: mentions of ByoConfigurationId as a real discovery-output field (`uip agent guardrails list --byo`, `uip guardrails byo-configurations list`) — that field genuinely exists for admin-side identification, it's just not what the guardrail JSON authors. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

What changed?
Documents the bring-your-own guardrail (BYOG) feature on the agent-authoring side across every place it touches — discovery, low-code/coded authoring, review, and troubleshooting. Ticket: AL-513.
uipath-agents(low-code + coded guardrails, guardrails-recommend — 4 files): the BYOG concept, the--byofilter onuip agent guardrails list, theIsByo/Byo*fields, and thatValidatoris not unique once a BYOG config exists for that type (a tenant can have both a built-in and a BYO entry sharing the same name — disambiguate viaIsByo). A guardrail pins to a specific BYO configuration viaByoValidatorName— unique per tenant, the same value for both low-code (byoValidatorNamefield) and coded (ByoValidator(<ValidatorName>)) — with noconnection_idpassed by the agent; the platform resolves the connection server-side.uipath-review(2 files): the same disambiguation note for audit/correctness checks, plus a callout that a BYO entry'sStatus: Disabledis a tenant config switch, not a schema defect.uipath-troubleshoot: BYOG as a possible cause of a guardrail violation, a step to cross-check BYOG health via the admin CLI, and a resolution path — including re-enabling a disabled configuration — for a dead connection or disabled config.tests/tasks/uipath-agents/lowcode/guardrails/byog_pinning/— a coder-eval task covering the full agent-authoring thread. See Testing below.The admin-side reference (
uip guardrails byo-configurationsCRUD, registering a BYOG configuration) is a separate PR — #2550 — so this one doesn't carryuipath-platformCODEOWNERS approval. Every reference to that content here goes through the skill-level/uipath:uipath-platformlink, not a literal path, so there's no merge-order dependency.Review fix (valentinabojan): an earlier draft used a field named
byoConfigurationIdto pin a low-code guardrail to a BYO configuration — that field doesn't exist. Fixed everywhere in this PR (mapping table, authoring guidance, anti-pattern rule, both disambiguation notes, and thebyog_pinningtest's actual grading key) to useByoValidatorName, which is what both low-code and coded agents really reference a configuration by.How has this been tested?
scripts/check-skill-verbs.pyandscripts/check-task-driver.pyare clean on every touched file.byog_pinningtask: apre_runscript (seed_byog.py) provisions the tenant's BYOG configuration directly via the CLI — the admin prerequisite is never the agent's job. The user prompt asks for an agent guarded by that configuration; the check (check_byog_pinning.py) re-confirms the seed landed, then requires the agent.json guardrail to carrybyoValidatorNamematching it — verified against both a positive control (correct pin passes) and two negative controls (wrong name fails; the oldbyoConfigurationId-only shape correctly fails too, since that field isn't checked).seed_byog.pyregisters the configuration against an inert placeholder connection GUID, never a real Integration Service connection — this task only pins the configuration, never executes the guardrail, so no live credentialed connection needs to be involved.coder-evalrun ofskill-agent-guardrail-byog-pinningagainst the only tenant available to this session (coderevalon alpha): it fails atpre_run—seed_byog.pyexits non-zero onByoGuardrailsUnavailablebefore the agent starts (status=ERROR score=0.000 iterations=0, ~5s). This is the fail-closed design working as intended, not a task defect: no tenant currently reachable from this environment has the BYOG feature flag enabled, so the full task can't run to completion anywhere until that flag is turned on somewhere — hencesmoke-blockedrather thansmoke.smokeand run the two-model validation per the Run Skill Smoke Tests runbook.Are there any breaking changes?