Repository navigation
[OSAC-3833] PRD: CaaS Bare Metal Worker Node Provisioning - #58
Closed
forgeSmith-bot wants to merge 656 commits into
Closed
forgeSmith-bot wants to merge 656 commits into
forgeSmith-bot wants to merge 656 commits into
Conversation
design_guide.md's Review section paraphrased two of the four design-review criteria (substituted 'tenant isolation' for 'terminology' under Architecture, and 'PRD reference' for 'persona coverage' under Scope) instead of quoting skills/design-review/SKILL.md's summary table. prd_guide.md's equivalent line used 'testable requirements' where the prd-review rubric says 'verifiable requirements'. Both corrected to match the live rubrics exactly. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Tommy Hughes <tohughes@redhat.com>
Address reviewer feedback about file naming convention. Files should be named design.md per enhancement-proposals pattern. Assisted-by: Claude Code <noreply@anthropic.com>
skills/prd-review/SKILL.md and skills/design-review/SKILL.md in
osac-workspace resolve the canonical PRD/design templates and author
guides from enhancement-proposals/guidelines/*.md, falling back to
.ai-workflows/{prd,design}/templates only if that path is missing.
design-review also references enhancement-proposals/enhancements/ as a
calibration reference library (review-patterns.md's "EP Reference
Library"). The ep-review review job only cloned osac-workspace into
/opt/skills, so neither path was reachable there — the bot silently
fell back to the vendored template, losing OSAC-specific structural
checks, guide cross-links, and calibration references, with no hard CI
failure to signal the gap.
Rather than a second, independent git clone of enhancement-proposals'
mutable default branch (flagged by automated review on a prior version
of this fix as an unnecessary trust-boundary expansion given this job's
pull-requests:write/issues:write permissions), reuse the repo this same
job already checked out in its first step, at the resolved base_ref.
Copy guidelines/ and enhancements/ from that existing checkout into
/opt/skills/enhancement-proposals — no new clone, no new ref to pin.
Also guard against a ghost self-reference: if a PR updates an existing
enhancement, the pre-PR version of that same document would otherwise
sit in the staged enhancements/ reference library right alongside
.context/pr-diff.txt's new version, and could get cited by
design-review's "Comparison with Similar Designs" step as a "similar
past design" — a stale copy of the very document under review, not a
real precedent. ep_review.py now excludes the current PR's own
enhancement directory (derived from its changed files) from the staged
reference library before running each skill.
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Tommy Hughes <tohughes@redhat.com>
- design_template.md: API Extensions definition omitted gRPC services,
even though design_guide.md's own guidance for the same section
already names them explicitly ('API Extensions names new gRPC
services (fulfillment-service), new CRDs (osac-operator), webhooks,
and finalizers'). Add gRPC services to the template's definition to
match. This wording predates this PR (inherited byte-for-byte from
osac-workspace's original .design/templates/design.md), but this PR
makes guidelines/design_template.md the sole canonical copy going
forward, so this is the last point to fix it.
- prd_template.md: add a top-level '# PRD Template' heading before the
getting-started instructions (markdownlint MD041). Unlike
design_template.md, which satisfies MD041 via its YAML frontmatter's
title: field, prd_template.md has no frontmatter and the
getting-started preamble is new content added by this PR (the
original osac-workspace prd.md had no such preamble), so this is a
gap introduced here, not a pre-existing one.
- .github/scripts/ep_review.py: add test_ep_review.py covering
pr_enhancement_slugs and exclude_own_slug_from_reference_library —
repeated files under one slug, multiple slugs, unrelated paths, a
missing reference root, and an absent slug directory. Follows the
existing test_check_ep_naming.py unittest.TestCase pattern.
Not applied: CodeRabbit's suggestion to strip the manual-authoring
'getting started' instructions from README.md, prd_guide.md,
prd_template.md, design_guide.md, and design_template.md as
contradicting AGENTS.md's 'do not create PRDs or design documents
directly in this repo' rule. That rule is AI-agent-scoped (AGENTS.md's
own framing: 'Use the osac-workspace AI workflows instead', and it
explicitly allows the guides to 'support a human author on the manual
workflow'). Every flagged location already presents the manual path as
an explicit, clearly-labeled secondary option behind 'Recommended:
AI-assisted workflow', and the pattern predates this PR (present in
osac-workspace's original design.md since the repo's initial commit).
Removing it would drop support for human contributors without
osac-workspace/AI-tooling access.
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Tommy Hughes <tohughes@redhat.com>
- Fix inconsistency between embedded host_label_selector approach vs. Get RPC approach - Clarify that operator reads host_label_selector from BareMetalInstance spec (embedded during creation) - Remove all cluster integration content as it's out of scope per PRD - Fix FR references to match PRD: FR-3→FR-2 (selection), FR-7→FR-5 (provisioning) - Align authorization table with embedded approach (no service account RPC calls during provisioning) Addresses review feedback on single host-label resolution path alignment. Assisted-by: Claude Code <noreply@anthropic.com>
- Clarify operator extracts match_labels map from host_label_selector and passes directly to FindFreeHost - Require hostType as canonical selector key in match_labels with validation before persistence - Add min_pairs=1 validation to prevent empty selectors - Update all examples to use hostType key instead of hardware-profile - Remove match_expressions alternative to simplify API surface - Ensure consistent data flow: BareMetalLabelSelector → extract match_labels → validate hostType → pass to inventory client Addresses review feedback on explicit selector conversion and validation requirements. Assisted-by: Claude Code <noreply@anthropic.com>
OSAC-2589 - PRD: ComputeInstance StorageTier Selection
Document the mapping from VolumeStatus fields to volume_context keys in the CSI driver controller section: backend_id -> osac.backend, vendor_volume_id -> osac.volume-id, protocol -> osac.protocol. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com>
- Use string reference for instance_type field in BareMetalInstanceSpec (follows catalog_item pattern) - Remove custom BareMetalLabelSelector in favor of simple map<string,string> host_selector - Clarify controller architecture: fulfillment-service resolves instance_type and sets CRD hostType - Update flow to show proper separation: protobuf API → controller mapping → existing CRD schema - Remove incorrect references to embedded selectors - controller resolves at creation time - Document that existing CRD schema remains unchanged - Focus on hostType field mapping without involving Selector.HostSelector Addresses architectural alignment based on actual fulfillment-service controller patterns. Assisted-by: Claude Code <noreply@anthropic.com>
Replace template-driven node_sets with tenant-composed rows: host type dropdown from HostTypes.List, size per row, map key = host type id, unique host types only, no catalog defaults in v1. Assisted-by: Claude Code <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com>
…sue-solver/OSAC-3123 OSAC-3123: Align EP Review Bot PRD rubric with prd-review skill criteria
…Public API, and Consistency (osac-project#152) * Add PRD for OSAC-1577: API Quality — Declarative Validation, Auto-Generated Public API, and Consistency Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Haim Tayrie <htayrie@htayrie-thinkpadt14gen5.raanaii.csb> * PRD OSAC-1577: revise — correct OSAC-1331 scope to safe deletion OSAC-1331 is about preventing relationships to soft-deleted objects, not general uniqueness or referential integrity constraints. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Haim Tayrie <htayrie@htayrie-thinkpadt14gen5.raanaii.csb> * PRD OSAC-1577: address review feedback - Move OSAC-1275 to Prior Work section (already complete) - Remove "at the database level" design detail from OSAC-1331 scope Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Haim Tayrie <htayrie@htayrie-thinkpadt14gen5.raanaii.csb> --------- Signed-off-by: Haim Tayrie <htayrie@htayrie-thinkpadt14gen5.raanaii.csb> Co-authored-by: Haim Tayrie <htayrie@htayrie-thinkpadt14gen5.raanaii.csb>
Add PRD for network bandwidth metering covering per-tenant ingress/egress GiB transferred with consumption-based metering model dependent on networking vendor integration. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
detect_skills() used endswith("design.md") which incorrectly matched
ui-design.md and ux-design.md. Switch to os.path.basename exact match.
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Itzik Ezra <iezra@redhat.com>
…etect-skills-basename OSAC-3153: fix detect_skills matching ui-design.md as design.md
Apply the same terminology cleanup as sibling metering PRDs: fix broken Part 1 links to OSAC-985 renamed path, replace pricing/costing language with metering equivalents, rename "Charge Calculation Model" to "Usage Calculation Model" with pure accumulation rules (no dollar amounts), inline Part 1 cross-cutting ACs, and add UI out-of-scope statement consistent with other metering PRDs. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
Clarify Risk 10.1 per avishayt's review comment: the risk is not that no vendor has been selected, but that it has not been confirmed whether the vendors already integrated with OSAC (Netris, OVN-Kubernetes) expose per-tenant traffic counter APIs that OSAC can consume for metering. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
…tcomes Address AI review feedback: rewrite CAP-3 from deployment constraint to user-observable outcome, replace internal acceptance criteria (deduplication, retention windows, deployment independence) with PM-verifiable criteria, and move deployment detail to Assumptions. Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
OSAC-3149: PRD: Metering for Network Bandwidth
Rename README.md → design.md, move PRD into same directory. Follows the project design/prd skill template conventions. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
- Add dispatcher scope clarification (networking resources only) - Fix interface validation: HostType's NetworkInterface list, not BMaaS - Fix interface discovery: HostType API, not BMaaS - Fix IPAM table: DHCP or static, not DHCP only - Update cluster flow: CaaS BM-only for v0.2, system resolves fabric_interface, operator handles agent selection + networking - Add HostType + NetworkInterface to API Extensions - Add fabric_interface to ClusterNetworkAttachment Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Convert from EP-style YAML frontmatter to ai-workflows PRD template: - Metadata table replaces YAML frontmatter - Requirements renumbered R1-R7 → FR-1 through FR-7 - Acceptance criteria consolidated in dedicated section with checkboxes - Dependencies section added - Section numbering aligned with PRD template Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Detailed design for ComputeInstance unified networking integration. ComputeNetworkAttachment with primary field, optional network_attachments with defaults, auto ExternalIP/NATGateway, multi-NIC KubeVirt support. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Detailed design for Cluster unified networking integration. ClusterNetworkAttachment with node_set + fabric_interface resolution from HostType. Operator handles agent selection and network attachment. Step collections removed. CaaS BM-only for v0.2. Auto ExternalIP/NATGateway. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Detailed design for BaremetalInstance unified networking integration. BareMetalNetworkAttachment with interface + primary fields. Operator reconcileNetworking calls dispatcher for switch port config. HostType interface validation. Two-operator architecture. Auto ExternalIP/NATGateway. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Remove all implementation details (proto messages, field names, CRD, operator internals, AAP/Ansible references, component names) from VMaaS, CaaS, and BMaaS networking PRDs. Requirements now describe what users can do, not how it's implemented. Implementation details belong in the design.md files. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
…er stories to VMaaS PRD All four OSAC personas now have user stories: Tenant User, Tenant Admin, Cloud Infrastructure Admin, Cloud Provider Admin. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Each per-service PRD/EP now notes it is an expansion of the unified networking PRD/EP. Fixed HostType proto comment inconsistency across CaaS and BMaaS designs to match unified EP. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Dan Manor <dmanor@redhat.com>
Align with networking EP naming convention ({qualifier}-networking).
Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Dan Manor <dmanor@redhat.com>
Expand GuestOSFamily description in Key design points: clarify it replaces is_windows (not new), explain enum-over-boolean rationale, trace data flow from DiskImage through reconciler/CRD/AAP to KubeVirt domain config, add KubeVirt docs links. Addresses review comment by mhrivnak on PR osac-project#145. Signed-off-by: Marc Sluiter <msluiter@redhat.com> Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Marc Sluiter <msluiter@redhat.com>
Document user-visible differences between LINUX and WINDOWS guest OS families: firmware, TPM, initialization method, ports, disk size, etc. Point to ocp_virt_vm AAP role as source of truth. Note that API docs must describe these effects for users. Addresses review comment by mhrivnak on PR osac-project#145. Signed-off-by: Marc Sluiter <msluiter@redhat.com> Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Marc Sluiter <msluiter@redhat.com>
Update PRD and design per Slack agreement: all authenticated users can create, update, and delete tenant-scoped DiskImages. Move DiskImages CRUD to has_client_permissions in OPA policy. Add Tenant User stories, update workflow actors, add E2E test case. Signed-off-by: Marc Sluiter <msluiter@redhat.com> Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Marc Sluiter <msluiter@redhat.com>
Publish the Cloud Provider Admin instance type UI design under the existing OSAC-46 enhancement path so reviewers can evaluate the proposed navigation, create flow, and lifecycle actions. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Apply the formatting cleanup required by the enhancement-proposals pre-commit checks so the published UI design passes CI unchanged in meaning. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Update the published design to avoid introducing a second useInstanceTypes hook name and instead call for a distinct admin/private list hook. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Update the published design to distinguish failed instance type fetches from empty results and to use the existing list-page retry pattern for load failures. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Adjust the list-page failure-handling text to match the current non-loading list error pattern without claiming an existing retry action. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Clarify integer-only validation, numeric field step behavior, request conversion, and field-level backend error mapping for the instance type create flow. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Match the existing create-route convention and simplify lifecycle action labels so the UI design stays consistent with current patterns and reviewer feedback. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Update the UI design so obsolete instance types can be deleted from the admin list page while keeping delete unavailable for active and deprecated entries. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
Align the lifecycle-state color wording with the latest UX discussion by changing the deprecated state color from gold to orange in the published design. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: batzionb <brotman@redhat.com>
OSAC-3586: UI Design - VM Instance Types UI
32 behavioral test cases covering DiskImage CRUD, lifecycle management, tenant isolation, ComputeInstance/Template/CatalogItem integration, and deletion protection. Mapped to PRD requirements FR-1 through FR-13 and NFR-2. Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Marc Sluiter <msluiter@redhat.com>
The design document referenced synthesized FR-N and NFR-N requirement IDs that do not exist in the PRD. The PRD uses only CAP-N and D-N prefixes. Replace all FR/NFR references with the corresponding CAP/D equivalents: - NFR-12 (air-gap) → CAP-14 (independent deployment) - NFR-1 (HA) → D-2 (metering unavailability must not affect provisioning) - NFR-2, NFR-4 (perf targets) → dropped (design targets, not PRD requirements) Assisted-by: Claude Code <noreply@anthropic.com> Co-Authored-By: Moti Asayag <masayag@redhat.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Moti Asayag <masayag@redhat.com>
…ment-id-alignment OSAC-985: align design requirement references with PRD convention
Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Avishay Traeger <atraeger@redhat.com>
- Image is mandatory and always locked during provisioning; owner can update it - Added tenant assignment and publish/unpublish story - Added pre-GA assumption (no migration needed) - Added catalog item reference mandatory assumption - Connected deletion blocking to lifecycle out-of-scope - Added billing constraint note to cost metadata out-of-scope - Added tenant-provided images out-of-scope with link to PR osac-project#145 - Cleaned up design leakage and removed [User] markers Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Avishay Traeger <atraeger@redhat.com>
Adds BCM (NVIDIA Base Command Manager) as a pluggable inventory backend for bare-metal-fulfillment-operator using a hybrid architecture: BCM for inventory, Metal3 for power management. Key design decisions: - BMH lifecycle interface decouples on-demand BMH creation/deletion from inventory backends, auto-wired when management is Metal3 - Stable ExternalHostID in namespace/name format from FindFreeHost, consistent with existing backends - BMH readiness handled via existing IsTransitioning in PowerStatus, no new sentinel errors or controller changes needed - Metal3 namespace sourced from management config (single source of truth), no duplication in inventory config - BCM API concurrency handled via process-local mutex + leader election + verify-after-write defense-in-depth Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: MENNY ABOUSH <maboush@maboush-thinkpadt14gen5.raanaii.csb>
OSAC-2540: DiskImage design document
OSAC-2645: Design — BCM Backend Integration for BMaaS
- Clarify image is mandatory for VM/BM only, not clusters - Specify only governance-relevant spec fields are exposed - Note template parameters governed via key-value map - Expand Tenant Admin story to cover update/unpublish/delete Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Avishay Traeger <atraeger@redhat.com>
…tems Assisted-by: Claude Code <noreply@anthropic.com> Signed-off-by: Avishay Traeger <atraeger@redhat.com>
OSAC-3538: PRD - Catalog Items v2 — Field Governance Redesign
OSAC-3254: PRD - Expose NIC MAC Addresses in BareMetalInstance Status
OSAC-1269: update ClusterVersion PRD and design
Owner
|
Run 3 artifact saved. Closing. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PRD for OSAC-3833
The PRD document is in
enhancements/OSAC-3833/prd.mdon this branch.Review the file changes for the latest version. Leave comments on this PR to provide feedback — Forge will regenerate the PRD and push updated commits.