Skip to content

OSAC-2452: add UI requirements to catalog items EP - #115

Merged
openshift-merge-bot[bot] merged 15 commits into
osac-project:mainfrom
ElayAharoni:feat/catalog-items-ui-reqs
Jul 21, 2026
Merged

openshift-merge-bot[bot] merged 15 commits into
osac-project:mainfrom
ElayAharoni:feat/catalog-items-ui-reqs

Conversation

@ElayAharoni

@ElayAharoni ElayAharoni commented Jul 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Adds a UI section to the catalog items enhancement proposal covering management screens for Cloud Provider Admins and Tenant Admins
  • Covers: role-gated navigation, catalog item list pages (with role-specific behavior), create/edit forms with field definitions editor, detail page, delete protection, and consumer catalog page alignment
  • Updates graduation criteria and test plan with UI-specific requirements
  • Cross-references the Configuration Wizard PRD for the consumer-side provisioning flow

What's added

The EP was written before UI work started and covered only API, database, and CLI. This PR adds the missing UI layer:

Section Content
Navigation & role gating New "Administration > Catalog Management" sidebar entry, visible to admin roles only
List page (CSP Admin) All catalog items across tenants, type filter, search, publish/unpublish/delete actions
List page (Tenant Admin) Tenant-scoped view, global items read-only, scope column
Create form Full-page form with general fields + repeatable field definitions editor
Edit form Same layout, template locked, FieldMask-based update
Detail page Read-only view with related CNAs
API integration Hook table mapping UI operations to REST/gRPC endpoints by role
Test plan UI-specific test scenarios added
Graduation criteria UI completeness criteria added

Test plan

  • Review UI section for completeness against the API design
  • Verify field definitions editor covers all FieldDefinition properties
  • Confirm role-gating rules match the Tenancy and Authorization section
  • Check cross-references to provisioning wizard PRD are accurate

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Updated the enhancement’s “last-updated” date to reflect the latest changes.
    • Expanded catalog item workflow documentation with role-specific requirements for Cloud Provider Admins, Tenant Admins, and Tenant Users, including lifecycle behavior and scope/visibility rules.
    • Added deletion protection requirements to prevent deleting templates referenced by one or more catalog items (published or unpublished).

@openshift-ci-robot

openshift-ci-robot commented Jul 14, 2026 •

Copy link
Copy Markdown

@ElayAharoni: This pull request references OSAC-2452 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:

Summary

  • Adds a UI section to the catalog items enhancement proposal covering management screens for Cloud Provider Admins and Tenant Admins
  • Covers: role-gated navigation, catalog item list pages (with role-specific behavior), create/edit forms with field definitions editor, detail page, delete protection, and consumer catalog page alignment
  • Updates graduation criteria and test plan with UI-specific requirements
  • Cross-references the Configuration Wizard PRD for the consumer-side provisioning flow

What's added

The EP was written before UI work started and covered only API, database, and CLI. This PR adds the missing UI layer:

Section Content
Navigation & role gating New "Administration > Catalog Management" sidebar entry, visible to admin roles only
List page (CSP Admin) All catalog items across tenants, type filter, search, publish/unpublish/delete actions
List page (Tenant Admin) Tenant-scoped view, global items read-only, scope column
Create form Full-page form with general fields + repeatable field definitions editor
Edit form Same layout, template locked, FieldMask-based update
Detail page Read-only view with related CNAs
API integration Hook table mapping UI operations to REST/gRPC endpoints by role
Test plan UI-specific test scenarios added
Graduation criteria UI completeness criteria added

Test plan

  • Review UI section for completeness against the API design
  • Verify field definitions editor covers all FieldDefinition properties
  • Confirm role-gating rules match the Tenancy and Authorization section
  • Check cross-references to provisioning wizard PRD are accurate

🤖 Generated with Claude Code

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.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The catalog-items README updates its metadata, defines role-specific catalog item workflows, and adds a constraint preventing deletion of templates referenced by catalog items.

Changes

Catalog Item Requirements

Layer / File(s) Summary
Role-based catalog item workflows
enhancements/catalog-items/README.md
The README defines Cloud Provider Admin, Tenant Admin, and Tenant User requirements for catalog item creation, lifecycle, scope, visibility, editing, deletion, validation, and provisioning, and updates the last-updated date.
Referenced template deletion constraint
enhancements/catalog-items/README.md
The README requires server-side rejection of template deletion while published or unpublished catalog items reference the template.

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

Suggested reviewers: alonakaplan, mhrivnak, jhernand, crystalchun, rawagner

🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Ai-Attribution ⚠️ Warning PR/commits mention Claude Code, and at least one commit uses Co-Authored-By: Claude, which violates the AI attribution rule. Replace any AI-tool Co-Authored-By trailers with Assisted-by or Generated-by trailers, and keep Red Hat attribution on the human author.
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change by describing added UI requirements for the catalog items enhancement proposal.
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 README prose changed; no API keys, tokens, passwords, private keys, embedded creds, or secret literals appear in the diff.
No-Weak-Crypto ✅ Passed PASS: The PR only changes README docs; the added lines contain no weak-crypto algorithms, custom crypto, or secret comparisons.
No-Injection-Vectors ✅ Passed Only enhancements/catalog-items/README.md changed; it is prose-only and contains none of the listed injection sinks.
Container-Privileges ✅ Passed PR only changes docs/PRDs; no container/K8s manifests or privileged settings (hostPID, hostNetwork, allowPrivilegeEscalation, root, SYS_ADMIN) were found.
No-Sensitive-Data-In-Logs ✅ Passed Only enhancements/catalog-items/README.md changed; it adds proposal text and contains no logging statements or sensitive-data log content.
✨ 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 Design Review: EP-115

Score: 7/8 | Verdict: PASS

Criterion Score Notes
Feasibility 2/2 The design is clearly implementable. It builds on existing infrastructure (OsacForm + Formik + Yup, navRowsForRole(), useSession()), maps UI operations to well-defined REST/gRPC endpoints via a concre
Testability 2/2 The test plan update is specific and covers the key behavioral scenarios: role gating redirects, CRUD for both admin roles, delete blocking with CNA references, field definitions editor operations (ad
Scope 2/2 Scope is well-bounded. The PR clearly separates management UI (in scope) from consumer-side provisioning (deferred to the Configuration Wizard PRD via cross-reference). Role boundaries (CSP Admin, Ten
Architecture 1/2 The role-based API selection pattern (public vs private based on caller role) is sound, and form reuse between create/edit is appropriate. However, the search strategy is left ambiguous ('client-side

Verdict: A thorough and well-structured UI addition to the catalog items EP that covers role-gated management workflows comprehensively, held back from a perfect score by an unresolved search strategy and missing pagination design.

Feedback: Resolve the search ambiguity: commit to either client-side filtering (acceptable if catalog item counts are bounded and small) or server-side filtering via the filter query parameter, and state the reasoning. Add a pagination strategy for the list pages — if the existing list component handles this, say so explicitly. Decide whether the detail page is in-scope or deferred; 'optional' leaves implementers guessing.

Critical (0)

None.

Important (2)

  1. Search strategy is left undecided — 'client-side on the loaded list, or server-side via the filter query parameter' is an architectural choice that affects API design, performance, and UX. The EP should pick one and justify it.
  2. No pagination strategy is described for either list page. If catalog item counts can grow large (across all tenants for CSP Admin), this is a real usability and performance gap.

Suggestions (3)

  1. Clarify the detail page status: either commit it to scope with graduation criteria or explicitly defer it to a follow-up. 'Optional' without criteria creates ambiguity for implementers and reviewers.
  2. Consider adding error and loading state descriptions (skeleton screens, empty states, error banners) — these are part of the UX contract and help implementers and designers align.
  3. The test plan could benefit from a note on accessibility testing (keyboard navigation in the field definitions editor, screen reader compatibility for the drag-and-drop reorder).

Review cost

Model: claude-opus-4-6
Cost: $0.4519
Tokens: 791 in / 2.9k out
Cache: 165.8k read
Active time: 1m 3s
API calls: 0

@github-actions github-actions Bot added the rfe-creator-auto-reviewed EP was reviewed by AI label Jul 14, 2026
@ElayAharoni
ElayAharoni marked this pull request as ready for review July 15, 2026 09:52
@openshift-ci
openshift-ci Bot requested review from danmanor and larsks July 15, 2026 09:52
@ElayAharoni
ElayAharoni requested review from mhrivnak and removed request for danmanor and larsks July 15, 2026 09:52
@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 8/8 | Verdict: PASS

Criterion Score Notes
Feasibility 2/2 The design builds on existing UI patterns (OsacForm + Formik + Yup) and established API infrastructure (REST gateway, OpenAPI client). Role-based access leverages existing navRowsForRole() and useSess
Testability 2/2 The test plan explicitly enumerates UI test scenarios: role gating with redirect, CRUD for both Cloud Provider Admin and Tenant Admin roles, delete blocking when CNAs reference the item, field definit
Scope 2/2 Well-defined boundaries: the management UI (list, create, edit, detail, publish/unpublish, delete) is clearly delineated from the consumer-side provisioning wizard, which is explicitly deferred to the
Architecture 2/2 Clean separation of concerns: management UI vs consumer UI, private API vs public API by role. The hook-per-operation pattern (useClusterCatalogItems, useCreateClusterCatalogItem, etc.) follows existi

Verdict: A thorough, well-structured UI design section that comprehensively covers catalog item management for both admin roles, with clear API mappings, role-gated behavior, concrete test scenarios, and appropriate scope boundaries.

Feedback: Two areas to tighten: (1) Decide on the search strategy — 'client-side on the loaded list, or server-side via the filter query parameter' leaves implementers guessing; pick one and document the pagination/data-loading approach (what happens with 500+ catalog items?). (2) The field definitions editor's 'Dynamic input' for default values ('Type depends on the field; free-form JSON value input') could benefit from specifying what widget types map to which field types, since this is the most complex UX in the form and implementers will need clearer guidance.

Critical (0)

None.

Important (2)

  1. Search strategy is ambiguous: 'client-side on the loaded list, or server-side via the filter query parameter' — the design should commit to one approach (or define a threshold) and document the pagination/data-loading strategy for large catalog item counts.
  2. No pagination strategy discussed for the list page. If catalog items grow beyond a single page, the current design has no guidance on cursor/offset-based pagination, infinite scroll, or page-size controls.

Suggestions (4)

  1. The 'Dynamic input' widget for field definition default values should specify which concrete widget types are used for common field types (string → text input, number → numeric spinner, boolean → switch, complex → JSON editor) to reduce implementation ambiguity.
  2. The detail page is described as 'optional' — consider making it required or explicitly excluding it from graduation criteria to avoid ambiguity about what constitutes 'complete.'
  3. Consider mentioning loading/error/empty states for the list page and form submissions — e.g., skeleton loaders, empty-state messaging when no catalog items exist, inline error handling for network failures.
  4. Test plan could mention accessibility testing (keyboard navigation for the field definitions editor drag-and-drop, screen reader support for role-gated elements).

Review cost

Model: claude-opus-4-6
Cost: $0.3067
Tokens: 791 in / 3.5k out
Cache: 198.1k read
Active time: 1m 29s
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: 6

🤖 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/catalog-items/README.md`:
- Around line 635-642: Extend the catalog management UI tests to cover
successful creation’s post-create redirect: verify the create operation returns
the new catalog item ID and that navigation reaches the corresponding detail
page, rather than only asserting creation capability or a toast.
- Around line 307-315: Update the catalog admin list flow described in the
README to use bounded pagination and server-side tenant/publication filtering
rather than loading and filtering all items client-side. Replace per-row
template Get calls with template display metadata returned by the API, or a
batched/cached lookup strategy, so rendering does not issue N+1 requests.
- Around line 412-415: Resolve the inconsistency around the catalog item detail
page by choosing one scope and applying it consistently: either make the detail
page mandatory in this section and all related requirements, including the
graduation criteria, or remove it from the graduation criteria and related
requirements while retaining its optional wording.
- Around line 460-463: Revise the proposal so useSession() only selects the
client-facing API route and is not treated as an authorization boundary. Require
the Fulfillment Service to authenticate requests and enforce Cloud Provider
Admin versus Tenant Admin permissions plus tenant resource scoping on every
operation, including direct or manipulated requests.
- Around line 336-348: Update the public API response contract used by the
Tenant Admin list page to expose an authoritative scope or ownership/capability
discriminator for distinguishing Global from Organization items, without
exposing the absent tenant field. Ensure the UI uses this metadata to label
scope and disable Edit/Delete for Global items, while retaining server-side
authorization as the final enforcement point.
- Around line 420-422: Add a documented CNA list/query API contract for the
detail page near the Related resources section, defining the catalog_item
filter, tenant and role scoping requirements, pagination parameters, and
response shape for CNAs (Clusters, ComputeInstances, and BareMetalInstances).
Ensure the API table references this contract so the UI has an explicit source
of truth for loading related resources.
🪄 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: f5c4ad0f-48d6-448d-b960-eab033789f65

📥 Commits

Reviewing files that changed from the base of the PR and between 4be74d2 and 4001764.

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

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

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 8/8 | Verdict: PASS

Criterion Score Notes
Feasibility 2/2 Fully implementable using existing infrastructure: OsacForm + Formik + Yup patterns, React Query caching for template resolution (avoids N+1), server-side pagination via existing page/size conventions
Testability 2/2 Test plan additions are concrete and scenario-specific: role gating with redirect behavior, CRUD by admin role, delete protection when CNAs reference an item, field definitions editor mechanics (add/r
Scope 2/2 Cleanly fills the missing UI layer of an existing EP without modifying the API or data model. Consumer-side provisioning is explicitly deferred to the Configuration Wizard PRD via cross-reference. The
Architecture 2/2 Security-conscious design with server-side authorization as the single enforcement point. Public/private API split for role-based visibility, FieldMask-based partial updates for edits, filtered list q

Verdict: A well-structured UI specification that cleanly extends an existing EP with role-gated catalog management screens, leveraging established patterns and maintaining server-side authorization as the sole enforcement boundary.

Feedback: This is a strong addition. Two minor improvements to consider: (1) the field definitions editor's JSON Schema code editor and drag-and-drop reorder are the most complex UI elements — consider noting which existing component library primitives you'll use (e.g., dnd-kit, Monaco) to confirm they're available in the project; (2) the test plan could add a scenario for the API hook selection logic — verifying that the correct API tier (private vs public) is called based on the user's role, since a mismatch would expose data or cause authorization errors.

Critical (0)

None.

Important (1)

  1. The field definitions editor combines drag-and-drop reorder, a JSON Schema code editor, and dynamic-type default value inputs — these are the highest-complexity UI elements in the design. Consider naming the specific component libraries (e.g., dnd-kit for drag, Monaco/CodeMirror for JSON Schema) to confirm they are available in the project's dependency tree, or note that simpler alternatives (manual up/down buttons, plain textarea) are acceptable fallbacks.

Suggestions (2)

  1. Add a test scenario verifying that the correct API tier (private vs public) is selected based on the authenticated user's role from useSession(). A bug in this client-side routing logic could surface data the user shouldn't see (if public path is incorrectly upgraded to private) or cause spurious 403s (if private path is incorrectly downgraded to public).
  2. Consider adding a loading/empty state description for the related resources section on the detail page — when a catalog item has no CNAs yet, the UI should show an informative empty state rather than a blank section, especially since this is a new catalog item's expected initial state.

Review cost

Model: claude-opus-4-6
Cost: $0.4572
Tokens: 791 in / 2.9k out
Cache: 168.0k read
Active time: 1m 5s
API calls: 0

@github-actions

Copy link
Copy Markdown

AI EP Review: EP-115

Score: 10/10 | Verdict: PASS

Criterion Score Notes
What 2/2 Excellent clarity. The PRD identifies three distinct personas (Cloud Provider Admin, Tenant Admin, Tenant User) and describes precisely what each can do: admins manage catalog items via list/create/ed
Why 2/2 Strong, concrete justification. The Problem Statement names the specific pain: 'there is no UI for managing [catalog items] — catalog item creation, editing, publishing, and deletion can only be done
How 2/2 Very specific and measurable. 37 functional requirements with explicit widget types, API hook signatures, column definitions, and interaction behaviors. 5 non-functional requirements set measurable th
Task 2/2 Clearly a new enhancement adding UI capability that does not exist today. Not a bug fix or operational task. The PRD has proper structure: problem statement, goals, non-goals, functional/non-functiona
Size 2/2 Well-scoped and focused on catalog item management UI. All capabilities (list, create, edit, detail, role gating) are tightly coupled — a management UI without any one of them is incomplete. Non-goals

Verdict: A thorough, well-structured PRD with clear personas, concrete justification, and highly specific requirements — the strongest areas are the detailed functional requirements and clear scope boundaries, though the document would benefit from removing implementation-level prescriptiveness.

Feedback: The PRD is strong and ready for implementation. Two actionable improvements: (1) Separate user-facing requirements from implementation guidance — move references to specific frameworks (React Query, Formik, Yup, PatternFly 6), internal functions (navRowsForRole(), useSession()), and implementation patterns (FieldMask, OPA/Authorino) into the EP's implementation details section, keeping the PRD focused on user-observable outcomes. (2) Fix the section numbering gap (2.1 Goals jumps to 2.3 Non-Goals, skipping 2.2) and consider adding brief user stories to complement the functional requirements for non-technical stakeholders.

Critical (0)

None.

Important (2)

  1. Design leakage in UI-PRD.md: The PRD names internal components and frameworks — navRowsForRole() (FR-3), useSession() (FR-37), OsacForm + Formik + Yup (NFR-5), React Query (FR-8, NFR-5), PatternFly 6 (NFR-5), i18next (NFR-5), FieldMask (FR-26), OPA/Authorino (FR-37). A PRD should describe what the user observes, not which libraries implement it. Move these to the EP implementation section and rewrite FRs in terms of user-observable behavior (e.g., FR-26: 'The edit form must submit only the field
  2. Section numbering error in UI-PRD.md: Section 2.1 (Goals) jumps to 2.3 (Non-Goals), skipping 2.2. Either renumber Non-Goals to 2.2 or add the missing section.

Suggestions (3)

  1. Add target resolution dates or milestones to open questions 8.1 and 8.2 so reviewers can assess whether they block implementation.
  2. Consider adding 2-3 user stories in the standard 'As a [role], I want to [action] so that [goal]' format to make the PRD accessible to non-technical stakeholders and to ground the functional requirements in concrete workflows.
  3. NFR-4 sets a threshold of 50 field definitions — consider stating whether this is based on observed usage patterns or a projected upper bound, so QA knows how to prioritize testing at that scale.

Review cost

Model: claude-opus-4-6
Cost: $0.5766
Tokens: 812 in / 5.4k out
Cache: 144.9k read
Active time: 2m 0s
API calls: 0

@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 5/8 | Verdict: PASS

Criterion Score Notes
Feasibility 1/2 The diff adds extensive validation constraint examples (scalar, resourceRef, list/map, nested objects) with concrete JSON Schema patterns, and clarifies field semantics (default required when non-editable). However, the 'tightening only' enforcement for Tenant Admin constraints is underspecified — comparing two JSON Schemas for relative restrictiveness is a hard problem with no algorithm described. The resourceRef resolution mechanism (dynamic backend lookup at validation time) lacks implementat
Testability 1/2 The diff adds one specific integration test scenario (post-create response returning ID) to an existing list that includes tenant visibility, field injection, and write isolation tests. These are well-specified scenarios. However, there are no unit test specifics for the complex validation logic (JSON Schema constraint validation, tightening comparison, resourceRef resolution), no e2e test scenarios for the expanded user workflows (Tenant Admin creating org-scoped items from global items, constr
Scope 2/2 Persona coverage is now comprehensive and well-structured: Cloud Provider Admin (creation + lifecycle), Tenant Admin (creation from global items + lifecycle), and Tenant User (browsing + provisioning) each have dedicated subsections with granular user stories. Boundaries are clear — template immutability after creation, deletion blocking when CNAs exist, org-scoped items inherit-and-tighten from global items. The constraint hierarchy (global → org-scoped, tighten-only) is a well-defined scope bo
Architecture 1/2 The design follows OSAC patterns: public/private API split, standard object shape (id, metadata, fields), tenant isolation in API design, and template deletion protection for referential integrity. However, the resourceRef extension to JSON Schema is a custom non-standard type introduced without discussing how it integrates with the server-side validation pipeline or whether it should be a first-class proto concept instead. Owner reference annotations (osac.openshift.io/owner-reference) are not

Verdict: The design revision significantly strengthens persona coverage and validation constraint specificity, earning a narrow pass at 5/8, but is held back by underspecified implementation of constraint comparison ('tightening only') and thin test coverage for the complex validation logic.

Feedback: The 'tightening only' enforcement for Tenant Admin constraints is the hardest part of this design and needs an explicit algorithm — define what 'tighter' means for each JSON Schema keyword (e.g., child minimum >= parent minimum, child enum ⊆ parent enum) and describe how the server compares schemas. Add unit test scenarios for validation edge cases (tightening comparison, resourceRef resolution failures, nested constraint validation) and at least one e2e scenario for the Tenant Admin constraint-inheritance flow. Consider whether resourceRef should be modeled as a first-class proto field annotation rather than a JSON Schema extension, and add owner reference annotations for the catalog item → template relationship per OSAC conventions.

Critical (0)

None.

Important (4)

  1. Constraint tightening validation is underspecified: the design says Tenant Admin can 'tighten' constraints but provides no algorithm for comparing JSON Schemas for relative restrictiveness. For example, how does the server determine that {minimum: 5, maximum: 10} is tighter than {minimum: 3, maximum: 12}? What about enum subsets, pattern restrictions, or nested property constraints? This is a non-trivial comparison that needs explicit specification.
  2. The resourceRef custom JSON Schema extension is introduced without architectural justification for why it is a JSON Schema keyword rather than a first-class proto concept (e.g., a reference_type field on FieldDefinition). This has implications for validation pipeline design — standard JSON Schema validators won't understand resourceRef, requiring custom validation logic.
  3. Owner reference annotations (osac.openshift.io/owner-reference) are not mentioned for the catalog item → template or org-scoped → global catalog item parent-child relationships, which is an OSAC convention for all resource hierarchies.
  4. Test plan lacks unit test specifics for the most complex logic: JSON Schema constraint validation, tightening comparison, resourceRef dynamic resolution, and default schema generation. These are the highest-risk areas for bugs.

Suggestions (4)

  1. Consider adding a Terminology section defining CNA, resourceRef, tightening, and the distinction between global and org-scoped catalog items to prevent ambiguity for reviewers.
  2. The tracking-link in YAML frontmatter appears to still be a placeholder comment — update it to the actual Jira ticket URL.
  3. Add an e2e test scenario for the full Tenant Admin flow: browse global catalog items → create org-scoped item with tightened constraints → Tenant User provisions from org-scoped item → verify constraints are enforced.
  4. The XSS sanitization guidance for the description field is good but could reference a specific sanitization library or approach (e.g., bluemonday for Go, DOMPurify for the UI) to make implementation more concrete.

Review cost

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

Templates enumerate their parameter definitions and the catalog item's
field list is pre-populated from them. The admin configures each field
(editable, default, validation) but does not add or remove fields.
The server rejects catalog items with fields not defined by the template.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@openshift-ci openshift-ci Bot removed the lgtm label Jul 19, 2026
@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 5/8 | Verdict: PASS

Criterion Score Notes
Feasibility 1/2 The changes add significant implementation detail: validation constraint types with concrete examples, field pre-population from templates, required defaults for non-editable fields, template deletion protection, and XSS sanitization guidance for the description field. However, the custom resourceRef JSON Schema extension is introduced without discussing implementation complexity or how the custom keyword integrates with standard JSON Schema validators. Error codes are not specified for most A
Testability 1/2 The diff adds one specific integration test case (post-create response returning ID). The existing test plan context mentions several specific integration scenarios (tenant admin visibility, tenant field injection, write isolation). However, the changes introduce substantial new functionality — validation constraint enforcement, field pre-population from templates, template deletion protection, hierarchical restriction model for tenant admins — without corresponding test plan additions. No unit
Scope 2/2 The user stories are now comprehensive and well-organized by persona with clear sub-sections. All three relevant personas are covered: Cloud Provider Admin (creation + lifecycle), Tenant Admin (creation + lifecycle with clear restriction model), and Tenant User (browsing + provisioning). Cloud Infrastructure Admin is appropriately excluded. The hierarchical restriction model (tenant admins can only tighten, never loosen) is a well-defined boundary. Non-goals and alternatives exist in the unchang
Architecture 1/2 The design follows OSAC's public/private API split pattern and tenant isolation via a tenant field. Template references by ID and the protection of templates from deletion are sound. However, the catalog item object structure uses a flat layout (id, metadata, title, description, template, fields, published, tenant) rather than the standard OSAC object shape (id, Metadata, Spec, Status) documented in fulfillment-service/docs/API.md. There is no explicit use of osac.openshift.io/owner-reference

Verdict: The design passes with a total of 5/8 — strong persona coverage and scope definition lift it, but flat object structure (missing spec/status split), thin test plan updates for new functionality, and underspecified edge cases in the hierarchical catalog model hold it back from a higher score.

Feedback: Restructure the CatalogItem proto to follow the standard OSAC object shape with CatalogItemSpec and CatalogItemStatus message types — the current flat layout deviates from every other OSAC resource and will cause friction in the generic server infrastructure. Add test plan entries for the new functionality introduced in this revision: JSON Schema validation enforcement, field pre-population from templates, template deletion protection, and the tenant admin 'tighten only' constraint model — each needs at least unit and integration test scenarios. Clarify the cascading deletion behavior: what happens to tenant-scoped catalog items when their parent global catalog item is deleted or unpublished, and document whether resourceRef validation happens at catalog-item-creation time, provisioning time, or both.

Critical (0)

None.

Important (5)

  1. Flat object structure: CatalogItem uses (id, metadata, title, description, template, fields, published, tenant) instead of the standard OSAC pattern (id, Metadata, Spec, Status). All other OSAC resources follow this shape, and the generic server infrastructure expects it. The design should restructure to CatalogItemSpec (title, description, template, fields, published, tenant) and CatalogItemStatus (or explain why this resource is exempt).
  2. No owner-reference annotation for parent-child relationship: Tenant-scoped catalog items are derived from global catalog items, but the design doesn't describe using osac.openshift.io/owner-reference annotations to track this relationship. This is required by OSAC conventions for resource hierarchy tracking.
  3. Missing test plan for new functionality: The revision introduces validation constraint enforcement, field pre-population from templates, template deletion protection, and hierarchical 'tighten only' restrictions for tenant admins. None of these have corresponding test plan entries. The single added test case (post-create response) is insufficient coverage for the scope of changes.
  4. Cascading behavior underspecified: When a global catalog item is deleted (blocked if CNAs exist) or unpublished, the effect on tenant-scoped catalog items derived from it is not described. Can a tenant admin's catalog item become orphaned?
  5. Custom resourceRef keyword: The resourceRef constraint type is a non-standard JSON Schema extension that requires custom validation logic and dynamic resource resolution. The design doesn't discuss how this integrates with standard JSON Schema validators, whether it's validated at catalog-item creation vs. provisioning time, or the performance implications of dynamic resolution.

Suggestions (4)

  1. Move the detailed JSON Schema constraint examples (lines 31-64 of the user stories) to the Implementation Details section. User stories should describe what the admin wants to accomplish, not the specific JSON Schema keywords they'll use.
  2. Add explicit cross-repo dependency ordering for the catalog items feature: which repo changes land first (fulfillment-service proto, then CLI updates, then operator changes)?
  3. Consider adding a Terminology section defining 'catalog item', 'field definition', 'template parameter', and 'CNA' upfront, following the pattern established by the Networking EP.
  4. Specify error codes for key failure modes: template-not-found on catalog item creation, constraint-violation on tenant admin tightening, and template-in-use on template deletion.

Review cost

Model: claude-opus-4-6
Cost: $1.0666
Tokens: 15 in / 8.1k out
Cache: 773.8k read
Active time: 3m 20s
API calls: 0

The field set is fixed per resource type (ClusterSpec,
ComputeInstanceSpec, etc.) and does not vary by template selection.
The admin configures each field but the available fields are
determined by the resource spec.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 7/8 | Verdict: PASS

Criterion Score Notes
Feasibility 2/2 The design provides deep technical detail on field definitions, JSON Schema validation (draft 2020-12), dot-notation paths for nested and map fields, default value semantics, and the resourceRef constraint type. It specifies FieldDefinition proto fields with types (path, editable, default as google.protobuf.Value, validation_schema as google.protobuf.Struct), describes server-side validation rules (rejecting non-editable fields without defaults, rejecting unknown field paths), and covers all CRU
Testability 1/2 The Test Plan section specifies integration test scenarios: publication-based list filtering, unpublished Get exception for CNA references, Tenant Admin visibility regardless of publication status, tenant field injection, Tenant Admin write isolation, and post-create response returning the catalog item ID. However, the test plan only mentions 'Standard unit and integration tests' without specifying what unit tests cover (e.g., JSON Schema validation logic, constraint tightening validation, dot-n
Scope 2/2 Excellent persona coverage — the diff expands from 6 generic user stories to 20+ detailed stories organized by persona and lifecycle phase (Cloud Provider Admin creation/lifecycle, Tenant Admin creation/lifecycle, Tenant User browsing/provisioning). Cloud Infrastructure Admin is correctly excluded as this feature doesn't involve infrastructure management. Goals and Non-Goals sections are present in the existing document. The design addresses the Tenant Admin's restricted model clearly (can only
Architecture 2/2 The design follows OSAC patterns well: public/private API split, tenant isolation via the tenant field with auto-injection, standard object shape (id, metadata, spec-like fields, status through published/tenant), and owner reference via template reference. The field definitions cover all resource spec fields with a fixed-per-resource-type model. The server rejects invalid field paths (fields not in the resource spec). The Tenant Admin constraint-tightening model preserves the hierarchical catalo

Verdict: A strong design revision that dramatically expands persona coverage and field definition detail; the main gap is a test plan that lacks unit test specifics and e2e scenarios.

Feedback: The test plan should specify what unit tests cover — at minimum: JSON Schema validation logic (constraint application and rejection of invalid schemas), constraint-tightening validation for Tenant Admin creates (verifying that loosening constraints from the base item is rejected), dot-notation path parsing for nested and map fields, and default value injection for non-editable fields. Add at least one e2e scenario, e.g.: 'Cloud Provider Admin creates a ClusterCatalogItem with mixed editable/non-editable fields → Tenant User provisions a cluster providing only editable values → verify the resulting cluster has the correct merged configuration.' Consider whether the resourceRef constraint type needs a proto-level representation or if it lives only in the validation_schema Struct — the current design is ambiguous on this.

Critical (0)

None.

Important (3)

  1. Test plan lacks unit test specifics: no mention of testing JSON Schema validation logic, constraint-tightening enforcement, dot-notation path parsing, or default value injection — these are the core algorithmic components of the feature.
  2. No e2e test scenarios described: the feature spans catalog item creation through resource provisioning, which is a natural e2e flow, but the test plan only covers integration-level API behavior.
  3. The resourceRef constraint type (e.g., {"resourceRef": "InstanceType"}) is a custom extension to JSON Schema draft 2020-12 but the design doesn't clarify how the server validates it — is it a keyword the server interprets during validation, or purely a UI hint? If the server validates it, describe the validation behavior (e.g., look up the resource by name, reject if not found).

Suggestions (3)

  1. The user stories for Cloud Provider Admin validation constraints are very detailed (50+ lines of examples) — consider moving the constraint examples to the Implementation Details section to keep user stories focused on user goals rather than implementation mechanics.
  2. The design mentions 'the server rejects catalog items that reference fields not defined in the resource spec' but doesn't specify the error code or message — adding this would align with the feasibility rubric's expectation of specifying error codes.
  3. Consider adding a user story or note about what happens when a template is updated after a catalog item references it — does the catalog item's field set change? The fixed-per-resource-type model suggests no, but this lifecycle edge case is worth addressing explicitly.

Review cost

Model: claude-opus-4-6
Cost: $0.6150
Tokens: 14 in / 3.1k out
Cache: 719.0k read
Active time: 1m 28s
API calls: 0

- Remove implication that only specific JSON Schema keywords are accepted
  by the backend — validation_schema accepts any valid draft 2020-12
- Replace "no raw JSON Schema toggle" with Basic/Advanced mode description:
  Basic mode uses structured form controls for common constraints,
  Advanced mode provides a raw JSON Schema textarea for power users
- Mode auto-detects based on existing schema content on load

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 6/8 | Verdict: PASS

Criterion Score Notes
Feasibility 2/2 Strong implementation detail — validation constraint types are thoroughly specified with concrete JSON Schema examples (numeric bounds, enum, pattern, item count, nested properties, resource references). Field definition semantics are precise: 'default' is required when 'editable' is false, field set is fixed per resource type, server rejects unknown field paths. Template deletion protection logic is clearly specified. The 'sensible defaults' for common field types is described with enough speci
Testability 1/2 The test plan additions are thin relative to the scope of changes. Only one new test case was added ('Post-create response: Create returns the new catalog item ID'). The significant new functionality — validation schema enforcement across all constraint types, Basic/Advanced mode switching, Tenant Admin restriction semantics (can only tighten, not loosen), template deletion protection, default validation schema generation, resourceRef resolution — has no corresponding test plan entries. The exis
Scope 2/2 All three relevant OSAC personas are covered with well-structured, role-organized user stories: Cloud Provider Admin (creation + lifecycle, 10 stories), Tenant Admin (creation + lifecycle, 10 stories), and Tenant User (browsing + provisioning, 4 stories). Cloud Infrastructure Admin is legitimately not relevant for catalog items (these are application offerings, not infrastructure management). User stories follow 'As a [role], I want to [action] so that I can [goal]' format. Clear boundaries betw
Architecture 1/2 Core OSAC patterns are followed: public/private API split, tenant scoping, standard object shape (id, metadata, title, description, template, fields), FieldMask-based updates. Template deletion protection adds proper referential integrity. XSS sanitization note for markdown description is a good security addition. However, there are gaps: (1) 'resourceRef' is introduced as a custom JSON Schema keyword, but the design also states 'no keywords are restricted' and validation_schema accepts 'any val

Verdict: The design is solid on scope and feasibility — comprehensive persona coverage and detailed validation constraint specification — but loses points on architecture (custom resourceRef keyword contradicts 'any valid JSON Schema' claim, tenant annotations not mapped to standard OSAC patterns) and testability (test plan additions don't cover the new validation, restriction, and deletion protection logic).

Feedback: Two areas need attention before merge: (1) Resolve the resourceRef contradiction — either document it as a custom JSON Schema extension with its own validation path (not part of the standard JSON Schema validator), or redesign it as a separate field on FieldDefinition rather than embedding it in validation_schema. The current framing ('no keywords are restricted' + non-standard keyword) will confuse implementers and break standard validators. (2) Expand the test plan to cover the new functionality: validation schema enforcement (at least one test per constraint category), Tenant Admin restriction enforcement (cannot loosen constraints beyond base item), and template deletion protection (reject delete when referenced by catalog items). One test case for the scope of these changes is insufficient.

Critical (0)

None.

Important (4)

  1. resourceRef is a custom JSON Schema keyword not in the 2020-12 spec, but the design states validation_schema accepts 'any valid JSON Schema (draft 2020-12) object' and 'no keywords are restricted.' Standard JSON Schema validators will ignore or reject resourceRef. This contradiction needs resolution — either make resourceRef a separate FieldDefinition field (e.g., 'resource_reference' alongside validation_schema) or explicitly document the server's custom validator extension and drop the 'any va
  2. Test plan additions are minimal (one new case: post-create response) despite significant new functionality: validation schema enforcement for scalar/list/map/complex constraints, Tenant Admin restriction semantics (tightening only), template deletion protection, resourceRef resolution, and default validation schema generation. Each of these has edge cases that need integration test coverage.
  3. User stories contain implementation-level detail that belongs in Implementation Details — the validation constraint taxonomy (~40 lines of JSON Schema examples, constraint categories, Basic/Advanced UI mode descriptions) within the Cloud Provider Admin user story blurs the boundary between 'what the user needs' and 'how the system implements it.' Per review-patterns.md, user stories should describe user-observable outcomes, not implementation specifics.
  4. No explicit mapping of catalog item tenant isolation to standard OSAC annotations (osac.openshift.io/tenant, osac.openshift.io/owner-reference). The design uses a 'tenant' field but doesn't clarify whether this follows the annotation pattern used by other OSAC resources or is a first-class proto field — this matters for OPA policy enforcement consistency.

Suggestions (3)

  1. Address Cloud Infrastructure Admin persona explicitly — even if N/A for catalog items, a one-line statement ('Cloud Infrastructure Admin: not affected — catalog items do not interact with infrastructure backends') prevents reviewers from asking.
  2. Add risks for: (a) JSON Schema validation complexity — supporting the full 2020-12 vocabulary means the server needs a robust validator and error reporting for deeply nested schemas; (b) Tenant Admin constraint inheritance enforcement — validating that a derived catalog item's constraints are strictly tighter than its base requires comparison logic for every JSON Schema keyword combination.
  3. Move the constraint type taxonomy and UI editing mode descriptions from user stories to the Implementation Details section, leaving the user stories focused on intent ('I need to define validation constraints for editable fields so tenants stay within guardrails').

Review cost

Model: claude-opus-4-6
Cost: $0.7803
Tokens: 8 in / 6.4k out
Cache: 300.4k read
Active time: 2m 25s
API calls: 0

Comment thread enhancements/catalog-items/README.md Outdated
Comment on lines +63 to +66
- Fields that reference backend resources (such as `instance_type` referencing an InstanceType, or `image_type` referencing an ImageType) use a dedicated `"resourceRef"` constraint type rather than a static `enum`. The backend resolves available resources dynamically, and the UI presents them as a selectable list fetched from the corresponding API endpoint. The admin can optionally restrict the set to a subset of available resources.
Example: `instance_type` with `{"resourceRef": "InstanceType"}` — the UI fetches available InstanceType resources and presents them as a dropdown. The admin can further restrict by adding `{"resourceRef": "InstanceType", "enum": ["cx3.xlarge", "cx3.2xlarge"]}` to limit to specific instance types.
Example: `image_type` with `{"resourceRef": "ImageType"}` — the UI fetches available ImageType resources for selection.
- Resource references enable the backend to validate that the selected value is a valid, existing resource at provisioning time — not just a string that matches an enum.

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 would require backend to add support for resourceRef, which doesnt exist now.

Why can't we keep using the enum ?

Comment thread enhancements/catalog-items/README.md Outdated
ClusterCatalogItem
* references an existing ClusterTemplate by ID
* includes a list of field definitions, each of which specifies a field by dot-notation path, whether it is editable by the user, an optional default value, and an optional JSON Schema validation rule
* includes a list of field definitions covering all fields from the resource spec (e.g., ClusterSpec or ComputeInstanceSpec). Each field definition specifies a field by dot-notation path, whether it is editable by the user, an optional default value, and an optional JSON Schema validation rule. The field set is fixed per resource type — it does not vary by template.

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 is a change from the current implementation, which does not require all fields to be in field definitions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Correct, not all fields have to be included. But the CatalogItem creator must list every field that the user is expected to provide, even fields they don't want to restrict; that's the EP design. If a field isn't listed, it's not available to the user.

osac-project/fulfillment-service#783

Comment thread enhancements/catalog-items/README.md Outdated
Comment on lines +233 to +237
- `description` (string) - markdown-formatted long description. All consumers
that render this field (UI detail pages, catalog browsing, CLI output) must
use a sanitizing Markdown renderer that strips unsafe HTML tags, `javascript:`
URL schemes, and other XSS vectors. The server stores the raw Markdown as
provided; sanitization is a rendering-time responsibility.

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 dont think we need this much detail into how the rendering is done. The original markdown-formatted long description is enough

1. Replace resourceRef with enum for resource reference constraints -
   the backend does not support resourceRef, so resource references
   use standard enum constraints populated from available resources.

2. Field definitions no longer require all fields from the resource
   spec - only the fields the admin wants to configure need to be
   included. This aligns with the current implementation.

3. Simplify the description field definition - remove the detailed
   Markdown sanitization requirements, keep it as "markdown-formatted
   long description" per reviewer feedback.

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
@github-actions

Copy link
Copy Markdown

AI Design Review: EP-115

Score: 4/8 | Verdict: PASS

Criterion Score Notes
Feasibility 1/2 Strong detail on JSON Schema constraint examples, DB migrations, validation-on-create flow with error codes, and UI editing modes. However, the Tenant Admin 'create from catalog item with tightening only' model introduced in user stories has no corresponding implementation detail: the proto still has template (string) with no base_catalog_item field, and no enforcement mechanism for constraint tightening is described. Default validation schema generation is described at the user-story level
Testability 1/2 The integration test plan has specific scenarios (cross-tenant isolation, publication filtering, CNA reference exception, tenant field injection, write isolation) and the diff adds a post-create response test case. But the test plan is missing: unit test specifics (what validation logic, JSON Schema edge cases), e2e test scenarios, and coverage for all new functionality introduced in this revision — JSON Schema validation, template deletion protection, Tenant Admin catalog-item-based creation, a
Scope 1/2 User stories are substantially improved — organized by persona (Cloud Provider Admin, Tenant Admin, Tenant User) with detailed creation and lifecycle sub-sections covering the full catalog management workflow. However, non-goals are very thin (only one entry: 'templates that don't use ansible'). Cloud Infrastructure Admin persona is not addressed or explicitly excluded. Several cross-cutting dimensions from osac-dimensions.md are silently unaddressed: UI scope for this milestone, E2E testing req
Architecture 1/2 Design follows core OSAC patterns: public/private API split, tenant isolation via filter injection, gRPC services with standard CRUD RPCs, PostgreSQL persistence, and the new template deletion protection aligns with referential integrity patterns. Gaps: CatalogItem proto messages use flat top-level fields (title, description, template, fields, published, tenant) instead of the standard Spec/Status structure per API conventions. Owner reference annotations (osac.openshift.io/owner-reference) are

Verdict: The diff makes substantial improvements — detailed user stories per persona, rich JSON Schema constraint examples, template deletion protection, and a clearer partial-coverage field model — but introduces a significant gap between the new Tenant Admin user stories (create from catalog items, tightening only) and the implementation section, which still describes templates as the base reference with no proto support for catalog-item-based derivation.

Feedback: The most impactful improvement would be aligning the Implementation Details section with the new Tenant Admin model: add a base_catalog_item field to the proto, describe how the server enforces 'tightening only' constraints (comparing child validation_schema against parent's), and specify what happens when a base global catalog item is updated or unpublished. Second, expand the Test Plan to cover the new functionality — add unit test scenarios for JSON Schema validation logic and template deletion protection, and at least outline e2e test scenarios for the admin catalog management workflow. Third, address or explicitly defer the missing cross-cutting dimensions (UI scope, documentation, Cloud Infrastructure Admin persona) to avoid reviewer questions about silent gaps.

Critical (0)

None.

Important (4)

  1. User stories describe Tenant Admins creating from published global catalog items (not templates) with 'tightening only' constraints, but the proto definition in Implementation Details still has template (string) referencing a ClusterTemplate — no base_catalog_item field, no enforcement mechanism for constraint tightening, and no description of how the catalog-item derivation chain is stored or validated.
  2. CatalogItem proto messages place all user-configurable fields (title, description, template, fields, published, tenant) at the top level instead of using the standard OSAC Spec / Status structure documented in fulfillment-service/docs/API.md. This deviates from the resource hierarchy convention shared by all other OSAC resources.
  3. Test plan does not cover any of the new functionality introduced in this revision: JSON Schema validation of field values at provisioning time, template deletion protection when referenced by catalog items, Tenant Admin catalog-item-based creation flow, or default validation schema generation.
  4. Several cross-cutting dimensions from osac-dimensions.md are relevant but silently unaddressed: UI scope (is osac-ui work in scope for this milestone?), E2E testing requirements in osac-test-infra, documentation needs, and Cloud Infrastructure Admin persona (even if just to say 'not affected').

Suggestions (3)

  1. Expand non-goals beyond the single entry — explicitly defer auto-scaling of catalog items, multi-region catalog distribution, catalog item versioning, and any other boundaries the design intentionally excludes.
  2. Add unit test scenarios for JSON Schema validation edge cases (nested path resolution, type mismatches, complex constraint combinations) and for the template deletion protection guard.
  3. Consider adding a Terminology section to define 'catalog item', 'field definition', 'CNA', 'base catalog item', and 'tightening' upfront, following the pattern established by the networking EP.

Review cost

Model: claude-opus-4-6
Cost: $0.9401
Tokens: 6.2k in / 12.9k out
Cache: 735.3k read
Active time: 4m 47s
API calls: 0

@openshift-ci

openshift-ci Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: batzionb, ElayAharoni, rawagner

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

The pull request process is described 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

@openshift-merge-bot
openshift-merge-bot Bot merged commit b98c8dd into osac-project:main Jul 21, 2026
5 checks passed
ElayAharoni added a commit to ElayAharoni/enhancement-proposals that referenced this pull request Jul 21, 2026
Address rawagner's review feedback from PR osac-project#115:
- Replace resourceRef custom keyword with standard enum constraints
- Change field definitions from all-fields-required to admin-selected subset
- Simplify markdown description (remove sanitization details)

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
ElayAharoni added a commit to ElayAharoni/enhancement-proposals that referenced this pull request Jul 22, 2026
Address rawagner's review feedback from PR osac-project#115:
- Replace resourceRef custom keyword with standard enum constraints
- Change field definitions from all-fields-required to admin-selected subset
- Simplify markdown description (remove sanitization details)

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
slintes pushed a commit to slintes/enhancement-proposals that referenced this pull request Jul 27, 2026
Address rawagner's review feedback from PR osac-project#115:
- Replace resourceRef custom keyword with standard enum constraints
- Change field definitions from all-fields-required to admin-selected subset
- Simplify markdown description (remove sanitization details)

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
empovit pushed a commit to empovit/osac-enhancement-proposals that referenced this pull request Aug 2, 2026
Address rawagner's review feedback from PR osac-project#115:
- Replace resourceRef custom keyword with standard enum constraints
- Change field definitions from all-fields-required to admin-selected subset
- Simplify markdown description (remove sanitization details)

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.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.

6 participants