@@ -555,9 +555,9 @@ semantics.
555555
556556## Follow-Up Decisions
557557
558- Three of the six requirements below are resolved by
558+ Four of the six requirements below are resolved by
559559[ Amendment: stock adoption on one GKE recipe] ( #amendment-stock-adoption-on-one-gke-recipe ) ;
560- one remains open, and two are planned work tracked in the epic. The list is
560+ the remaining two are planned work tracked in the epic. The list is
561561retained as originally written; the amendment records what changed, what
562562remains open, and where the rest is tracked.
563563
@@ -634,25 +634,50 @@ cluster and establishing the pattern for later stock adoptions. This is
634634recorded plainly rather than framed as customer demand, because the
635635requirement exists to prevent adoption justified only by availability.
636636
637- ### Still open: selection and opt-out semantics
637+ ### E. Selection and opt-out semantics
638638
639- Unresolved and deliberately not decided here. ` ComponentRef.IsEnabled() `
640- already reads a recipe-recorded ` enabled ` override, which satisfies "recipe-
641- recorded" and is not the bundle-time toggle Decision 2 rejects. What remains
642- undecided is how a user generating from a stock recipe declines the
643- component: by authoring a custom overlay using the existing mechanism, or by
644- a generation-time flag that ` aicr recipe ` records into the emitted recipe.
639+ Resolved 2026-08-20. A ** generation-time flag recorded in the emitted recipe** ,
640+ modelled on the existing ` --slurm-accounting-mode ` selection rather than
641+ invented:
645642
646- The second shape changes the CLI contract, so it is a decision rather than an
647- implementation detail. It must be resolved before the overlay change in C
648- merges, and whichever shape is chosen is recorded by amending this section.
643+ ``` bash
644+ aicr recipe ... --runtime-inventory disabled
645+ ```
646+
647+ The selection is recorded as ` configuration.runtimeInventory.mode ` , the recipe's
648+ ` apiVersion ` becomes ` ConfiguredRecipeResultAPIVersion ` , and the component's ref
649+ carries ` install: false ` . ` ComponentRef.IsEnabled() ` already reads that key, so
650+ the component leaves the resolved set, the bundle, and deployment validation.
651+
652+ This satisfies Decision 2's specific objection. A bundle-time
653+ ` --set k8s-aibom:enabled=false ` was rejected because it changes neither the
654+ recipe nor its health checks; here both change, and the health-check half comes
655+ for free because the check lives on the component's own ref rather than on a
656+ sibling. That is simpler than the Slurm accounting precedent, which has to
657+ append and omit a check on a different component.
658+
659+ Passing the flag on a recipe that does not declare the component is an error,
660+ not a silent no-op. Selecting a mode there is a mistake — wrong criteria, a
661+ typo, a recipe that never carried it — and succeeding quietly would record a
662+ decision the recipe cannot honor. The check runs before the configuration is
663+ written, so a rejected build leaves no partial record.
664+
665+ The same selection is available in an ` AICRConfig ` document at
666+ ` spec.recipe.configuration.runtimeInventory.mode ` .
667+
668+ ** Scope boundary worth naming.** This is the second entry under
669+ ` RecipeConfiguration ` , and the pattern is one bespoke selection per optional
670+ component. That is deliberate: this ADR asks for this component specifically,
671+ and a generic per-component disable would need a policy for which components
672+ may be declined at all — nothing should let a recipe decline ` gpu-operator ` .
673+ A third entry is the signal to revisit rather than extend by reflex.
649674
650675### Requirement status
651676
652677| Follow-Up requirement | Status |
653678| ---| ---|
654679| Exact recipe families in scope | Resolved — C |
655- | Selection and opt-out semantics | ** Open ** — see above |
680+ | Selection and opt-out semantics | Resolved — E |
656681| Non-alpha storage API and migration policy | Resolved — A |
657682| Concrete user-demand case | Resolved — D |
658683| Managed-cluster qualification and measured cost | Planned — [ #2271 ] ( https://github.com/NVIDIA/aicr/issues/2271 ) |
0 commit comments