Summary
Retool OCI-backed AIResource support to use the upstream backstage.io/source-location convention (url:oci://…) instead of the RHDH spec.location field.
Upstream AiResource has no spec.location. Skill/rule content is referenced via backstage.io/source-location. Keep format-only OCI validation (zero registry/network I/O). An OCI UrlReader is not in scope.
Tracks Jira: RHIDP-15739 (Epic RHIDP-13942, Feature RHDHPLAN-1113).
OpenSpec for this change was updated in #3938.
Tasks
Acceptance Criteria
- AIResource entities no longer require or use
spec.location for asset location
- Valid
backstage.io/source-location: url:oci://quay.io/org/skills:latest passes ingest validation
- Malformed OCI source-location values (including bare
oci://…) are rejected with actionable errors
- Processor performs zero outbound registry/network calls
- Git/HTTPS
source-location entities continue to work and are not subject to OCI format rules
- Examples, README/docs, and tests match the OpenSpec contract
Specifications
All paths below are relative to workspaces/ai-integrations/.
openspec/changes/ai-resource-catalog-entity-kind/proposal.md
openspec/changes/ai-resource-catalog-entity-kind/design.md (esp. D2–D5, D10; RHIDP-14557 git UrlReader verification)
openspec/changes/ai-resource-catalog-entity-kind/tasks.md (Sections 1–2 and 6)
openspec/changes/ai-resource-catalog-entity-kind/specs/ai-resource-entity-schema/spec.md
openspec/changes/ai-resource-catalog-entity-kind/specs/ai-resource-catalog-ingestion/spec.md
Out of Scope
- OCI
UrlReader / registry content fetch / layer pull
- Catalog location type
oci / readLocation for discovering entities from registries
- Custom AI catalog frontend beyond standard entity-page adaptations
- Changes to
spec.scope (keep as RHDH extension)
- Replacing git/HTTPS registration flows (entity YAML still comes from normal
url/file/git locations)
Context
Related prior work:
Prefer updating the existing catalog-backend-module-catalog-backend-module-ai-resource-extensions processor(s) and tests rather than introducing a new module.
Important location-ref detail: the annotation must be url:oci://…, not bare oci://…. Bare oci://… parses as location type oci with a non-URL target and breaks future UrlReader integration.
Summary
Retool OCI-backed
AIResourcesupport to use the upstreambackstage.io/source-locationconvention (url:oci://…) instead of the RHDHspec.locationfield.Upstream
AiResourcehas nospec.location. Skill/rule content is referenced viabackstage.io/source-location. Keep format-only OCI validation (zero registry/network I/O). An OCIUrlReaderis not in scope.Tracks Jira: RHIDP-15739 (Epic RHIDP-13942, Feature RHDHPLAN-1113).
OpenSpec for this change was updated in #3938.
Tasks
spec.locationusage from AIResource OCI/git asset location support (schema/types, processor input, docs, examples)metadata.annotations["backstage.io/source-location"]as a Backstage location-refurl:oci://…(typeurl, target starts withoci://and is a well-formed OCI reference)oci://…(missingurl:prefix) and other malformed OCI refs with actionable errorsurl:oci://…annotations, bareoci://…, whitespace/malformed targets, and non-OCI source-locationsexamples/ai-resource-*.yaml) and plugin README registration guidance for the new modelCI=true yarn test --watchAll=falsestyle)Acceptance Criteria
spec.locationfor asset locationbackstage.io/source-location: url:oci://quay.io/org/skills:latestpasses ingest validationoci://…) are rejected with actionable errorssource-locationentities continue to work and are not subject to OCI format rulesSpecifications
All paths below are relative to
workspaces/ai-integrations/.openspec/changes/ai-resource-catalog-entity-kind/proposal.mdopenspec/changes/ai-resource-catalog-entity-kind/design.md(esp. D2–D5, D10; RHIDP-14557 git UrlReader verification)openspec/changes/ai-resource-catalog-entity-kind/tasks.md(Sections 1–2 and 6)openspec/changes/ai-resource-catalog-entity-kind/specs/ai-resource-entity-schema/spec.mdopenspec/changes/ai-resource-catalog-entity-kind/specs/ai-resource-catalog-ingestion/spec.mdOut of Scope
UrlReader/ registry content fetch / layer pulloci/readLocationfor discovering entities from registriesspec.scope(keep as RHDH extension)url/file/git locations)Context
Related prior work:
AIResourceOciProcessor(spec.locationmodel)spec.scopevalidationspec.location; update or supersede as needed)spec.location; update as part of this work)url:oci://…source-locationPrefer updating the existing
catalog-backend-module-catalog-backend-module-ai-resource-extensionsprocessor(s) and tests rather than introducing a new module.Important location-ref detail: the annotation must be
url:oci://…, not bareoci://…. Bareoci://…parses as location typeociwith a non-URL target and breaks future UrlReader integration.