You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracking epic for follow-up work introduced by #1072 (the top-level github.com/NVIDIA/aicr facade). Each child is independently reviewable and mergeable.
Status: ✅ closed — all four children merged.
Motivation
PR #1072 ships the aicr.Client facade defined by #1071 and lands the per-Builder DataProvider isolation that #986 was scoped to provide. The facade is functional, but to actually deliver the architectural payoff and honor its documented semver contract, several deferred items need to land.
Without these:
The codebase carries three independent wiring paths for DataProvider → Builder → Bundler → Validator (CLI, REST, facade).
The facade's "Public (stable)" contract identity-aliases types from packages marked Internal / "Public (evolving)" in docs/integrator/public-api.md, undermining the semver promise.
✅ docs/integrator/public-api.md matches the actual exported surface (no Internal types identity-aliased into the stable facade tier — see "Facade type ownership" section).
chore(recipe): remove back-compat shims introduced by #1107
The Stage 2 of #983. Now that #1108 migrated all in-tree callers, the global-path shims (SetDataProvider, DefaultRegistry, catalog.Load, LoadFromFile, config.ResolveCriteria) can be removed. Breaking change for external Go importers.
feat(client/v1): wrap remaining facade alias types (Recipe, AllowLists, Criteria, CriteriaRegistry)
Completes the #1078 pattern for the recipe-tier aliases introduced by #1077. Requires resolving the existing dual Recipe / RecipeResult surface first — bigger design discussion.
Out of scope (separate work)
OCI recipe sources (placeholder in aicr.go returning ErrCodeUnavailable)
Summary
Tracking epic for follow-up work introduced by #1072 (the top-level
github.com/NVIDIA/aicrfacade). Each child is independently reviewable and mergeable.Status: ✅ closed — all four children merged.
Motivation
PR #1072 ships the
aicr.Clientfacade defined by #1071 and lands the per-Builder DataProvider isolation that #986 was scoped to provide. The facade is functional, but to actually deliver the architectural payoff and honor its documented semver contract, several deferred items need to land.Without these:
DataProvider → Builder → Bundler → Validator(CLI, REST, facade).docs/integrator/public-api.md, undermining the semver promise.pkg/recipe.Builderusers (today:pkg/api/server.go) remain exposed.pkg/recipe's public surface.Final status
Closed: 2026-05-29
Children
refactor(recipe): move _ForTesting cache helpers off the public surfacefeat(cli,api): migrate CLI and REST server to consume aicr.Clientfeat(aicr): wrap facade alias types as facade-owned structsfeat(recipe): push owner-token guard down to pkg/recipe.RecipeResultAdjacent work landed alongside the epic
These weren't original children but ship in the same area and were folded into the rollout:
pkg/aicr/(cleaner project layout)pkg/aicr/topkg/client/v1/(versioned SDK location, matchespkg/api/validator/v1pattern) in the same PR as the alias wrappingpkg/api/validator/v1topkg/validator/v1(symmetric withpkg/client/v1;pkg/api/is now consistently HTTP-handler-only)Acceptance — all met
docs/integrator/public-api.mdmatches the actual exported surface (no Internal types identity-aliased into the stable facade tier — see "Facade type ownership" section).pkg/api/server.goandpkg/cli/no longer constructrecipe.Builder/bundler.Bundlerdirectly (migrated by feat(cli,api): consume aicr.Client facade (#1077) #1108).make qualifyclean throughout.Follow-up work (tracked separately, post-epic)
These surfaced during the epic and were explicitly scoped out to keep PRs focused. Each has its own tracking issue:
feat(recipe): add context.Context to DataProvider interface for cancellable I/Ochore(recipe): remove back-compat shims introduced by #1107SetDataProvider,DefaultRegistry,catalog.Load,LoadFromFile,config.ResolveCriteria) can be removed. Breaking change for external Go importers.feat(client/v1): wrap remaining facade alias types (Recipe, AllowLists, Criteria, CriteriaRegistry)Recipe/RecipeResultsurface first — bigger design discussion.Out of scope (separate work)
aicr.goreturningErrCodeUnavailable)RecipeRequest.PinnedName/PinnedVersion)Related
DataProvider(adjacent, surfaced during refactor(recipe,validator): per-DataProvider sources + criteria-registry de-globalization #1107 review)pkg/aicr/(later moved topkg/client/v1/in feat(aicr): wrap facade alias types as facade-owned structs #1111)pkg/validator/v1SetDataProviderStage 1 deprecation marker