External Registry and Validation - cprima-forks/uipath-ai-skills GitHub Wiki
External Registry and Validation Pipeline
A structured activity catalog extracted from NuGet packages, combined with uipath pack for CI/CD validation, addresses the two main gaps in the current design: no version-aware attribute registry, and no Studio-acceptance testing.
The uips-fixtures Activity Catalog
The uips-fixtures project extracts activity metadata directly from .nupkg files and produces structured catalogs. The schema (catalog/schemas/v0.1/activity-catalog.schema.json) defines:
Source provenance:
{
"kind": "nuget-package",
"id": "UiPath.UIAutomation.Activities",
"version": "23.10.20"
}
Activity definition:
{
"id": "UiPath.UIAutomation.Activities.NTypeInto@UiPath.UIAutomation.Activities/23.10.20",
"fullName": "UiPath.UIAutomation.Activities.NTypeInto",
"displayName": "Type Into",
"members": [
{
"name": "EmptyFieldMode",
"memberKind": "property",
"dataType": "UiPath.UIAutomation.Activities.EmptyFieldMode",
"isRequiredArgument": false
}
]
}
The compound ID {fullName}@{packageId}/{packageVersion} is the stable key for lookups. Two curated sets are currently available: reframework-stable (23.10.x) and watchful-anvil (23.10.x with additional packages).
How This Relates to the Generator Refactoring
The catalog provides the "thin registry" layer: per (packageId, version), what members does each activity have. A version-aware generator would:
- Load the target project's
project.jsondependencies - Look up each activity in the catalog for the matching package version
- Emit only members present in that version's catalog entry
The catalog does not encode structural knowledge (child element placement, wrapping rules, conditional attribute names) — see Friction: Structural Knowledge in F-Strings. Those concerns remain in generator-specific assembly code.
The uipath pack Validation Loop
uipath pack (UiPath CLI / uipc) compiles a UiPath project without Studio:
- Resolves NuGet dependencies
- Validates activity references against the resolved packages
- Fails with specific errors if an activity attribute does not exist in the resolved package version
This is the CI/CD-friendly substitute for "open in Studio and check for errors".
Proposed Pipeline
.nupkg files
→ activity catalog (uips-fixtures extraction)
→ version-aware registry
→ dynamic generator (consulting registry for attribute set)
→ generated .xaml + project.json
→ uipath pack
→ pass: attribute set is valid for this package version
→ fail: specific error identifying the invalid attribute
What This Closes
| Gap | Closed by |
|---|---|
| Attributes hardwired to 24.10 | Registry keyed by (packageId, version) |
| No Studio-acceptance testing | uipath pack in CI/CD |
{x:Null} load-bearing vs defensive |
Pack failure on removal identifies required nulls |
| Manual update when new Studio ships | Re-extract catalog from new .nupkg, re-run pipeline |
Current Status
The catalog extraction code and the uips-fixtures catalog are maintained separately from this repository. Contribution of the catalog data to uipath-ai-skills would require agreement on the registry format and the generator refactoring described in Friction: Generators as Registry.