Skip to content

OSAC-1531: PRD - Default Catalog Items - #129

Closed
danielerez wants to merge 5 commits into
osac-project:mainfrom
danielerez:prd/OSAC-1531
Closed

danielerez wants to merge 5 commits into
osac-project:mainfrom
danielerez:prd/OSAC-1531

Conversation

@danielerez

@danielerez danielerez commented Jul 19, 2026 •

Copy link
Copy Markdown
Contributor

PRD: Default Catalog Items

Jira: https://redhat.atlassian.net/browse/OSAC-1531

Summary

OSAC automatically publishes infrastructure templates during installation, but catalog items (the curated offerings tenants browse and order from) must be created manually. This PRD proposes an infrastructure-as-code approach: catalog item definitions live as meta/catalog.yaml metadata alongside template roles in osac-aap, discovered and published automatically via a new AAP job and Helm post-install hook, mirroring the existing publish_templates pipeline.

Default catalog items: 2 cluster (SNO, compact OpenShift) and 2 VM (Linux general-purpose, GPU-enabled Linux).

Requesting Review On

  • Whether the meta/catalog.yaml approach (colocated with template roles) is the right pattern
  • Acceptance criteria completeness
  • Open questions (prerequisite artifact loading, ServiceAccount reuse, field definitions source, multiple catalog items per role)
  • Whether the default catalog item set covers the right use cases

How to Review

  • Comment inline on specific sections
  • Review open questions 1-4: they need stakeholder input
  • Approve when the PRD accurately reflects the agreed requirements

Summary by CodeRabbit

  • Documentation
    • Added a product requirements document for automatically publishing default catalog items during installation.
    • Defined support for default cluster and compute/VM offerings.
    • Documented catalog metadata, publishing workflow, tenant visibility, idempotent updates, acceptance criteria, assumptions, dependencies, and open questions.

@openshift-ci

openshift-ci Bot commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: danielerez
Once this PR has been reviewed and has the lgtm label, please assign alonakaplan for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai

coderabbitai Bot commented Jul 19, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@danielerez, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 49 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: eba44d30-7058-4185-ba07-674cf857453f

📥 Commits

Reviewing files that changed from the base of the PR and between 1af7d3a and 38ab6e8.

📒 Files selected for processing (1)
  • enhancements/OSAC-1531-default-catalog-items/prd.md

Walkthrough

Changes

The PRD defines default cluster and VM catalog items, metadata-driven enumeration and publishing, installation-time wiring, global tenant visibility, acceptance criteria, deployment prerequisites, and unresolved implementation questions.

Default Catalog Items

Layer / File(s) Summary
Feature scope and user workflows
enhancements/default-catalog-items/prd.md
Defines the problem, scope, default catalog item categories, visibility, and workflows for Cloud Provider Admins and Tenant Users.
Publishing contracts and deployment prerequisites
enhancements/default-catalog-items/prd.md
Specifies metadata validation, idempotent upsert behavior, AAP and installer wiring, fulfillment-service assumptions, artifact dependencies, and open implementation questions.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Possibly related PRs

Suggested labels: approved, lgtm

Suggested reviewers: avishayt, jhernand, crystalchun

🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the main change: a PRD for default catalog items.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No-Hardcoded-Secrets ✅ Passed Only a PRD markdown file changed; scans found no API keys, tokens, passwords, private keys, embedded creds, or standalone base64 secrets.
No-Weak-Crypto ✅ Passed PR only adds a PRD markdown file; no weak-crypto APIs, custom crypto, or secret comparisons were introduced.
No-Injection-Vectors ✅ Passed PASS: The only changed file is a PRD markdown doc; no code changes or injection-prone constructs (eval, yaml.load, os.system, etc.) are present.
Container-Privileges ✅ Passed Only a PRD markdown file changed; no container/K8s manifests or privilege settings are present to flag.
No-Sensitive-Data-In-Logs ✅ Passed PRD contains no logging examples or sensitive fields; no passwords, tokens, PII, or internal hostnames are exposed.
Ai-Attribution ✅ Passed All AI-using commits in the PR range include Assisted-by: Claude Code; no AI-related Co-authored-by appears in the PR commits.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 9/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear, specific user-facing need. Personas (Cloud Provider Admin, Tenant User) and services (CaaS, VMaaS) explicitly identified. Six specific catalog items enumerated with resource defaults. Cross-cutting dimensions addressed where relevant (installation explicitly deferred, documentation via README in scope).
Why 2/2 Concrete business justification: empty catalog after deployment blocks self-service, creates friction for demos/evaluation/onboarding. Names the pain, describes consequences, ties to adoption — meets the bar for specific evidence.
How 1/2 Approach is specific (YAML files + README, loaded via osac create -f) but acceptance criteria mix product-verifiable checks with engineering checklists (file existence in repo). Minor design leakage: repo paths (examples/catalog-items/ in fulfillment-service) and internal template references (osac.templates.ocp_4_17_small) appear in a user-focused document.
Task 2/2 Proper enhancement that changes the user experience — tenants see a populated catalog instead of an empty one. Not a bug fix or operational task despite the implementation being content-focused.
Size 2/2 Well-scoped and coherent. All catalog items and the README serve a single purpose (out-of-box catalog content). Scope boundaries are clear with explicit out-of-scope items (bare metal, automated loading, versioning, per-tenant assignment).

Verdict: A strong, well-structured PRD with clear user need and concrete justification; the only weakness is minor design leakage (repo paths, internal template names) and acceptance criteria that mix product-verifiable outcomes with engineering file-existence checks.

Feedback: Rewrite acceptance criteria to focus on product-observable outcomes rather than repo file existence — e.g., 'After running the documented loading procedure, 6 catalog items (2 cluster, 4 VM) are visible via the public API' instead of 'YAML files exist in examples/catalog-items/'. Remove or relocate the repo path references (examples/catalog-items/ in fulfillment-service) to keep the PRD user-focused; the implementation location belongs in the design document. Consider replacing the internal template reference (osac.templates.ocp_4_17_small) with a user-facing description of what the template represents.

Critical (0)

None.

Important (2)

  1. Acceptance criteria Bump actions/setup-python from 5 to 6 #1 and Bump actions/checkout from 4 to 5 #2 are engineering checklists ('YAML example files exist in examples/catalog-items/', 'A README in examples/catalog-items/') rather than product-verifiable outcomes. Rewrite to describe what a PM or QA engineer can verify by using the product.
  2. In Scope references repo location 'shipped in the fulfillment-service repository under examples/catalog-items/' — this is a design/implementation detail about where source files live, not a user-facing outcome. Move to the design document.

Suggestions (3)

  1. The Dependencies section references internal template name 'osac.templates.ocp_4_17_small' — consider describing templates by their user-facing purpose (e.g., 'a single-node OpenShift cluster template') rather than internal identifiers.
  2. Consider briefly noting which cross-cutting dimensions are explicitly not relevant (e.g., Tenant Onboarding, Networking, Storage) to demonstrate dimension coverage was considered.
  3. The Tenant User story about 'editable fields with sensible defaults and validation' is strong — consider adding an acceptance criterion that verifies a tenant can customize a default catalog item's fields during order creation.

Review cost

Model: claude-opus-4-6
Cost: $0.6338
Tokens: 6 in / 6.1k out
Cache: 156.7k read
Active time: 2m 4s
API calls: 0

@github-actions github-actions Bot added the rfe-creator-auto-reviewed EP was reviewed by AI label Jul 19, 2026
@danielerez
danielerez marked this pull request as ready for review July 19, 2026 13:07
@openshift-ci
openshift-ci Bot requested review from chenyosef and tzvatot July 19, 2026 13:07

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@enhancements/default-catalog-items/prd.md`:
- Line 19: Update the default catalog item acceptance criteria to verify global
publication semantics for every item: assert tenant is empty, the item is
published, and Tenant Users can discover it through the public List behavior,
CLI, and UI, rather than only confirming creation or API response.
- Line 43: Update the default catalog item requirements in the PRD to define
concrete field acceptance criteria for all six YAML files: enumerate each
provisioning-consumed field path, its metadata, default where applicable,
validation schema, and whether disk size and network CIDR are mandatory. Remove
ambiguous wording and ensure the requirements are testable without adding
unsupported fields.
- Around line 17-18: Update the PRD’s dependency or acceptance-criteria sections
to explicitly define the required OpenShift release, VM template IDs, and image
references for the default catalog items, or narrow acceptance to catalog
visibility after seeding. Also state whether the unresolved prerequisite
question blocks the 0.2 milestone, while keeping the listed catalog items
unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: f9964a12-3d08-4557-9526-ca63e76a6554

📥 Commits

Reviewing files that changed from the base of the PR and between c251d3e and ca849fd.

📒 Files selected for processing (1)
  • enhancements/default-catalog-items/prd.md

Comment thread enhancements/default-catalog-items/prd.md Outdated
Comment thread enhancements/default-catalog-items/prd.md Outdated
Comment thread enhancements/default-catalog-items/prd.md Outdated
@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 10/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear, specific user-observable capabilities. Two personas identified (Cloud Provider Admin, Tenant User) with concrete user stories. Services (CaaS, VMaaS) declared. Specific catalog items named (SNO, compact OpenShift, RHEL 10, GPU RHEL, Windows Server, Windows 11). Irrelevant dimensions explicitly excluded (BMaaS, automated installation, versioning).
Why 2/2 Concrete justification with clear causal chain: platform ships no defaults → admin must author from scratch → tenants see empty catalog → self-service blocked → adoption and evaluation slowed. Names specific pain points (friction for demos, onboarding, evaluation).
How 2/2 Approach is specific (YAML example files + README with loading instructions) with measurable acceptance criteria: 6 defined items (2 cluster, 4 VM), loadable via osac create -f, globally published and visible in API/CLI/UI. Each item includes field definitions with defaults and validation. Dependencies clearly identified with impact.
Task 2/2 Proper enhancement adding new user-facing capability. Ships default catalog items that don't exist today — not a bug fix, refactor, or simple task. Enables tenant self-service from initial deployment.
Size 2/2 Tightly focused on one coherent deliverable: populate the empty catalog. Cluster defaults, VM defaults, and documentation are interdependent — shipping any subset would be incomplete. Separable concerns (automated installation, versioning, per-tenant assignment) are explicitly excluded.

Verdict: Well-structured PRD with clear user outcomes, concrete business justification, specific acceptance criteria, and focused scope — a strong example of a user-facing requirements document.

Feedback: This is a solid PRD. For minor improvement, consider specifying which exact fields are user-editable on each catalog item type (the current phrasing 'e.g., disk size, network CIDR' leaves the field list open-ended for the design phase, which is acceptable but could be more precise). The open question on image pre-loading strategy is well-framed and correctly identified as non-blocking.

Critical (0)

None.

Important (0)

None.

Suggestions (2)

  1. The user story about 'editable fields with sensible defaults and validation' could list the specific configurable fields per catalog item type to give the design phase a clearer target, though this level of detail is acceptable to defer.
  2. Consider adding a brief note on the Documentation dimension — the README is in scope, but user-facing documentation beyond the README (e.g., architecture docs or user guides) could be explicitly declared out of scope if not planned.

Review cost

Model: claude-opus-4-6
Cost: $0.5905
Tokens: 6 in / 5.0k out
Cache: 155.3k read
Active time: 1m 50s
API calls: 0

@danielerez danielerez changed the title PRD: Default Catalog Items (OSAC-1531) OSAC-1531: PRD - Default Catalog Items Jul 19, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 19, 2026 •

Copy link
Copy Markdown

@danielerez: This pull request references OSAC-1531 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the feature to target the "5.0.0" version, but no target version was set.

Details

In response to this:

PRD: Default Catalog Items

Jira: https://redhat.atlassian.net/browse/OSAC-1531

Summary

OSAC ships no default catalog items, requiring admins to define every catalog item from scratch before tenants can order resources. This PRD proposes shipping a set of example YAML files (2 cluster, 4 VM catalog items) in fulfillment-service/examples/catalog-items/ that admins can load via osac create -f, along with a README documenting the process.

Requesting Review On

  • Requirements completeness and accuracy
  • Scope (in scope and out of scope)
  • Acceptance criteria clarity
  • Open question on image pre-loading strategy (section 8.1)
  • Whether the suggested default catalog item definitions cover the right use cases

How to Review

  • Comment inline on specific sections
  • Review the open question — it needs stakeholder input
  • Approve when the PRD accurately reflects the agreed requirements

Summary by CodeRabbit

  • Documentation
  • Added a product requirements document for default catalog items.
  • Defined example catalog items for OpenShift clusters and RHEL/Windows virtual machines, including suggested resource defaults.
  • Documented how administrators can load and publish catalog items for tenant self-service.
  • Specified acceptance criteria, dependencies, and items outside the feature’s scope.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@avishayt

Copy link
Copy Markdown
Contributor

Unless I missed something, this isn't a feature - it's example content.

The PRD proposes writing YAML files and a README, putting them in fulfillment-service/examples/catalog-items/, and documenting how to load them with osac create -f. The catalog item API already exists. The CLI command already works. There's nothing to build - no new API surfaces, no new code, no new platform capabilities.

The problem statement contradicts the solution. The PRD says the pain is: "a Cloud Provider Admin must manually define every catalog item before tenants can order any resources." The proposed fix: the admin manually runs osac create -f against example files. The admin still does manual setup - just copy-paste instead of writing from scratch. If the goal were to actually solve the stated problem, the feature would be automatic catalog seeding during installation. But that's explicitly out of scope.

The dependencies make it worse. The PRD acknowledges that VM images (RHEL, Windows) and OpenShift artifacts must be separately available before any of these catalog items actually work. Since OSAC doesn't ship those images or releases, loading the default catalog items on a fresh deployment gives you a catalog full of items that can't provision anything. "Tenants can immediately browse and order resources" is misleading - they can browse, but ordering will fail until someone separately loads the backing images.

What should happen instead: This work is fine as a Jira task - "write example catalog item YAML files and a README with loading instructions." It doesn't need a PRD that flows into a design document. That pipeline is for product capabilities that require design decisions. Writing example YAML files requires content decisions (which catalog items, what resource defaults), not architecture.

@danielerez

danielerez commented Jul 19, 2026 •

Copy link
Copy Markdown
Contributor Author

Unless I missed something, this isn't a feature - it's example content.

The PRD proposes writing YAML files and a README, putting them in fulfillment-service/examples/catalog-items/, and documenting how to load them with osac create -f. The catalog item API already exists. The CLI command already works. There's nothing to build - no new API surfaces, no new code, no new platform capabilities.

The problem statement contradicts the solution. The PRD says the pain is: "a Cloud Provider Admin must manually define every catalog item before tenants can order any resources." The proposed fix: the admin manually runs osac create -f against example files. The admin still does manual setup - just copy-paste instead of writing from scratch. If the goal were to actually solve the stated problem, the feature would be automatic catalog seeding during installation. But that's explicitly out of scope.

The dependencies make it worse. The PRD acknowledges that VM images (RHEL, Windows) and OpenShift artifacts must be separately available before any of these catalog items actually work. Since OSAC doesn't ship those images or releases, loading the default catalog items on a fresh deployment gives you a catalog full of items that can't provision anything. "Tenants can immediately browse and order resources" is misleading - they can browse, but ordering will fail until someone separately loads the backing images.

What should happen instead: This work is fine as a Jira task - "write example catalog item YAML files and a README with loading instructions." It doesn't need a PRD that flows into a design document. That pipeline is for product capabilities that require design decisions. Writing example YAML files requires content decisions (which catalog items, what resource defaults), not architecture.

Sure, just assumed we still want a PRD for this (https://redhat.atlassian.net/browse/OSAC-2603).
I'll try to follow-up the suggestion to create a new sub-command to 'osac-dev' binary: osac-project/fulfillment-service#724 (comment)
Will convert to draft for now. Thanks!

@danielerez danielerez closed this Jul 19, 2026
@danielerez danielerez reopened this Jul 19, 2026
@danielerez
danielerez marked this pull request as draft July 19, 2026 14:25
@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 10/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear user-facing need. Identifies Cloud Provider Admin and Tenant User personas, names CaaS and VMaaS services, specifies six concrete catalog items. Cross-cutting dimensions (documentation, UI, installation) addressed or scoped out where irrelevant.
Why 2/2 Concrete justification: empty catalog creates friction, blocks self-service, slows evaluation/demos/onboarding. Names the pain and ties to adoption impact.
How 2/2 Acceptance criteria are specific and PM-verifiable: exact item counts (2 cluster, 4 VM), loading method (osac create -f), visibility channels (API/CLI/UI), field definition requirements (display names, editability, defaults, validation schema). Minor repo path references in scope/AC are slight design leakage but understandable for a content deliverable.
Task 2/2 Proper enhancement — changes the out-of-box experience from empty catalog to pre-populated defaults. While the deliverable is YAML files and documentation, it meaningfully alters what users experience after deployment.
Size 2/2 Well-scoped to a single coherent deliverable. Out-of-scope items are concrete and well-reasoned (bare metal, OpenShift AI, automated loading, versioning, per-tenant assignment). All in-scope items are tightly coupled.

Verdict: A strong, well-structured PRD that clearly describes a user-facing improvement with concrete justification, identified personas, specific acceptance criteria, and focused scope.

Feedback: Minor improvements: (1) Move repository paths like examples/catalog-items/ out of In Scope and acceptance criteria into delivery notes — a PRD should describe what users get, not where files live in source code. (2) The Tenant User story about 'editable fields with sensible defaults and validation' describes existing catalog item functionality rather than something new this feature introduces — consider reframing to focus on what's new (the defaults themselves and their suitability). (3) Consider briefly noting the Cloud Infrastructure Admin persona as not affected, since they manage the image/artifact prerequisites mentioned in Dependencies.

Critical (0)

None.

Important (0)

None.

Suggestions (3)

  1. Repository paths (examples/catalog-items/) in In Scope and acceptance criteria are minor design leakage — reframe as user-facing outcomes rather than source code locations.
  2. Tenant User story about editable fields describes existing catalog item capability, not something unique to this feature — reframe to emphasize the value of curated defaults.
  3. Cloud Infrastructure Admin persona is absent — a brief note acknowledging they are not affected (or noting their role in image prerequisites) would strengthen dimension coverage.

Review cost

Model: claude-opus-4-6
Cost: $0.6140
Tokens: 6 in / 5.4k out
Cache: 156.9k read
Active time: 1m 55s
API calls: 0

@avishayt

Copy link
Copy Markdown
Contributor

Sure, just assumed we still want a PRD for this (https://redhat.atlassian.net/browse/OSAC-2603). I'll try to follow-up the suggestion to create a new sub-command to 'osac-dev' binary: osac-project/fulfillment-service#724 (comment) Will convert to draft for now. Thanks!

No worries, not your fault - the feature shouldn't have existed in the first place. I also recommend skipping the subcommand in osac-dev. Let's keep things simple for now - examples and documentation, move on to the next thing that provides value.

@danielerez

danielerez commented Jul 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Overhauled the PRD: replaced static YAML examples with an infrastructure-as-code approach where catalog items are defined in osac-aap template roles (meta/catalog.yaml) and published automatically during installation, mirroring the existing publish_templates pipeline.
I.e., to have some default catalog items out-of-the-box in OSAC.

@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 8/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear user-facing outcome: tenants see default catalog items immediately after deployment. Two personas (Cloud Provider Admin, Tenant User) with 6 specific user stories. Services (CaaS, VMaaS) and specific catalog items (SNO, compact OpenShift, Linux VM, GPU VM) identified.
Why 1/2 Problem statement names real pain — empty catalog after fresh install, manual admin work blocking self-service, friction for demos/onboarding. But justification is generic ('creating friction') without quantified impact or tie to a strategic goal.
How 1/2 Heavy design leakage in In Scope and Acceptance Criteria: names internal roles (enumerate_catalog_items, publish_catalog_items), file paths (meta/catalog.yaml), Helm hook weights, AAP job templates, Pydantic validation, and internal patterns. User stories are user-focused but requirements sections read like a design spec. Acceptance criteria mix user-testable items with internal implementation checks.
Task 2/2 Genuine product feature — adds automatic catalog item seeding as a new platform capability with new automation roles and Helm hooks, not documentation or content-only work.
Size 2/2 Tightly scoped to one coherent capability. Metadata format, enumeration, publishing, Helm hook, and default item definitions all require each other. Out of scope is well-defined with clear rationale for each exclusion.

Verdict: A solid PRD with clear user outcomes and focused scope, held back by pervasive design leakage in the In Scope and Acceptance Criteria sections and a business justification that describes the gap without quantifying its impact.

Feedback: Rewrite the In Scope section to describe user-observable outcomes rather than internal roles, file paths, and playbook patterns — move implementation details (enumerate_catalog_items role, meta/catalog.yaml schema, Pydantic validation, Helm hook-weight ordering) to the design document. Strengthen the WHY by quantifying the friction: how long does manual catalog setup take, has this blocked specific demos or onboarding, how many fresh deployments are affected? Refactor acceptance criteria to be verifiable by a PM using the product — replace items like 'filter plugin validates against a Pydantic model' with observable outcomes like 'malformed catalog metadata produces a clear error in the publishing job log.'

Critical (0)

None.

Important (3)

  1. In Scope section has pervasive design leakage: names internal service roles (enumerate_catalog_items, publish_catalog_items), file paths (meta/catalog.yaml), Helm hook-weight ordering, AAP job templates, and internal patterns ('same GET/PATCH/POST pattern used by publish_templates'). These belong in the design document, not the PRD.
  2. Acceptance criteria mix user-testable items with internal implementation checks — 'enumerate_catalog_items filter plugin validates meta/catalog.yaml against a Pydantic model' and 'enumerate_catalog_items role discovers meta/catalog.yaml files from template role directories' are not verifiable by a PM using the product.
  3. Business justification describes the gap ('empty catalog', 'manual work') but never quantifies impact or ties to a strategic goal — how long does manual setup take? Has this blocked demos or onboarding? What is the cost of the status quo?

Suggestions (2)

  1. Consider adding a Tenant Admin persona if they have catalog browsing or management responsibilities distinct from Tenant User.
  2. Open questions are well-structured with owners and impact tags — consider adding a recommended path for each to accelerate decision-making during design.

Review cost

Model: claude-opus-4-6
Cost: $0.2575
Tokens: 5 in / 4.4k out
Cache: 139.5k read
Active time: 1m 30s
API calls: 0

@danielerez
danielerez marked this pull request as ready for review July 22, 2026 13:43
@openshift-ci
openshift-ci Bot requested a review from adriengentil July 22, 2026 13:43
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Daniel Erez <danielerez@gmail.com>
- Tighten acceptance criteria to explicitly verify global publication
  semantics (no tenant scope, visible via public List/CLI/UI)
- Clarify that the open question on image pre-loading does not block 0.2
- Sharpen field definition AC wording for testability

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Daniel Erez <danielerez@gmail.com>
Rewrite from static YAML examples approach to infrastructure-as-code
catalog items in osac-aap, published automatically alongside templates
via AAP job and Helm post-install hook.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Daniel Erez <danielerez@gmail.com>
Rename enhancements/default-catalog-items to
enhancements/OSAC-1531-default-catalog-items to match the required
OSAC-<jira-key>-<slug> format.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Daniel Erez <danielerez@gmail.com>
@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 9/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear user-facing need with two personas (Cloud Provider Admin, Tenant User) each having specific user stories. Services (CaaS, VMaaS) and concrete catalog items (SNO, compact OpenShift, Linux VM, GPU VM) are identified. Dimensions coverage is appropriate.
Why 2/2 Concrete justification: names the specific pain (empty catalog after install, manual admin work required), describes consequences (tenants cannot self-service), and ties to adoption friction for new deployments, demos, and onboarding.
How 1/2 Heavy design leakage in In Scope and acceptance criteria. Prescribes internal implementation: meta/catalog.yaml file format, enumerate_catalog_items and publish_catalog_items AAP roles, Helm hook-weight ordering, GET/PATCH/POST upsert pattern, Pydantic model validation. User stories are clean but the surrounding sections read like a design document.
Task 2/2 Proper product feature enhancement introducing new platform automation capabilities (catalog item discovery pipeline, publishing automation, installation hooks), not just content or documentation.
Size 2/2 Tightly coupled, right-sized scope. Metadata format, enumeration, publishing, and Helm hook are interdependent parts of one pipeline. Out of scope is well-defined with clear reasoning for each exclusion.

Verdict: Strong PRD with clear user need, concrete business justification, and well-scoped feature boundaries, held back from a perfect score by significant design leakage in the In Scope and acceptance criteria sections.

Feedback: The In Scope section prescribes implementation details that belong in the design document — specific AAP role names, file paths (meta/catalog.yaml), Helm hook-weight ordering, and the GET/PATCH/POST upsert pattern. Rewrite In Scope as user-observable capabilities (e.g., 'default catalog items are automatically published during installation and updated during upgrades') and move implementation choices to the EP. Similarly, acceptance criteria like 'the enumerate_catalog_items filter plugin validates against a Pydantic model' are internal — reframe as 'invalid catalog item definitions are rejected with actionable error messages during publishing.'

Critical (0)

None.

Important (2)

  1. Design leakage in In Scope: names internal components (enumerate_catalog_items role, publish_catalog_items role, meta/catalog.yaml path, Helm hook-weight ordering, AAP job template name) that prescribe implementation. Rewrite as user-observable outcomes.
  2. Acceptance criteria mix user-testable requirements with internal implementation checks — 'enumerate_catalog_items filter plugin validates meta/catalog.yaml against a Pydantic model' is not verifiable by a PM using the product.

Suggestions (2)

  1. Consider adding a Tenant Admin persona story — Tenant Admins may want to see which catalog items are available to their tenants or understand the difference between default and custom catalog items.
  2. The acceptance criterion 'A meta/catalog.yaml schema is defined and documented' could be reframed as a user outcome: 'Cloud Provider Admins can define custom catalog items using a documented metadata format alongside template definitions.'

Review cost

Model: claude-opus-4-6
Cost: $0.2254
Tokens: 5 in / 3.4k out
Cache: 139.5k read
Active time: 1m 16s
API calls: 0

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@enhancements/default-catalog-items/prd.md`:
- Around line 57-62: Update the catalog-item publishing requirements in the PRD
to define the immutable identity key used by GET/PATCH/POST upserts, and specify
that reruns locate items by this key while applying changes to mutable metadata
such as name or title without creating duplicates.
- Line 56: Update the acceptance criterion for enumerate_catalog_items to remove
bare metal instance objects from this milestone, while retaining cluster and
compute instance typed objects; alternatively, explicitly scope the criterion to
generic enumeration without bare-metal metadata or publication.
- Line 55: Update the acceptance criterion in the default catalog items PRD to
require all four catalog items: SNO, compact OpenShift, general-purpose Linux
VM, and GPU-enabled Linux VM, each represented by the relevant cluster or
compute instance template role with a meta/catalog.yaml file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 11417adc-4d70-44ea-ade3-25c8f17d82f7

📥 Commits

Reviewing files that changed from the base of the PR and between ca849fd and 1af7d3a.

📒 Files selected for processing (1)
  • enhancements/default-catalog-items/prd.md

### Acceptance Criteria

- [ ] A `meta/catalog.yaml` schema is defined and documented, supporting catalog item fields: `name`, `title`, `description`, `published`, and `field_definitions` (with `name`, `title`, `description`, `type`, `default`, `editable`, and `validation`)
- [ ] At least one cluster template role and one compute instance template role include a `meta/catalog.yaml` file defining default catalog items

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Require all four default catalog items.

“At least one” cluster and compute role permits an implementation that omits the compact cluster and GPU VM, despite both being in scope. Require SNO, compact OpenShift, general-purpose Linux VM, and GPU-enabled Linux VM in acceptance coverage.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/default-catalog-items/prd.md` at line 55, Update the acceptance
criterion in the default catalog items PRD to require all four catalog items:
SNO, compact OpenShift, general-purpose Linux VM, and GPU-enabled Linux VM, each
represented by the relevant cluster or compute instance template role with a
meta/catalog.yaml file.


- [ ] A `meta/catalog.yaml` schema is defined and documented, supporting catalog item fields: `name`, `title`, `description`, `published`, and `field_definitions` (with `name`, `title`, `description`, `type`, `default`, `editable`, and `validation`)
- [ ] At least one cluster template role and one compute instance template role include a `meta/catalog.yaml` file defining default catalog items
- [ ] An `enumerate_catalog_items` role discovers `meta/catalog.yaml` files from template role directories and produces typed catalog item objects (cluster, compute instance, bare metal instance)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the acceptance criterion with the stated scope.

Bare metal catalog items are explicitly out of scope, but this criterion requires bare-metal typed objects. Remove that type for this milestone, or clarify that only generic enumeration support is required and no bare-metal metadata or publication is delivered.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~56-~56: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...tem objects (cluster, compute instance, bare metal instance) - [ ] A `publish_catalog_item...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@enhancements/default-catalog-items/prd.md` at line 56, Update the acceptance
criterion for enumerate_catalog_items to remove bare metal instance objects from
this milestone, while retaining cluster and compute instance typed objects;
alternatively, explicitly scope the criterion to generic enumeration without
bare-metal metadata or publication.

Comment thread enhancements/OSAC-1531-default-catalog-items/prd.md
- Require all four default catalog items in acceptance criteria
- Remove bare metal from enumerate_catalog_items scope

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Daniel Erez <danielerez@gmail.com>
@@ -0,0 +1,114 @@
# Default Catalog Items

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This feels like a feature of Enclave. Imagine a wizard flow:

  1. Select RHEL versions that you'd like to load from a list
  2. Select OpenShift versions that you'd like to load from a list
  3. Select the instance types that you'd like to pre-create

Note that even with this the admin would still need to configure a storage backend, storage tiers, etc. so it still doesn't get us to being able to launch a workload immediately.

@maorfr @liatb-rh @gamli75

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This feels like a feature of Enclave. Imagine a wizard flow:

  1. Select RHEL versions that you'd like to load from a list
  2. Select OpenShift versions that you'd like to load from a list
  3. Select the instance types that you'd like to pre-create

Note that even with this the admin would still need to configure a storage backend, storage tiers, etc. so it still doesn't get us to being able to launch a workload immediately.

@maorfr @liatb-rh @gamli75

@AlonaKaplan @tzvatot @CrystalChun WDYT ^
Should we just settle on some examples in the codebase for now then? I.e. as done in: osac-project/fulfillment-service#724

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I'm ok with it. The idea is to have something useful post install so users can start creating clusters/VMs/BMs.
These yaml examples (or a CLI sub command if that's what will be used eventually) answers that purpose.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yaml examples sounds fine to me

@github-actions

Copy link
Copy Markdown

AI EP Review: EP-129

Score: 9/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Clear desired outcome: default catalog items are automatically published during installation so tenants can browse and order immediately. Two personas (Cloud Provider Admin, Tenant User) have well-written user stories. Services (CaaS, VMaaS) and specific catalog items (SNO, compact OpenShift, Linux VM, GPU Linux VM) are identified. Strong WHAT.
Why 2/2 Concrete justification in the Problem Statement: fresh installs leave an empty catalog, tenants cannot self-service until an admin hand-crafts items, creating friction for deployments, demos, and onboarding. Names the pain, describes the consequence, ties to adoption. Solid WHY.
How 1/2 The approach is extremely specific but over-prescribes implementation — the In Scope section names Ansible roles (enumerate_catalog_items, publish_catalog_items), playbooks, YAML schemas (meta/catalog.yaml), AAP job templates, and Helm hook configuration. Only 2 of 10 acceptance criteria are PM-verifiable (items visible via API/CLI/UI after install; upsert idempotency). The rest are engineering checklists (Pydantic validation, role discovery, playbook chaining). The approach is clear but measura
Task 2/2 This is a genuine platform capability enhancement: automating catalog item publishing as part of the installation workflow, with a code-driven metadata format. While it includes creating content (default YAML definitions), the core deliverable is a new publishing mechanism integrated into installation. Not a task, bug, or docs-only change.
Size 2/2 Focused on a single coherent feature — automated catalog item publishing during installation. Sub-parts (metadata format, enumeration, publishing, Helm hook, default definitions) all require each other to function. Cannot ship the format without the publishing mechanism, or the mechanism without at least one default item. Tightly coupled, well-scoped.

Verdict: A well-motivated PRD with clear user need and focused scope, held back by extensive design leakage in the In Scope and acceptance criteria sections that prescribe implementation rather than defining measurable user outcomes.

Feedback: Move implementation details (Ansible role names, playbook names, meta/catalog.yaml schema, AAP job template names, Helm hook-weight ordering, Pydantic validation) from In Scope and acceptance criteria into the design document — the PRD should state what users and admins can observe, not which internal components deliver it. Rewrite acceptance criteria as PM-verifiable scenarios: 'After a fresh install, a tenant can list at least 4 catalog items (2 cluster, 2 VM) via the CLI or UI without any admin action' rather than 'An enumerate_catalog_items role discovers meta/catalog.yaml files.' Consider whether Tenant Admin needs coverage — they may need to see or manage catalog item visibility within their organization.

Critical (0)

None.

Important (2)

  1. Heavy design leakage in 'In Scope': 6 of 8 bullets name internal implementation components (Ansible roles, playbooks, YAML schemas, AAP job templates, Helm hooks with hook-weight ordering). These belong in the design document, not the PRD. Rewrite scope bullets as user-observable capabilities: e.g., 'Default catalog items are automatically available after installation' instead of prescribing the enumerate/publish/Helm-hook mechanism.
  2. Acceptance criteria are engineering checklists: 8 of 10 ACs describe internal implementation tasks (role discovery, playbook chaining, Pydantic validation, AAP job registration) that a PM cannot verify by using the product. Rewrite as end-to-end scenarios: 'After install, listing catalog items returns the 4 defaults', 'After upgrade, catalog items reflect updated definitions without duplicates', 'Each catalog item shows field definitions with display names and defaults in the UI'.

Suggestions (2)

  1. Consider whether the Tenant Admin persona is affected — tenant admins may need to manage catalog item visibility or create org-scoped catalog items in the future, and acknowledging this (even as out of scope) would strengthen dimension coverage.
  2. The open questions are well-structured with owners and impact — consider proposing a recommended resolution for each to accelerate decision-making during design review.

Review cost

Model: claude-opus-4-6
Cost: $0.6753
Tokens: 6 in / 8.1k out
Cache: 151.7k read
Active time: 2m 46s
API calls: 0

@github-actions

Copy link
Copy Markdown

AI Design Review: EP-129

Score: 1/8 | Verdict: FAIL

Criterion Score Notes
Feasibility 0/2 The document is a PRD, not a design. It contains no implementation details expected of a design document: no proto schemas, no data structures or error codes, no validation rules, no lifecycle operation coverage at the implementation level, and no failure handling or recovery strategies. Risks are framed as open questions (appropriate for a PRD) rather than specific technical risks with concrete mitigations (expected in a design). The PRD describes WHAT should happen but not HOW.
Testability 0/2 No test plan of any kind. No unit/integration/e2e strategy is described. No graduation criteria. The acceptance criteria are PM-verifiable scenarios (appropriate for a PRD), not engineering test strategies with specific scenarios, infrastructure, and coverage targets as required by a design document.
Scope 1/2 The PRD has well-defined In Scope/Out of Scope sections with specific items and rationale. Services are declared (CaaS, VMaaS). Target milestone stated (0.2). Dependencies are well-documented. However: no alternatives section exists, and several cross-cutting dimensions from osac-dimensions.md are not addressed (E2E testing, documentation, UI beyond a brief mention). The In Scope section mixes user-visible outcomes with implementation details (Ansible role names, Helm hooks, playbook names), whi
Architecture 0/2 The document is a PRD, not a design document. It contains no architectural content: no proto schemas or API design, no CRD/controller patterns, no tenant isolation annotations on new resources, no spec/status ownership analysis, no cross-repo dependency analysis at the implementation level. While it names components at a high level (osac-aap roles, fulfillment-service private API, osac-installer Helm hooks), it does not describe how they integrate architecturally, what data flows between them, o

Verdict: This PR submits a PRD (prd.md), not a design document (design.md), so it fundamentally lacks the architectural detail, implementation specifics, and test plans that the design review rubric requires — resulting in three zero-scored criteria and an automatic fail.

Feedback: The PRD itself is well-structured with clear problem statement, specific scope boundaries, and thoughtful open questions — but it is not a design document. To pass design review, a companion design.md is needed covering: proto schemas for catalog item metadata, the publish workflow with error handling and failure recovery, controller/reconciler integration details, tenant isolation annotations, RBAC analysis, and a concrete test plan with unit/integration/e2e scenarios. Additionally, the In Scope section leaks implementation details (Ansible role names, Helm hook weights, Pydantic models) that belong in the design, not the PRD — refactor these out per review-patterns.md guidance.

Critical (3)

  1. Wrong document type: PR contains prd.md but no design.md — the design review rubric requires a design document with architecture, API schemas, implementation details, and test plans.
  2. No test plan: Neither a test strategy nor graduation criteria are present anywhere in the document.
  3. No architectural content: No proto schemas, no controller patterns, no tenant isolation annotations, no cross-repo dependency analysis at the implementation level.

Important (4)

  1. Design leakage in PRD: The In Scope section names specific Ansible roles (enumerate_catalog_items, publish_catalog_items), playbook files, Helm hook-weight ordering, Pydantic models, and API endpoint paths — these implementation details belong in the design document per review-patterns.md.
  2. No alternatives section: Neither the PRD nor a design document considers alternative approaches (e.g., static YAML seeding vs. Ansible-based publishing, CRD-based catalog definitions vs. API-driven).
  3. Missing dimension coverage: E2E testing strategy, documentation plan, and detailed UI impact are not addressed or explicitly deferred.
  4. Open questions unresolved: Four open questions (prerequisite artifact loading, ServiceAccount, field definition source, multiple catalog items per role) are flagged but unresolved — these should be settled before or within the design document as they affect architecture.

Suggestions (3)

  1. The PRD's problem statement, scope, user stories, and dependencies sections are strong — carry these forward when drafting the design document.
  2. Consider referencing the vmaas EP from the reference library as a calibration benchmark, since it covers similar template-based provisioning patterns.
  3. The meta/catalog.yaml schema concept mentioned in scope would benefit from a concrete example in the design document showing the full YAML structure with all supported fields.

Review cost

Model: claude-opus-4-6
Cost: $0.3831
Tokens: 6 in / 4.3k out
Cache: 179.1k read
Active time: 1m 35s
API calls: 0


## Out of Scope

- Bare metal catalog items: these depend on installation-specific inventory and are not generalizable as defaults

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

What are the issues? The BareMetailInstance spec is not specific to any inventory backends. InstanceTypes maybe an issue, as the cloud admin provider must curate them. (Note that might be the same issue with DiskImages: #145 (comment))

**Impact:** `meta/catalog.yaml` schema

A single template role (e.g., `ocp_virt_vm`) may back multiple catalog items (e.g., "Linux VM" and "GPU Linux VM") with different field definition defaults. Should `meta/catalog.yaml` support a list of catalog item definitions, or should each catalog item be defined in a separate role directory? The list approach keeps related offerings together; separate roles give each catalog item its own task files.

@adriengentil adriengentil Jul 24, 2026 •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should template default spec values be deprecated/removed as catalog items will the source of truth for such information? https://redhat-internal.slack.com/archives/C08ESMFV85Q/p1784883619304099

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Hm. In what way do catalog items become the source of truth? They're supposed to be a presentation layer for templates. I would assume that the template is the thing that actually needs specific input parameters and thus would be the source of truth for defining the parameters and sensible defaults. Catalog Items of course can prescribe different values for specific parameters that are based on the circumstances and how a CSP wants to curate/present templates.


OSAC automatically publishes infrastructure templates during installation via the `publish_templates` AAP job, but catalog items (the curated offerings tenants actually browse and order from) must be created manually by a Cloud Provider Admin after deployment. This means that after a fresh install, tenants see an empty catalog and cannot self-service until an admin has hand-crafted catalog items via the API or CLI. There is no code-driven mechanism to define, version, or automatically publish default catalog items, creating friction for new deployments, demos, and onboarding.

## In Scope

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

There is a lot of implementation detail in this section, which should be saved for a design doc. For example, does the product require "A publish_catalog_items playbook in osac.service that chains enumeration and publishing, analogous to the existing publish_templates.yaml playbook" ? No. But the product probably requires a problem to be solved that the aforementioned example solves. In PRDs we should be focusing on the problem, not the solution.

- **Services:** CaaS (cluster catalog items), VMaaS (VM catalog items)
- **Target milestone:** 0.2

## Out of Scope

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I would add that maintaining or upgrading catalog items over time is out of scope. We can generate some "getting started" data that works out of the box, but expect the CSP to take ownership of it.


- As a Cloud Provider Admin, I want default catalog items to be automatically published during platform installation so that tenants can browse and order resources immediately after deployment without manual catalog configuration.
- As a Cloud Provider Admin, I want to define custom catalog items as code in Ansible role metadata (`meta/catalog.yaml`) so that I can version-control, review, and customize the catalog offerings alongside the template definitions they reference.
- As a Cloud Provider Admin, I want the catalog item publishing to be idempotent (upsert semantics) so that rerunning the installer or upgrading the platform updates existing catalog items without creating duplicates.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

WDYT about making the platform's creation of catalog items a 1-time activity during installation? It's a lot easier if we treat the initial catalog items as example data that gets a CSP started out-of-the-box, but assume they'll take ownership and customize them. We have to keep in mind that the CSP might not like the default catalog items, and is likely to modify or delete them. We don't want to be trying to merge our changes with theirs down the road.

- As a Cloud Provider Admin, I want to define custom catalog items as code in Ansible role metadata (`meta/catalog.yaml`) so that I can version-control, review, and customize the catalog offerings alongside the template definitions they reference.
- As a Cloud Provider Admin, I want the catalog item publishing to be idempotent (upsert semantics) so that rerunning the installer or upgrading the platform updates existing catalog items without creating duplicates.

### Tenant User

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I don't think the tenant user necessarily plays any role in this feature. The CSP has to get their own service offerings in order before they invite their customers (tenants) to start using the system. If we include some default catalog items, that just helps the CSP.

The tenant doesn't care where the global catalog items came from.

**Owner:** VMaaS / CaaS / Installer teams
**Impact:** Dependencies, installation workflow, usability on fresh deployments

Default catalog items reference VM container disk images and OpenShift release artifacts that must exist in the deployment environment before provisioning can succeed. Catalog items can be published and browsed without these artifacts, but ordering will fail until they are in place. How should these prerequisite artifacts be loaded into a fresh deployment? Options include a separate seeding job (similar to `publish_catalog_items`), documentation-only guidance, or integration with the installer. This feature documents the dependency but does not solve the preloading problem; the mechanism is tracked separately.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It's a reasonable idea to make the loading of default "example" data like this a discrete action that is both part of the installation and can be independently initiated later.

openshift-merge-bot Bot pushed a commit that referenced this pull request Jul 30, 2026
…comment thread)

Follow-up to Eran Cohen's OSAC-2870 comment identifying resolvable Jira
keys for 4 of the 8 remaining unrenamed directories, plus independent
verification/correction of a 5th:

- catalog-items -> OSAC-1002-catalog-items
  (NOT OSAC-1531 as originally suggested by directory-name similarity —
  verified via content: OSAC-1002's Jira description explicitly links
  PR #17, the exact PR that created this directory. OSAC-1531/PR #129's
  enhancements/OSAC-1531-default-catalog-items/ is a separate, later,
  narrower feature that assumes this catalog item API already exists —
  no actual duplication between the two.)
- dns-api -> OSAC-1050-dns-api
  (dir + originating PR #29 both created 2026-03-17; problem statement
  nearly verbatim match; reporter Dan Manor = author dmanor)
- organizations -> OSAC-1030-organizations
  (dir + originating PR #14 both created 2025-12-21; Jira explicitly
  links PR #14)
- vm-api-fields -> OSAC-1034-vm-api-fields
  (dir + originating PR #21 both created 2026-01-27; parent Epic OSAC-61
  authored by Michael Hrivnak = dir author mhrivnak)
- repository-consolidation -> OSAC-1732-repository-consolidation
  (Epic-level key, not parent Feature OSAC-2053: OSAC-2053 is a broad
  'CI Modernization & Quality' umbrella with 10 unrelated sibling Epics,
  while OSAC-1732's title is a word-for-word match of the EP's own title
  and Jira explicitly links PR #40, the exact originating PR. Also
  self-authored by Eran Cohen, who filed both.)

Filled in tracking-link frontmatter for all 5 (previously empty/TBD).
Updated 10 cross-references across 8 other files, including two
hardcoded GitHub blob links in organizations/ui-design.md that pointed
at the pre-rename path.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Tommy Hughes <tohughes@redhat.com>
@danielerez

Copy link
Copy Markdown
Contributor Author

Pushed some examples and docs to the codebase as discussed: osac-project/fulfillment-service#972
So closing this PR for now.

@danielerez danielerez closed this Jul 30, 2026
empovit pushed a commit to empovit/osac-enhancement-proposals that referenced this pull request Aug 2, 2026
…comment thread)

Follow-up to Eran Cohen's OSAC-2870 comment identifying resolvable Jira
keys for 4 of the 8 remaining unrenamed directories, plus independent
verification/correction of a 5th:

- catalog-items -> OSAC-1002-catalog-items
  (NOT OSAC-1531 as originally suggested by directory-name similarity —
  verified via content: OSAC-1002's Jira description explicitly links
  PR osac-project#17, the exact PR that created this directory. OSAC-1531/PR osac-project#129's
  enhancements/OSAC-1531-default-catalog-items/ is a separate, later,
  narrower feature that assumes this catalog item API already exists —
  no actual duplication between the two.)
- dns-api -> OSAC-1050-dns-api
  (dir + originating PR osac-project#29 both created 2026-03-17; problem statement
  nearly verbatim match; reporter Dan Manor = author dmanor)
- organizations -> OSAC-1030-organizations
  (dir + originating PR osac-project#14 both created 2025-12-21; Jira explicitly
  links PR osac-project#14)
- vm-api-fields -> OSAC-1034-vm-api-fields
  (dir + originating PR osac-project#21 both created 2026-01-27; parent Epic OSAC-61
  authored by Michael Hrivnak = dir author mhrivnak)
- repository-consolidation -> OSAC-1732-repository-consolidation
  (Epic-level key, not parent Feature OSAC-2053: OSAC-2053 is a broad
  'CI Modernization & Quality' umbrella with 10 unrelated sibling Epics,
  while OSAC-1732's title is a word-for-word match of the EP's own title
  and Jira explicitly links PR osac-project#40, the exact originating PR. Also
  self-authored by Eran Cohen, who filed both.)

Filled in tracking-link frontmatter for all 5 (previously empty/TBD).
Updated 10 cross-references across 8 other files, including two
hardcoded GitHub blob links in organizations/ui-design.md that pointed
at the pre-rename path.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Tommy Hughes <tohughes@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants