Expand description
caixa-flux — typed renderer that emits the FluxCD-side fragments a caixa Servico needs in the cluster’s GitOps tree.
Same naming convention as [caixa_helm] (renders per-program Helm
charts) and [caixa_flake] (renders flake.nix): caixa-<target> =
“Rust crate that takes a typed Caixa and emits the canonical
source for <target>”.
§Two paths, two surfaces
Per theory/META-FRAMEWORK.md §I, two equally-canonical ways exist
to deploy a caixa Servico:
-
Aggregator path (
programs_yaml_entry) — the cluster has exactly onelareira-fleet-programsHelmRelease whose values contain aprograms:array. Adding a Servico = adding one entry to that array. Higher leverage — one HelmRelease handles the whole fleet’s worth of caixas, fewer reconciler events, simpler cluster surface. This is whatfeira deployuses by default. -
Bundle path (
cluster_bundle) — emit a freshGitRepositoryHelmRelease+Kustomizationtrio for the caixa’s own per- program chart (rendered bycaixa-helm). Used for one-off / isolated services where the aggregator overhead is undesirable (e.g. alpha workloads with non-standard images, breakglass tooling).
§V0 contract
use caixa_core::Caixa;
use caixa_flux::programs_yaml_entry;
let caixa = Caixa::from_lisp(src)?;
let cu_yaml: serde_yaml::Value =
serde_yaml::from_str(std::fs::read_to_string("servicos/hello-rio.computeunit.yaml")?)?;
let entry: serde_yaml::Value = programs_yaml_entry(&caixa, &cu_yaml)?;
// → { name: hello-rio, namespace: tatara-system, module: { source: ... }, ... }§What this is NOT
- Not a Flux CLI wrapper — bytes only.
- Not the operator deploy bundle — that lives in
pleme-io/caixa/operator-flux/. - Not an installer —
feira deployorchestrates the I/O of writing to a GitOps repo + opening a PR.
Structs§
- Cluster
Bundle Opts - Inputs for
cluster_bundle.
Enums§
- Error
- Errors caixa-flux can raise.
- GitRef
Spec
Constants§
- CLUSTER_
BUNDLE_ LAREIRA_ ENABLED_ DEFAULT - Canonical substrate-side default for the
HelmRelease.spec.values.<library>.enabledchild-chart-enablement toggle scalar everycluster_bundle-emittedhelmrelease.yamldocument seeds under its per-{library_name}values-overlay wrap to force-on the pairedcaixa_core::DEFAULT_LIBRARY_NAMEchild chart at the per-clusterHelmRelease-side apply step — re-export of the canonicalcaixa_core::CLUSTER_BUNDLE_LAREIRA_ENABLED_DEFAULTso the substrate-side child-chart-enablement-toggle scalar-value default lives in exactly one place across every caixa renderer. Pairs with the siblingcaixa_core::HELM_VALUES_KEY_ENABLEDleaf-scalar-key half of the(leaf-key, scalar-value)per-values-overlay child-chart-enablement-toggle declaration pair. - COMPUTEUNIT_
MODULE_ KEY_ SOURCE - Local re-export of the canonical
caixa_core::COMPUTEUNIT_MODULE_KEY_SOURCE— thewasm.pleme.io/v1alpha1/ComputeUnitCRD nestedspec.module.sourceper-CR wasm-component-reference leaf-scalar sub-block key every renderedprograms[]entry carries under the parentCOMPUTEUNIT_SPEC_KEY_MODULEblock to name the exact OCI / git / file wasm-component artifact the M2.5 wasm-engine instantiator loads at Servico bring-up. Three per-module.sourcedrift-detection navigators in this crate’s test module (programs_yaml_entry_round_trips’s per-entry.get(COMPUTEUNIT_SPEC_KEY_MODULE).and_then(|m| m.get(…))present-check +upsert_into_programs_yaml’s cross-upsert readback +upsert_into_helmrelease_programs’s peerHelmRelease-wrappedspec.values.programs[]cross-upsert readback) now consult the same&'static str— extends the discipline the peerCOMPUTEUNIT_SPEC_KEY_MODULE/COMPUTEUNIT_SPEC_KEY_TRIGGER/COMPUTEUNIT_SPEC_KEY_CAPABILITIEStop-level-spec.*re-exports establish one level deeper onto the nestedspec.module.*leaf-scalar-axis. Seecaixa_core::COMPUTEUNIT_MODULE_KEY_SOURCEfor the full lift rationale. Canonicalwasm.pleme.io/v1alpha1/ComputeUnitCRDspec.module.sourceper-CR wasm-component-reference leaf-scalar sub-block key — the nestedspec.module.*child every renderedComputeUnitYAML carries to name the exact wasm-component artifact the M2.5 wasm-engine instantiator loads at Servico bring-up. Peer of the parentCOMPUTEUNIT_SPEC_KEY_MODULEon the same ComputeUnit CRD per-spec.module.*sub-block surface —COMPUTEUNIT_SPEC_KEY_MODULEnames the top-level per-CR module- reference block; this constant names the block’s leaf reference- value axis. Every renderedprograms[]entry thelareira-fleet-programslibrary chart consumes carries themodule.source: oci://ghcr.io/pleme-io/<caixa>:<versao>(ormodule.source: file://...for locally-mounted wasm bundles;module.source: github:<owner>/<repo>for git-hosted sources) as its per-Servico wasm-artifact reference; everyspec.module.sourcereadback across the [caixa_flux::programs_yaml_entry] round-trip pins + the [caixa_flux::upsert_into_programs_yaml] / [caixa_flux::upsert_into_helmrelease_programs] cross-upsert navigators resolves the same&'static str. - COMPUTEUNIT_
SPEC_ KEY_ CAPABILITIES - Local re-export of the canonical
caixa_core::COMPUTEUNIT_SPEC_KEY_CAPABILITIES— thewasm.pleme.io/v1alpha1/ComputeUnitCRD per-CR WASI-capability-listspec.capabilitiessub-block key every renderedprograms[]entry splices verbatim from the upstream ComputeUnit YAML’sspec.capabilities. Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEandCOMPUTEUNIT_SPEC_KEY_TRIGGERon the same ComputeUnit CRD per-spec.*sub-block axis — completes the substrate-side ComputeUnit-CRD per-spec.*sub-block re-export triple in this crate. Seecaixa_core::COMPUTEUNIT_SPEC_KEY_CAPABILITIESfor the full lift rationale. Canonicalwasm.pleme.io/v1alpha1/ComputeUnitCRDspec.capabilitiesper-CR WASI-capability-list sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to declare the wasm-component-capability tokens the M2.5 wasm-engine instantiator binds at Servico bring-up (http-in:0.0.0.0:8080for the HTTP incoming-handler,envfor read-only environment access,sock-*for TCP outbound, and the sibling WASI-preview-2 preview- interfaces per the WIT Component Model). Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEandCOMPUTEUNIT_SPEC_KEY_TRIGGERon the same ComputeUnit CRD per-spec.*sub-block surface — completes the substrate-side ComputeUnit-CRD per-spec.*sub-block re-export triple every rendered ComputeUnit YAML declares as its top-level(module, trigger, capabilities)axis. Same lift trajectory as the siblingCOMPUTEUNIT_SPEC_KEY_MODULEaxis — three verbatim inline test-side literals (one caixa-flux drift- detection navigator + two caixa-helm per-values drift-detection navigators, one under the canonical wrap-key + one under the library-name-override wrap-key) collapsed onto the same&'static strso any future rebrand (the substrate moving the capability-list axis tocaps:for terse-schema parity with the WASI-preview-2 upstream naming, splitting intocapabilities.wasi.*/capabilities.pleme.*runtime-vs-substrate discriminators, or the M4 WIT Component Model materializer moving to a typedimports:/exports:split) reaches every consumer by construction. SeeCOMPUTEUNIT_SPEC_KEY_MODULEfor the full lift rationale. - COMPUTEUNIT_
SPEC_ KEY_ MODULE - Local re-export of the canonical
caixa_core::COMPUTEUNIT_SPEC_KEY_MODULE— thewasm.pleme.io/v1alpha1/ComputeUnitCRD per-CR wasm-module-referencespec.modulesub-block key every renderedprograms[]entry splices verbatim from the upstream ComputeUnit YAML’sspec.module(per the docstring onprograms_yaml_entryabove), so thelareira-fleet-programslibrary chart’s per-Servico module-source axis binds to the exact source the caixa.lisp’s:servicosfixture pins. Four per-entry drift-detection navigators in this crate’s test module (theprograms_yaml_entry_round_tripsper-key pair + theupsert_helmrelease_replaces_existing/upsert_into_programs_yamlper-module.sourcenavigators) now consult the same&'static stras the peer caixa-helm per-values navigators’ module-source axis. Same re-export shape as the peerFLEET_PROGRAMS_KEY_NAME/KUBE_KEY_NAMESPACEsurfaces on the sibling canonical-fleet-programs-schema-key / canonical-K8s-CR-key axes — extends the discipline the M2-typed- slot / fleet-programs schema / K8s-CR key re-export families establish onto the substrate-side ComputeUnit-CRD per-spec.*sub-block axis. Seecaixa_core::COMPUTEUNIT_SPEC_KEY_MODULEfor the full lift rationale. Canonicalwasm.pleme.io/v1alpha1/ComputeUnitCRDspec.moduleper-CR wasm-module-reference sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to name the wasm component (module.source: oci://...for OCI-hosted binaries,module.source: file://...for locally-mounted wasm bundles) the M2.5 wasm-engine instantiator loads at Servico bring-up. The single source of truth every downstream consumer that reads or emits the per-CR module sub-block reaches for: - COMPUTEUNIT_
SPEC_ KEY_ TRIGGER - Local re-export of the canonical
caixa_core::COMPUTEUNIT_SPEC_KEY_TRIGGER— thewasm.pleme.io/v1alpha1/ComputeUnitCRD per-CR invocation-shapespec.triggersub-block key every renderedprograms[]entry splices verbatim from the upstream ComputeUnit YAML’sspec.trigger. Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEon the same ComputeUnit CRD per-spec.*sub-block axis. Seecaixa_core::COMPUTEUNIT_SPEC_KEY_TRIGGERfor the full lift rationale. Canonicalwasm.pleme.io/v1alpha1/ComputeUnitCRDspec.triggerper-CR invocation-trigger sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to name how the wasm component is invoked (trigger.service.{port, paths}for HTTP-triggered Servicos,trigger.subscription.{subject}for the future NATS-triggered Servicos the M4:contratostyped-mesh pubsub axis will emit). Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEon the same ComputeUnit CRD per-spec.*sub-block surface —COMPUTEUNIT_SPEC_KEY_MODULEnames the per-CR wasm-binary reference axis, this constant names the per-CR invocation-shape axis every downstream trigger consumer (thepleme-computeunitlibrary chart’s per-Servicotrigger.service.port/trigger.service.paths/trigger.service.breathabilityvalues- block routing, the future M4 pubsub-subscription binding, thecaixa-meshCiliumNetworkPolicyL4-port fallback that reads the destination Servico’s per-trigger.service.portaxis via a future resolver round-trip) reaches for. Same lift trajectory as the siblingCOMPUTEUNIT_SPEC_KEY_MODULEaxis — three verbatim inline test-side literals (one caixa-flux drift-detection navigator - DEFAULT_
FLUX_ CHART_ SOURCE_ SUBPATH - Canonical Flux v2
HelmRelease.spec.chart.spec.chartper-CR chart- directory-in-GitRepository-source sub-path default the substrate seeds into every per-caixahelmrelease.yamldocument. Re-export of the canonicalcaixa_core::DEFAULT_FLUX_CHART_SOURCE_SUBPATHso the Flux v2 helm-controller-side per-CR chart-directory-in-git-source default scalar-value lives in exactly one place across every caixa renderer —ClusterBundleOpts::for_caixa’s per-caixa default seed (the sole production-code site the prior inline"chart".into()scalar-value literal sat at, seeding theClusterBundleOpts::chart_pathfield thatcluster_bundle’shelmrelease.yamlformat-string template threads through itsFLUX_HELMCHART_TEMPLATE_KEY_CHART- keyedspec.chart.spec.chartaxis verbatim) now consults the same&'static str, so a future substrate-side chart-directory-in-git- source rebrand ("chart"→"charts"once a per-caixa multi-chart layout lands and the substrate publishes N siblinglareira-<nome>/charts under one git repository,"chart"→"helm"on a cross- language convention alignment with sibling wasm-runtime substrates,"chart"→"deploy"on a per-caixa-deploy-directory naming migration) is a one-line edit on the canonicalcaixa_core::DEFAULT_FLUX_CHART_SOURCE_SUBPATHdeclaration, not a coordinated rewrite across theClusterBundleOptsdefault seed and every future per-target renderer the substrate adds. Pairs with the siblingFLUX_HELMCHART_TEMPLATE_KEY_CHARTre-export on the same per-CRspec.chart.spec.chartscalar-axis — the key half of the per- CR scalar-key/scalar-value pair lives atFLUX_HELMCHART_TEMPLATE_KEY_CHART, the value half’s substrate-side default seed lives here. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_FLUX_RECONCILE_INTERVAL/caixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUT/caixa_core::DEFAULT_PUBLISH_TAG_PREFIXre-exports on the peer canonical-substrate-default-load-bearing-scalar surface. Canonical Flux v2HelmRelease.spec.chart.spec.chartper-CR chart- directory-in-GitRepository-source sub-path scalar everycaixa-flux-emittedhelmrelease.yamldocument declares as the default chart-directory-in-git-source pointer when the per-caixaClusterBundleOpts::for_caixaseed doesn’t carry an operator- pinned override. The Flux v2 source-controller resolves the pointer relative to the pairedFLUX_KIND_GIT_REPOSITORYthe siblingFLUX_KEY_SOURCE_REF-keyedsourceRef:block names — the substrate’s canonical contract with every caixa Servico’s git repository is that the per-caixalareira-<nome>chart the peercaixa-helmrenderer emits lives at the./chart/sub-tree of the repository root, so the helm-controller’s per-CR chart-open loop keys off this exact scalar to locate theHELM_CHART_YAML_FILENAME+HELM_VALUES_YAML_FILENAMEpair the per-caixa rendered chart declares. Every rendered per-caixaHelmReleaseCR consults the same&'static strat seed time so a future substrate-side chart-directory-in-git-source rebrand ("chart"→"charts"once a per-caixa multi-chart layout lands and the substrate publishes N siblinglareira-<nome>/charts under one git repository,"chart"→"helm"on a cross-language convention alignment with sibling wasm-runtime substrates,"chart"→"deploy"on a per-caixa-deploy-directory naming migration) is a one-line edit on this canonical declaration, not a coordinated rewrite across theClusterBundleOptsdefault seed and every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ KUSTOMIZATION_ TIMEOUT - Canonical Flux v2
Kustomization.spec.timeoutper-CR reconcile wall-clock cap default the substrate seeds into every per-caixakustomization.yamldocument. Re-export of the canonicalcaixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUTso the Flux v2 kustomize-controller-side per-CR reconcile-ceiling default scalar- value lives in exactly one place across every caixa renderer —cluster_bundle’skustomization.yamlformat-string template’s sole production-code emit site (the prior inlinetimeout: 5mscalar-value literal under the top-levelspecposition, keyed by the siblingFLUX_KUSTOMIZATION_KEY_TIMEOUTleaf-scalar-key) now consumes the same&'static strat emit time through one{timeout_default}named-arg interpolation, so a future substrate-side reconcile-ceiling migration ("5m"→"3m"on faster per-caixa idempotency-checkpoint cadence,"5m"→"10m"on larger per-caixa manifest sets — coordinated with the siblingDEFAULT_FLUX_RECONCILE_INTERVALreconcile-poll cadence tuning cycle) is a one-line edit on the canonicalcaixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUTdeclaration, not a coordinated rewrite across the emit site + every future per-CR reconcile-cap consumer the substrate adds. Pairs with the siblingFLUX_KUSTOMIZATION_KEY_TIMEOUTre-export on the same per-CRspec.timeoutscalar-axis — the key half of the per-CR scalar- key/scalar-value pair lives atFLUX_KUSTOMIZATION_KEY_TIMEOUT, the value half’s substrate-side default seed lives here. Same shape as the siblingDEFAULT_FLUX_RECONCILE_INTERVAL(908180f) /FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) re- exports on the peer canonical-substrate-default-load-bearing- scalar surface. Canonical Flux v2Kustomization.spec.timeoutper-CR reconcile wall-clock cap default the substrate seeds into every per-caixakustomization.yamldocument. Every rendered per-caixa Flux v2KustomizationCR consults the same&'static strat emit time so a future substrate-side reconcile-ceiling migration ("5m"→"3m"on faster per-caixa idempotency-checkpoint cadence once the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTretry-ceiling tightens,"5m"→"10m"on larger per-caixa manifest sets where the upstream Flux v2 kustomize-controller-side per-CR reconcile duration outgrows the substrate’s default ceiling — coordinated with the siblingDEFAULT_FLUX_RECONCILE_INTERVALreconcile-poll cadence tuning cycle) is a one-line edit on this canonical declaration, not a coordinated rewrite across thecluster_bundlekustomization.yamltemplate + every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ RECONCILE_ INTERVAL - Canonical Flux v2
spec.intervalreconcile-poll cadence default the substrate seeds into every per-caixacluster_bundleCR triplet. Re-export of the canonicalcaixa_core::DEFAULT_FLUX_RECONCILE_INTERVALso the Flux v2 controller-side reconcile-cadence default scalar-value string lives in exactly one place across every caixa renderer —ClusterBundleOpts::for_caixa’s per-caixa default seed (the sole production-code site the prior inline"10m"scalar-value literal sat at, seeding theClusterBundleOpts::intervalfield thatcluster_bundle’s three per-CR format-string templates thread through theirFLUX_KEY_INTERVAL-keyedspec.intervalaxis verbatim) now consults the same&'static str, so a future substrate- side reconcile-cadence migration ("10m"→"5m"on lower-latency- poll optimizations,"10m"→"15m"on cost-optimized clusters where per-CR source-controller poll cost outweighs reconcile-freshness gains — coordinated with the upstream Flux v2 project’s per-controller tuning cycle) is a one-line edit on the canonicalcaixa_core::DEFAULT_FLUX_RECONCILE_INTERVALdeclaration, not a coordinated rewrite across theClusterBundleOptsdefault seed and every future per-target renderer the substrate adds. Pairs with the siblingFLUX_KEY_INTERVALre-export on the same per-CRspec.intervalscalar-axis — the key half of the per-CR scalar-key/ scalar-value pair lives atFLUX_KEY_INTERVAL, the value half’s substrate-side default seed lives here. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_PUBLISH_TAG_PREFIXre-exports on the peer canonical-substrate-default-load-bearing-scalar surface. Canonical Flux v2spec.intervalreconcile-poll cadence duration scalar everycaixa-flux-emitted Flux v2 CR (the per-caixacluster_bundletriplet’sGitRepository+HelmRelease+Kustomization) declares as its default reconcile-schedule when the per-caixaClusterBundleOpts::for_caixaseed doesn’t carry an operator-pinned override. Every rendered per-caixa Flux v2 CR consults the same&'static strat seed time so a future substrate-side reconcile-cadence migration ("10m"→"5m"once the Flux v2 source- controller / helm-controller / kustomize-controller trio ships lower- latency-poll optimizations that make per-CR cluster load safe at a faster cadence,"10m"→"15m"on cost-optimized clusters where the per-CR source-controller poll cost outweighs the reconcile-freshness gain) is a one-line edit on this canonical declaration, not a coordinated rewrite across theClusterBundleOptsdefault seed and every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ SYSTEM_ NAMESPACE - Canonical FluxCD installation namespace — re-export of the lifted
caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACEso the load-bearing string lives in exactly one place across every consumer of the renderedkustomization.yaml’smetadata.namespaceandspec.sourceRef.nameaxes. Both axes are the same conceptual “Flux installation namespace” theflux bootstrappipeline names; until this lift landed they sat as two inlineflux-systemliterals insidecluster_bundle’skustomization.yamlformat-string template, and any future per-edition Flux-installation-namespace rebrand on one without a coordinated edit on the other would have silently emitted aKustomizationoutside the bootstrap controller’s watch window or a danglingsourceRef. Same shape as thecaixa_core::DEFAULT_NAMESPACE(a085b26) /caixa_core::DEFAULT_LIBRARY_NAME(41438dc) /caixa_core::DEFAULT_PUBLISH_TAG_PREFIX(0a6a602) lifts on the peer canonical-load-bearing-string surface. Canonical FluxCD installation namespace everycaixa-fluxKustomizationdocument apply-targets. The single source of truth both axes of the renderedkustomization.yamldocument reach for: - DEFAULT_
LIBRARY_ NAME - Canonical Helm library-chart name every
lareira-<nome>chart depends on — re-export of the liftedcaixa_core::DEFAULT_LIBRARY_NAMEso the load-bearing string lives in exactly one place across every caixa renderer. The wrap key thecluster_bundlehelmrelease.yamltemplate uses underspec.values.<library>:to thread the per-cluster overrides through to the rendered chart’s dep block must match the peercaixa-helmchart’sdependencies[0].nameaxis exactly (Helm’s per-dep alias convention scopes values under the dep’sname:when noalias:is set), and both axes now consult the same&'static str. Same shape as thecaixa_core::DEFAULT_NAMESPACE(a085b26) /caixa_core::DEFAULT_SERVICO_PORT(1e22add) lifts on the peer canonical-K8s-axis-constant surface. Canonical Helm library-chart name everylareira-<nome>chart depends on — thepleme-computeunitlibrary chart inpleme-io/helmworks/charts/pleme-computeunitthat owns the K8s resource templates (ComputeUnit + Service + ScaledObject + ConfigMap) every per-Servico chart consumes via Helm’s per-dep alias convention (when noalias:is set on a dependency, values are scoped under the dependency’sname:). - DEFAULT_
NAMESPACE - Default cluster-wide namespace for caixa Servicos when the
computeunit doesn’t pin its own. Re-export of the canonical
caixa_core::DEFAULT_NAMESPACEso the namespace string lives in exactly one place across every renderer — caixa-flux’s programs.yaml / GitRepository / HelmRelease / Kustomization emitters and caixa-mesh’s programs fan-out / CiliumNetworkPolicy / Gateway / HTTPRoute emitters now consult the same&'static str, so a future per-cluster-namespace rebrand is a one-line edit on the canonicalcaixa_core::DEFAULT_NAMESPACEdeclaration, not a coordinated rewrite across this crate, caixa-mesh, and every future per-target renderer the substrate adds. Default cluster-wide K8s namespace every caixa renderer emits objects into when the source caixa doesn’t pin its own. The single source of truth bothcaixa-flux’s programs.yaml / GitRepository / HelmRelease / Kustomization emitters andcaixa-mesh’s programs fan-out / CiliumNetworkPolicy / Gateway / HTTPRoute emitters consult — re-exported by each renderer’s lib aspub use caixa_core::DEFAULT_NAMESPACE, so a future per-cluster-namespace rebrand (e.g. moving topleme-systemoncetatara-systemoutlives its scoping intent) is a one-line edit here, not a coordinated rewrite across every renderer crate’smetadata.namespaceslot. - FLEET_
PROGRAMS_ KEY_ NAME - Local re-export of
caixa_core::FLEET_PROGRAMS_KEY_NAME— the canonicallareira-fleet-programsvalues-schema per-entry name discriminator key (name:— the exact YAML key the fleet-programs library chart’srange .Values.programsstep reads per-entry to key each renderedComputeUnitCR’smetadata.nameoff). Peer of the siblingFLEET_PROGRAMS_KEY_PROGRAMStop-level array-key re-export on the same fleet-programs schema — that one carries theprograms:array key both writer verbs upsert into, this one carries the per-entry name-axis both writer verbs walk that array by (and both emit-side entry builders — this crate’sprograms_yaml_entryand the peer [caixa_mesh::programs_for_aplicacao] — write the per-entry name-axis at). - FLEET_
PROGRAMS_ KEY_ PROGRAMS - Local re-export of
caixa_core::FLEET_PROGRAMS_KEY_PROGRAMS— the canonicallareira-fleet-programsvalues-schema array key (programs:— the exact YAML key the fleet-programs library chart reads under.Values.programs[]to iterate oneComputeUnitCR per entry). This crate’s two writer-side upsert paths (upsert_into_helmrelease_programson the aggregator-HelmRelease shape,upsert_into_programs_yamlon the bare-values.yaml shape) both anchor on this key when walking the entry sequence to match-by-name-and-replace-or-append. Re-exported here so the two production sites’values_map.entry(Value::String(<key>.into()))/programs_yaml.get(<key>)navigation reads from the same&'static stras every peer consumer (and every future fleet- programs schema-key consumer — the M4app-operatorper-Aplicacao reconciler, the futurefeira app deploy --applywriter-side aggregator merge). Same re-export shape as the peerKUBE_KEY_NAMESPACE/KUBE_KEY_METADATA/KUBE_KEY_SPEC/KUBE_KEY_KIND/KUBE_KEY_API_VERSIONsurfaces on the sibling K8s-CR canonical-key axes — extends the discipline the K8s-CR key re-export quintet establishes onto the canonical fleet-programs schema top-level axis. Canonicallareira-fleet-programsvalues-schema key naming the per-caixa entry sequence — the exact YAML key the fleet-programs library chart’svalues.yamlreads asprograms:(a sequence of per-Servico entries the chart’srangeiterates over to emit oneComputeUnitCR per entry). Two production consumers in [caixa_flux] carry this key on the same fleet-programs schema axis: - FLUX_
GITREPOSITORY_ API_ VERSION - Canonical FluxCD
GitRepositoryCRDapiVersion— re-export of the liftedcaixa_core::FLUX_GITREPOSITORY_API_VERSIONso the load-bearing string lives in exactly one place across the rendered Flux bundle’sgitrepository.yamldocumentapiVersionaxis. Until this lift landed the axis sat as an inlinesource.toolkit.fluxcd.io/v1literal at line 436 of this crate’scluster_bundleformat-string template, and any future per-Flux-v3-migration version bump on this axis without a coordinated edit on the siblingFLUX_HELMRELEASE_API_VERSIONaxis would have silently routed the renderedGitRepositoryoutside the Flux v2source-controller’sWatches(controller-side: never reconciled, the dependent HelmRelease’schart: sourceRefdangles, every per-Servico apply silently comes up with the prior reconciled state). Same shape as theFLUX_HELMRELEASE_API_VERSION(55f0fd9) /caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE(7197d38) lifts on the sibling Flux-v2-load-bearing-string axis. Canonical FluxCDGitRepositoryCRDapiVersioneverycaixa-fluxgitrepository.yamldocument emits. The Flux v2source-controllerwatches resources at this exact group/version (source.toolkit.fluxcd.io/v1); drift to a stalev1beta1/v1beta2(the pre-GA Flux v2 source-controller betas every upstream Flux GA- migration doc names) silently routes the renderedGitRepositoryoutside the controller’sWatchesand breaks at apply time with a non-self-locating “no kind ‘GitRepository’ is registered for version ‘source.toolkit.fluxcd.io/v1beta2’” error far from the source caixa.lisp / the renderer’s format-string template. - FLUX_
GITREPOSITORY_ KEY_ REF - Canonical Flux v2 per-
GitRepositoryspec.refref-selection discriminated-union parent container-axis key everycluster_bundle-renderedgitrepository.yamldocument mounts its per-shape{tag, branch, commit}sub-selector arm under. Re-export of the canonicalcaixa_core::FLUX_GITREPOSITORY_KEY_REFso the container-axis byte-string lives in exactly one place across every consumer: the writer-sidecluster_bundlegitrepotemplate composer’sref:sub-block header (the sole production emission site the prior inline"ref:"literal sat at) + the peer test-fixture.get("ref")sub-selector traversal (the sole test-side reader site the prior inline"ref"literal sat at) both now navigate through the same&'static str. Nests one level above the siblingFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_BRANCH/FLUX_GITREPOSITORY_REF_KEY_COMMITper-shape arm sub-selector triple it wraps — the parent container-axis KEY now moves through one lifted const alongside its already-lifted per-shape arm sub-selector-KEY triple, so a future Flux v3 sub-schema rebrand (an upstreamfluxcd/flux2rename of the ref-selection container-axis fromspec.reftospec.gitRef/spec.source.ref) lands as one const edit coordinated with the sibling per-shape arm lifts. See the caixa-core docstring for the full lift rationale. Canonical Flux v2 per-GitRepositoryspec.refref-selection discriminated-union parent container-axis key everycaixa-flux- emittedgitrepository.yamldocument mounts its per-shape{tag, branch, commit}sub-selector arm under. Nests one level above the siblingFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_BRANCH/FLUX_GITREPOSITORY_REF_KEY_COMMITtriple it wraps — the K8s Flux v2source.toolkit.fluxcd.io/v1GitRepositoryCRD schema pins the per-CR ref-selection through thisspec.refcontainer- axis, and every renderedspec.ref.{tag,branch,commit}arm the [caixa_flux::GitRefSpec] discriminated-union emits nests beneath this exact key. - FLUX_
GITREPOSITORY_ KEY_ URL - Canonical Flux v2 per-
GitRepositoryspec.urlremote-repo-URL leaf-scalar-axis key everycluster_bundle-renderedgitrepository.yamldocument declares. Re-export of the canonicalcaixa_core::FLUX_GITREPOSITORY_KEY_URLso the byte-string lives in exactly one place: the writer-sidecluster_bundlegitrepotemplate composer’surl:sub-key (the sole production emission site the prior inline"url:"literal sat at). Sibling to the already-liftedFLUX_GITREPOSITORY_KEY_REFon the peer per-CRspec.refcontainer-axis surface — these two constants together with the reconcile-cadenceFLUX_KEY_INTERVALenumerate the canonicalGitRepository.spec.*per-CR sub-block key surface caixa-flux emits today. See the caixa-core docstring for the full lift rationale. Canonical Flux v2GitRepository.spec.urlper-CR remote-repo-URL leaf-scalar-axis key everycaixa-flux-renderedgitrepository.yamldocument declares. The FluxCDsource-controllerreadsspec.urlas the git remote URL it clones per-reconcile — the authoritative remote the per-Servico artifact archive is sourced from at every reconcile cycle. A drifted key (e.g."URL","gitUrl","repo","repository") at the writer site would silently emit aGitRepositorywhose CRD schema validator drops the URL field as unknown, and the per-Servico artifact would never populate — the downstreamHelmRelease.spec.chart.spec.sourceRefreference dangles with an empty artifact at admission, every renderedHelmRelease/Kustomizationbundle document downstream silently no-ops at reconcile time with no field naming the URL-key-drift root cause. - FLUX_
GITREPOSITORY_ REF_ KEY_ BRANCH - Canonical Flux v2 per-
GitRepositoryspec.ref.branchgit-branch- selector scalar-axis key — peer ofFLUX_GITREPOSITORY_REF_KEY_TAGon the branch-arm of theGitRefSpecdiscriminated-union. Re-export ofcaixa_core::FLUX_GITREPOSITORY_REF_KEY_BRANCH; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. Canonical Flux v2 per-GitRepositoryspec.ref.branchgit-branch-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a branch-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_COMMITon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. - FLUX_
GITREPOSITORY_ REF_ KEY_ COMMIT - Canonical Flux v2 per-
GitRepositoryspec.ref.commitgit-commit- selector scalar-axis key — peer ofFLUX_GITREPOSITORY_REF_KEY_TAGon the commit-arm of theGitRefSpecdiscriminated-union. Re-export ofcaixa_core::FLUX_GITREPOSITORY_REF_KEY_COMMIT; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. Canonical Flux v2 per-GitRepositoryspec.ref.commitgit-commit-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a commit-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_BRANCHon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. - FLUX_
GITREPOSITORY_ REF_ KEY_ TAG - Canonical Flux v2 per-
GitRepositoryspec.ref.taggit-tag- selector scalar-axis key everycluster_bundle-renderedgitrepository.yamldocument declares on the tag-arm of theGitRefSpecdiscriminated-union. Re-export of the canonicalcaixa_core::FLUX_GITREPOSITORY_REF_KEY_TAGso the sub-selector byte-string lives in exactly one place: the two consumer sites (the YAML emit-sidegitref_fieldcomposer and the human-readabletag_humannarrator prose) both now read through the liftedGitRefSpec::ref_field_namedispatch that maps the tag-arm of the discriminated-union onto this canonical scalar. Pairs withFLUX_GITREPOSITORY_REF_KEY_BRANCH+FLUX_GITREPOSITORY_REF_KEY_COMMITon the sibling per-shape arms of the same FluxCD source-controllerGitRepository.spec.refdiscriminated-union axis — three consts, one per arm, one canonical dispatch. See the caixa-core docstring for the full lift rationale. Canonical Flux v2 per-GitRepositoryspec.ref.taggit-tag-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a tag-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_BRANCH/FLUX_GITREPOSITORY_REF_KEY_COMMITon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis — the three-way sub-selector key set the Flux v2source-controllerreads to bind the per-CR git-source clonerefspecfrom the (tag | branch | commit) input triple. A drifted value at any of the three keys ("Tag"/"gitTag"/"tagName"at this arm,"Branch"/"gitBranch"at the sibling arm,"Commit"/"sha"/"revision"at the third arm) silently dangles the wholespec.refsub-block at theFluxCDsource-controller’s CRD registration; the per-Servico clone never resolves at reconcile time and the siblingHelmRelease.spec.chart.spec.sourceRefreference dangles at admission with no field naming the sub-selector-key-drift root cause. Changing this value is a coordinated Flux v3 migration alongside the upstreamfluxcd/flux2deprecation cycle, not an incidental edit. - FLUX_
GITREPOSITORY_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
GitRepositorydocument filename everycluster_bundle-renderedBundleFilecarries at its per-filepathaxis — re-export of the liftedcaixa_core::FLUX_GITREPOSITORY_YAML_FILENAMEso the fixed filename the cluster-side FluxCDsource-controllerlooks up when it opens the per-Servico bundle directory lives in exactly one place across every caixa renderer. Pairs with the siblingFLUX_HELMRELEASE_YAML_FILENAME+FLUX_KUSTOMIZATION_YAML_FILENAMEre-exports to close the per-bundle(gitrepository, helmrelease, kustomization)filename axis triple every rendered cluster bundle carries — the single source of truth all nine consumers reach for (one productioncluster_bundleBundleFileassembly’sGitRepositorydocumentpathaxis plus eight test-side round-trip navigators that reach into the rendered bundle by the same filename to pin per-CR body-axis emission) now consult the same&'static str. Pin the equality +&'staticstatic-data identity so any local re-introduction of a siblingpub const FLUX_GITREPOSITORY_YAML_FILENAME: &str = "…"at this crate is a build-time test failure naming the offending drift, not a silent FluxCDsource-controller“noGitRepositorydocument found under this bundle” reroute at cluster-side reconcile time far from the drift site. Peer to the siblingFLUX_HELMRELEASE_YAML_FILENAME(ba7b0b2) re-export — extends the canonical-Flux-v2-bundle-filename lifted-const discipline from the middle coordinate of the filename triple onto its first coordinate. Canonical Flux v2 per-cluster-bundleGitRepositorydocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinghelmrelease.yaml+kustomization.yamldocuments key against when the cluster-sideFluxCDsource-controllerreconciles the per-Servico Git-source poll cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - FLUX_
HELMCHART_ TEMPLATE_ KEY_ CHART - Canonical Flux v2
HelmChartTemplate.spec.chartper-CR chart-NAME- reference leaf-scalar-axis key everycaixa-flux-emittedHelmReleasedocument nests inside the parentFLUX_KEY_CHARTcontainer-axis (a nestedKUBE_KEY_SPECaxis inside that container hosts this leaf plus its siblingFLUX_KEY_SOURCE_REFper-CR source-reference triple). Re-export of the canonicalcaixa_core::FLUX_HELMCHART_TEMPLATE_KEY_CHARTso the load- bearing Flux-v2-helm-controller-side per-HelmChartTemplatechart- NAME reference leaf-scalar-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s one production-code call site (thecluster_bundlehelmrelease.yamlformat-string template’s bakedchart: {chart_path}leaf-scalar- axis interpolation the peer sibling liftedFLUX_KEY_SOURCE_REFsource-reference triple’s per-CR source-artifact publishes) onto the re-export. - FLUX_
HELMRELEASE_ API_ VERSION - Canonical FluxCD
HelmReleaseCRDapiVersion— re-export of the liftedcaixa_core::FLUX_HELMRELEASE_API_VERSIONso the load-bearing string lives in exactly one place across the rendered Flux bundle’shelmrelease.yamldocumentapiVersionaxis + the renderedkustomization.yamldocument’sspec.healthChecks[].apiVersionaxis. Both axes are the same conceptual “Flux v2HelmReleaseCRD group/ version” load-bearing string and must move together on any future upstream Flux v3 migration; until this lift landed they sat as four inlinehelm.toolkit.fluxcd.io/v2literals (two render-side at lines 455, 504 + two test-fixture-side at lines 928, 970), and any future per-Flux-v3-migration version bump on one without a coordinated edit on the other would have silently routed the renderedHelmReleaseoutside the controller’sWatches(controller-side: never reconciled, every dependent chart frozen at last-applied state) or made theKustomization’s health-check dangle (apply-side: the per-resource health-gate never resolves, the parent Kustomization sits perpetually inReconciling). Same shape as thecaixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE(7197d38) lift on the sibling Flux-installation-namespace axis. Canonical FluxCDHelmReleaseCRDapiVersioneverycaixa-fluxhelmrelease.yamldocument emits. The Flux v2helm-controllerwatches resources at this exact group/version (helm.toolkit.fluxcd.io/v2); drift to a stalev2beta1/v2beta2(the pre-GA Flux v2 betas every upstream Flux GA-migration doc names) silently routes the renderedHelmReleaseoutside the controller’sWatchesand breaks at apply time with a non-self-locating “no kind ‘HelmRelease’ is registered for version ‘helm.toolkit.fluxcd.io/v2beta2’” error far from the source caixa.lisp / the renderer’s format-string template. - FLUX_
HELMRELEASE_ CREATE_ NAMESPACE_ DEFAULT - Canonical Flux v2
HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_CREATE_NAMESPACEleaf-scalar-key axis. Re- export of the canonicalcaixa_core::FLUX_HELMRELEASE_CREATE_NAMESPACE_DEFAULTso the Flux v2 helm-controller-side per-CR install-path per-CR namespace-seeder- toggle scalar-value default lives in exactly one place across every caixa renderer —cluster_bundle’shelmrelease.yamlformat- string template’s per-CR install-path namespace-seeder-toggle scalar under theFLUX_HELMRELEASE_KEY_INSTALL-keyed sub-block (the sole production-code site the prior inlinecreateNamespace: truescalar- value literal sat at, alongside theFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE- keyed leaf-scalar-key half of the same(leaf-key, scalar-value)pair) now threads the sameboolthrough a{create_namespace_default}named-arg interpolation, so a future substrate-side toggle migration (true→falseon hardened per-cluster classes where namespace provisioning is an out-of-band operator gate; a per-caixa opt-out slot the ABSORPTION-ROADMAP.md M4 typed-slot trajectory adds once the substrate grows a:install :create-namespaceauthor-side toggle) is a one-line edit on the canonicalcaixa_core::FLUX_HELMRELEASE_CREATE_NAMESPACE_DEFAULTdeclaration, not a coordinated rewrite across the emit site + every future per- target renderer the substrate adds. Pairs with the siblingFLUX_HELMRELEASE_KEY_CREATE_NAMESPACEre-export on the same per-CRspec.install.createNamespacescalar-axis — the key half of the per-CR scalar-key/scalar-value pair lives atFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE, the value half’s substrate- side default seed lives here. Peer with the siblingFLUX_HELMRELEASE_REMEDIATE_LAST_FAILURE_DEFAULTmirror-symmetric upgrade-path-only scalar-value default + the siblingFLUX_KUSTOMIZATION_PRUNE_DEFAULT(ea857d8) scalar-value default on the peer canonical-Flux-v2-per-CR-substrate-default surface — the three defaults name the substrate’s canonical (install-path namespace-seeder) / (upgrade-path post-retry-exhaustion rollback) / (garbage-collection-toggle) toggle triple across the per-caixaHelmReleaseandKustomizationco-resident CRs. All three are substrate-side policy choices the operator inherits when the per- caixaClusterBundleOptsdoesn’t pin an override, and all three must move together on any coordinated substrate-side Flux v2 per-CR tuning-cycle promotion. Until this lift landed the axis carried an inlinetruescalar-value literal at the sole production-code call site plus the sibling test-fixture navigation site ([cluster_bundle_helmrelease_install_create_namespace_pins_lifted_true] pin’sassert!(create_namespace)predicate) — two occurrences of the same load-bearing Flux-v2-per-CR-install-path-namespace-seeder- toggle-scalar-value convention, drift-prone by construction ahead of the third occurrence the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoHelmReleasesynthesis will surface. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_FLUX_RECONCILE_INTERVAL/caixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUT/caixa_core::DEFAULT_PUBLISH_TAG_PREFIX/caixa_core::FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT/caixa_core::FLUX_KUSTOMIZATION_PRUNE_DEFAULT/caixa_core::FLUX_HELMRELEASE_REMEDIATE_LAST_FAILURE_DEFAULTre-exports on the peer canonical-substrate-default-load-bearing- scalar surface. Canonical Flux v2HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_CREATE_NAMESPACEleaf-scalar-key axis. Pairs with the siblingFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE(ba9ab8b) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR install-path per-CR namespace-seeder-toggle declaration pair — the Flux v2 helm-controller’s per-CR install-path pre-apply loop reads the scalar under that exact leaf key to decide whether to first materialize the target namespace before the first-time chart apply, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen first-apply namespace-seeder semantic between the operator-facing canonical default and every per-caixaHelmReleasedocument’s per-CR install- path namespace-seeder-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format- string template). - FLUX_
HELMRELEASE_ KEY_ CREATE_ NAMESPACE - Canonical Flux v2
HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle leaf-scalar-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_CREATE_NAMESPACEso the Flux v2 helm-controller-side install-path per-CR namespace-seeder-toggle leaf-scalar-key lives in exactly one place across every caixa renderer. Peer to the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) upgrade-path-only per-CR remediation-toggle leaf-scalar-key at the mirror-symmetric parent-container-axis-key position — closes thespec.{install.createNamespace, upgrade.remediation.remediateLastFailure}per-path per-CR phase-specific toggle leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR. One production emit site (this crate’scluster_bundlehelmrelease.yamlformat-string template’s install-path namespace-seeder-toggle leaf under the siblingFLUX_HELMRELEASE_KEY_INSTALL-container-keyed sub-block, threading the same&'static strthrough a new{create_namespace_key}named- arg interpolation) plus one test-fixture navigation site inmod tests(the install-path [cluster_bundle_helmrelease_install_create_namespace_pins_lifted_true] pin’s.get(FLUX_HELMRELEASE_KEY_CREATE_NAMESPACE)probe) now consult the same&'static str. Until this lift landed the axis carried the load-bearingcreateNamespacebytes inline at the one production emit site; a future hypothetical Flux v3 rename (createTargetNamespace/seedNamespace/provisionNamespace) on the production-emit site without a coordinated edit on every per-renderer consumer the absorption roadmap surfaces (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoHelmReleasesynthesis) would have silently dropped the substrate’s chosen first-apply namespace-seeder semantic from every emitted per-caixaHelmReleasedocument — the helm-controller would then refuse every first-time per-caixa chart apply against a fresh cluster whose target namespace has not been pre-provisioned by an out-of-band pipeline the substrate’s “no per- caixa Servico apply is blocked on manual namespace preprovisioning” MESH-COMPOSITION.md §V install-path-fluency guarantee mandates, with no diagnostic naming the seeder-toggle-drift root cause far from the source caixa.lisp / the renderer’s format-string template. Same shape as the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) upgrade-path-only per-CR remediation-toggle leaf-scalar-key +FLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key + peerFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key +FLUX_HELMRELEASE_KEY_INSTALL/FLUX_HELMRELEASE_KEY_UPGRADE(7767c26) parent-container-axis-key pair lifts on the peer per-CR HelmRelease-spec surface — extends the discipline from the sibling upgrade-path-only per-CR remediation-toggle onto the mirror install- path-only per-CR namespace-seeder-toggle at thespec.install.*position mirroring the peer’sspec.upgrade.remediation.*position. Canonical Flux v2HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle leaf-scalar-key everycaixa-flux- emittedhelmrelease.yamldocument seeds totrueunder the siblingFLUX_HELMRELEASE_KEY_INSTALLper-CR install-path phase-discriminator parent-container-axis-key. Peer to the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREupgrade-path-only per-CR remediation-toggle leaf-scalar-key at the co-resident per-CR install/ upgrade phase-discriminator parent-container position — closes thespec.{install.createNamespace, upgrade.remediation.remediateLastFailure}per-path per-CR phase-specific toggle leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR:createNamespacegates the “the Flux v2 helm-controller creates the target namespace itself if the emittedHelmRelease.metadata.namespace(or itsspec.targetNamespaceoverride) does not already exist” install-path pre-apply seeder pipeline, whileremediateLastFailuregates the upgrade-path post-retry-exhaustion rollback pipeline. The Flux v2 helm- controller-side per-CR install-path pre-apply loop keys off this exact leaf to decide whether to first materialize the target namespace or refuse the first-time chart apply when the target namespace does not yet exist (false); drift on this axis silently drops the substrate’s chosen first-apply namespace-seeder semantic from every emitted per- caixaHelmReleasedocument (the helm-controller then refuses every first-time per-caixa chart apply against a fresh cluster whose target namespace has not been pre-provisioned by an out-of-band pipeline — the substrate’s “no per-caixa Servico apply is blocked on manual namespace preprovisioning” MESH-COMPOSITION.md §V install-path-fluency guarantee silently regresses, with no diagnostic naming the seeder- toggle-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ INSTALL - Canonical Flux v2
HelmRelease.spec.installper-CR helm-action-phase discriminator parent-container-axis-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_INSTALLso the Flux v2 helm- controller-side per-CR install-path phase-discriminator parent- container-axis-key lives in exactly one place across every caixa renderer. Pairs with the siblingFLUX_HELMRELEASE_KEY_UPGRADEper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR upgrade-path phase. Peer to the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key hosted beneath both parent-container-axis-keys +FLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key +FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar- value halves of the same(parent-container-key, sub-container-key, leaf-key, scalar-value)per-path retry-cap declaration quartet — closes the parent-container-axis-key axis on the same per-path retry- cap declaration quartet, so all four halves now live in one place. One production emit site (this crate’scluster_bundlehelmrelease.yamlformat-string template’s install-path sub-block- header, threading the same&'static strthrough a new{install_key}named-arg interpolation) plus one test-fixture navigation site inmod tests(the install-path [cluster_bundle_helmrelease_install_remediation_retries_pins_lifted_default] pin’s.get(FLUX_HELMRELEASE_KEY_INSTALL)probe) now consult the same&'static str. Until this lift landed the axis carried two inlineinstallliterals across the one production emit site and the one test-fixture navigation site; a future hypothetical Flux v3 rename (initialize/apply/create/first-run) on the production-emit site without a coordinated edit on the sibling navigation site would have silently stripped the whole install-path per-CR phase block from the emittedHelmReleaseCR, letting the helm-controller fall back to the Flux v2 upstream defaults for the whole install-path phase surface (thecreateNamespace: trueseeder never fires, the per-CR retry-cap ceiling silently drops off the emitted document) rather than the substrate’s chosen per-CR install- path knob-set with no diagnostic naming the phase-discriminator-drift root cause. Same shape as the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key +FLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key + the peerFLUX_KEY_SOURCE_REF(236ef01) /FLUX_KEY_CHART/FLUX_KEY_VALUES/FLUX_KEY_INTERVAL/FLUX_KEY_HEALTH_CHECKScontainer-axis-key lifts on the peer per- CR container-axis-key surface — extends the discipline from the sub- container-axis-key one level up onto the parent-container-axis-key hosting it, so the four-level nestedspec.install.remediation .retriesdeclaration now resolves through four lifted&'static str/u32values. Canonical Flux v2HelmRelease.spec.installper-CR helm-action-phase discriminator parent-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key under, at the first-time chart apply per-CR phase the Flux v2 helm- controller reconciles when the emittedHelmReleaseCR first lands in the cluster. Pairs with the siblingFLUX_HELMRELEASE_KEY_UPGRADEper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR upgrade-path phase the helm-controller reconciles on every subsequent per-version chart re-apply the same CR gates. The Flux v2 helm-controller-side per-CR phase-dispatch loop keys off this exact parent-container-axis-key to select the install-path per-CR action pipeline (createNamespaceseeder, first-time chart values merge,spec.install.remediation.retriesretry-cap ceiling under the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container), so drift on this axis is exactly as load-bearing as drift on the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key it hosts (a"initialize"/"apply"/"create"/"first-run"typo at the production-code call site silently strips the entire install-path per-CR phase block from the emitted per-CR document — the helm- controller then falls back to the Flux v2 upstream defaults for the whole install-path phase surface rather than the substrate’s chosen per-CR install-path knob-set —createNamespacenever fires, the per-CR retry-cap ceiling silently drops off the emitted document, with no diagnostic naming the phase-discriminator-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ REMEDIATE_ LAST_ FAILURE - Canonical Flux v2
HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle leaf-scalar-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREso the Flux v2 helm-controller-side upgrade-path per-CR remediation- toggle leaf-scalar-key lives in exactly one place across every caixa renderer. Sibling to the peerFLUX_HELMRELEASE_KEY_RETRIESper-CR retry-cap leaf-scalar-key at the same per-CR upgrade-path per-CR remediation sub-container position — closes thespec.upgrade.remediation.{retries, remediateLastFailure}per-path remediation-block leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR on the upgrade-path per-CR remediation block. One production emit site (this crate’scluster_bundlehelmrelease.yamlformat-string template’s upgrade-path remediation-toggle leaf under the siblingFLUX_HELMRELEASE_KEY_REMEDIATION-container-keyed sub-block, threading the same&'static strthrough a new{remediate_last_failure_key}named-arg interpolation) plus one test- fixture navigation site inmod tests(the upgrade-path [cluster_bundle_helmrelease_upgrade_remediation_remediate_last_failure_pins_lifted_true] pin’s.get(FLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE)probe) now consult the same&'static str. Until this lift landed the axis carried the load-bearingremediateLastFailurebytes inline at the one production emit site; a future hypothetical Flux v3 rename (rollbackOnFailure/remediateOnFailure/recoverLastFailure) on the production-emit site without a coordinated edit on every per-renderer consumer the absorption roadmap surfaces (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoHelmReleasesynthesis) would have silently dropped the substrate’s chosen post-retry-exhaustion rollback semantic from every emitted per-caixaHelmReleasedocument — the helm-controller would then leave every terminally-failed upgrade in the failed state without rolling back to the prior last-known-good release the substrate’s “no chart apply leaves a per-caixa CR in a stalled, unremediated state” MESH-COMPOSITION.md §V guarantee mandates, with no diagnostic naming the remediation-toggle-drift root cause far from the source caixa.lisp / the renderer’s format-string template. Same shape as the siblingFLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar- key + the peerFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub- container-axis-key +FLUX_HELMRELEASE_KEY_INSTALL/FLUX_HELMRELEASE_KEY_UPGRADE(7767c26) parent-container-axis-key pair lifts on the peer per-CR remediation-surface leaf-scalar-key / container-axis-key surface — extends the discipline from the sibling retry-cap leaf-scalar-key onto the co-resident remediation-toggle leaf-scalar-key at the samespec.upgrade.remediation.*position. Canonical Flux v2HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle leaf-scalar-key everycaixa-flux-emittedhelmrelease.yamldocument seeds totrueunder the siblingFLUX_HELMRELEASE_KEY_UPGRADEper-CR upgrade-path phase- discriminator parent-container-axis-key’s nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key. Sibling to the peerFLUX_HELMRELEASE_KEY_RETRIESretry-cap leaf-scalar-key at the same per-CR upgrade-path per-CR remediation sub-container position — closes thespec.upgrade.remediation.{retries, remediateLastFailure}per-path remediation-block leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR on the upgrade-path per-CR remediation block, with retries capping the per-version chart re-apply retry-count and remediateLastFailure gating the “the Flux v2 helm- controller must actively remediate — roll back to the prior success — when the final per-version chart re-apply attempt still fails” post- retry-exhaustion behavior. The Flux v2 helm-controller-side per-CR upgrade-path remediation loop keys off this exact leaf to decide whether to leave a failed upgrade in place (false) or trigger the prior-release rollback pipeline (true); drift on this axis silently drops the substrate’s chosen post-retry-exhaustion rollback semantic from every emitted per-caixaHelmReleasedocument (the helm- controller then leaves every terminally-failed upgrade in the failed state without rolling back to the prior last-known-good release the substrate’s “no chart apply leaves a per-caixa CR in a stalled, unremediated state” MESH-COMPOSITION.md §V guarantee mandates — with no diagnostic naming the remediation-toggle-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ REMEDIATION - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediationsub-container-axis-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_REMEDIATIONso the Flux v2 helm-controller-side per-CR remediation sub-container-axis-key lives in exactly one place across every caixa renderer. Peer to the siblingFLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key half + the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value half of the same(container-axis-key, leaf-scalar-key, scalar-value)per-path retry- cap declaration triple — closes the parent-container-axis-key axis on the same per-path retry-cap declaration, so all three halves now live in one place. Two production emit sites (this crate’scluster_bundlehelmrelease.yamlformat-string template’s install-path remediation sub-block-header + the sibling upgrade-path remediation sub-block-header, both threading the same&'static strthrough a{remediation_key}named-arg interpolation) plus two test- fixture navigation sites inmod tests(the install-path [cluster_bundle_helmrelease_install_remediation_retries_pins_lifted_default] pin’s.get(FLUX_HELMRELEASE_KEY_REMEDIATION)probe + the sibling upgrade-path [cluster_bundle_helmrelease_upgrade_remediation_retries_pins_lifted_default] pin’s peer probe) now consult the same&'static str. Until this lift landed the axis carried four inlineremediationliterals across the two production emit sites and the two test-fixture navigation sites; a future hypothetical Flux v3 rename (recovery/retryPolicy/errorHandling) on any production-emit site without a coordinated edit on the sibling navigation sites would have silently stripped the whole per-path remediation sub-block from the emittedHelmReleaseCR, letting the helm-controller fall back to the Flux v2 upstream defaults for the whole remediation surface rather than the substrate’s chosen ceiling with no diagnostic naming the sub-container-key-drift root cause. Same shape as the siblingFLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key half plus the peerFLUX_KEY_SOURCE_REF(236ef01) /FLUX_KEY_CHART/FLUX_KEY_VALUES/FLUX_KEY_INTERVAL/FLUX_KEY_HEALTH_CHECKScontainer-axis-key lifts on the peer per- CR container-axis-key surface — extends the discipline from the leaf-scalar-key at the bottom of the two-level nested per-path retry-cap declaration onto the sub-container-axis-key one level up. Canonical Flux v2HelmRelease.spec.{install,upgrade}.remediationsub-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_RETRIESretry-cap leaf-scalar-key under, at both the install-path + upgrade-path per-CR remediation blocks. The parent-container-axis-key half of the same(container-axis-key, leaf-scalar-key, scalar-value)per-path retry-cap declaration triple the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value - FLUX_
HELMRELEASE_ KEY_ RETRIES - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediation.retriesleaf scalar-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_RETRIESso the Flux v2 helm-controller-side per-CR remediation-retries leaf-scalar-key lives in exactly one place across every caixa renderer. Peer to the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar- value half of the same(leaf-key, scalar-value)per-path retry-cap declaration pair — extends the drift-closing discipline the scalar- value lift established from the value the leaf holds onto the leaf- key itself. Two production emit sites (this crate’scluster_bundlehelmrelease.yamlformat-string template’s install-path retry-cap leaf under theFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT-valued sub-block + the sibling upgrade-path retry-cap leaf under the same scalar-value, both threading the same&'static strthrough a{retries_key}named-arg interpolation) plus two test-fixture navigation sites inmod tests(the install-path [cluster_bundle_helmrelease_install_remediation_retries_pins_lifted_default] pin’s.get("retries")probe + the sibling upgrade-path [cluster_bundle_helmrelease_upgrade_remediation_retries_pins_lifted_default] pin’s peer probe) now consult the same&'static str. Until this lift landed the axis carried four inlineretriesliterals across the two production emit sites and the two test-fixture navigation sites; a future hypothetical Flux v3 rename (attempts/maxRetries/retryCount) on any production-emit site without a coordinated edit on the sibling navigation sites would have silently stripped the retry-cap declaration from the emittedremediation:sub-block, letting the helm-controller fall back to the Flux v2 upstream default rather than the substrate’s chosen ceiling with no diagnostic naming the leaf-key-drift root cause. Same shape as the siblingFLUX_KEY_SOURCE_REF(236ef01) /FLUX_KEY_CHART/FLUX_KEY_VALUES/FLUX_KEY_INTERVAL/FLUX_KEY_HEALTH_CHECKSlifts on the peer per-CR container-axis- key surface — extends the discipline from the container-axis keys that nest per-CR sub-blocks onto a leaf-scalar-key at the bottom of a two-level nested per-path retry-cap declaration. Canonical Flux v2HelmRelease.spec.{install,upgrade}.remediation.retriesleaf scalar-key everycaixa-flux-emittedhelmrelease.yamldocument carries at both its install-path + upgrade-path per-CR remediation blocks. Peer to the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value half of the same(leaf-key, scalar-value)per-path retry-cap declaration pair — the Flux v2 helm-controller’s per-CR remediation loop reads the scalar under this exact leaf key, so drift on either axis is equally load-bearing (a typo on the leaf-key silently strips the retry-cap declaration from the emittedremediation:sub-block — the helm-controller then falls back to the Flux v2 upstream default rather than the substrate’s chosen ceiling — with no diagnostic naming the leaf-key-drift root cause far from the source caixa.lisp / the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ UPGRADE - Canonical Flux v2
HelmRelease.spec.upgradeper-CR helm-action-phase discriminator parent-container-axis-key — re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_KEY_UPGRADEso the Flux v2 helm- controller-side per-CR upgrade-path phase-discriminator parent- container-axis-key lives in exactly one place across every caixa renderer. Pairs with the siblingFLUX_HELMRELEASE_KEY_INSTALLper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR install-path phase. Peer to the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key hosted beneath both parent-container-axis-keys. One production emit site (this crate’scluster_bundlehelmrelease.yamlformat- string template’s upgrade-path sub-block-header, threading the same&'static strthrough a new{upgrade_key}named-arg interpolation) plus one test-fixture navigation site inmod tests(the upgrade- path [cluster_bundle_helmrelease_upgrade_remediation_retries_pins_lifted_default] pin’s.get(FLUX_HELMRELEASE_KEY_UPGRADE)probe) now consult the same&'static str. Until this lift landed the axis carried two inlineupgradeliterals across the one production emit site and the one test-fixture navigation site; a future hypothetical Flux v3 rename (reapply/reconcile/update/promote) on the production-emit site without a coordinated edit on the sibling navigation site would have silently stripped the whole upgrade-path per-CR phase block from the emittedHelmReleaseCR, letting the helm-controller fall back to the Flux v2 upstream defaults for the whole upgrade-path phase surface (the substrate’sremediateLastFailure: truetoggle never fires, the per-CR retry- cap ceiling silently drops off the emitted document) rather than the substrate’s chosen per-CR upgrade-path knob-set with no diagnostic naming the phase-discriminator-drift root cause. Same shape as the siblingFLUX_HELMRELEASE_KEY_INSTALLparent-container-axis-key on the peer per-CR install-path phase — pairs with the install-path re-export to close the per-CR helm-action-phase discriminator parent-container-axis-key pair across both per-CR phases the helm- controller reconciles between. Canonical Flux v2HelmRelease.spec.upgradeper-CR helm-action-phase discriminator parent-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key under, at every subsequent per-version chart re-apply per-CR phase the Flux v2 helm-controller reconciles after the initial install-path phase completes. Pairs with the siblingFLUX_HELMRELEASE_KEY_INSTALLper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR install-path phase the helm-controller reconciles at first-time chart apply. The Flux v2 helm-controller-side per-CR phase-dispatch loop keys off this exact parent-container-axis-key to select the upgrade-path per-CR action pipeline (remediateLastFailuretoggle the substrate pins totrueon the upgrade-path per-CR sibling axis, the per-CR retry-cap ceiling under the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container), so drift on this axis is exactly as load-bearing as drift on the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key it hosts (a"reapply"/"reconcile"/"update"/"promote"typo at the production-code call site silently strips the entire upgrade- path per-CR phase block from the emitted per-CR document — the helm- controller then falls back to the Flux v2 upstream defaults for the whole upgrade-path phase surface rather than the substrate’s chosen per-CR upgrade-path knob-set —remediateLastFailurenever fires, the per-CR retry-cap ceiling silently drops off the emitted document, with no diagnostic naming the phase-discriminator-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ REMEDIATE_ LAST_ FAILURE_ DEFAULT - Canonical Flux v2
HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREleaf-scalar-key axis. Re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_REMEDIATE_LAST_FAILURE_DEFAULTso the Flux v2 helm-controller-side per-CR upgrade-path per-CR post-retry- exhaustion-rollback-toggle scalar-value default lives in exactly one place across every caixa renderer —cluster_bundle’shelmrelease.yamlformat-string template’s per-CR upgrade-path remediation-toggle scalar under theFLUX_HELMRELEASE_KEY_UPGRADE- keyed sub-block (the sole production-code site the prior inlineremediateLastFailure: truescalar-value literal sat at, alongside theFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE-keyed leaf-scalar-key half of the same(leaf-key, scalar-value)pair) now threads the sameboolthrough a{remediate_last_failure_default}named-arg interpolation, so a future substrate-side toggle migration (true→falseon a per-cluster class where terminally-failed upgrades must escalate to operator-attention rather than mask under an auto-rollback pipeline; a per-caixa opt-out slot the ABSORPTION-ROADMAP.md M4 typed- slot trajectory adds once the substrate grows a:upgrade :remediate-last-failureauthor-side toggle) is a one-line edit on the canonicalcaixa_core::FLUX_HELMRELEASE_REMEDIATE_LAST_FAILURE_DEFAULTdeclaration, not a coordinated rewrite across the emit site + every future per-target renderer the substrate adds. Pairs with the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREre-export on the same per-CRspec.upgrade.remediation.remediateLastFailurescalar-axis — the key half of the per-CR scalar-key/scalar-value pair lives atFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE, the value half’s substrate-side default seed lives here. Same shape as the siblingFLUX_KUSTOMIZATION_PRUNE_DEFAULT(ea857d8) scalar-value default re-export on the peer per-CRKustomizationgarbage-collection-toggle axis — that default names whether the per-CRKustomizationreconcile loop sweeps orphaned resources at all, and this default names whether the per-CRHelmReleaseupgrade-path remediation loop rolls back to the prior last-known-good release once the retry-cap ceiling is exhausted. Both are substrate-side policy choices the operator inherits when the per-caixaClusterBundleOptsdoesn’t pin an override, and both must move together on any coordinated substrate- side Flux v2 per-CR tuning-cycle promotion. Until this lift landed the axis carried an inlinetruescalar-value literal at the sole production-code call site plus the sibling test-fixture navigation site ([cluster_bundle_helmrelease_upgrade_remediation_remediate_last_failure_pins_lifted_true] pin’sassert!(remediate_last_failure)predicate) — two occurrences of the same load-bearing Flux-v2-per-CR-upgrade-path-remediation- toggle-scalar-value convention, drift-prone by construction ahead of the third occurrence the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoHelmReleasesynthesis will surface. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_FLUX_RECONCILE_INTERVAL/caixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUT/caixa_core::DEFAULT_PUBLISH_TAG_PREFIX/caixa_core::FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT/caixa_core::FLUX_KUSTOMIZATION_PRUNE_DEFAULTre-exports on the peer canonical-substrate-default-load-bearing-scalar surface. Canonical Flux v2HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREleaf-scalar-key axis. Pairs with the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR upgrade-path per-CR post-retry-exhaustion-rollback-toggle declaration pair — the Flux v2 helm-controller’s per-CR upgrade-path remediation loop reads the scalar under that exact leaf key to decide whether to trigger the prior-release rollback pipeline once the pairedFLUX_HELMRELEASE_KEY_RETRIESretry-cap ceiling has been exhausted, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen post-retry- exhaustion rollback semantic between the operator-facing canonical default and every per-caixaHelmReleasedocument’s per-CR upgrade- path remediation-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ REMEDIATION_ RETRIES_ DEFAULT - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediation.retriesbounded retry-count default the substrate seeds into every per-caixahelmrelease.yamldocument. Re-export of the canonicalcaixa_core::FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTso the Flux v2 helm-controller-side remediation-retries default scalar-value lives in exactly one place across every caixa renderer —cluster_bundle’shelmrelease.yamlformat-string template’s two production-code retry-cap sites (the prior inlineretries: 3scalar-value literal under theinstall.remediationsub-block + the second inlineretries: 3scalar-value literal under theupgrade.remediationsub-block) now both consume the sameu32at emit time through one{retries_default}named-arg interpolation, so a future substrate-side retry-ceiling migration (3→5once per- caixa idempotency invariants tighten,3→1on hardened per-caixa pipelines where a failed apply should escalate to operator-attention rather than mask under further retries — coordinated with the upstream Flux v2 project’s per-controller tuning cycle) is a one-line edit on the canonicalcaixa_core::FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTdeclaration, not a coordinated rewrite across the two per-CR remediation-retries sites. Before this lift the two axes carried independently-inlinedretries: 3literals in the siblinginstall.remediation.retries/upgrade.remediation.retriespositions of thecluster_bundlehelmrelease.yamlformat-string template — any future retry-ceiling migration on one axis without a coordinated edit on the other would have silently split the substrate’s canonical retry-ceiling between the install-path (first- time chart applies) and the upgrade-path (every subsequent per- caixa-version re-apply the sameHelmReleasegates), with no field naming the ceiling-drift root cause. Pairs with the siblingDEFAULT_FLUX_RECONCILE_INTERVALre-export on the same canonical- Flux-v2-per-CR-substrate-default surface — the reconcile-poll cadence default names how often the helm-controller re-evaluates per-CR desired state, and this retry-cap names how many times a per- evaluation Helm action is allowed to fail-and-retry before it stops. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_FLUX_RECONCILE_INTERVAL/caixa_core::DEFAULT_PUBLISH_TAG_PREFIXre-exports on the peer canonical-substrate-default-load-bearing-scalar surface. Canonical Flux v2HelmRelease.spec.{install,upgrade}.remediation.retriesbounded retry-count scalar everycaixa-flux-emittedhelmrelease.yamldocument declares under both the install-path and the upgrade-pathremediationblocks. The Flux v2helm-controllerper-CRInstall/Upgradeaction reconciler consumes this scalar as the ceiling on the number of times it will re-attempt a failed Helm install or Helm upgrade before it marks theHelmReleaseReady: Falseand stops retrying — the substrate’s canonical “how many times we let Flux re-try a chart apply before it stops” contract with the helm-controller-side per-CR remediation loop. - FLUX_
HELMRELEASE_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
HelmReleasedocument filename everycluster_bundle-renderedBundleFilecarries at its per-filepathaxis — re-export of the liftedcaixa_core::FLUX_HELMRELEASE_YAML_FILENAMEso the fixed filename the cluster-side FluxCDkustomize-controllerlooks up when it opens the per-Servico bundle directory lives in exactly one place across every caixa renderer. The single source of truth all thirteen consumers reach for — one productioncluster_bundleBundleFileassembly’sHelmReleasedocumentpathaxis plus a dozen test-side round-trip navigators that reach into the rendered bundle by the same filename to pin per-CR body-axis emission — now consult the same&'static str. Pin the equality +&'staticstatic-data identity so any local re-introduction of a siblingpub const FLUX_HELMRELEASE_YAML_FILENAME: &str = "…"at this crate is a build-time test failure naming the offending drift, not a silent FluxCDkustomize-controller“noHelmReleasedocument found under this bundle” reroute at cluster-side reconcile time far from the drift site. Peer to theHELM_CHART_YAML_FILENAME(caixa_core::HELM_CHART_YAML_FILENAME, c2c99b0) /HELM_VALUES_YAML_FILENAME(caixa_core::HELM_VALUES_YAML_FILENAME, 9a980ba) re-exports on the sibling Helm-chart-directory filename surfaces — pivots the canonical-filename single-sourcing discipline from the per-Helm-chart-directory metadata / values file axes onto the sibling per-Flux-v2-bundleHelmReleasedocument filename axis this crate’scluster_bundlerenders. Canonical Flux v2 per-cluster-bundleHelmReleasedocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinggitrepository.yaml+kustomization.yamlbundle documents key against when the cluster-sideFluxCDcontrollers reconcile the per-Servico release cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - FLUX_
KEY_ CHART - Canonical Flux v2 per-
HelmReleaseinline-chart-template container- axis key everycaixa-flux-emittedHelmReleasedocument nests its per-CR chart-template block under (spec.chartonHelmRelease). Re- export of the canonicalcaixa_core::FLUX_KEY_CHARTso the load- bearing Flux-v2-helm-controller-side per-HelmReleasechart-template container-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s one production-code call site (thecluster_bundlehelmrelease.yamlformat-string template’s bakedchart:\ncontainer-axis key nesting theHelmChartTemplatesub-document whose peer sibling liftedFLUX_KEY_SOURCE_REFsource-reference container-axis + inner chart-name-scalar reach through) plus the two test-fixture.get("chart")navigation sites inmod teststhat probe the emittedspec.chart.spec.sourceRef.kindpin onto the re-export. A future Flux v3 rebrand of the per-HelmReleasechart-template container-axis key (a hypothetical upstream fluxcd/flux2 rename fromcharttoChart/chartTemplate/helmChart/chartRef, coordinated with the upstream project’s per-version deprecation cycle) now lands at one const rather than scattered across the one emit-side format-string template + two test-fixture probe sites. Same “the typed constant lives in one place” discipline the peerFLUX_KEY_SOURCE_REF+FLUX_KEY_VALUESre-exports enforce on the sibling Flux v2 per-HelmReleasebody-key surfaces — completes the triplet of Flux v2 per-HelmReleasespec.*body-key constants (spec.chart+spec.chart.spec.sourceRef+spec.values) thecluster_bundlerenderer threads through itshelmrelease.yamlformat-string template. Canonical Flux v2 per-HelmReleaseinline-chart-template container-axis key everycaixa-flux-emittedHelmReleasedocument nests its per-CR chart-template block under (spec.chartonHelmRelease) — the Flux v2 CRD schema places theHelmChartTemplatesub-document (whose nestedspec.chartstring names the referenced chart,spec.sourceRefnames the source-of-truth(kind, name, namespace)triple, andspec.intervalnames the per-CR reconcile cadence) under this single container key, so drift on the container axis silently dangles the whole chart-template block the Flux v2helm-controller’s per-CR reconcile loop reads to source the referenced chart at Helm-render time (a"Chart"/"chartTemplate"/"helmChart"/"chartRef"typo at either the emit-side format-string template or a downstream test- fixture probe silently dangles theHelmRelease.spec.chartchart- template resolution at the Flux v2 helm-controller’s CRD registration; the referenced chart never resolves, and the per-Servico workload freezes at apply time with no field naming the container-axis-drift root cause). - FLUX_
KEY_ HEALTH_ CHECKS - Canonical Flux v2 per-
Kustomizationhealth-gate reference-list container-axis key everycaixa-flux-emittedkustomization.yamldocument mounts its per-sibling-HelmReleasehealth-probe list under (spec.healthChecksonKustomization). Re-export of the canonicalcaixa_core::FLUX_KEY_HEALTH_CHECKSso the load-bearing Flux-v2- kustomize-controller-side per-Kustomizationhealth-gate reference- list container-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s one production-code call site (thecluster_bundlekustomization.yamlformat-string template’s bakedhealthChecks:\ncontainer-axis key nesting the per-entry[]NamespacedObjectKindReferencelist whose peer sibling liftedFLUX_HELMRELEASE_API_VERSIONper-entryapiVersionaxis +FLUX_KIND_HELM_RELEASEper-entrykindaxis the health-gate references) plus the three test-fixture.get("healthChecks")navigation sites inmod teststhat probe the emitted per-entryapiVersion+kindpin onto the re-export. A future Flux v3 rebrand of the per-Kustomizationhealth-gate reference-list container-axis key (a hypothetical upstream fluxcd/flux2 rename fromhealthCheckstoHealthChecks/healthchecks/healthcheck/health_checks/probes, coordinated with the upstream project’s per-version deprecation cycle) now lands at one const rather than scattered across the one emit-side format-string template + three test-fixture probe sites. Same “the typed constant lives in one place” discipline the peerFLUX_KEY_SOURCE_REF+FLUX_KEY_CHART+FLUX_KEY_VALUESre-exports enforce on the sibling Flux v2 per-HelmRelease+ per-Kustomizationbody-key surfaces — completes the quartet of Flux v2spec.*body-key constants (spec.chart+spec.chart.spec.sourceRef - FLUX_
KEY_ INTERVAL - Canonical Flux v2 per-CR reconcile-poll cadence scalar-axis key every
caixa-flux-emitted Flux document (GitRepository,HelmRelease,Kustomization) declares its per-CRspec.intervalreconcile cadence under. Re-export of the canonicalcaixa_core::FLUX_KEY_INTERVALso the load-bearing Flux-v2-controller-triplet-side per-CR reconcile-poll cadence scalar-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s three production-code call sites (thecluster_bundlegitrepository.yaml+helmrelease.yaml - FLUX_
KEY_ SOURCE_ REF - Canonical Flux v2 per-
HelmRelease/Kustomizationsource-reference container-axis key everycaixa-flux-emitted bundle document mounts its per-CR source-of-truth(kind, name, namespace)reference triple under (spec.chart.spec.sourceRefonHelmRelease,spec.sourceRefonKustomization). Re-export of the canonicalcaixa_core::FLUX_KEY_SOURCE_REFso the load-bearing Flux-v2-source- controller-side per-CR source-reference container-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s two production emit sites (thecluster_bundlehelmrelease.yamlformat-string template’s bakedspec.chart.spec.sourceRef:\nsub-block header + the siblingkustomization.yamlformat-string template’s bakedspec.sourceRef:\nsub-block header, both now threaded through a{source_ref_key}named-arg interpolation on the lifted const, closing the last two open production sites for this axis) plus the five test-fixture.get("sourceRef")navigation sites inmod tests(thehelmrelease.yamlspec.chart.spec.sourceRef.kindpin, thekustomization.yamlspec.sourceRef.name+spec.sourceRef.kindpins under the pairedDEFAULT_FLUX_SYSTEM_NAMESPACE+FLUX_KIND_GIT_REPOSITORYcanonical-string axes, and the two cross-axis triplet pins that traverse both bundle documents to pin the siblingGitRepository-kind axis triplet against one canonical string) onto the re-export. A future Flux v3 rebrand of the per-CR source-reference container-axis key (a hypothetical upstream fluxcd/flux2 rename fromsourceReftosource/sourceReference/sourceOf, coordinated with the upstream project’s per-version deprecation cycle) now lands at one const rather than scattered across the two per-CR format-string templates - FLUX_
KEY_ VALUES - Canonical Flux v2 per-
HelmReleasevalues-override block-body-axis key everycaixa-flux-emittedHelmReleasedocument nests its per- cluster value overrides under (spec.valuesonHelmRelease). Re- export of the canonicalcaixa_core::FLUX_KEY_VALUESso the load- bearing Flux-v2-helm-controller-side per-HelmReleasevalues- override block-body-axis key lives in exactly one place across every caixa renderer — the sweep converts this crate’s one production-code call site (thecluster_bundlehelmrelease.yamlformat-string template’s bakedvalues:\nkey beside the sibling liftedDEFAULT_LIBRARY_NAMEwrap key +HELM_VALUES_KEY_ENABLEDenable-toggle) plus theupsert_into_helmrelease_programsupsert-path’sspec.values.programs[]write-side navigation onto the re-export, and threads three test-fixture.get("values")block- body-axis probe sites inmod teststhrough the same const. A future Flux v3 rebrand of the per-HelmReleasevalues-override block-body-axis key (a hypothetical upstream fluxcd/flux2 rename fromvaluestoValues/chartValues/overrides, coordinated with the upstream project’s per-version deprecation cycle) now lands at one const rather than scattered across the one emit-side format- string template + one upsert-side write-side navigation + three test-fixture probe sites. Same “the typed constant lives in one place” discipline the peerFLUX_KEY_SOURCE_REF+FLUX_KIND_GIT_REPOSITORY/FLUX_KIND_HELM_RELEASE/FLUX_KIND_KUSTOMIZATION+FLUX_HELMRELEASE_API_VERSION/FLUX_GITREPOSITORY_API_VERSION/FLUX_KUSTOMIZATION_API_VERSIONre-exports enforce on the sibling canonical-Flux-v2-load-bearing- string surfaces. Canonical Flux v2 per-HelmReleasevalues-override block-body-axis key everycaixa-flux-emittedHelmReleasedocument nests its per-cluster value overrides under (spec.valuesonHelmRelease) — the Flux v2 CRD schema places the arbitrary per-cluster-override YAML body under this single key, so drift on the block-body-axis silently dangles the per-cluster override thehelm-controller’s per-CR reconcile loop merges into the referenced chart’svalues.yamlat Helm-render time (a"Values"/"vals"/"chartValues"/"overrides"typo at either the emit-side format-string template, theupsert_into_helmrelease_programsupsert-path’sspec.values.programs[]write, or a downstream test-fixture probe silently routes the per-cluster overrides nowhere; the workload silently comes up with the referenced chart’s admission- time defaults, far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KIND_ GIT_ REPOSITORY - Canonical FluxCD
GitRepositoryCRDkinddiscriminator — re-export of the liftedcaixa_core::FLUX_KIND_GIT_REPOSITORYso the load- bearing string lives in exactly one place across the three rendered Flux bundle axes that name the same K8s CRD discriminator: - FLUX_
KIND_ HELM_ RELEASE - Canonical FluxCD
HelmReleaseCRDkinddiscriminator — re-export of the liftedcaixa_core::FLUX_KIND_HELM_RELEASEso the load- bearing string lives in exactly one place across the two rendered Flux bundle axes that name the same K8s CRD discriminator: - FLUX_
KIND_ KUSTOMIZATION - Canonical FluxCD
KustomizationCRDkinddiscriminator — re-export of the liftedcaixa_core::FLUX_KIND_KUSTOMIZATIONso the load- bearing string lives in exactly one place across the rendered Flux bundle’sKustomization-naming axis: - FLUX_
KUSTOMIZATION_ API_ VERSION - Canonical FluxCD
KustomizationCRDapiVersion— re-export of the liftedcaixa_core::FLUX_KUSTOMIZATION_API_VERSIONso the load- bearing string lives in exactly one place across the rendered Flux bundle’skustomization.yamldocumentapiVersionaxis. Completes the Flux v2 controller-triplet (source-controller + helm-controller + kustomize-controller) lift alongside the siblingFLUX_GITREPOSITORY_API_VERSION(8a6c8a3) andFLUX_HELMRELEASE_API_VERSION(55f0fd9) re-exports — every per-controller CRD-group/version is now a typed substrate-side&'static strconsumed through onepub use caixa_core::FLUX_*re-export. - FLUX_
KUSTOMIZATION_ KEY_ PATH - Canonical Flux v2
Kustomization.spec.pathper-CR source-sub-tree leaf-scalar-key — re-export of the canonicalcaixa_core::FLUX_KUSTOMIZATION_KEY_PATHso the Flux v2 kustomize- controller-side per-CR source-sub-tree leaf-scalar-key lives in exactly one place across every caixa renderer. Peer to the sibling co-residentFLUX_KUSTOMIZATION_KEY_PRUNE(8ec7917) per-CR garbage-collection-toggle leaf-scalar-key on the same top-levelspecposition of the emitted per-caixaKustomizationCR — extends the per-Kustomization-CR-spec leaf-scalar-key discipline from the co-resident garbage-collection-toggle axis onto the co-resident source-sub-tree axis at the mirror-symmetric top-levelspec.pathposition. One production emit site (this crate’scluster_bundlekustomization.yamlformat-string template’s per-CR source-sub-tree leaf under the top-levelspecposition, threading the same&'static strthrough a new{path_key}named-arg interpolation) plus one test-fixture navigation site inmod tests(the per-CR [cluster_bundle_kustomization_path_pins_lifted_sub_tree] pin’s.get(FLUX_KUSTOMIZATION_KEY_PATH)probe) now consult the same&'static str. Until this lift landed the axis carried the load- bearingpathbytes inline at the one production emit site; a future hypothetical Flux v3 rename (sourcePath/manifestsPath/sourceRoot) on the production-emit site without a coordinated edit on every per-renderer consumer the absorption roadmap surfaces (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per- AplicacaoKustomizationsynthesis) would have silently unbound every emitted per-caixaKustomizationfrom its paired per-caixa sub-tree of the pleme-io k8s repository — the Flux v2 kustomize- controller would then either reconcile the whole GitRepository root (defaulting to./when the CR omits the leaf, pulling every unrelated cluster’s manifests through the wrong per-caixaKustomization) or refuse to reconcile at all (parking the CR atBuildFailednaming the missing sub-tree far from the sourcecaixa.lisp/ the renderer’s format-string template). Canonical Flux v2Kustomization.spec.pathper-CR source-sub-tree leaf-scalar-key everycaixa-flux-emittedkustomization.yamldocument seeds under its top-levelspecposition to name the sub- tree of the pairedFLUX_GITREPOSITORY_YAML_FILENAMEGitRepository the Flux v2 kustomize-controller-side per-CR reconcile loop pulls the desired-state manifest set from at reconcile time. Drift on this leaf silently unbinds every per-caixaKustomizationfrom its paired per-caixa sub-tree of the pleme-io k8s repository — the kustomize-controller then either reconciles the whole GitRepository root (when the CR omits the leaf, the controller defaults to./, pulling every unrelated cluster’s manifests through the wrong per-caixaKustomization) or refuses to reconcile at all (when the leaf points at a path the GitRepository doesn’t carry, the CR sits perpetually atBuildFailednaming the missing sub-tree far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KUSTOMIZATION_ KEY_ PRUNE - Canonical Flux v2
Kustomization.spec.pruneper-CR garbage-collection- toggle leaf-scalar-key — re-export of the canonicalcaixa_core::FLUX_KUSTOMIZATION_KEY_PRUNEso the Flux v2 kustomize- controller-side per-CR garbage-collection-toggle leaf-scalar-key lives in exactly one place across every caixa renderer. Peer to the siblingFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE(ba9ab8b) install-path-only per-CR namespace-seeder-toggle leaf-scalar-key on the co-resident per-caixaHelmReleaseCR — extends the per-CR-toggle leaf-scalar-key discipline from the co-resident per-caixaHelmReleaseCR spec surface onto the co-resident per-caixaKustomizationCR spec surface at the mirror-symmetric top-levelspec.pruneposition. One production emit site (this crate’scluster_bundlekustomization.yamlformat- string template’s per-CR garbage-collection-toggle leaf under the top-levelspecposition, threading the same&'static strthrough a new{prune_key}named-arg interpolation) plus one test-fixture navigation site inmod tests(the per-CR [cluster_bundle_kustomization_prune_pins_lifted_true] pin’s.get(FLUX_KUSTOMIZATION_KEY_PRUNE)probe) now consult the same&'static str. Until this lift landed the axis carried the load- bearingprunebytes inline at the one production emit site; a future hypothetical Flux v3 rename (garbageCollect/sweep/pruneOrphaned/deleteOrphans) on the production-emit site without a coordinated edit on every per-renderer consumer the absorption roadmap surfaces (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoKustomizationsynthesis) would have silently dropped the substrate’s chosen sweep-what-you-removed semantic from every emitted per-caixaKustomizationdocument — the kustomize-controller would then leave every per-caixa resource the source manifest set previously reconciled but no longer carries dangling in the cluster the substrate’s “the cluster’s per-caixa live state converges to the caixa’s tatara-lisp source-of-truth on every reconcile — resources the source no longer carries are swept by the kustomize-controller, not left dangling” CAIXA-SDLC.md §V author-to- live-convergence guarantee mandates, with no diagnostic naming the toggle-drift root cause far from the source caixa.lisp / the renderer’s format-string template. Same shape as the siblingFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE(ba9ab8b) install-path-only per-CR namespace-seeder-toggle leaf-scalar-key +FLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) upgrade- path-only per-CR remediation-toggle leaf-scalar-key +FLUX_HELMRELEASE_KEY_RETRIES(a12f9fc) leaf-scalar-key + peerFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key - FLUX_
KUSTOMIZATION_ KEY_ TIMEOUT - Canonical Flux v2
Kustomization.spec.timeoutper-CR reconcile wall-clock cap leaf-scalar-key — re-export of the canonicalcaixa_core::FLUX_KUSTOMIZATION_KEY_TIMEOUTso the Flux v2 kustomize-controller-side per-CR reconcile wall-clock cap leaf- scalar-key lives in exactly one place across every caixa renderer. Peer to the co-residentFLUX_KUSTOMIZATION_KEY_PATH(613d7ed) per-CR source-sub-tree leaf-scalar-key andFLUX_KUSTOMIZATION_KEY_PRUNE(8ec7917) per-CR garbage-collection-toggle leaf-scalar-key on the same top- levelspecposition of the emitted per-caixaKustomizationCR — extends the per-Kustomization-CR-spec leaf-scalar-key discipline from the co-resident source-sub-tree and garbage- collection-toggle axes onto the co-resident reconcile wall-clock cap axis at the mirror-symmetric top-levelspec.timeoutposition. One production emit site (this crate’scluster_bundlekustomization.yamlformat-string template’s per-CR reconcile wall-clock cap leaf under the top-levelspecposition, threading the same&'static strthrough a new{timeout_key}named-arg interpolation) plus one test-fixture navigation site inmod tests(the per-CR [cluster_bundle_kustomization_timeout_pins_lifted_default] pin’s.get(FLUX_KUSTOMIZATION_KEY_TIMEOUT)probe) now consult the same&'static str. Until this lift landed the axis carried the load- bearingtimeoutbytes inline at the one production emit site; a future hypothetical Flux v3 rename (deadline/reconcileTimeout/maxDuration) on the production-emit site without a coordinated edit on every per-renderer consumer the absorption roadmap surfaces (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoKustomizationsynthesis) would have silently stripped the substrate’s chosen reconcile-ceiling declaration from every emitted per-caixaKustomizationdocument — the Flux v2 kustomize-controller would then fall back to the upstream Flux v2 controller-side default cap, letting a persistently-failing per-caixa manifest apply consume kustomize- controller reconcile-loop cycles past the substrate’s chosen ceiling with no field naming the leaf-key-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template. Pairs with the siblingDEFAULT_FLUX_KUSTOMIZATION_TIMEOUTscalar-value half of the same(leaf-key, scalar-value)per-path reconcile-ceiling- declaration pair. Same shape as the siblingFLUX_KUSTOMIZATION_KEY_PATH(613d7ed) /FLUX_KUSTOMIZATION_KEY_PRUNE(8ec7917) /FLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) /FLUX_HELMRELEASE_KEY_CREATE_NAMESPACE(ba9ab8b) leaf-scalar- key re-exports on the peer per-Flux-v2-CR-spec-leaf-scalar-key surface. Canonical Flux v2Kustomization.spec.timeoutper-CR reconcile wall- clock cap leaf-scalar-key everycaixa-flux-emittedkustomization.yamldocument seeds under its top-levelspecposition to name the ceiling on how long the Flux v2 kustomize- controller-side per-CR reconcile loop is allowed to spend applying the pairedFLUX_KUSTOMIZATION_KEY_PATH-scoped sub-tree of the pairedFLUX_GITREPOSITORY_YAML_FILENAMEGitRepository before it marks theKustomizationReady: Falseand stops retrying — the substrate’s canonical “how long we let a per-caixa manifest-set reconcile run before Flux gives up” contract with the kustomize- controller’s per-CR reconcile loop. Drift on this leaf silently strips the substrate’s chosen reconcile-ceiling from every emitted per-caixaKustomizationdocument — the kustomize-controller then falls back to the upstream Flux v2 controller-side default cap (which the upstream project ships at a value tuned for the average upstream Flux-managed manifest set, not the substrate’s per-caixa idempotency-checkpoint cadence the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTretry-ceiling andDEFAULT_FLUX_RECONCILE_INTERVALreconcile-poll cadence are jointly tuned against), letting a persistently-failing per-caixa manifest apply consume kustomize-controller reconcile-loop cycles past the substrate’s chosen ceiling with no field naming the timeout-drift root cause. - FLUX_
KUSTOMIZATION_ PRUNE_ DEFAULT - Canonical Flux v2
Kustomization.spec.pruneper-CR garbage-collection- toggle scalar-value default the substrate seeds into every per-caixakustomization.yamldocument at the pairedFLUX_KUSTOMIZATION_KEY_PRUNEleaf-scalar-key axis. Re-export of the canonicalcaixa_core::FLUX_KUSTOMIZATION_PRUNE_DEFAULTso the Flux v2 kustomize-controller-side per-CR garbage-collection-toggle scalar-value default lives in exactly one place across every caixa renderer —cluster_bundle’skustomization.yamlformat-string template’s per-CR garbage-collection-toggle scalar under the top-levelspecposition (the sole production-code site the prior inlineprune: truescalar-value literal sat at, alongside theFLUX_KUSTOMIZATION_KEY_PRUNE-keyed leaf-scalar-key half of the same(leaf-key, scalar-value)pair) now threads the sameboolthrough a{prune_default}named-arg interpolation, so a future substrate-side toggle migration (true→falseon a cluster class where a human is expected to prune orphaned resources by hand once per-cluster policy grows an “operator-driven cleanup” mode; a per- caixa opt-out slot the ABSORPTION-ROADMAP.md M4 typed-slot trajectory adds once the substrate grows a:kustomization :pruneauthor-side toggle) is a one-line edit on the canonicalcaixa_core::FLUX_KUSTOMIZATION_PRUNE_DEFAULTdeclaration, not a coordinated rewrite across the emit site + every future per-target renderer the substrate adds. Pairs with the siblingFLUX_KUSTOMIZATION_KEY_PRUNEre-export on the same per-CRspec.prunescalar-axis — the key half of the per-CR scalar-key / scalar-value pair lives atFLUX_KUSTOMIZATION_KEY_PRUNE, the value half’s substrate-side default seed lives here. Same shape as the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value default re-export on the peer per-CR HelmRelease remediation retry-cap axis — that default names the per-path per-CR remediation retry ceiling, and this default names whether the per-CR reconcile loop sweeps orphaned resources at all. Both are substrate-side policy choices the operator inherits when the per- caixaClusterBundleOptsdoesn’t pin an override, and both must move together on any coordinated substrate-side Flux v2 per-CR tuning-cycle promotion. Until this lift landed the axis carried an inlinetruescalar-value literal at the sole production-code call site plus the sibling test-fixture navigation site ([cluster_bundle_kustomization_prune_pins_lifted_true] pin’sassert!(prune)predicate) — two occurrences of the same load- bearing Flux-v2-per-CR-garbage-collection-toggle-scalar-value convention, drift-prone by construction ahead of the third occurrence the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-AplicacaoKustomizationsynthesis will surface. Same shape as the siblingcaixa_core::DEFAULT_NAMESPACE/caixa_core::DEFAULT_LIBRARY_NAME/caixa_core::DEFAULT_FLUX_SYSTEM_NAMESPACE/caixa_core::DEFAULT_FLUX_RECONCILE_INTERVAL/caixa_core::DEFAULT_FLUX_KUSTOMIZATION_TIMEOUT/caixa_core::DEFAULT_PUBLISH_TAG_PREFIX/caixa_core::FLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTre-exports on the peer canonical-substrate-default-load-bearing- scalar surface. Canonical Flux v2Kustomization.spec.pruneper-CR garbage-collection- toggle scalar-value default the substrate seeds into every per-caixakustomization.yamldocument at the pairedFLUX_KUSTOMIZATION_KEY_PRUNEleaf-scalar-key axis. Pairs with the siblingFLUX_KUSTOMIZATION_KEY_PRUNE(8ec7917) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR garbage-collection- toggle declaration pair — the Flux v2 kustomize-controller’s per-CR reconcile loop reads the scalar under that exact leaf key, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen sweep-what-you-removed semantic between the operator-facing canonical default and every per-caixaKustomizationdocument’s per-CR garbage-collection-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KUSTOMIZATION_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
Kustomizationdocument filename everycluster_bundle-renderedBundleFilecarries at its per-filepathaxis — re-export of the liftedcaixa_core::FLUX_KUSTOMIZATION_YAML_FILENAMEso the fixed filename the cluster-side FluxCDkustomize-controllerlooks up when it opens the per-Servico bundle directory lives in exactly one place across every caixa renderer. Pairs with the siblingFLUX_GITREPOSITORY_YAML_FILENAME+FLUX_HELMRELEASE_YAML_FILENAMEre-exports to close the per-bundle(gitrepository, helmrelease, kustomization)filename axis triple every rendered cluster bundle carries — the single source of truth all sixteen consumers reach for (one productioncluster_bundleBundleFileassembly’sKustomizationdocumentpathaxis plus fifteen test-side round-trip navigators that reach into the rendered bundle by the same filename to pin per-CR body-axis emission) now consult the same&'static str. Pin the equality +&'staticstatic-data identity so any local re-introduction of a siblingpub const FLUX_KUSTOMIZATION_YAML_FILENAME: &str = "…"at this crate is a build-time test failure naming the offending drift, not a silent FluxCDkustomize-controller“noKustomizationdocument found under this bundle” reroute at cluster-side reconcile time far from the drift site. Peer to the siblingFLUX_HELMRELEASE_YAML_FILENAME(ba7b0b2) +FLUX_GITREPOSITORY_YAML_FILENAME(this commit) re-exports — closes the canonical-Flux-v2-bundle-filename lifted-const discipline on the third coordinate of the filename triple. Canonical Flux v2 per-cluster-bundleKustomizationdocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinggitrepository.yaml+helmrelease.yamldocuments key against when the cluster-sideFluxCDkustomize-controllerreconciles the per-Servico apply cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - HELM_
VALUES_ KEY_ ENABLED - Canonical
pleme-computeunitlibrary-chart values-block enable-toggle key — re-export of the liftedcaixa_core::HELM_VALUES_KEY_ENABLEDso the values-block enable-toggle every renderedHelmRelease/ upstreamvalues.yamlcarries under itsDEFAULT_LIBRARY_NAMEwrap key lives in exactly one place across every caixa renderer. The single production-code call site consuming it iscluster_bundle’shelmrelease.yamlformat-string template (formerly an inlineenabled: true\nliteral atcaixa-flux/src/lib.rs:844); the peer test-side round-trip navigator (cluster_bundle_helmrelease_wraps_library_values_under_lifted_default_library_name) also consults the re-export so a rebrand of the library-chart’s per- values enable-toggle axis lands at one const and reaches every consumer by construction. A drifted localpub const HELM_VALUES_KEY_ENABLED: &str = "…"(or any sibling per- renderer variant that inlined a stale"enabled"/"enable"/"disabled"literal) would silently emit aHelmReleasewhose per- cluster override lands under one key while [caixa_helm::build_values_yaml]’s default-off toggle inside the renderedvalues.yamllands under another — Helm’s per-values merge treats them as sibling scalars, the enable-toggle the library chart’s own template consults never sees the flip, and the workload silently comes up with the library chart’s admission-time defaults instead of the per-cluster override the operator set. Same shape as theDEFAULT_LIBRARY_NAME/KUBE_KEY_SPEC/FLUX_HELMRELEASE_API_VERSIONre-exports on the sibling canonical-Helm-load-bearing-string / canonical-K8s-CR-body-key / canonical-Flux-CRD-apiVersion axes. Canonicalpleme-computeunitlibrary-chart values-block enable-toggle key — theenabled: <bool>axis everylareira-<nome>chart’s values block carries under itsDEFAULT_LIBRARY_NAMEwrap key, and everycaixa-flux-renderedHelmReleasespec.values.<library>.enabledper-cluster override targets. The single source of truth all four downstream consumers reach for: - KUBE_
KEY_ API_ VERSION - Canonical K8s CR top-level
apiVersionkey. Re-export of the canonicalcaixa_core::KUBE_KEY_API_VERSIONso the per-CR- group/version-axis discriminator key lives in exactly one place across every caixa renderer — caixa-flux’scluster_bundledrift-detection pins that traverse the renderedgitrepository.yaml/helmrelease.yaml/kustomization.yamldocuments to assert the top-levelapiVersionaxis + thekustomization.yaml’s nestedspec.healthChecks[].apiVersionaxis bind to the liftedFLUX_GITREPOSITORY_API_VERSION/FLUX_HELMRELEASE_API_VERSION/FLUX_KUSTOMIZATION_API_VERSIONcontroller-triplet CRD-group/versions now consult the same&'static stras the siblingKUBE_KEY_SPEC/KUBE_KEY_METADATA/KUBE_KEY_KINDre-exports on the peer K8s-CR top-level axes. The prior inline"apiVersion"literals at every drift-detection cross-axis-pin call site in this crate would have let a typo on any one site (e.g."ApiVersion","api_version","apiversion","apiVer") silently miss the per-CR apiVersion-axis retrieval — the equality assertion would then compareNoneagainstSome("source.toolkit.fluxcd.io/v1")/Some("helm.toolkit.fluxcd.io/v2")/Some("kustomize.toolkit.fluxcd.io/v1")rather than the expected controller-triplet CRD-group/version, masking the siblingFLUX_*_API_VERSIONre-export drift the pin was meant to catch under a.expect("… present")panic on the missing.and_thenchain. The lift routes every K8s-CR top-level-apiVersion-axis retrieval through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition, extending the discipline the siblingKUBE_KEY_SPEC/KUBE_KEY_METADATA/KUBE_KEY_KINDre-exports establish onto the last of the four K8s-CR top-level axes (apiVersion,kind,metadata,spec) every rendered Flux v2 bundle document declares — completes the per-K8s-CR top-level(apiVersion, kind, metadata, spec)axis re-export quartet across this crate. Canonical K8s API key naming the resource’s API-version selector (e.g.cilium.io/v2,gateway.networking.k8s.io/v1,wasm.pleme.io/v1alpha1). Lifted to a const so a future API-server rename or a multi-version-skew migration is a one-line edit, not a search-and-replace across every per-target renderer. - KUBE_
KEY_ KIND - Canonical K8s CR top-level
kindkey. Re-export of the canonicalcaixa_core::KUBE_KEY_KINDso the per-CR-kind-axis discriminator key lives in exactly one place across every caixa renderer — caixa-flux’scluster_bundledrift-detection pins that traverse the renderedgitrepository.yaml/helmrelease.yaml/kustomization.yamldocuments to assert the top-levelkind+ nestedsourceRef.kind/healthChecks[].kindaxes bind to the liftedFLUX_KIND_GIT_REPOSITORY/FLUX_KIND_HELM_RELEASE/FLUX_KIND_KUSTOMIZATIONdiscriminators now consult the same&'static stras the peer caixa-mesh renderer’sKUBE_KEY_KINDre-export (615a13d). The prior inline"kind"literals at every drift-detection cross-axis-pin call site in this crate would have let a typo on any one site (e.g."Kind","kinds","knid") silently miss the per-CR kind-axis retrieval — the equality assertion would then compareNoneagainstSome("GitRepository")/Some("HelmRelease")/Some("Kustomization")rather than the expected discriminator, masking the siblingFLUX_KIND_*re-export drift the pin was meant to catch under a.expect("… present")panic on the missing.and_thenchain. The lift routes every K8s-CR- top-level-kind-axis retrieval through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition. Same shape as theKUBE_KEY_SPEC+KUBE_KEY_METADATAre-exports on the sibling K8s-CR top-level-spec / top-level-metadata axes — completes the per-K8s-CR top-level(spec, metadata, kind)axis re-export triple every rendered Flux bundle document navigates. Canonical K8s API key naming the resource’s kind discriminator (e.g.CiliumNetworkPolicy,Gateway,HTTPRoute,ComputeUnit). - KUBE_
KEY_ METADATA - Canonical K8s CR top-level
metadatakey. Re-export of the canonicalcaixa_core::KUBE_KEY_METADATAso the per-kind metadata block key lives in exactly one place across every caixa renderer — caixa-flux’sprograms_yaml_entry(the upstream ComputeUnit YAML’smetadata.namespaceaxis the rendered programs.yaml entry’snamespacefield reads from) now consults the same&'static stras the peer caixa-mesh renderer’sKUBE_KEY_METADATAre-export. The prior inline"metadata"literals at the production-code + drift-detection call sites would have let a typo on one site (e.g."Metadata","meta-data","medadata") silently miss the ComputeUnit’smetadata.namespacelookup and fall back toDEFAULT_NAMESPACEeven when the ComputeUnit YAML pinned a distinct target namespace; the lift routes every K8s-CR-top-level- metadata-axis retrieval through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition. Same shape as theKUBE_KEY_SPECre-export on the sibling K8s-CR top-level-spec-axis. Canonical K8s API key naming the resource’s metadata block. - KUBE_
KEY_ NAME - Canonical K8s CR
metadata.namekey. Re-export of the canonicalcaixa_core::KUBE_KEY_NAMEso the per-CR name-axis key lives in exactly one place across every caixa renderer. Each of the threecluster_bundleformat-string templates’ sixname:YAML label positions —gitrepository.yamltop-levelmetadata.name,helmrelease.yamltop-levelmetadata.name+ nestedspec.chart.spec.sourceRef.name,kustomization.yamltop-levelmetadata.name+ nestedspec.sourceRef.name+ nestedspec.healthChecks[].name— thread this&'static strthrough named-arg interpolation instead of the prior six inlinename:label literals. - KUBE_
KEY_ NAMESPACE - Canonical K8s CR
metadata.namespacekey. Re-export of the canonicalcaixa_core::KUBE_KEY_NAMESPACEso the per-CR namespace-axis key lives in exactly one place across every caixa renderer — caixa-flux’sprograms_yaml_entrythreads the ComputeUnit YAML’smetadata.namespaceretrieval and the emittedprograms:[]entry’s isomorphicnamespace:field (thelareira-fleet-programschart’s per-Servico namespace axis, populated verbatim from the ComputeUnit’smetadata.namespaceper the docstring onprograms_yaml_entryabove) through this key,cluster_bundle’s renderedkustomization.yamldrift-detection pin traverses the emitted document’smetadata.namespaceaxis to assert it binds to the liftedDEFAULT_FLUX_SYSTEM_NAMESPACE(the bootstrap kustomize- controller’s watch window) through this same key, and each of the threecluster_bundleformat-string templates’ fivenamespace:YAML label positions —gitrepository.yamltop-levelmetadata.namespace,helmrelease.yamltop-levelmetadata.namespace+ nestedspec.chart.spec.sourceRef.namespace,kustomization.yamltop-levelmetadata.namespace+ nestedspec.healthChecks[].namespace— thread this&'static strthrough named-arg interpolation instead of the prior five inlinenamespace:label literals. - KUBE_
KEY_ SPEC - Canonical K8s CR top-level
speckey. Re-export of the canonicalcaixa_core::KUBE_KEY_SPECso the per-kind body key lives in exactly one place across every caixa renderer — caixa-flux’sprograms_yaml_entry(the upstream ComputeUnit YAML’sspec.*axis the rendered programs.yaml entry splices from),upsert_into_helmrelease_programs(the canonicalspec.values.programs[]path thelareira-fleet-programsHelmRelease keys the per-Servico entry list under), and each of the threecluster_bundleformat-string templates’ fourspec:YAML label positions (gitrepository.yamltop-level +helmrelease.yamltop-level +helmrelease.yamlspec.chart.specnested +kustomization.yamltop-level) all consult the same&'static stras the peer caixa-mesh / caixa-helm renderers’KUBE_KEY_SPECre-exports. The prior inline"spec"literals at the production-code call sites would have let a typo on one site (e.g."Spec","specs","spec_") silently emit a programs.yaml entry that nolareira-fleet-programsschema validator recognizes; theError::MissingField("spec")paths now thread the same&'static strthrough the diagnostic surface so the error message stays byte-identical to the key it failed to find. Same shape as theFLUX_HELMRELEASE_API_VERSION/DEFAULT_LIBRARY_NAMEre-exports on the sibling canonical-Flux-load-bearing-string axes. Peer with the siblingKUBE_KEY_METADATA/KUBE_KEY_KIND/KUBE_KEY_API_VERSIONre-exports on the other three canonical K8s-CR top-level block-scope label axes thecluster_bundleformat-string templates thread through named-arg interpolation. Canonical K8s API key naming the resource’s per-kind body (sibling toKUBE_KEY_METADATAat the K8s CR top level). Every typed substrate renderer that materializes a CR populatesspec.*from the source caixa.lisp — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the policy’sendpointSelector/ingressblock lives under spec), caixa-mesh’sgateway_routesGateway+HTTPRouteemitter (the listeners / rules / parentRefs block lives under spec), caixa-flux’sprograms_yaml_entry+upsert_into_helmrelease_programs(the fleetHelmRelease’sspec.values.programs[]axis), caixa-helm’svalues.yamlbuilder (the upstream ComputeUnit YAML’sspec.*axis the renderedlareira-<nome>chart re-routes through the library alias). Spelled exactly as the K8s apiserver expects (the canonical OpenAPI v3 schema property name K8s machinery validates against on every CR registration), so the rendered YAML round-trips through every K8s schema parser without per-renderer string drift. Lifted on the trajectory the peerKUBE_KEY_API_VERSION/KUBE_KEY_KIND/KUBE_KEY_METADATA/KUBE_KEY_NAME/KUBE_KEY_NAMESPACE/KUBE_KEY_LABELS/KUBE_KEY_MATCH_LABELScanonical-K8s- API-key constants establish.
Functions§
- cluster_
bundle - Cluster bundle: the FluxCD trio for a standalone caixa deploy.
- flux_
kustomization_ source_ subtree - Canonical substrate-side per-cluster / per-caixa
Kustomization.spec.pathsource-sub-tree scalar composer — re-export of the canonicalcaixa_core::flux_kustomization_source_subtreeso the./clusters/<cluster>/services/<nome>GitRepository-relative directory-tree seed every emitted per-caixakustomization.yamldocument mounts under its liftedFLUX_KUSTOMIZATION_KEY_PATHleaf-scalar-key lives at one composer across every caixa renderer. - programs_
yaml_ entry - Render a single
programs:[]array entry for the cluster’slareira-fleet-programsHelmRelease values. - servico_
spec_ and_ m2_ overlay_ entries - Local re-export of the canonical
caixa_core::servico_spec_and_m2_overlay_entries— the composed per-Servico value-block splice helper this crate’sprograms_yaml_entryand the peer [caixa_helm::build_values_yaml] both now route their two-stepspec.*field-splice + M2 typed-slot overlay through. The single production-code call site consuming it isprograms_yaml_entry’s inner splice loop (formerly two hand- written for-loops chained aroundstring_keyed_entries+servico_m2_overlay); re-exported so the shared composition contract lives in exactly one place across both per-Servico renderers — a future author readingcaixa_flux::programs_yaml_entryfinds the composition helper immediately without an extrause caixa_core::…line, and a rebrand of the composition axis (e.g. a swap of theor_insertprecedence rule) reaches both renderers through one canonical&'staticfunction pointer. Same shape as the peer render-side helper re-exports on the sibling canonical-composed-primitive axes. Compose the canonical per-Servico value-block splice every per-Servico renderer applies to the target values / entry mapping — the two-step sequence [caixa_helm::build_values_yaml] and [caixa_flux::programs_yaml_entry] both re-derived inline before this lift: - upsert_
into_ helmrelease_ programs - Insert/upsert an entry into a
programs:array nested under the canonical fleet-manifest path:spec.values.programs[]in aHelmReleasedocument. The pleme-io convention puts the fleet’s program list inside a HelmRelease (consumed bylareira-fleet-programs), not at the top level. Same upsert semantics asupsert_into_programs_yaml— match byname, replace in place, otherwise append. - upsert_
into_ programs_ yaml - Insert/upsert an entry into a
programs:array of an existing values.yaml structure.
Type Aliases§
- Bundle
File - One file of the cluster bundle —
(path, contents)pair everycluster_bundle-rendered Flux v2 CR YAML document lands at.