Expand description
caixa-mesh — typed renderer that emits cluster mesh primitives
from an :kind Aplicacao caixa.
See theory/MESH-COMPOSITION.md for the design frame: a typed
Aplicacao composes Servicos into a graph with WIT-typed contracts,
mesh policies, and explicit placement. caixa-mesh is the renderer
that turns that typed graph into the cluster-side primitives:
- programs.yaml fan-out — one entry per
:membros, consumed by lareira-fleet-programs (V0; this crate) - Cilium NetworkPolicy — one per distinct
:contratos(:de, :para)pair, identity-based L7 allow-list (M3.x next) - Gateway + HTTPRoute — one per
:entrada, K8s Gateway API external ingress (M3.x next)
Same caixa-<target> naming convention as [caixa_helm] +
[caixa_flux]: a typed renderer that takes a typed Caixa and emits
the canonical source for <target>.
V0 contract:
ⓘ
use caixa_core::Caixa;
use caixa_mesh::programs_for_aplicacao;
let aplicacao: Caixa = Caixa::from_lisp(src)?;
let entries: Vec<serde_yaml::Value> = programs_for_aplicacao(&aplicacao)?;
// → one entry per :membros, suitable for fan-out into the
// cluster's lareira-fleet-programs HelmRelease.Enums§
- Error
- Errors caixa-mesh can raise.
Constants§
- CILIUM_
API_ VERSION - Canonical Cilium CRD
apiVersioneverycilium_network_policies- emittedCiliumNetworkPolicydocument declares. Re-export of the canonicalcaixa_core::CILIUM_API_VERSIONso the Cilium-CRD- group/version string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicy emitter (the single production-code site the prior inline literal sat at, caixa-mesh/src/lib.rs:326) and every future per-policyCiliumClusterwideNetworkPolicy/CiliumLocalRedirectPolicyemitter the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD-group/version promotion (the upstream Cilium roadmap names per-CRD-group / per-version migration once thecilium.io/v3branch lands) is a one-line edit on the canonicalcaixa_core::CILIUM_API_VERSIONdeclaration, not a coordinated rewrite across this crate’skube_resource_skeletoncall site + every future per-target renderer the substrate adds. The prior inline literal would have let a Cilium-CRD bump on one axis without a coordinated edit on the matching in-filecilium_policy_carries_canonical_kube_skeletontest fixture pin (caixa-mesh/src/lib.rs:1560) silently emit aCiliumNetworkPolicywhose top-level apiVersion drifts off the lifted-test-fixture pin — apply-side: the policy lands in a stale apiserver-side CRD-version registration the Cilium operator no longer watches, every(:de, :para)intra-mesh L4 contract drops at the eBPF data plane with no field naming the version-drift root cause. Peer to theGATEWAY_API_API_VERSIONre-export on the sibling canonical-K8s-Gateway-API-CRD-axis — extends the discipline onto the canonical-Cilium-CRD-axis surface. Canonical Cilium CRDapiVersioneverycaixa-mesh-emittedCiliumNetworkPolicydocument declares. The Cilium control plane’s upstream-shipped CRD bundle registersCiliumNetworkPolicy,CiliumClusterwideNetworkPolicy,CiliumEndpoint,CiliumIdentity,CiliumNode,CiliumLocalRedirectPolicy, and the rest of the per-conformance Cilium CRD set at this exact group/version (cilium.io/v2); drift to a stalev2alpha1(the historical pre-stable Cilium-CRD-group/version label upstream Cilium-CRD docs reference for in-flight per-CRD-version migration) silently routes the renderedCiliumNetworkPolicyoutside the cluster’s Cilium-operator-side CRD-version registration and breaks at apply time with a non-self-locating “no kind ‘CiliumNetworkPolicy’ is registered for version ‘cilium.io/v2alpha1’” error far from the source caixa.lisp / the renderer’skube_resource_skeletoncall site. - CILIUM_
AUTH_ MODE_ DISABLED - Canonical Cilium
CiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’sdisabledmTLS-skipped per-ingress[].authentication.modescalar-value everycilium_network_policies-emitted CNP document declares under the explicitSome(false)opt-out arm of the typed:politicas :mtls-requiredtristate (distinct from theNoneslot-absent arm the renderer maps to omit-the-block-entirely). Re-export of the canonicalcaixa_core::CILIUM_AUTH_MODE_DISABLEDso the Cilium-agent-side per-rule mutual-auth-skipped scalar-value string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the single-field-overlay closure’selse { … }opt-out arm the prior inline"disabled"literal sat at, plus thecnp_explicit_mtls_required_false_emits_disabled_modetest- fixture probe that pins the emitted value under the explicit-opt-out shape) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str. Peer to the siblingCILIUM_AUTH_MODE_REQUIREDre-export on the affirmative arm of the same tristate. Canonical CiliumCiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’sdisabledper-ingress[].authentication.modemTLS-skipped scalar-value everycilium_network_policies-emitted CNP document declares under its per-rule mutual-auth-mode-discriminator leaf axis when the typed:politicas :mtls-requiredtristate is the explicitSome(false)opt-out arm (an author who named the axis and asked for the mTLS handshake to be skipped on this Aplicacao’s edges — e.g. a debug or legacy-bridge Aplicacao that needs to talk to non-mesh peers, distinct from theNoneslot-absent arm the renderer maps to omit-the-block-entirely). Peer to the siblingCILIUM_AUTH_MODE_REQUIREDmTLS-mandatory scalar-value theSome(true)affirmative arm emits under the same tristate branch — the Cilium CNPMutualAuthenticationModeOpenAPI schema enum admits the two arms as a matched author-reachable pair. - CILIUM_
AUTH_ MODE_ REQUIRED - Canonical Cilium
CiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’srequiredmTLS-mandatory per-ingress[].authentication.modescalar-value everycilium_network_policies-emitted CNP document declares under the:mtls-required taffirmative arm of the typed:politicas :mtls-requiredtristate. Re-export of the canonicalcaixa_core::CILIUM_AUTH_MODE_REQUIREDso the Cilium-agent-side per-rule mutual-auth-mandatory scalar-value string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the single-field-overlay closure’sif required { … }affirmative arm the prior inline"required"literal sat at, plus the presence / fan-out / pubsub-carry-overlay-too test-fixture probes that pin the emitted value under the:mtls-required tshape) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str. Peer to the siblingCILIUM_AUTH_MODE_DISABLEDre-export on the explicit-opt-out arm of the same tristate — completes the per-authn-block(mode → {required, disabled})author-reachable-scalar-value-pair re-export pair this crate’scilium_network_policiesrenderer’s SPIFFE-identity-bound per-edge mTLS enforcement + explicit-opt-out contract rests on. Canonical CiliumCiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’srequiredper-ingress[].authentication.modemTLS-mandatory scalar-value everycilium_network_policies-emitted CNP document declares under its per-rule mutual-auth-mode-discriminator leaf axis when the typed:politicas :mtls-requiredtristate isSome(true). Pairs with the siblingCILIUM_KEY_MODE(4289dfb) per-authn-block mode-discriminator leaf-axis key the value nests directly under, and the siblingCILIUM_AUTH_MODE_DISABLEDscalar-value theSome(false)opt-out arm of the same tristate emits — the Cilium CNPMutualAuthenticationModeOpenAPI schema enum admits the closed set{"required", "disabled", "test-always- fail"}verbatim (thetest-always-failarm is an infrastructure-side debugging surface, not an author-reachable slot), so drift on the mTLS- mandatory scalar-value is exactly as load-bearing as drift on the sibling per-authn-block mode-discriminator leaf axis it nests under (a"Required"/"REQUIRED"/"mandatory"/"mtls-required"typo at either the production-code call site or a downstream probe lands outside the Cilium CNPMutualAuthenticationModeOpenAPI schema enum’s admitted set, surfacing apply-side as a Cilium-agent per-rule mutual-auth-block schema- validator drop far from the sourcecaixa.lisp/ the renderer’ssingle_field_overlay(mtls_required, CILIUM_KEY_MODE, …)call site — the rendered per-(:de, :para)CiliumNetworkPolicyobject never enforces per-edge SPIFFE-identity-bound mutual-auth at the Cilium data-plane’s per- rule handshake gate and every intra-mesh:contratosflow the CNP was authored to protect with per-edge mTLS silently bypasses the handshake at the Cilium data-plane’s default-authentication mode with no field naming the mTLS-mandatory-scalar-value-drift root cause). - CILIUM_
KEY_ AUTHENTICATION - Canonical Cilium
CiliumNetworkPolicyper-ingress-rule mutual-auth policy body-axis key everycilium_network_policies-emitted CNP document mounts its per-rule mTLS enforcement block under (spec.ingress[].authentication). Re-export of the canonicalcaixa_core::CILIUM_KEY_AUTHENTICATIONso the Cilium-operator- side per-ingress-rule mutual-auth-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (theingress_rule.insert("authentication", …)call in the:politicas :mtls-requiredoverlay emit gate the prior inline"authentication"literal sat at) and every future per-Cilium- side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the per-ingress-rule mutual-auth axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_PORTS+CILIUM_KEY_FROM_ENDPOINTS+CILIUM_KEY_ENDPOINT_SELECTOR+CILIUM_KEY_INGRESS+CILIUM_KEY_TO_PORTS+caixa_core::KUBE_KEY_RULES+CILIUM_KIND_NETWORK_POLICY+CILIUM_API_VERSIONre-exports anchor on the sibling per-CNP-body axis surface) lands in one place. The prior inline literal split across the one production emitter and nine test-fixture navigation sites (the presence pin under the:mtls-required toverlay, the absence pin under the:mtls-requiredunset semantic, the explicit-false-emits- disabled-mode pin under theSome(false)arm, the fan-out pin across multiple contratos, the rule-level-not-nested position pin with two nested-under-fromEndpoints[]and nested-under-toPorts[]negative-navigation guards, the pubsub-carry-overlay- too shape pin, and the yaml-string-scalarmode-value pin) would have let a Cilium-CRD mutual-auth-axis rebrand or a per-emitter typo ("auth"/"mutualAuth"/"mtls"/"authPolicy") at any one site silently emit a per-ingress[]entry whose mutual- auth-axis the Cilium CRD schema validator drops as unknown; the ingress rule falls back to the cluster-default authentication mode and every intra-mesh:contratosflow the CNP was authored to protect with per-edge SPIFFE-identity-bound mutual-auth silently bypasses the mTLS handshake at the Cilium data-plane’s default-authentication mode with no field naming the mutual- auth-axis-drift root cause. On the test-fixture side the drift silently masks the emission-side pin (.get("authentication")returnsNoneunder both the drifted emitter and the drifted probe — every downstream.and_then(|a| a.get("mode"))chain short-circuits vacuously because the outer mutual-auth-body-lookup is itselfNone). Peer to theCILIUM_KEY_FROM_ENDPOINTS+CILIUM_KEY_TO_PORTSre-exports on the sibling per-ingress-rule-body-axis surfaces — completes the per-ingress-rule-body triple(fromEndpoints, toPorts, authentication)this crate’scilium_network_policiesrenderer’s SPIFFE-identity-bound per- edge mTLS contract rests on. Canonical CiliumCiliumNetworkPolicyper-ingress-rule mutual-auth policy body-axis key everycilium_network_policies-emitted CNP document mounts its per-rule mTLS enforcement block under (spec.ingress[].authentication). Sibling toCILIUM_KEY_FROM_ENDPOINTS(ecfa557) +CILIUM_KEY_TO_PORTS(c8d9cbf) at the per-ingress-rule body level — the Cilium CNP schema places the per-rule mutual-auth mode ({mode: required | disabled}) at the ingress-rule axis alongside the identity-source (fromEndpoints) and port-set (toPorts) axes, so drift on the authentication axis is exactly as load-bearing as drift on the sibling per-ingress-rule-body axes it pairs with (the Cilium-operator-side CRD schema validator drops any per-ingress[]entry whose mutual-auth axis carries an unrecognized key — a"auth"/"mutualAuth"/"mtls"typo silently emits a CNP whose per-(:de, :para)per-rule mTLS block the Cilium operator’s per-CNP mutual-auth SPIFFE-handshake pipeline no-ops entirely: the ingress rule falls back to the cluster-default authentication mode (typically"disabled"— no mutual-auth enforcement), and every intra-mesh:contratosflow the CNP was authored to protect with per-edge mTLS silently bypasses the SPIFFE-identity-bound mutual-auth handshake with no field naming the mutual-auth-axis-drift root cause). - CILIUM_
KEY_ ENDPOINT_ SELECTOR - Canonical Cilium
CiliumNetworkPolicyper-CNP-body destination- identity selector-axis key everycilium_network_policies-emitted CNP document mounts its L3-targetLabelSelectorunder (spec.endpointSelector). Re-export of the canonicalcaixa_core::CILIUM_KEY_ENDPOINT_SELECTORso the Cilium-operator- side per-CNP destination-identity-axis string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (thepolicy_spec.insert("endpointSelector", …)call the prior inline"endpointSelector"literal sat at) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the destination-identity axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_TO_PORTS+caixa_core::KUBE_KEY_RULES+CILIUM_KIND_NETWORK_POLICY+CILIUM_API_VERSIONre-exports anchor on the sibling per-CNP-body axis surface) lands in one place. The prior inline literal split across the one production emitter and two test-fixture navigation sites (destination-endpointSelectorretrieval whose downstream navigation chains ride through the same axis-key) would have let a Cilium-CRD destination-identity axis rebrand or a per-emitter typo ("endpointselector"/"endpointSelectors"/"endpoints") at any one site silently emit a CNP whose destination-identity axis the Cilium CRD schema validator drops as unknown; the policy binds against no destination pods and every intra-mesh:contratosflow the affected CNP was authored to allow drops at the eBPF data plane’s default-deny gate with no field naming the destination-identity-drift root cause, and on the test-fixture side the drift silently masks the emission-side pin (.get("endpointSelector")returnsNoneunder both the drifted emitter and the drifted probe — the downstream.and_then(|s| s.get("matchLabels"))chain short-circuits vacuously because the outer selector-lookup is itselfNone). Peer to theCILIUM_KEY_TO_PORTSre-export on the sibling canonical-per-CNP- body-axis surface — extends the per-CNP-body re-export set from the per-ingress-rule port-set container axis (the L4 dispatch container half of the(endpointSelector, ingress → toPorts → rules)L3/L4/ L7-triad) onto the destination-identity axis half, completing the per-CNP L3-target-selector re-export the M3 Aplicacao mesh renderer’s eBPF data-plane contract rests on. Canonical CiliumCiliumNetworkPolicydestination-identity selector- axis key everycilium_network_policies-emitted CNP document mounts its L3-targetLabelSelectorunder (spec.endpointSelector). Pairs with the siblingCILIUM_KEY_TO_PORTS(c8d9cbf) — the Cilium CNP schema pins the destination workload through theendpointSelectoraxis and the admitted L4 port set through thetoPortsaxis, so drift on the destination-identity axis is exactly as load-bearing as drift on the port-set-container axis it accompanies (the Cilium- operator-side CRD schema validator drops anyspecblock whose destination-identity axis carries an unrecognized key — an"endpointselector"/"endpointSelectors"/"endpoints"typo silently emits a CNP whose L3-target selector the Cilium operator’s per-CNP identity-resolution pass no-ops entirely: the policy binds against no destination pods and every intra-mesh:contratosflow the CNP was authored to allow drops at the eBPF data plane’s default-deny gate with no field naming the destination-identity- axis-drift root cause). - CILIUM_
KEY_ FROM_ ENDPOINTS - Canonical Cilium
CiliumNetworkPolicyper-ingress-rule identity- source selector-list axis key everycilium_network_policies-emitted CNP document mounts its permitted-sourceLabelSelectorlist under (spec.ingress[].fromEndpoints[]). Re-export of the canonicalcaixa_core::CILIUM_KEY_FROM_ENDPOINTSso the Cilium-operator-side per-ingress-rule identity-source axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (theingress_rule.insert("fromEndpoints", …)call the prior inline"fromEndpoints"literal sat at) and every future per- Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the identity-source axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_ENDPOINT_SELECTOR - CILIUM_
KEY_ HTTP - Canonical Cilium
CiliumNetworkPolicyper-ingress[].toPorts[].rulesL7-HTTP-rule-list-discriminator container-axis key everycilium_network_policies-emitted CNP document mounts its per-toPorts[]entry L7 URL-path-prefix predicate list under (spec.ingress[].toPorts[].rules.http). Re-export of the canonicalcaixa_core::CILIUM_KEY_HTTPso the Cilium-CRD per-toPorts[]L7- HTTP-rule-list-discriminator container-axis key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the single production-code site the prior inline"http"literal sat at, therules.insert("http", …)call in theWitTarget::HttpL7 introspection emit branch) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the per-toPorts[]L7-HTTP-rule-list-discriminator axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the siblingCILIUM_KEY_AUTHENTICATION/CILIUM_KEY_MODEre-exports anchor on the parent per-ingress-rule mutual-auth body/leaf axis pair) lands in one place. The prior inline literal split across the one production emitter site and two test-fixture navigation sites (the L7 fan-in path-capture pin across the multi-edge group, the per-HTTP- contract L7-path presence pin) would have let a Cilium-CRD L7-HTTP- rule-list-discriminator rebrand or a per-emitter typo ("HTTP"/"Http"/"httpRules"/"httpMatch") at any one site silently emit a per-toPorts[]entry whose L7-HTTP-rule-list-discriminator key the Cilium CRD schema validator drops as unknown; the per-toPorts[]entry falls back to L4-only enforcement — no L7 URL- path predicate is applied — silently admitting every HTTP-method / URL-path combination the ingress rule was authored to filter to the exact path prefix set the typed:contratosgraph names at the L7 introspection axis, with no field naming the L7-HTTP-rule-list- discriminator-drift root cause. On the test-fixture side the drift silently masks the emission-side pin (.get("http")returnsNoneunder both the drifted-key emitter and the drifted-key probe — every downstream.and_then(|h| h.as_sequence())chain short- circuits vacuously because the outer L7-HTTP-rule-list-lookup is itselfNone). Peer to theCILIUM_KEY_MODE/CILIUM_KEY_AUTHENTICATIONre-exports on the sibling per- ingress-rule mutual-auth body/leaf axis pair — completes the per-toPorts[]L7-introspection(rules → http)container/protocol- discriminator axis re-export pair this crate’scilium_network_policiesrenderer’s HTTP-shaped-:contratosURL- path-prefix-filtering L7-enforcement contract rests on. Canonical CiliumCiliumNetworkPolicyper-ingress[].toPorts[].rulesL7-HTTP-rule-list-discriminator container-axis key everycilium_network_policies-emitted CNP document mounts its per-toPorts[]entry L7 HTTP-rule list under (spec.ingress[].toPorts[].rules.http). Nests exactly one level beneath the siblingKUBE_KEY_RULES(a205eb3) per-toPorts[]rule-list-container axis it sits inside: the Cilium CNP schema places the L7-protocol-selection discriminator (http/ futurekafka/ futuredns) as the single per-protocol keyed axis of the per-toPorts[]rules block, so drift on the L7-HTTP-rule-list- discriminator axis is exactly as load-bearing as drift on the siblingKUBE_KEY_RULESper-toPorts[]rule-list-container axis-key it nests inside (the Cilium-operator-side CNP schema validator drops any per-toPorts[]entry whose per-protocol L7-rule-list-discriminator key it recognizes as unknown — a"HTTP"/"Http"/"http/1.1"/"httpRules"typo at either the emit-siderules.insert(…)call site or a downstream renderer’s per-toPorts[]L7-rule-list upsert silently emits a per-toPorts[]entry whose L7-HTTP-rule-list-discriminator key the Cilium CRD schema validator rejects as unknown; the per-toPorts[]entry falls back to L4-only enforcement — no L7 URL-path predicate is applied — silently admitting every HTTP-method / URL-path combination the ingress rule was authored to filter to the exact path prefix set the typed:contratosgraph names at the L7 introspection axis, and the emit-side/probe-side split silently masks the per-toPorts[]L7- rule-list pin (.get("http")returnsNoneunder both the drifted- key emitter and the drifted-key probe — every downstream.and_then(|h| h.as_sequence())chain short-circuits vacuously because the outer L7-HTTP-rule-list-lookup is itselfNone). - CILIUM_
KEY_ INGRESS - Canonical Cilium
CiliumNetworkPolicyper-CNP-body traffic-direction container-axis key everycilium_network_policies-emitted CNP document mounts its permitted-inbound-per-(:de, :para)ingress-rule list under (spec.ingress[]). Re-export of the canonicalcaixa_core::CILIUM_KEY_INGRESSso the Cilium-operator-side per- CNP inbound-traffic-dispatch container-key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (thepolicy_spec.insert("ingress", …)call the prior inline"ingress"literal sat at) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the traffic- direction axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_ENDPOINT_SELECTOR - CILIUM_
KEY_ MODE - Canonical Cilium
CiliumNetworkPolicyper-ingress[].authenticationblock mTLS-mode-discriminator leaf-scalar-axis key everycilium_network_policies-emitted CNP document mounts its per-rule mutual-auth mode leaf under (spec.ingress[].authentication.mode). Re-export of the canonicalcaixa_core::CILIUM_KEY_MODEso the Cilium-operator-side per-ingress-rule mutual-auth-mode-discriminator leaf-axis key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the single-field-overlay call in the:politicas :mtls-requiredoverlay emit gate the prior inline"mode"literal sat at) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the per- authentication-block mode-discriminator leaf-axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_AUTHENTICATIONre-export anchors on the parent per-ingress-rule mutual-auth-body-axis) lands in one place. The prior inline literal split across the one production emitter site and five test-fixture navigation sites (the presence pin under the:mtls-required toverlay, the explicit-false-emits-disabled- mode pin under theSome(false)arm, the fan-out pin across multiple contratos, the pubsub-carry-overlay-too shape pin, and the yaml-string-scalarmode-value pin) would have let a Cilium-CRD mutual-auth-mode-leaf rebrand or a per-emitter typo ("policy"/"authMode"/"handshakeMode") at any one site silently emit a per-ingress[]entry whose mutual-auth-block mode-discriminator- leaf-axis the Cilium CRD schema validator drops as unknown; the ingress rule falls back to the cluster-default authentication mode and every intra-mesh:contratosflow the CNP was authored to protect with per-edge SPIFFE-identity-bound mutual-auth silently bypasses the mTLS handshake at the Cilium data-plane’s default- authentication mode with no field naming the mutual-auth-mode- leaf-axis-drift root cause. On the test-fixture side the drift silently masks the emission-side pin (.get("mode")returnsNoneunder both the drifted-key emitter and the drifted-key probe — every downstream.and_then(|v| v.as_str())chain short-circuits vacuously because the outer mode-leaf-lookup is itselfNone). Peer to theCILIUM_KEY_AUTHENTICATIONre-export on the parent per-ingress-rule mutual-auth-body-axis surface — completes the per-rule mutual-auth(authentication → mode)body/leaf axis re-export pair this crate’scilium_network_policiesrenderer’s SPIFFE-identity-bound per-edge mTLS enforcement contract rests on. Canonical CiliumCiliumNetworkPolicyper-ingress[].authenticationblock mTLS-mode-discriminator leaf-scalar-axis key everycilium_network_policies-emitted CNP document mounts its per-rule mutual-auth mode leaf under (spec.ingress[].authentication.mode). Nests exactly one level beneath the siblingCILIUM_KEY_AUTHENTICATION(db31108) per-ingress-rule mutual-auth body-axis it sits inside: the Cilium CNP schema places the mTLS enforcement mode discriminator ("required"/"disabled") as the single leaf-scalar axis of the per-rule authentication block, so drift on the mode-discriminator leaf axis is exactly as load-bearing as drift on the sibling per-ingress-rule mutual-auth body-axis key (authentication) it nests inside (the Cilium-operator-side CNP schema validator drops any per-ingress[]entry whose per-rule mutual-auth block carries an unrecognized leaf axis — a"policy"/"authMode"/"handshakeMode"typo at either the emit-side single- field-overlay call site or a downstream renderer’s per-rule authn leaf upsert silently emits a per-ingress[]mutual-auth block whose mode-discriminator leaf the Cilium CRD schema validator rejects as unknown; the ingress rule falls back to the cluster-default authentication mode (typically"disabled"— no mutual-auth enforcement) silently bypassing the SPIFFE-identity-bound mTLS handshake every intra-mesh:contratosflow the CNP was authored to protect with per-edge mTLS, and the emit-side/probe-side split silently masks the per-rule mutual-auth pin (.get("mode")returnsNoneunder both the drifted-key emitter and the drifted-key probe — every downstream.and_then(|v| v.as_str())chain short-circuits vacuously because the outer mode-leaf-lookup is itselfNone). - CILIUM_
KEY_ PATH - Canonical Cilium
CiliumNetworkPolicyper-ingress[].toPorts[].rules.http[]per-HTTP-rule URL-path-predicate leaf-scalar-axis key everycilium_network_policies-emitted CNP document mounts its per-HTTP-rule URL-path-prefix predicate scalar under (spec.ingress[].toPorts[].rules.http[].path). Re-export of the canonicalcaixa_core::CILIUM_KEY_PATHso the Cilium-CRD per-rules.http[]URL-path-predicate leaf-axis key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (the single production-code site the prior inline"path"literal sat at, thehttp_rule.insert("path", …)call in theWitTarget::HttpL7 introspection emit branch) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the per-rules.http[]URL-path-predicate leaf-axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the siblingCILIUM_KEY_HTTPre-export anchors on the parent per-toPorts[]L7-HTTP-rule-list-discriminator container-axis it nests inside) lands in one place. The prior inline literal split across the one production emitter site and one test-fixture navigation site (the per-HTTP-rule URL-path-predicate presence-and-value pin on the aplicacao fixture’s cart→catalog HTTP-shaped:contratosedge) would have let a Cilium-CRD per-HTTP-rule URL-path-predicate rebrand or a per-emitter typo ("Path"/"pathPrefix"/"regex"/"urlPath"/"pathMatch") at any one site silently emit a per-rules.http[]entry whose URL-path-predicate leaf-axis key the Cilium CRD schema validator drops as unknown; the per-rules.http[]entry falls back to a match-any-URL-path predicate — the per-toPorts[]L7 rule admits every URL path on the destination port silently, bypassing the URL-path-prefix predicate the typed:contratosHTTP-shaped edge’s:endpointslot names at the L7 introspection axis, with no field naming the URL-path-predicate-leaf- axis-drift root cause. On the test-fixture side the drift silently masks the emission-side pin (.get("path")returnsNoneunder both the drifted-key emitter and the drifted-key probe — every downstream.and_then(|v| v.as_str())chain short-circuits vacuously because the outer per-HTTP-rule URL-path-lookup is itselfNone). Peer to theCILIUM_KEY_HTTPre-export on the parent per-toPorts[]L7-HTTP- rule-list-discriminator container-axis it nests inside — completes the per-toPorts[]L7-introspection(rules → http → path)container / protocol-discriminator / URL-path-predicate axis triple re-export chain this crate’scilium_network_policiesrenderer’s HTTP-shaped-:contratosURL-path-prefix-filtering L7-enforcement contract rests on. Distinct from the sibling K8s-Gateway-API-sideGATEWAY_API_KEY_PATHper-HTTPRouteMatchpath-matcher container-axis re-export: both re- exports carry the same underlying"path"string but name distinct schema axes on distinct CRD groups (the Cilium-side leaf on thecilium.io/v2CiliumNetworkPolicyCRD’s per-rules.http[]entry, the Gateway-API-side container on thegateway.networking.k8s.io/v1HTTPRouteCRD’sspec.rules[].matches[]entry), so the siblingpub usedeclarations stay independent for the same axis-independence reason the siblingCILIUM_KIND_NETWORK_POLICY/GATEWAY_API_KIND_GATEWAY/GATEWAY_API_KIND_HTTP_ROUTEkind- discriminator re-exports stay independent across the two CRD groups. The axis-independence discipline lives at the rustc symbol-name axis (the twopub use caixa_core::CILIUM_KEY_PATH/pub use caixa_core::GATEWAY_API_KEY_PATHsymbol re-exports a future rebrand of one leaves the other structurally untouched under) rather than the runtime-address axis — Rust’s&'static strinterner coalesces identical byte-sequences onto one storage allocation at codegen time, so the per-axis re-export identity pin against the canonical caixa-core declaration on each axis is what actually forbids a sibling localpub constfrom drifting, not a cross-axis pointer-inequality assertion. Canonical CiliumCiliumNetworkPolicyper-ingress[].toPorts[].rules.http[]per-HTTP-rule URL-path-predicate leaf-scalar-axis key everycilium_network_policies-emitted CNP document mounts its per-HTTP-rule URL-path-prefix predicate scalar under (spec.ingress[].toPorts[].rules.http[].path). Nests exactly one level beneath the siblingCILIUM_KEY_HTTP(ccd81e8) per-toPorts[]L7-HTTP-rule-list-discriminator container-axis it sits inside: the Cilium CNP schema places the per-HTTP-rule URL-path predicate scalar (the exact URL-path regex the Cilium L7 dispatch pass matches the observed HTTP request line’s path segment against) as the single load-bearing leaf- scalar axis of the per-rules.http[]entry — so drift on the per-HTTP- rule URL-path-predicate leaf axis is exactly as load-bearing as drift on the siblingCILIUM_KEY_HTTPper-toPorts[]L7-HTTP-rule-list- discriminator container-axis key it nests inside (the Cilium-operator- side CNP schema validator drops any per-rules.http[]entry whose per- HTTP-rule URL-path-predicate leaf key it recognizes as unknown — a"Path"/"pathPrefix"/"regex"/"urlPath"/"pathMatch"typo at either the emit-sidehttp_rule.insert(…)call site or a downstream renderer’s per-rules.http[]URL-path leaf upsert silently emits a per-rules.http[]entry whose URL-path-predicate leaf-axis key the Cilium CRD schema validator rejects as unknown; the per-rules.http[]entry falls back to a match-any-URL-path predicate — the per-toPorts[]L7 rule admits every URL path on the destination port silently, bypassing the URL-path-prefix predicate the typed:contratosHTTP-shaped edge’s:endpointslot names at the L7 introspection axis, and the emit- side/probe-side split silently masks the per-rules.http[]URL-path pin (.get("path")returnsNoneunder both the drifted-key emitter and the drifted-key probe — every downstream.and_then(|v| v.as_str())chain short-circuits vacuously because the outer per-HTTP-rule URL- path-lookup is itselfNone). - CILIUM_
KEY_ PORTS - Canonical Cilium
CiliumNetworkPolicyper-toPorts[]-entry L4 port-tuple-list-container axis key everycilium_network_policies- emitted CNP document mounts its per-port-set[{port, protocol}]list under (spec.ingress[].toPorts[].ports[]). Re-export of the canonicalcaixa_core::CILIUM_KEY_PORTSso the Cilium-operator- side per-toPorts[]-entry L4-port-tuple-list-container-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (theto_port.insert("ports", …)call the prior inline"ports"literal sat at) and every future per- Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the L4 port-tuple-list-container axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorCILIUM_KEY_FROM_ENDPOINTS+CILIUM_KEY_ENDPOINT_SELECTOR+CILIUM_KEY_INGRESS+CILIUM_KEY_TO_PORTS+caixa_core::KUBE_KEY_RULES+CILIUM_KIND_NETWORK_POLICY+CILIUM_API_VERSIONre-exports anchor on the sibling per-CNP-body axis surface) lands in one place. The prior inline literal split across the one production emitter and two test-fixture navigation sites (cilium_pubsub_contracts_skip_l7_rules— theto_ports.get("ports").is_some()presence pin the L4-yes-L7-no separation invariant hinges on;cnp_l4_fallback_port_reflects_default_servico_port— the.and_then(|tp| tp.get("ports"))navigation whose downstream.and_then(|s| s.first()).and_then(|p| p.get("port"))chain reads the per-port-set L4 port-tuple value theDEFAULT_SERVICO_PORTfallback pins) would have let a Cilium-CRD L4 port-tuple-list- container axis rebrand or a per-emitter typo ("port"/"portList"/"L4Ports") at any one site silently emit a per-toPorts[]entry whose L4 port-tuple-list-container axis the Cilium CRD schema validator drops as unknown; the port-set admits no(port, protocol)tuple, and every intra-mesh:contratosflow the affected CNP was authored to allow drops at the eBPF data plane’s default-deny gate with no field naming the L4-port-tuple-list- container-drift root cause, and on the test-fixture side the drift silently masks the emission-side pin (.get("ports")returnsNoneunder both the drifted emitter and the drifted probe — every downstream navigation short-circuits vacuously because the outer L4- port-tuple-list-container-lookup is itselfNone). Peer to theCILIUM_KEY_TO_PORTSre-export on the sibling canonical-per-CNP- dispatch-axis surface — nests the per-port-set L4 port-tuple-list- container axis structurally beneath the siblingCILIUM_KEY_TO_PORTSport-set-container axis, extending the per- CNP L3/L4/L7-triad(endpointSelector, ingress → toPorts → ports / rules)re-export with the L4-half’s port-tuple-list-container axis this crate’scilium_network_policiesrenderer’s eBPF data-plane L4-allow contract rests on. Canonical CiliumCiliumNetworkPolicyper-toPorts[]-entry L4 port-tuple-list-container axis key everycilium_network_policies- emitted CNP document mounts its per-port-set[{port, protocol}]list under (spec.ingress[].toPorts[].ports[]). Nests inside the siblingCILIUM_KEY_TO_PORTS(c8d9cbf) — the Cilium CNP schema pins the per-ingress-rule port-set-container axis through thetoPorts[]list and the per-port-set L4 port-tuple list through theports[]axis beneath each entry, so drift on the L4 port-tuple-list-container axis is exactly as load-bearing as drift on the port-set container axis it nests inside (the Cilium-operator-side CRD schema validator drops any per-toPorts[]entry whose port-tuple-list-container axis carries an unrecognized key — a"port"/"portList"/"L4Ports"typo silently emits a CNP whose per-(:de, :para)per-port-set L4 port-tuple list the Cilium operator’s per-CNP L4-allow eBPF-program generation pass no-ops entirely: the port-set admits no(port, protocol)tuple and every intra-mesh:contratosflow the CNP was authored to allow drops at the eBPF data plane’s default-deny gate with no field naming the L4-port-tuple-list-container-axis-drift root cause). - CILIUM_
KEY_ TO_ PORTS - Canonical Cilium
CiliumNetworkPolicyper-ingress-rule port-set container-axis key everycilium_network_policies-emitted CNP document mounts its per-ingress-rule[{ports: […], rules: {…}}]list under (spec.ingress[].toPorts[]). Re-export of the canonicalcaixa_core::CILIUM_KEY_TO_PORTSso the Cilium-operator-side per-CNP L4/L7-dispatch container-key string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (theingress_rule.insert("toPorts", …)call the prior inline"toPorts"literal sat at) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand on the port-set container axis (unlikely on the CRD’s stablecilium.io/v2slot, but the coordination point the priorKUBE_KEY_RULES+CILIUM_KIND_NETWORK_POLICY+CILIUM_API_VERSIONre-exports anchor on the sibling per-CNP-dispatch-axis surface) lands in one place. The prior inline literal split across the one production emitter and six test-fixture navigation sites (2 CNP presence / absence pins, 1 fan-in-per-pair invariant pin, 1 mTLS-overlay nesting pin — via the pair ofcontains_key+.getnavigations, 1 L4-fallback port pin) would have let a Cilium-CRD port-set- container rebrand or a per-emitter typo ("toport"/"toPort"/"targetPorts") at any one site silently emit a per-ingress-rule entry whose port-set container the Cilium CRD schema validator drops as unknown; every intra-mesh:contratosflow the affected CNP was authored to allow drops at the eBPF data plane’s default- deny gate with no field naming the container-drift root cause, and on the test-fixture side the drift silently masks the emission-side pin (.get("toPorts")returnsNoneunder both the drifted emitter and the drifted probe — thecilium_pubsub_contracts_skip_\ l7_rulesabsence pin’s downstreamto_ports.get("rules").is_none()assertion succeeds vacuously becauseto_portsis itselfNone). Peer to thecaixa_core::KUBE_KEY_RULESre-export on the sibling canonical-per-CNP-dispatch-axis surface — completes the per-CNP L4/L7-dispatch-container(toPorts, rules)re-export pair this crate’scilium_network_policiesrenderer’s eBPF data-plane contract rests on. Canonical CiliumCiliumNetworkPolicyL4/L7 per-ingress-rule port-set container-axis key everycilium_network_policies-emitted CNP document mounts its per-ingress-rule[{ports: […], rules: {…}}]list under (spec.ingress[].toPorts[]). Pairs with the siblingKUBE_KEY_RULES(a205eb3) — the Cilium L7-dispatch schema nestsspec.ingress[].toPorts[].rules.http[]under the shared (toPorts,rules) container-key pair, so drift on thetoPortsaxis is exactly as load-bearing as drift on therulesaxis it wraps (the Cilium-operator-side CRD schema validator drops anyspec.ingress[]entry whose port-set container carries an unrecognized key — a"toports"/"toPort"/"targetPorts"typo silently emits an ingress rule whose per-port set the Cilium operator’s per-CNP L4/L7 dispatch pass no-ops entirely: every intra-mesh:contratosflow the CNP was authored to allow now drops at the eBPF data plane’s default-deny gate with no field naming the port-set-container-drift root cause). - CILIUM_
KIND_ NETWORK_ POLICY - Canonical Cilium CRD
kinddiscriminator everycilium_network_policies-emittedCiliumNetworkPolicydocument declares at its top-levelcaixa_core::KUBE_KEY_KINDaxis. Re-export of the canonicalcaixa_core::CILIUM_KIND_NETWORK_POLICYso the Cilium-operator-side CRDkinddiscriminator string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicy emitter (the single production-code site the prior inline"CiliumNetworkPolicy"literal sat at, caixa-mesh/src/lib.rs:382 — thekube_resource_skeletonkind argument) and every future per-Cilium-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Cilium-CRD rebrand (e.g. an upstream rename toCiliumNetworkPolicyV2) is a one-line edit on the canonicalcaixa_core::CILIUM_KIND_NETWORK_POLICYdeclaration, not a coordinated rewrite across this crate’skube_resource_skeletoncall site + every future per-target renderer the substrate adds. The prior inline literal would have let a Cilium-CRD bump on the kind axis without a coordinated edit on the matching in-filecilium_policy_carries_canonical_kube_skeletontest fixture pin silently emit aCiliumNetworkPolicywhose top-level kind drifts off the lifted-test-fixture pin — apply-side: the policy lands outside the Cilium-operator-side CRD registration, every(:de, :para)intra-mesh L4/L7 contract drops at the eBPF data plane with no field naming the kind-drift root cause. Peer to theCILIUM_API_VERSIONre-export on the sibling canonical-Cilium-CRD-apiVersion-axis — extends the discipline from the apiVersion half of the(apiVersion, kind)CRD-lookup tuple onto the kind half, completing the per-Cilium-CRD kind+apiVersion re-export pair this crate’scilium_network_policiesrenderer’s eBPF data-plane contract rests on. Canonical Cilium CRDkinddiscriminator the renderedCiliumNetworkPolicydocument declares at its top-levelKUBE_KEY_KINDaxis. Pairs with the siblingCILIUM_API_VERSION(279d611) — the K8s apiserver-side CRD resolution contract is the(apiVersion, kind)tuple keyed against the registeredCustomResourceDefinition, so drift on the kind axis is exactly as load-bearing as drift on the apiVersion axis it accompanies (the apiserver’sRESTMapperconsults both together; a("cilium.io/v2", "CilumNetworkPolicy")typo at the production-code call site lands outside the registered Cilium-operator-sideCiliumNetworkPolicyCRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘CilumNetworkPolicy’ is registered for version ‘cilium.io/v2’” error far from the source caixa.lisp / the renderer’skube_resource_skeletoncall site). - CONTRATO_
EDGE_ LABEL_ SEPARATOR - Canonical M3
:contratosedge-direction separator byte-string every caixa-mesh emitter that encodes a typed edge as a K8s-name-shaped scalar reads from — the per-(:de, :para)LABEL_CONTRATOvalue threaded throughcontrato_edge_labeland the per-(:de, :para)CiliumNetworkPolicymetadata.namethreaded throughcilium_network_policy_name. Re-export of the canonicalcaixa_core::CONTRATO_EDGE_LABEL_SEPARATORso the load-bearing-to-byte-string lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)group (the two writer sites the prior inlineformat!literals sat at) and every future per-target renderer that encodes a typed M3 edge as a K8s-name-shaped scalar. A future edge-encoding rebrand (-to-→->for compactness,-to-→_to_to reserve-for embedded DNS-1123-label boundaries, an edge-direction-arrow migration to UTF-8 shapes) lands at the canonicalcaixa_core::CONTRATO_EDGE_LABEL_SEPARATORdeclaration, not at this crate’s per-group writer sites. Peer with thecontrato_edge_label/cilium_network_policy_namecomposer re-exports that consume this const — together the three items close the canonical per-(:de, :para)CNP identity pair(metadata.labels.pleme.pleme.io/contrato, metadata.name)onto one shared edge-encoding source of truth. Canonical M3:contratosedge-direction separator byte-string every caixa-mesh emitter that encodes a typed edge as a K8s-name-shaped scalar (theLABEL_CONTRATOlabel value carried on every per-(:de, :para)CiliumNetworkPolicy’smetadata.labels, and the per-(:de, :para)CiliumNetworkPolicy’smetadata.nameitself) inserts between the:deand:parahalves of the typed edge tuple. Load-bearing on both the writer half (the CNP renderer) and the reader half (Hubble flow grouping by contrato label, per-CNP operator filters,kubectl get cnp -l pleme.pleme.io/contrato=<de>-to-<para>grep-by-label). Until this lift landed the-to-byte-string sat in two verbatim inline-format!sites at the caixa-meshcilium_network_policiesemitter — one at theLABEL_CONTRATOlabels.insert(...)call and one at thekube_resource_skeletonname:argument — with no compile-time link between them. A future edge-encoding rebrand (-to-→->for compactness,-to-→_to_to reserve-for embedded DNS-1123-label boundaries, an edge-direction-arrow migration to UTF-8 shapes) would have had to be threaded through both sites in lockstep or the two would silently split: one CNP’smetadata.namekeys off the drifted encoding, its ownmetadata.labels.pleme.pleme.io/contratovalue keys off the original, and every operator-side grep-by-label query (kubectl get cnp -l pleme.pleme.io/contrato=cart-to-catalog) finds the label but the resulting CNP’smetadata.nameno longer matches the queried edge encoding. Every downstream consumer that joins the two axes (the M4 mesh-graph audit, the future Hubble-side contrato-flow renderer, the operator’s per-edge policy inspector) silently loses the join. Lifted onto one&'static strso a future edge-encoding rebrand lands at one const, and every downstream consumer picks up the new encoding by construction. - DEFAULT_
GATEWAY_ CLASS_ NAME - Canonical K8s Gateway API
GatewayClassname everygateway_routes-emittedGatewaydocument declares at itsspec.gatewayClassNameaxis. Re-export of the canonicalcaixa_core::DEFAULT_GATEWAY_CLASS_NAMEso the substrate’s chosen Gateway API controller-discriminator lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-:entradaGatewayemitter (the single production-code site the prior inline"cilium".into()literal sat at — thespec.gatewayClassNamefield of the emittedGateway’sspecblock) and every future per-Aplicacao materializer the M3.x + M4 absorption roadmap acknowledges (the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’sGatewaysynthesis, a future per-cluster / per-edgeGatewayrenderer for non-HTTP:entradashapes) now consult the same&'static str, so a future substrate-side Gateway API controller migration (Cilium → Envoy Gateway / Istio Gateway or any per-edition Gateway API v1.x GA controller variant the SIG-Network roadmap names) is a one-line edit on the canonicalcaixa_core::DEFAULT_GATEWAY_CLASS_NAMEdeclaration, not a coordinated rewrite across this crate’sgateway_routescall site - DEFAULT_
NAMESPACE - Default namespace for emitted cluster objects when the Aplicacao
doesn’t pin one. Re-export of the canonical
caixa_core::DEFAULT_NAMESPACEso the namespace string lives in exactly one place across every renderer — caixa-mesh’s programs fan-out / CiliumNetworkPolicy / Gateway / HTTPRoute emitters and caixa-flux’s programs.yaml / GitRepository / HelmRelease / Kustomization 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-flux, and every future per-target renderer the substrate adds. The prior localpub constdeclaration explicitly acknowledged the duplication (“Mirrorscaixa_flux::DEFAULT_NAMESPACE”); this re-export closes the drift footgun structurally — a future rebrand on one side without a coordinated edit on the other would otherwise have silently emitted Servicos into one namespace and their Aplicacao’s NetworkPolicies / Gateways / HTTPRoutes into a drifted one, with the apply-time symptom (CiliumNetworkPolicyendpointSelectormatches no pods, every L7 contrato flow silently drops) far from the rebrand commit’s source. 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. - GATEWAY_
API_ API_ VERSION - Canonical K8s Gateway API CRD
apiVersioneverygateway_routes- emittedGateway/HTTPRoutedocument declares. Re-export of the canonicalcaixa_core::GATEWAY_API_API_VERSIONso the Gateway-API-conformant CRD-group/version string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesGateway + HTTPRoute emitters (the two production- code sites the prior inline literal sat at, caixa-mesh/src/lib.rs:455, 496) and every future per-edgeTCPRoute/TLSRoute/GRPCRouteemitter the M3.x absorption- roadmap acknowledges now consult the same&'static str, so a future K8s Gateway API GA promotion (the upstream SIG-Network roadmap names per-CRD-group / per-version migration once the v1 GA branch matures) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_API_VERSIONdeclaration, not a coordinated rewrite across this crate’s twokube_resource_skeletoncall sites + every future per-target renderer the substrate adds. The prior inline literals would have let a Gateway-API GA bump on one axis without a coordinated edit on the other silently emit aGateway/HTTPRoutepair pointing at distinct CRD versions — apply-side: theGatewayandHTTPRouteland in two distinct apiserver-side CRD registrations, the per-route attached-policy resolution pipeline never binds, every external:entradaflow drops at the gateway with no field naming the version-drift root cause. Peer to theDEFAULT_NAMESPACEre-export on the sibling canonical-load-bearing-string axis — extends the discipline onto the canonical-K8s-Gateway-API-CRD-axis surface. Canonical K8s Gateway API CRDapiVersioneverycaixa-mesh-emittedGateway/HTTPRoutedocument declares. The K8s apiserver-side SIG-Network Gateway API conformance registers theGateway/HTTPRoute/GatewayClass/TCPRoute/TLSRoute/GRPCRouteCRDs at this exact group/version (gateway.networking.k8s.io/v1); drift to a stalev1beta1/v1alpha2(the pre-GA Gateway API betas every upstream conformance doc names) silently routes the renderedGateway/HTTPRouteoutside the apiserver’s CRD-version registration and breaks at apply time with a non-self-locating “no kind ‘Gateway’ is registered for version ‘gateway.networking.k8s.io/v1beta1’” error far from the source caixa.lisp / the renderer’skube_resource_skeletoncall site. - GATEWAY_
API_ KEY_ ATTEMPTS - Canonical K8s Gateway API
HTTPRouteper-rule retry-policyattemptsleaf scalar-key. Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_ATTEMPTSso the per-rule retry- attempts leaf key lives in exactly one place across every caixa renderer — this crate’s one production emitter site (gateway_routes’s per-HTTPRouteper-rulesingle_field_overlay(spec.politicas.retries, …)call that seeds the typedu32attempt count into the siblingGATEWAY_API_KEY_RETRYcontainer axis underspec.rules[].retry.attempts, the leaf the Gateway API v1 CRD schema pins asHTTPRouteRetry.attemptsand whose scalar value the Gateway-API-implementation-side per-rule request-dispatch loop compares each failed backend attempt count against before giving up on the in-flight backend call) and this crate’s five test-side per-rule retry-attempts traversal sites (thehttproute_carries_politicas_retries_on_every_ruletyped-u64- value pin, thehttproute_retry_renders_every_rule_independentlyper-rule fan-out attempt-count pin under multi-:entrada :paths, thehttproute_retry_round_trips_typed_attempt_counttyped-u32- round-trip pin, thehttproute_retry_attempts_serialized_as_yaml_numberYAML integer-scalar-kind pin, and the retries-only arm ofhttproute_timeouts_and_retry_coexist_independentlypinning the leaf attempt count survives when only the sibling:retriesslot is set) now consult the same&'static stras the peer caixa-core- side const definition. - GATEWAY_
API_ KEY_ BACKEND_ REFS - Canonical K8s Gateway API
HTTPRouteper-rule backend-destination container-axis key everygateway_routes-emittedHTTPRouteper- rule block mounts its[{name, port}]backend fan-out list under (spec.rules[].backendRefs[]). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_BACKEND_REFSso the Gateway-API- implementation-side per-rule backend-destination-container-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (therule.insert("backendRefs", …)call the prior inline"backendRefs"literal sat at, caixa-mesh/src/lib.rs:1414) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-rule backend-destination axis (an upstream Gateway API v2 rename tobackends/forwardTo/to, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_BACKEND_REFSdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site + two test-side fixture pins (httproute_routes_to_entrada_para’s.get("backendRefs")navigation,httproute_rule_keys_pin_overlay_position’scontains_key("backendRefs")presence pin) would have let a Gateway-API-CRD per-rule backend-destination-axis rebrand or a per- emitter typo ("backendRef"/"backends"/"forwardTo") silently emit anHTTPRoutewhose per-rule backend-destination axis the Gateway API CRD schema validator drops as unknown — no backend is picked at the per-rule L7 dispatch, and every external:entradarequest the rule was authored to route drops at the gateway-class- controller’s per-rule reconcile with no field naming the backend- destination-drift root cause. A drift on the test-fixture side silently masks the emission-side pin (.get("backendRefs")returnsNoneunder both the drifted-key emitter and the drifted-key probe — the downstream.and_then(|b| b.as_sequence())/.and_then(|s| s.first())chain short-circuits vacuously because the outer per-rule backend-destination lookup is itselfNone). Peer to theGATEWAY_API_KEY_PARENT_REFSre-export on the sibling canonical-Gateway-API-HTTPRoute-body-axis surface — extends the per-Gateway-API-HTTPRoute-body-axis canonical-string re-export set (parentRefs,backendRefs, futurehostnames) this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the Gateway API HTTPRoute-side per-route body- shape. Canonical K8s Gateway APIHTTPRouteper-rule backend-destination container-axis key everygateway_routes-emittedHTTPRoutedocument mounts its per-rule[{name, port}]backend list under (spec.rules[].backendRefs[]). Pairs with the siblingGATEWAY_API_KEY_PARENT_REFS(f44e823) — the Gateway API v1 CRD schema pins the per-HTTPRoute route→Gateway attachment through thespec.parentRefs[]container axis and the per-rule route→Servico backend fan-out through thespec.rules[].backendRefs[]axis beneath each rule entry, so drift on the per-rule backend-destination axis is exactly as load-bearing as drift on the per-HTTPRoute parent-Gateway-binding axis it accompanies (the K8s apiserver-side Gateway API CRD schema validator drops any per-rule block whose backend-destination container axis carries an unrecognized key — a"backendRef"/"backends"/"forwardTo"typo silently emits anHTTPRoutewhose per-rule backend fan-out the Gateway API implementation’s per-rule L7 dispatch loop no-ops entirely: no backend is picked, and every external:entradarequest the rule was authored to route drops at the gateway-class-controller’s per-rule reconcile with no field naming the backend-destination- axis-drift root cause). - GATEWAY_
API_ KEY_ GATEWAY_ CLASS_ NAME - Canonical K8s Gateway API
Gatewayper-Gateway controller-binding scalar-axis key everygateway_routes-emittedGatewaydocument mounts its per-GatewayGatewayClass.metadata.namereference under (spec.gatewayClassName). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_GATEWAY_CLASS_NAMEso the Gateway-API-implementation-side per-Gateway controller-binding scalar-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoGatewayemitter (theg_spec.insert("gatewayClassName", …)call the prior inline"gatewayClassName"literal sat at) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-Gateway controller-binding scalar axis (an upstream Gateway API v2 rename toclassName/gatewayClassRef, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_GATEWAY_CLASS_NAMEdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site + one test-side fixture pin (gateway_gateway_class_name_uses_lifted_default_gateway_class_name’s.get("gatewayClassName")navigation) would have let a Gateway- API-CRD per-Gateway controller-binding-axis rebrand or a per- emitter typo ("gatewayClass"/"className"/"gatewayClassRef") silently emit aGatewaywhose controller- binding scalar-axis the Gateway API CRD schema validator drops as unknown — noGatewayClassis resolved, nocontrollerNameis looked up, and every external:entradaflow the Gateway was authored to accept drops at the gateway-class-controller’s per- Gateway reconcile with no field naming the controller-binding- drift root cause. A drift on the test-fixture side silently masks the emission-side pin (.get("gatewayClassName")returnsNoneunder both the drifted-key emitter and the drifted-key probe — the downstream.and_then(|c| c.as_str())chain short-circuits vacuously because the outer per-Gateway controller-binding lookup is itselfNone). Peer to theGATEWAY_API_KEY_LISTENERS+GATEWAY_API_KEY_HOSTNAMEre-exports on the sibling canonical- Gateway-API-CRD-per-Gateway-body-axis surface. Sibling of the peerDEFAULT_GATEWAY_CLASS_NAMEre-export on the canonical- Gateway-API-(key, value)-pair-lift surface this re-export closes the KEY half of. Canonical K8s Gateway APIGatewayper-Gateway controller-binding scalar-axis key everygateway_routes-emittedGatewaydocument mounts its per-GatewayGatewayClass.metadata.namereference under (spec.gatewayClassName). Pairs with the siblingDEFAULT_GATEWAY_CLASS_NAME(d9b0743) — the K8s Gateway API v1 CRD schema pins the per-Gateway controller-binding through the scalarspec.gatewayClassNameaxis (eachGatewaynames exactly oneGatewayClass.metadata.name; the siblingspec.listeners[]+spec.addresses[]container axes carry the L7-listener fan-out + per-Gateway address hint under the samespecblock), so drift on the per-Gateway controller-binding scalar-axis KEY is exactly as load-bearing as drift on the siblingDEFAULT_GATEWAY_CLASS_NAMEVALUE the axis wraps (the K8s apiserver-side Gateway API CRD schema validator drops anyspecblock whose controller-binding scalar- axis carries an unrecognized key — a"gatewayClass"/"className"/"gatewayClassRef"typo silently emits aGatewaywhose controller-binding the Gateway API implementation’s per- Gateway reconcile loop no-ops entirely: noGatewayClassis resolved, nocontrollerNameis looked up, and every external:entradaflow the Gateway was authored to accept drops at the gateway-class-controller’s per-Gateway reconcile with no field naming the controller-binding-axis-drift root cause). - GATEWAY_
API_ KEY_ HOSTNAME - Canonical K8s Gateway API
Gatewayper-listener DNS-host-discriminator axis key everygateway_routes-emittedGatewaydocument mounts each listener’s virtual-host filter under (spec.listeners[].hostname). Re- export of the canonicalcaixa_core::GATEWAY_API_KEY_HOSTNAMEso the Gateway-API-implementation-side per-listener DNS-host-discriminator- axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoGatewayemitter (the per-listenerlistener.insert("hostname", …)call the prior inline"hostname"literal sat at, seeded from the Aplicacao’s:entrada :hostslot) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-listener DNS-host discriminator axis (an upstream Gateway API v2 rename tohost/vhost/serverName, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_HOSTNAMEdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site + one test-side fixture pin (gateway_listener_carries_aplicacao_host’s.get("hostname")navigation) would have let a Gateway-API-CRD per-listener DNS-host- discriminator-axis rebrand or a per-emitter typo ("host"/"vhost"/"serverName") silently emit aGatewaywhose per- listener virtual-host filter axis the Gateway API CRD schema validator drops as unknown — the listener accepts traffic on the wildcard host rather than the typed:entrada :hostthe Aplicacao author declared, and every external:entradaflow the listener was authored to accept lands on the wrong virtual-host filter with no field naming the DNS-host-discriminator-drift root cause. A drift on the test-fixture side silently masks the emission-side pin (.get("hostname")returnsNoneunder both the drifted-key emitter and the drifted-key probe — the downstream.and_then(|h| h.as_str())chain short-circuits vacuously because the outer per-listener DNS- host discriminator lookup is itselfNone). Peer to theGATEWAY_API_KEY_LISTENERS+GATEWAY_API_KEY_PARENT_REFS+GATEWAY_API_KEY_BACKEND_REFSre-exports on the sibling canonical-Gateway-API-CRD-body-axis surface — nests the per-Gateway- API-CRD-body-axis canonical-string re-export set one level deeper onto the per-listener body-axis surface (parentRefs,backendRefs,listeners,hostname, futurehostnames) this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the Gateway API CRD-side body-shape. Canonical K8s Gateway APIGatewayper-listener DNS-host-discriminator axis key everygateway_routes-emittedGatewaydocument mounts each listener’s virtual-host name under (spec.listeners[].hostname). Pairs with the siblingGATEWAY_API_KEY_LISTENERS(29f2415) — the Gateway API v1 CRD schema pins the per-Gateway L7-listener-set fan-out through thespec.listeners[]container axis (each entry names one listener the Gateway accepts external traffic on) and pins each entry’s per-listener DNS-host discriminator under the nestedhostnameaxis (Gateway API v1Listener.hostname—PreciseHostnamestring, optional per-listener virtual-host filter the Gateway-API-implementation-side per-Gateway reconcile loop honors when routing external inbound traffic against SNI at the TLS handshake /Host:header at the HTTP request line), so drift on the per-listener DNS-host discriminator axis is exactly as load-bearing as drift on the per-Gateway L7-listener-set container axis it nests under (the K8s apiserver-side Gateway API CRD schema validator drops any per-listener entry whose DNS-host discriminator axis carries an unrecognized key — a"host"/"vhost"/"serverName"typo silently emits aGatewaywhose per-listener virtual-host filter the Gateway API implementation’s per-listener SNI /Host:header dispatch loop no-ops entirely: the listener accepts traffic on the wildcard host rather than the typed:entrada :hostthe Aplicacao author declared, and every external:entradaflow the listener was authored to accept lands on the wrong virtual-host filter with no field naming the DNS-host-discriminator-axis-drift root cause). - GATEWAY_
API_ KEY_ HOSTNAMES - Canonical K8s Gateway API
HTTPRoutespec-level DNS-host-filter axis key everygateway_routes-emittedHTTPRoutedocument mounts the route’s per-route virtual-host filter list under (spec.hostnames[]). The plural sibling ofGATEWAY_API_KEY_HOSTNAME— same Gateway-API-CRD DNS-host-discriminator convention nested one level up on the siblingHTTPRouteper-route body-axis surface, distinct spelling (hostnames— plural — is theHTTPRoutespec-level filter list; the singularhostnameaxis it pairs against is the per-Gateway-listener virtual-host discriminator). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_HOSTNAMESso the Gateway- API-implementation-side per-route DNS-host-filter-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the spec-levelr_spec.insert("hostnames", …)call the prior inline"hostnames"literal sat at, seeded from the Aplicacao’s:entrada :hostslot as a single-element sequence) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-route DNS-host filter axis (an upstream Gateway API v2 rename tohosts/vhosts/serverNames, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_HOSTNAMESdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site would have let a Gateway- API-CRD per-route DNS-host-filter-axis rebrand or a per-emitter typo ("hosts"/"vhosts"/"serverNames") silently emit anHTTPRoutewhose per-route virtual-host filter axis the Gateway API CRD schema validator drops as unknown — the route accepts traffic on every host the parent Gateway’s listener accepts rather than the typed:entrada :hostthe Aplicacao author declared, and every external:entradaflow the route was authored to accept lands on the wildcard virtual-host filter with no field naming the DNS-host- filter-drift root cause. Peer to theGATEWAY_API_KEY_HOSTNAME+GATEWAY_API_KEY_LISTENERS+GATEWAY_API_KEY_PARENT_REFS+GATEWAY_API_KEY_BACKEND_REFSre-exports on the sibling canonical-Gateway-API-CRD-body-axis surface — closes the per-Gateway- API-CRDHTTPRouteper-route body-axis re-export pair across the singular / plural DNS-host discriminator surface (hostnameat the parent-Gateway per-listener discriminator +hostnamesat the child HTTPRoute per-route filter list), so both halves of the DNS-host- discriminator convention across the(Gateway, HTTPRoute)pair this crate’sgateway_routesrenderer’s external:entradaingress contract emits together now carry one lifted canonical&'static strre-export apiece. Canonical K8s Gateway APIHTTPRoutespec-level DNS-host-filter axis key everygateway_routes-emittedHTTPRoutedocument mounts the route’s per-route virtual-host filter list under (spec.hostnames[]). The plural sibling ofGATEWAY_API_KEY_HOSTNAME(c96fa22) — same Gateway-API-CRD DNS-host-discriminator convention nested one level up on the siblingHTTPRouteper-route body-axis surface, distinct spelling (hostnames— plural — is theHTTPRoutespec-level filter list; the singularhostnameaxis it pairs against is the per-Gateway-listener virtual-host discriminator). - GATEWAY_
API_ KEY_ LISTENERS - Canonical K8s Gateway API
Gatewayper-listener-set container-axis key everygateway_routes-emittedGatewaydocument mounts its per- Gateway[{name, port, protocol, hostname}]L7-listener fan-out list under (spec.listeners[]). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_LISTENERSso the Gateway-API- implementation-side per-Gateway L7-listener-set-container-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoGatewayemitter (theg_spec.insert("listeners", …)call the prior inline"listeners"literal sat at) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-Gateway L7-listener-set axis (an upstream Gateway API v2 rename toservers/endpoints/bindings, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_LISTENERSdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site + one test- side fixture pin (gateway_listener_carries_aplicacao_host’s.get("listeners")navigation) would have let a Gateway-API-CRD per-Gateway L7-listener-set-axis rebrand or a per-emitter typo ("listener"/"listen"/"servers") silently emit aGatewaywhose L7-listener-set axis the Gateway API CRD schema validator drops as unknown — no listener is opened, and every external:entradaflow the Gateway was authored to accept drops at the gateway-class-controller’s per-Gateway reconcile with no field naming the L7-listener-set-drift root cause. A drift on the test- fixture side silently masks the emission-side pin (.get("listeners")returnsNoneunder both the drifted-key emitter and the drifted- key probe — the downstream.and_then(|l| l.as_sequence())/.and_then(|s| s.first())chain short-circuits vacuously because the outer per-Gateway L7-listener-set lookup is itselfNone). Peer to theGATEWAY_API_KEY_PARENT_REFS+GATEWAY_API_KEY_BACKEND_REFSre-exports on the sibling canonical-Gateway-API-HTTPRoute-body-axis surface — extends the per-Gateway-API-CRD-body-axis canonical-string re-export set (parentRefs,backendRefs,listeners, futurehostnames) this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the Gateway API CRD-side body-shape. Canonical K8s Gateway APIGatewayper-listener-set container-axis key everygateway_routes-emittedGatewaydocument mounts its per-Gateway[{name, port, protocol, hostname}]L7-listener fan-out list under (spec.listeners[]). Pairs with the siblingGATEWAY_API_KEY_PARENT_REFS(f44e823) +GATEWAY_API_KEY_BACKEND_REFS(a6c5679) — the Gateway API v1 CRD schema pins the per-Gateway L7-listener fan-out through thespec.listeners[]container axis (each entry names one listener the Gateway accepts external traffic on; the siblingspec.parentRefs[]+spec.rules[].backendRefs[]container axes carry the per-HTTPRoute parent-Gateway attachment + per-rule backend-destination fan-out halves under the pairedHTTPRoutespecblock), so drift on the per-Gateway L7-listener-set axis is exactly as load-bearing as drift on the per-HTTPRoute parent-Gateway- binding + per-rule backend-destination axes it accompanies (the K8s apiserver-side Gateway API CRD schema validator drops anyspecblock whose L7-listener-set container axis carries an unrecognized key — a"listener"/"listen"/"servers"typo silently emits aGatewaywhose L7-listener fan-out the Gateway API implementation’s per-Gateway reconcile loop no-ops entirely: no listener is opened, and every external:entradaflow the Gateway was authored to accept drops at the gateway-class-controller’s per- Gateway HTTP-listener fan-in with no field naming the L7-listener- set-axis-drift root cause). - GATEWAY_
API_ KEY_ MATCHES - Canonical K8s Gateway API
HTTPRouteper-rule route-match container- axis key everygateway_routes-emittedHTTPRouteper-rule block mounts its per-rule[{path: {type, value}}]route-match fan-out list under (spec.rules[].matches[]). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_MATCHESso the Gateway-API- implementation-side per-rule route-match-container-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (therule.insert("matches", …)call the prior inline"matches"literal sat at, seeded from the Aplicacao’s:entrada :pathsslot) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-rule route-match axis (an upstream Gateway API v2 rename tomatch/routeMatches/predicates, coordinated with the upstream SIG- Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_MATCHESdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site + one test-side fixture pin (httproute_rule_keys_pin_overlay_position’scontains_key("matches")presence pin) would have let a Gateway- API-CRD per-rule route-match-axis rebrand or a per-emitter typo ("match"/"routeMatches"/"predicates") silently emit anHTTPRoutewhose per-rule request-selection axis the Gateway API CRD schema validator drops as unknown — the per-rule predicate degrades to the wildcard match at the gateway-class-controller’s per-rule reconcile, the rule matches every request unconditionally, and every external:entradapath filter the rule was authored to enforce drops with no field naming the route-match-drift root cause. A drift on the test-fixture side silently masks the emission-side pin (contains_key("matches")returnsfalseunder both the drifted-key emitter and the drifted-key probe). Peer to theGATEWAY_API_KEY_BACKEND_REFS/GATEWAY_API_KEY_PARENT_REFSre-exports on the sibling canonical-Gateway-API-HTTPRoute-body- axis surface — completes the per-rule top-level-axis re-export set (matches,backendRefs,timeouts,retry) thehttproute_rule_keys_pin_overlay_positionpin binds against, so every one of the four per-rule top-level axes now threads a lifted&'static strapiece. Canonical K8s Gateway APIHTTPRouteper-rule route-match container-axis key everygateway_routes-emittedHTTPRouteper-rule block mounts its per-rule[{path: {type, value}}]route-match fan-out list under (spec.rules[].matches[]). Pairs with the siblingGATEWAY_API_KEY_BACKEND_REFS(a6c5679) — the Gateway API v1 CRD schema pins per-rule request-selection through thespec.rules[].matches[]container axis (each entry names oneHTTPRouteMatchpredicate the request line + headers + query must satisfy for the rule’s backend fan-out to apply) alongside the per-rule route→Servico backend fan-out underspec.rules[].backendRefs[], so drift on the per-rule route-match axis is exactly as load-bearing as drift on the sibling per-rule backend-destination axis it accompanies (the K8s apiserver-side Gateway API CRD schema validator drops any per-rule block whose route-match container axis carries an unrecognized key — a"match"/"routeMatches"/"predicates"typo silently emits anHTTPRoutewhose per-rule request-selection axis the Gateway API implementation’s per-rule L7 dispatch loop no-ops entirely: no request predicate is evaluated, the rule matches every request unconditionally at the wildcard predicate, and every external:entradapath filter the rule was authored to enforce drops at the gateway-class-controller’s per-rule reconcile with no field naming the route-match-axis-drift root cause). - GATEWAY_
API_ KEY_ PARENT_ REFS - Canonical K8s Gateway API
HTTPRouteparent-Gateway-binding container- axis key everygateway_routes-emittedHTTPRoutedocument mounts its per-route parent-Gateway[{name}]attachment list under (spec.parentRefs[]). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_PARENT_REFSso the Gateway-API- implementation-side per-HTTPRoute parent-Gateway-binding-container- axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (ther_spec.insert("parentRefs", …)call the prior inline"parentRefs"literal sat at, caixa-mesh/src/lib.rs:1389) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the parent-Gateway-binding axis (an upstream Gateway API v2 rename toparents/parentGateways/attachedTo, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_PARENT_REFSdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site would have let a Gateway-API-CRD parent-Gateway-binding-axis rebrand or a per- emitter typo ("parentRef"/"parents"/"parentGateways") silently emit anHTTPRoutewhose parent-Gateway-binding axis the Gateway API CRD schema validator drops as unknown — the route lands unattached to any Gateway, and every external:entradaflow the HTTPRoute was authored to accept drops at the Gateway API implementation’s per-Gateway HTTP-listener fan-in with no field naming the parent-Gateway-binding-drift root cause. Peer to theGATEWAY_API_KIND_HTTP_ROUTE+GATEWAY_API_KIND_GATEWAYre-exports on the sibling canonical-Gateway-API-CRD-kind- discriminator surface — pivots this crate’s per-CNP-body-axis re-export discipline onto the sibling per-HTTPRoute-body-axis surface, beginning the per-Gateway-API-HTTPRoute-body-axis canonical-string re-export set (parentRefs, futurehostnames) this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the Gateway API HTTPRoute-side per-route body-shape. Canonical K8s Gateway APIHTTPRouteparent-Gateway-binding container- axis key everygateway_routes-emittedHTTPRoutedocument mounts its per-route parent-Gateway[{name}]list under (spec.parentRefs[]). Pairs with the siblingGATEWAY_API_KIND_HTTP_ROUTE(1adccc0) +GATEWAY_API_KIND_GATEWAY(fb4639c) — the Gateway API v1 CRD schema pins the per-HTTPRoute parent-Gateway identity through thespec.parentRefs[]container axis (each entry names the parent Gateway the route attaches to; the siblinghostnames+rulescontainer axes carry the per-route host-match + per-rule L7-dispatch halves under the samespecblock), so drift on the parent-Gateway- binding axis is exactly as load-bearing as drift on the per-HTTPRoutekinddiscriminator axis it accompanies (the K8s apiserver-side Gateway API CRD schema validator drops anyspecblock whose parent- binding container axis carries an unrecognized key — a"parentRef"/"parents"/"parentGateways"typo silently emits anHTTPRoutewhose parent-Gateway attachment the Gateway API implementation’s per-HTTPRoute reconcile loop no-ops entirely: the route lands unattached to any Gateway, and every external:entradaflow theHTTPRoutewas authored to accept drops at the Gateway API implementation’s per-Gateway HTTP-listener fan-in with no field naming the parent-Gateway-binding-axis-drift root cause). - GATEWAY_
API_ KEY_ PATH - Canonical K8s Gateway API
HTTPRouteper-HTTPRouteMatchpath-matcher container-axis key everygateway_routes-emittedHTTPRouteper-rulematches[]entry mounts its per-match{type, value}path-selection predicate under (spec.rules[].matches[].path). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_PATHso the Gateway-API- implementation-side per-HTTPRouteMatchpath-matcher-container-axis- key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the per-matchmatch_entry.insert("path", …)call the prior inline"path"literal sat at, seeded from the Aplicacao’s:entrada :pathsslot) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-HTTPRouteMatchpath- matcher axis (an upstream Gateway API v2 rename topathMatch/prefix/url, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_PATHdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer + every future per-target renderer the substrate adds. The prior inline literal at the one production emitter site would have let a Gateway-API-CRD per-HTTPRouteMatchpath-matcher-axis rebrand or a per-emitter typo ("pathMatch"/"prefix"/"url") silently emit anHTTPRoutewhose per-match path-selection axis the Gateway API CRD schema validator drops as unknown — the per-match path predicate degrades to the wildcard match at the gateway-class-controller’s per-rule reconcile, the rule matches every request path unconditionally, and every external:entradapath filter the rule was authored to enforce drops with no field naming the path-matcher-drift root cause. Peer to theGATEWAY_API_KEY_MATCHES/GATEWAY_API_KEY_BACKEND_REFS/GATEWAY_API_KEY_PARENT_REFSre-exports on the sibling canonical-Gateway-API-HTTPRoute-body- axis surface — nests the per-Gateway-API-HTTPRoute-per-rule-body- axis canonical-string re-export set (matches,backendRefs,timeouts,retry) one level deeper onto the per-HTTPRouteMatchbody-axis surface this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the Gateway API HTTPRoute-side per-match body-shape. Canonical K8s Gateway APIHTTPRouteper-HTTPRouteMatchpath-matcher container-axis key everygateway_routes-emittedHTTPRouteper-rulematches[]entry mounts its per-match{type, value}path-selection predicate under (spec.rules[].matches[].path). Nests one level beneath the siblingGATEWAY_API_KEY_MATCHES(b9ede1a) per-rule route-match container-axis it hangs off of — the Gateway API v1 CRD schema pins per-HTTPRouteMatchrequest-path selection through thespec.rules[].matches[].pathcontainer axis (each match entry names one path-selection predicate the request line’s:pathpseudo-header must satisfy under atypediscriminator ofExact | PathPrefix | RegularExpression) alongside the sibling per-HTTPRouteMatchheaders[]/queryParams[]/methodaxes it nests under, so drift on the per-match path-matcher container axis is exactly as load-bearing as drift on the per-rule route-match axis it nests inside of (the K8s apiserver-side Gateway API CRD schema validator drops any per-match block whose path-matcher container axis carries an unrecognized key — a"pathMatch"/"prefix"/"url"typo silently emits anHTTPRoutewhose per- match path-selection axis the Gateway API implementation’s per-rule L7 dispatch loop no-ops entirely: no path predicate is evaluated, the match degrades to the wildcard predicate at the gateway-class- controller’s per-rule reconcile, the rule matches every request path unconditionally, and every external:entradapath filter the rule was authored to enforce drops with no field naming the path- matcher-axis-drift root cause). - GATEWAY_
API_ KEY_ REQUEST - Canonical K8s Gateway API
HTTPRouteper-rule request-timeout-policyrequestleaf scalar-key. Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_REQUESTso the per-rule request- deadline leaf key lives in exactly one place across every caixa renderer — this crate’s one production emitter site (gateway_routes’s per-HTTPRouteper-rulesingle_field_overlay(spec.politicas.timeout, …)call that seeds the typedDurationrequest-deadline string into the siblingGATEWAY_API_KEY_TIMEOUTScontainer axis underspec.rules[].timeouts.request, the leaf the Gateway API v1 CRD schema pins asHTTPRouteTimeouts.requestand whose scalar value the Gateway-API-implementation-side per-rule request-dispatch loop commits to as the per-request wall-clock deadline every inbound request is bounded against before the resolved backend even sees the call) and this crate’s five test-side per-rule request- deadline traversal sites (thehttproute_carries_politicas_timeout_on_every_ruletyped-&str- value pin, thehttproute_timeout_renders_every_rule_independentlyper-rule fan-out request-deadline pin under multi-:entrada :paths, thehttproute_timeout_uses_canonical_kube_duration_formattyped-Duration-round-trip pin, thehttproute_timeout_renders_minute_window_canonicallycanonical- minute-form pin, and the timeout-only arm ofhttproute_timeouts_and_retry_coexist_independentlypinning the leaf request-deadline survives when only the sibling:timeoutslot is set) now consult the same&'static stras the peer caixa-core-side const definition. - GATEWAY_
API_ KEY_ RETRY - Canonical K8s Gateway API
HTTPRouteper-rule retry-policy body-axis key. Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_RETRYso the per-rule retry-policy field name lives in exactly one place across every caixa renderer — this crate’s one production emitter site (gateway_routes’s per-HTTPRouteper-rulespec.rules[].retryinsert the Aplicacao’s typed:politicas :retriesoverlay lands under, the sub-shape the Gateway API v1 CRD schema pins asHTTPRouteRetryand whoseattemptsscalar the Gateway-API-implementation-side per-rule request-dispatch loop compares each failed attempt count against before giving up on the in-flight backend call) and this crate’s eight test-side per-rule retry-policy traversal sites (thehttproute_rule_keys_pin_overlay_positionrule-level top-key-set pin, thehttproute_carries_politicas_retries_on_every_rulepresence pin, thehttproute_omits_retry_when_politicas_retries_unsetabsence pin, thehttproute_retry_renders_every_rule_independentlyper-rule fan-out pin under multi-:entrada :paths, thehttproute_retry_round_trips_typed_attempt_counttyped-u32-round- trip pin, thehttproute_retry_attempts_serialized_as_yaml_numberYAML integer-scalar-kind pin, and twohttproute_timeouts_and_retry_coexist_independentlypresence-only + absence-only pins pinning independent-axis coexistence with the siblingtimeoutsper-rule request-timeout-policy axis) now consult the same&'static stras the peer caixa-core-side const definition. - GATEWAY_
API_ KEY_ SECTION_ NAME - Canonical K8s Gateway API
HTTPRouteper-spec.parentRefs[]entry listener-selector sub-axis key everygateway_routes-emittedHTTPRoutedocument mounts under each parent-Gateway attachment (spec.parentRefs[].sectionName). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_SECTION_NAMEso the Gateway-API- implementation-side per-parentRef listener-selector-sub-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the per-parentRefparent_ref.insert(<KEY>, …)call whose pairedGATEWAY_API_DEFAULT_HTTP_LISTENER_NAME&'static strvalue binds the emitted route to the same listener the parent Gateway’s solelistener.insert(GATEWAY_API_KEY_NAME, …)call names) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-parentRef listener-selector sub-axis (an upstream Gateway API v2 rename tolistenerName/listener/attachTo, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_SECTION_NAMEdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer - GATEWAY_
API_ KEY_ TIMEOUTS - Canonical K8s Gateway API
HTTPRouteper-rule request-timeout-policy body-axis key. Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_TIMEOUTSso the per-rule request- timeout-policy field name lives in exactly one place across every caixa renderer — this crate’s one production emitter site (gateway_routes’s per-HTTPRouteper-rulespec.rules[].timeoutsinsert the Aplicacao’s typed:politicas :timeoutoverlay lands under, the sub-shape the Gateway API v1 CRD schema pins asHTTPRouteTimeoutsand whoserequestscalar the Gateway-API-implementation-side per-rule request-dispatch loop compares each accepted request’s wall-clock elapsed time against before cancelling the in-flight backend call) and this crate’s eight test-side per-rule timeout-policy traversal sites (thehttproute_carries_politicas_timeout_on_every_rule/httproute_omits_timeouts_when_politicas_timeout_unset/httproute_timeout_renders_every_rule_independently/httproute_timeout_uses_canonical_kube_duration_format/httproute_timeout_renders_minute_window_canonically/httproute_rule_keys_pin_overlay_position/httproute_timeouts_and_retry_coexist_independentlypins asserting the overlay’s presence, absence, canonical-duration- format contract, per-rule fan-out under multi-:entrada :paths, and independent-axis coexistence with the siblingretryper- rule retry-policy axis) now consult the same&'static stras the peer caixa-core-side const definition. - GATEWAY_
API_ KEY_ VALUE - Canonical K8s Gateway API v1
HTTPPathMatchscalar-payload axis key everygateway_routes-emittedHTTPRouteper-matchpathblock mounts its per-match request-path-selection scalar payload under (spec.rules[].matches[].path.value). Re-export of the canonicalcaixa_core::GATEWAY_API_KEY_VALUEso the Gateway-API- implementation-side per-HTTPPathMatchscalar-payload-axis-key string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the per-matchpath_match.insert("value", …)call the prior inline"value"literal sat at, seeded from the Aplicacao’s:entrada :pathsslot) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway API rebrand on the per-HTTPPathMatchscalar-payload axis (an upstream Gateway API v2 rename topath/pattern/expression, coordinated with the upstream SIG-Network Gateway API deprecation cycle) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KEY_VALUEdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer - GATEWAY_
API_ KIND_ GATEWAY - Canonical K8s Gateway API CRD
kinddiscriminator everygateway_routes-emittedGatewaydocument declares at its top-levelcaixa_core::KUBE_KEY_KINDaxis. Re-export of the canonicalcaixa_core::GATEWAY_API_KIND_GATEWAYso the Gateway-API-conformant CRDkinddiscriminator string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoGatewayemitter (the single production-code site the prior inline"Gateway"literal sat at, caixa-mesh/src/lib.rs:578 — thekube_resource_skeletonkind argument) and every future per- Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway-API rebrand (e.g. an upstream rename toGatewayV1post-GA) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KIND_GATEWAYdeclaration, not a coordinated rewrite across this crate’skube_resource_skeletoncall site + every future per-target renderer the substrate adds. The prior inline literal would have let a Gateway-API kind rebrand on the caixa-mesh side without a coordinated edit on the matching in-filegateway_carries_canonical_kube_skeleton_without_labels/render_all_includes_every_artifact_kindtest fixture pins silently emit aGatewaywhose top-level kind drifts off the lifted-test- fixture pins — apply-side: the Gateway lands outside the apiserver- side CRD registration, every external:entradaflow drops at the gateway-class-controller’s reconcile loop with no field naming the kind-drift root cause. Peer to theGATEWAY_API_API_VERSIONre-export on the sibling canonical-Gateway-API-CRD-apiVersion-axis — extends the discipline from the apiVersion half of the(apiVersion, kind)CRD-lookup tuple onto the kind half on the same Gateway-API-CRD-axis, beginning the per-Gateway-API-CRD kind+apiVersion re-export pair this crate’sgateway_routesrenderer’s external:entradaingress contract rests on. Peer to theCILIUM_KIND_NETWORK_POLICYre-export on the sibling canonical-Cilium-CRD-kind-discriminator surface. Canonical K8s Gateway API CRDkinddiscriminator the renderedGatewaydocument declares at its top-levelKUBE_KEY_KINDaxis. Pairs with the siblingGATEWAY_API_API_VERSION(3c6cfc3) — the K8s apiserver-side CRD resolution contract is the(apiVersion, kind)tuple keyed against the registeredCustomResourceDefinition, so drift on the kind axis is exactly as load-bearing as drift on the apiVersion axis it accompanies (the apiserver’sRESTMapperconsults both together; a("gateway.networking.k8s.io/v1", "Gatway")typo at the production- code call site lands outside the registered Gateway-API-conformantGatewayCRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘Gatway’ is registered for version ‘gateway.networking.k8s.io/v1’” error far from the source caixa.lisp / the renderer’skube_resource_skeletoncall site). - GATEWAY_
API_ KIND_ HTTP_ ROUTE - Canonical K8s Gateway API CRD
kinddiscriminator everygateway_routes-emittedHTTPRoutedocument declares at its top-levelcaixa_core::KUBE_KEY_KINDaxis. Re-export of the canonicalcaixa_core::GATEWAY_API_KIND_HTTP_ROUTEso the Gateway-API-conformant CRDkinddiscriminator string lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the single production-code site the prior inline"HTTPRoute"literal sat at, caixa-mesh/src/lib.rs:663 — thekube_resource_skeletonkind argument) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway-API rebrand (e.g. an upstream rename toHTTPRouteV1post-GA) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_KIND_HTTP_ROUTEdeclaration, not a coordinated rewrite across this crate’skube_resource_skeletoncall site + every future per-target renderer the substrate adds. The prior inline literal would have let a Gateway-API kind rebrand on the caixa-mesh side without a coordinated edit on the matching in-filehttproute_carries_canonical_kube_skeleton_without_labels/render_all_includes_every_artifact_kindtest fixture pins silently emit anHTTPRoutewhose top-level kind drifts off the lifted-test-fixture pins — apply-side: the HTTPRoute lands outside the apiserver-side CRD registration, every external:entradaflow drops at the gateway-class-controller’s reconcile loop with no field naming the kind-drift root cause. Peer to theGATEWAY_API_KIND_GATEWAYre-export on the sibling canonical- Gateway-API-CRD-kind-discriminator surface — completes the per-Gateway-API-CRDkind-axis re-export pair this crate’sgateway_routesrenderer’s external:entradaingress contract rests on across the(Gateway, HTTPRoute)pair the renderer emits together. Canonical K8s Gateway API CRDkinddiscriminator the renderedHTTPRoutedocument declares at its top-levelKUBE_KEY_KINDaxis. Pairs with the siblingGATEWAY_API_API_VERSION(3c6cfc3) and the peerGATEWAY_API_KIND_GATEWAY(fb4639c) — the K8s apiserver-side CRD resolution contract is the(apiVersion, kind)tuple keyed against the registeredCustomResourceDefinition, so drift on the kind axis is exactly as load-bearing as drift on the apiVersion axis it accompanies (the apiserver’sRESTMapperconsults both together; a("gateway.networking.k8s.io/v1", "HTTPRout")typo at the production-code call site lands outside the registered Gateway-API- conformantHTTPRouteCRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘HTTPRout’ is registered for version ‘gateway.networking.k8s.io/v1’” error far from the source caixa.lisp / the renderer’skube_resource_skeletoncall site). - GATEWAY_
API_ PATH_ MATCH_ TYPE_ PATH_ PREFIX - Canonical K8s Gateway API v1
PathMatchTypeOpenAPI schema enum’sPathPrefixper-HTTPRouteMatchpath-selection-predicate discriminator value everygateway_routes-emittedHTTPRouteper-rulematches[]entry declares under its per-matchspec.rules[].matches[].path.typescalar axis. Re-export of the canonicalcaixa_core::GATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXso the Gateway- API-implementation-side per-HTTPRouteMatchrequest-path-selection- predicate discriminator scalar value lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-AplicacaoHTTPRouteemitter (the single production-code site the prior inline"PathPrefix".into()literal sat at, caixa-mesh/src/lib.rs — the per-matchpath_match.insert("type", "PathPrefix")scalar-value emit) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway APIPathMatchTypeenum rebrand (e.g. an upstream rename toPrefix/PathPrefixMatchper the SIG-Network per-version-scope proposal) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer’s per-matchpath_match.insertscalar-value emit + every future per-Gateway-API-side renderer the substrate adds. The prior inline literal at the one production emitter site would have let a Gateway-APIPathMatchTyperebrand on the caixa-mesh side without a coordinated caixa-core edit silently emit anHTTPRoutewhose per- match path-selection-predicate scalar drifts off the canonicalcaixa_core::GATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXvalue — apply-side: the K8s apiserver-side Gateway API v1PathMatchTypeOpenAPI schema enum admits the closed set{"Exact", "PathPrefix", "RegularExpression"}verbatim, so any drifted value lands the emittedHTTPRouteoutside the enum’s admitted set and every external:entradapath-filtered flow drops at the gateway-class-controller’s admission gate with no field naming the path-match-type-drift root cause. Peer to theGATEWAY_API_PROTOCOL_HTTPre-export on the sibling per-Gateway- listener L7-parser-selection scalar-value axis — extends the canonical-Gateway-API-v1-OpenAPI-schema-enum-value single-sourcing re-export discipline theProtocolType.HTTPre-export established onto the siblingPathMatchType.PathPrefixper-HTTPRouteMatchpath-selection-predicate discriminator the samegateway_routesexternal:entradaingress emitter carries under the sharedHTTPRoutebody. Canonical K8s Gateway API v1PathMatchTypeOpenAPI schema enum’sPathPrefixper-HTTPRouteMatchpath-selection-predicate discriminator value everygateway_routes-emittedHTTPRouteper-rulematches[]entry declares under its per-matchspec.rules[].matches[].path.typescalar axis. Pairs with the siblingGATEWAY_API_KEY_PATH(9f45aa4) per-HTTPRouteMatchpath-matcher container-axis key it nests one level beneath — the Gateway API v1 CRD schema pins per-HTTPRouteMatchrequest-path selection through thespec.rules[].matches[].pathcontainer axis (each match entry names one path-selection predicate the request line’s:pathpseudo-header must satisfy under atypediscriminator scalar value; the Gateway API v1PathMatchTypeOpenAPI schema enum admits the closed set{"Exact", "PathPrefix", "RegularExpression"}verbatim), so drift on the path-match-type value is exactly as load-bearing as drift on the siblingGATEWAY_API_PROTOCOL_HTTP(1b57473) per-listener L7-parser-selection scalar value the peerspec.listeners[].protocolaxis carries (a"pathPrefix"/"path_prefix"/"Prefix"/"path-prefix"typo at the production-code call site lands outside the Gateway API v1PathMatchTypeOpenAPI schema enum’s admitted set, surfacing apply-side as a non-self-locating “spec.rules[0].matches[0].path.type: Unsupported value: "pathPrefix": supported values: "Exact", "PathPrefix", "RegularExpression"” apiserver admission-rejection far from the sourcecaixa.lisp/ the renderer’spath_match.insert(…)call site — the rendered per-AplicacaoHTTPRouteobject never reconciles at the gateway-class-controller’s per-rule L7 dispatch loop and every external:entradapath-filtered flow drops at the gateway-class-controller’s admission gate with no field naming the path-match-type-drift root cause). - GATEWAY_
API_ PROTOCOL_ HTTP - Canonical K8s Gateway API v1
ProtocolTypeOpenAPI schema enum’sHTTPlistener-protocol scalar value everygateway_routes-emittedGatewaydocument’s first (and V0-only) listener declares under itscaixa_core::KUBE_KEY_PROTOCOLaxis. Re-export of the canonicalcaixa_core::GATEWAY_API_PROTOCOL_HTTPso the Gateway-API- implementation-side per-listener L7-parser-selection scalar value lives in exactly one place across every caixa renderer — caixa-mesh’sgateway_routesper-:entradaGatewayemitter (the single production-code site the prior inline"HTTP".into()literal sat at, caixa-mesh/src/lib.rs:2123 — the per-listenerKUBE_KEY_PROTOCOLscalar-value emit) and every future per-Gateway-API-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future Gateway APIProtocolTypeenum rebrand (e.g. an upstream rename toHTTP/1.1/HTTP/2per the SIG-Network per-version-scope proposal) is a one-line edit on the canonicalcaixa_core::GATEWAY_API_PROTOCOL_HTTPdeclaration, not a coordinated rewrite across this crate’sgateway_routesrenderer’s per-listenerKUBE_KEY_PROTOCOL-scalar-value emit + the matching in-filegateway_listener_carries_aplicacao_hosttest’sassert_eq!(…, Some("HTTP"))listener-protocol-value pin + every future per-Gateway-API-side renderer the substrate adds. The prior inline literal would have let a Gateway-APIProtocolTyperebrand on the caixa-mesh side without a coordinated edit on the matching in-file test pin silently emit aGatewaywhose listener-protocol scalar drifts off the lifted-test-fixture pin — apply-side: the gateway-class-controller’s per-listener bind loop rejects theGatewayat admission (the K8s Gateway API v1ProtocolTypeOpenAPI schema enum admits the closed set{"HTTP", "HTTPS", "TCP", "TLS", "UDP"}verbatim), and every external:entradaHTTP flow drops at the gateway-class-controller’s admission gate with no field naming the listener-protocol-drift root cause. Peer to theGATEWAY_API_KIND_GATEWAY+GATEWAY_API_KIND_HTTP_ROUTEre-exports on the sibling canonical-Gateway-API-CRD-kind- discriminator surface + theDEFAULT_GATEWAY_CLASS_NAMEre-export on the sibling Gateway-controller-binding-scalar-value axis — extends the Gateway-API-CRD-kind-value + Gateway-controller- binding-value re-export set onto the sibling per-Gatewayspec.listeners[].protocollistener-protocol-scalar-value axis the samegateway_routesrenderer’s external:entradaingress contract carries under the sharedGatewaybody. Canonical K8s Gateway APIGateway.spec.listeners[].protocolHTTP listener-protocol scalar value the renderedGatewaydocument’s first (and V0-only) listener declares under itsKUBE_KEY_PROTOCOLaxis. Pairs with the siblingGATEWAY_API_KIND_GATEWAY(fb4639c) +GATEWAY_API_KIND_HTTP_ROUTE(1adccc0) — the K8s Gateway API v1 CRD schema pins the per-listener L7 parser + TLS-termination strategy through thespec.listeners[].protocolscalar value (the gateway-class-controller’s per-listener bind loop selects the L7 parser + TLS termination strategy from this exact byte-sequence; the Gateway API v1ProtocolTypeOpenAPI schema enum admits the closed set{"HTTP", "HTTPS", "TCP", "TLS", "UDP"}verbatim), so drift on the listener-protocol value is exactly as load-bearing as drift on the siblingGATEWAY_API_KIND_GATEWAY+GATEWAY_API_KIND_HTTP_ROUTECRDkinddiscriminators the pair declares together (a("Gateway", "http")/("Gateway", "Http")/("Gateway", "http/1.1")typo at the production-code call site lands outside the Gateway API v1ProtocolTypeOpenAPI schema enum, surfacing apply-side as a non-self-locating “spec.listeners[0].protocol: Unsupported value: "http": supported values: "HTTP", "HTTPS", "TCP", "TLS", "UDP"” apiserver admission-rejection far from the sourcecaixa.lisp/ the renderer’slistener.insert(…)call site — the rendered per-AplicacaoGatewayobject never reconciles at the gateway-class-controller’s per-listener bind loop and every external:entradaHTTP flow drops at the gateway-class- controller’s admission gate with no field naming the listener-protocol-drift root cause). - KUBE_
KEY_ API_ VERSION - Canonical K8s CR top-level
apiVersionkey. Re-export of the canonicalcaixa_core::KUBE_KEY_API_VERSIONso the per-CR- apiVersion-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policies+gateway_routestest-side(:kind, :apiVersion)CRD-lookup-tuple pins (everyp.get("apiVersion")/gateway.get("apiVersion")/route.get("apiVersion")retrieval that traverses the multi-doc sequence thegateway_routes/cilium_network_policiesemitters return to assert the top-levelapiVersionaxis on each per-CNP / per-Gateway/ per-HTTPRoutedocument binds to the liftedCILIUM_API_VERSION/GATEWAY_API_API_VERSIONCRD-group/ version) now consult the same&'static stras the peer caixa-core-sidekube_resource_skeletonproduction emitter (which already insertsKUBE_KEY_API_VERSIONunder caixa-core/src/render.rs:7177 on theKUBE_KEY_API_VERSION+KUBE_KEY_KINDaxis pair every rendered CR carries). The prior inline"apiVersion"literals at every drift-detection / CRD- group-version pin test-side site in this crate would have let a typo on any one site (e.g."ApiVersion","api-version","apiVerison") silently miss the per-CR apiVersion retrieval — the equality assertion would then compareNoneagainstSome("cilium.io/v2")/Some("gateway.networking.k8s.io/v1")rather than the expected CRD-group/version string, masking the true siblingCILIUM_API_VERSION/GATEWAY_API_API_VERSIONaxis drift. 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. Same shape as theKUBE_KEY_SPEC+KUBE_KEY_METADATA - KUBE_
KEY_ KIND - Canonical K8s CR top-level
kinddiscriminator key. Re-export of the canonicalcaixa_core::KUBE_KEY_KINDso the per-CR-kind-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policies+gateway_routes+render_alltest-side(:kind, :apiVersion)CRD-lookup-tuple traversal predicates (everydocs.iter().find(|d| d.get("kind")…)+for p in &policies { p.get("kind")… }filter that separates the renderedGateway/HTTPRoute/CiliumNetworkPolicydocuments inside the multi-doc sequence thegateway_routes/render_allemitters return) now consult the same&'static stras the peer caixa-core-sidekube_resource_skeletonproduction emitter (which already insertsKUBE_KEY_KINDunder caixa-core/src/render.rs:7181 on thecaixa_core::KUBE_KEY_API_VERSION+KUBE_KEY_KINDaxis pair every rendered CR carries). The prior inline"kind"literals at every drift-detection / policy-traversal / render- determinism test-side 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("CiliumNetworkPolicy")/Some("Gateway")/Some("HTTPRoute")rather than the expected kind discriminator, and thedocs.iter().find(|d| d.get(…) == Some(…))predicate would silently miss the per-kind document inside the multi-doc sequence (the.expect("Gateway present")unwrap that names the offending axis would fire instead of the intended assertion, masking the true drift). 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(apiVersion, kind, metadata, spec)axis re-export set on thekindhalf, which every downstreamdocs.iter().find(|d| d.get(KUBE_KEY_KIND)…)predicate the multi-docrender_allsequence-consumer needs to distinguish the emittedCilium/Gateway/HTTPRoutedocuments by rests on. Canonical K8s API key naming the resource’s kind discriminator (e.g.CiliumNetworkPolicy,Gateway,HTTPRoute,ComputeUnit). - KUBE_
KEY_ LABELS - Canonical K8s CR
metadata.labelsnested-axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_LABELSso the per-CR labels-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_policy_metadata_labels_use_lifted_conststest-side retrieval of the per-CNPmetadata.labelsmapping (the LABEL_APLICACAO + LABEL_CONTRATO drift-detection pin’s entry point), caixa-mesh’scilium_policy_carries_canonical_kube_skeleton+gateway_carries_canonical_kube_skeleton_without_labels+httproute_carries_canonical_kube_skeleton_without_labelsper-CR metadata-block.get("labels")probes (the presence-of-labels / empty-labels-skip semantic pins onCiliumNetworkPolicy/Gateway/HTTPRoute), and thecilium_policy_metadata_block_iterates_alphabeticallyrender- determinism-contract fixture (the alphabetical-iterationvec!["labels", "name", KUBE_KEY_NAMESPACE]fixture whose first entry the alphabetical- key-orderingmetadata:block emission pins). The prior five inline"labels"literals at every drift-detection / render-determinism test-side site in this crate would have let a typo on any one site (e.g."Labels","lables", the canonical transposition"lablels") silently miss the per-CR metadata.labels retrieval — the.get("labels")chain would then returnNoneand the trailing.expect("policy metadata.labels mapping")would panic with the mapping-shape message, masking the true label-key drift, or the presence-of-labels / empty-labels-skip semantic pins would compareSome(...)/Noneunder the wrong retrieval so the empty-labels-skip contract’s true drift never surfaces, or the alphabetical-iteration render-determinism fixture would fire on the drifted-fixture rather than the true render-determinism property. The lift routes every K8s- CR-metadata-labels-axis retrieval + fixture through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition. Extends the per-K8s-CR top-level(apiVersion, kind, metadata, spec)axis re-export quartet + the load-bearing nestedmetadata.namespaceaxis onto the load-bearing nestedmetadata.labelsaxis — the axis every renderedCiliumNetworkPolicydocument carries at thepleme.pleme.io/ aplicacao+pleme.pleme.io/contratogrouping key (the Hubble flow- grouping / operator-policy-filter selection axis every consumer of the rendered mesh bundle keys off) so exactly one canonical byte- sequence must reach every rendered artifact. Canonical K8s API key naming the resource’s labels (under metadata). - KUBE_
KEY_ MATCH_ LABELS - Canonical K8s
LabelSelector.matchLabelsnested-axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_MATCH_LABELSso the per-CR selector-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_policies_are_identity_based(theendpointSelector.matchLabelspresence pin + theingress[0].fromEndpoints[0].matchLabelstwo-axis-selector pin that check thepleme.pleme.io/program+pleme.pleme.io/aplicacaoidentity keys the Cilium data plane matches on), thecilium_endpoint_selector_is_program_onlydestination-selector-axis pin (single-axisLABEL_PROGRAM-only selector — the destination-endpointSelector.matchLabelsretrieval whoseselector.len() == 1assertion pins the program-only semantic the canonicalpleme_program_selectorhelper emits), and thecilium_from_endpoints_carries_aplicacao_scoped_selectorsource- selector-axis pin (two-axisLABEL_PROGRAM+LABEL_APLICACAOselector — the source-fromEndpoints[0].matchLabelsretrieval whosefrom.len() == 2assertion pins the program-in-Aplicacao-scoped semantic the canonicalpleme_program_in_aplicacao_selectorhelper emits, guarding the safety property that a same-named program in a different Aplicacao cannot satisfy the policy’s ingress rule) now consult the same&'static stras the peer caixa-core-sidelabel_selectorproduction emitter (which already insertsKUBE_KEY_MATCH_LABELSunder caixa-core/src/render.rs:7112 on every{matchLabels: <mapping>}envelope the typed selector helpers emit). The prior four inline"matchLabels"literals at every drift-detection / selector-axis test-side site in this crate would have let a typo on any one site (e.g."MatchLabels","match_labels","match-labels", the canonical camelCase-drift"matchlabels"— the K8s apiserver’s OpenAPI v3 schema property name is strict camelCasematchLabels) silently miss the per-CR selector-mapping retrieval — the.get("matchLabels")chain would then returnNoneunder the presence pin so the true selector-axis drift never surfaces, or the surrounding.expect("endpointSelector.matchLabels mapping")/.expect("fromEndpoints[0].matchLabels mapping")panic-message tag would fire with the mapping-shape message rather than the true selector-key drift, or theselector.len() == 1/from.len() == 2axis-count assertion would compare against the wrong retrieval so the destination-program-only / source-program- in-Aplicacao selector-shape contract’s true drift is masked. The lift routes every K8s-LabelSelector.matchLabels-axis retrieval through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition. Extends the per-K8s-CR top-level(apiVersion, kind, metadata, spec)axis re-export quartet + the load-bearing nestedmetadata.{name, namespace, labels}triplet onto the load-bearing nestedLabelSelector.matchLabelsaxis — the equality-projection axis every renderedCiliumNetworkPolicydocument carries at bothspec.endpointSelector.matchLabels(the destination-identity selector the Cilium data plane matches pod-identity keys against) andspec.ingress[*].fromEndpoints[*].matchLabels(the source- identity selector the same data plane checks on the admitted- source side). Peer to the sibling load-bearing nestedLabelSelector.matchLabelsaxis re-exports every downstream consumer of the rendered mesh bundle keys off (the Cilium operator’s per-CNPendpointSelectorand per-ingress-rulefromEndpointsnavigate the same K8s-LabelSelector-schema projection). Canonical K8s API key naming thematchLabelsaxis of aLabelSelector— the equality-based projection of the selector schema (the other axis,matchExpressions, is set-based and intentionally out-of-scope for the V0label_selectorhelper). Spelled exactly as the K8s apiserver expects (camelCasematchLabels, notmatch_labels/MatchLabels/match-labels) so the rendered YAML round-trips through every K8s schema parser (Cilium CRDs, Gateway API,ComputeUnit, futuremesh.pleme.io/v1alpha1/Aplicacao) without per-renderer string drift. - 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-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (themetadata.{name, namespace, labels}block every policy carries) andgateway_routesGateway+HTTPRouteemitter (themetadata.{name, namespace}block each doc carries) now consult the same&'static stras the peer caixa-flux renderer’sKUBE_KEY_METADATAre-export. The prior inline"metadata"literals at every drift-detection / policy-traversal test-side site in this crate would have let a typo on any one site (e.g."Metadata","meta-data","medadata") silently miss the per-CNP / per-Gateway / per-HTTPRoute metadata retrieval — the equality assertion would then compareNoneagainstSome("checkout")rather than the expected label value; 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.namenested-axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_NAMEso the per-CR name-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_policy_carries_canonical_kube_skeleton+gateway_carries_canonical_kube_skeleton_without_labels+httproute_carries_canonical_kube_skeleton_without_labelsper-CR metadata-block.get("name")retrievals (the presence + equality pins onCiliumNetworkPolicy/Gateway/HTTPRoute), the six per-CNPmetadata.name-axis lookup navigations across thecilium_policy_metadata_names_span_all_edges/cilium_fans_same_de_para_edges_into_one_policy/cilium_http_contracts_emit_l7_rules/cilium_pubsub_contracts_skip_l7_rules/cnp_l4_fallback_port_routes_through_lifted_default_servico_port/cilium_mtls_required_contract_emits_authentication_requiredtest-sidepolicies.iter().find(|p| p.get(KUBE_KEY_METADATA) .and_then(|m| m.get(KUBE_KEY_NAME)))filters (the per-CNP<aplicacao>-<de>-to-<para>metadata.name binding that names everyCiliumNetworkPolicydocument the per-(:de, :para)fan-out emits), and thecilium_policy_metadata_block_iterates_alphabeticallyrender-determinism-contract fixture (the alphabetical-iterationvec![KUBE_KEY_LABELS, "name", KUBE_KEY_NAMESPACE]fixture whose middle entry the alphabetical-key-orderingmetadata:block emission pins). The prior ten inline"name"literals at every drift-detection / per-CNP-lookup / render-determinism test-side site in this crate would have let a typo on any one site (e.g."Name","nmae", the canonical transposition"naem") silently miss the per-CR metadata.name retrieval — the.get("name")chain would then returnNoneunder the presence pin so the true metadata-name-axis drift never surfaces, or compareSome(<other>)against the expected caixa name/route name under the equality pins so the caixa-nome → metadata-name binding’s true drift is masked, or slip past the per-CNP metadata.name filter under the six per-(:de, :para)lookup navigations so the true policy-identity → edge-shape binding under fan-in / L7-emission / L4-fallback / mTLS-authentication drift never surfaces (each.find(|p| p.get(KUBE_KEY_METADATA) .and_then(|m| m.get("name")))chain would silently return.unwrap()-panickingNoneon the first per-CNP lookup or match the wrong policy under the equality-comparison filter, masking the true fan-in / L7-rule / L4-port / mTLS-authentication mode property), or trip the alphabetical-iteration determinism fixture against the drifted-fixture rather than the true render-determinism property. The lift routes every K8s-CR-metadata-name-axis retrieval - KUBE_
KEY_ NAMESPACE - Canonical K8s CR
metadata.namespacenested-axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_NAMESPACEso the per-CR namespace-axis retrieval key lives in exactly one place across every caixa renderer — caixa-mesh’scilium_policy_carries_canonical_kube_skeleton/gateway_carries_canonical_kube_skeleton_without_labels/cilium_policy_metadata_block_iterates_alphabeticallytest-sidemetadata.namespaceretrievals + alphabetical-iteration determinism pin (the three inline"namespace"sites this crate’s rendered multi-doc mesh bundle’s per-CRmetadata.{name, namespace, labels}/metadata.{name, namespace}block traversal navigates) now consult the same&'static stras the peer caixa-core-sidekube_resource_skeletonproduction emitter (which already insertsKUBE_KEY_NAMESPACEunder caixa-core/src/render.rs:9019 on the per-CR metadata block every rendered mesh bundle document carries). The prior inline"namespace"literals at every drift-detection / render-determinism test-side site in this crate would have let a typo on any one site (e.g."Namespace","name space", the canonical transposition"namesapce") silently miss the per-CR metadata.namespace retrieval — the equality assertion would then compareNoneagainstSome(DEFAULT_NAMESPACE)rather than the expected namespace value, masking the true siblingDEFAULT_NAMESPACEaxis drift; the alphabetical-iteration determinism pin’svec!["labels", "name", "namespace"]fixture would compare against the actually-iterated key sequence and fire on the drifted-fixture rather than the true render-determinism property. The lift routes every K8s-CR-metadata-namespace-axis retrieval + fixture through the same&'static strso drift between any two sites becomes a single-edit fix at the caixa-core const definition. Peer tocaixa_flux::KUBE_KEY_NAMESPACE(44bebfe) on the sibling renderer crate — extends the discipline from the Flux v2 controller-triplet + ComputeUnit-side metadata.namespace drift-detection pins onto the Cilium + Gateway API controller-pair metadata.namespace drift-detection pins in this crate. Extends the per-K8s-CR top-level(apiVersion, kind, metadata, spec)axis re-export quartet onto the load-bearing nestedmetadata.namespaceaxis — the axis every renderedCiliumNetworkPolicy/Gateway/HTTPRoutedocument binds to on the deploy path (the Cilium operator’s per-CNPendpointSelectormatches pods in this namespace; the gateway-class-controller’s per-Gatewaylistener attaches only to HTTPRoutes in this namespace; every apiserver-side CR admission- time schema validates against it) so exactly one canonical byte-sequence must reach every rendered artifact. Canonical K8s API key naming the resource’s namespace (under metadata). - KUBE_
KEY_ PORT - Canonical K8s CR L4-port scalar-axis key. Re-export of the
canonical
caixa_core::KUBE_KEY_PORTso the per-CR L4-port scalar field name lives in exactly one place across every caixa renderer — this crate’s three production-code emission sites (cilium_network_policies’s per-toPorts[].ports[]port-tupleport:scalar the Cilium data plane’s per-tuple bpf policy dispatch loop compares against the observed TCP/UDP L4 header port value,gateway_routes’s per-Gatewayper-listenerspec.listeners[].portscalar the gateway-class-controller’s per-listener bind loop opens the listener socket on,gateway_routes’s per-HTTPRouteper-rulespec.rules[].backendRefs[].portscalar the gateway-class- controller’s per-rule backend-dispatch loop forwards the matched request to on the resolved Service / ExternalName backend) and this crate’s two test-side L4-port traversal sites (thecilium_l4_ports_default_to_servico_port.get("port")undertoPorts[].ports[]L7-fallback-port-content pin threading through [DEFAULT_SERVICO_PORT], thegateway_emits_gateway_plus_httproute_pair.get("port")underbackendRefs[]HTTPRoute-backend-port-content pin) now consult the same&'static stras the peer caixa-core-side const definition. - KUBE_
KEY_ PROTOCOL - Canonical K8s CR L4/L7 protocol scalar-discriminator-axis key.
Re-export of the canonical
caixa_core::KUBE_KEY_PROTOCOLso the per-CR protocol scalar-discriminator field name lives in exactly one place across every caixa renderer — this crate’s two production-code emission sites (cilium_network_policies’s per-toPorts[].ports[]port-tupleprotocol:scalar the Cilium data plane’s per-tuple bpf policy dispatch loop compares against the observed L4 header protocol before applying the port match,gateway_routes’s per-Gatewayper-listenerspec.listeners[].protocolscalar the gateway-class-controller’s per-listener bind loop selects the L7 parser + TLS termination strategy from) and this crate’s one test-side protocol-scalar traversal site (thegateway_emits_gateway_plus_httproute_pair.get("protocol")retrieval on the emittedGateway’s first listener pinning the canonicalHTTPlistener-protocol content) now consult the same&'static stras the peer caixa-core-side const definition. - KUBE_
KEY_ RULES - Canonical K8s CR
rulescollection-axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_RULESso the per-CR rule-list container key lives in exactly one place across every caixa renderer — this crate’s two production-code emitters (cilium_network_policies’s per-toPorts[]rules:L7 rule-list mapping the Cilium data plane dispatches HTTP / Kafka / DNS L7 rules under,gateway_routes’sHTTPRoutespec.rules[]sequence the gateway-class-controller dispatches per-rulematches[]+backendRefs[]+ timeouts / retries overlay under) and this crate’s five test-side rule-list traversal sites (thehttproute_carries_paths_from_http_endpoints.get("rules")undertoPorts[]L7-path-content pin, thecilium_l7_rules_are_http_only.get("rules")undertoPorts[]L7-http-only-shape pin, thecilium_pubsub_contracts_skip_l7_rulesto_ports.get("rules").is_none()pubsub-contracts-carry-no-L7-rules absence pin, thegateway_emits_gateway_plus_httproute_pair.get("rules")underspecHTTPRoute-backendRefs-shape pin, and thehttproute_rulestest-fixture helper.get("rules")underspecHTTPRoute-rule- sequence retrieval every downstream policy-timeout / retries / mtls / rate-limit determinism pin reaches through) now consult the same&'static stras the peer caixa-core-side const definition. - 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-mesh’scilium_network_policiesper-(:de, :para)CiliumNetworkPolicyemitter (theendpointSelector+ingressblock under spec), caixa-mesh’sgateway_routesGateway+HTTPRouteemitter (thelisteners/rules/parentRefs/hostnamesblock under spec), and every future per-target renderer that materializes a CR (the M4mesh.pleme.io/v1alpha1/Aplicacaomaterializer’s per-policy spec block, the future per-ServicoComputeUnitschema reroute) consults the same&'static str. The prior inline"spec".into()literals at the three production-code call sites in this crate would have let a typo / camelCase drift on any one of the three sites silently emit a CR with no recognizable spec (the apiserver-side CRD schema validator drops the malformed document at apply time, naming the unrecognized key but not the source-side renderer call site). Peer to theGATEWAY_API_API_VERSION/CILIUM_API_VERSIONre-exports on the sibling canonical-K8s-API-axis surfaces. 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. - KUBE_
KEY_ TYPE - Canonical K8s CR discriminated-union
typescalar-discriminator- axis key. Re-export of the canonicalcaixa_core::KUBE_KEY_TYPEso the per-CR discriminated-union type scalar-discriminator field name lives in exactly one place across every caixa renderer — this crate’s one production-code emission site (gateway_routes’s per- rule per-HTTPRouteMatchspec.rules[].matches[].path.typescalar the gateway-class-controller’s per-rule L7 dispatch pass selects the path-match strategy from) and this crate’s test-side traversal sites navigating the renderedHTTPRoute’s per-match path-selection- predicate discriminator now consult the same&'static stras the peer caixa-core-side const definition. Pairs with the siblingGATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXre-export on the per-HTTPRouteMatchpath-selection-predicate discriminator scalar-VALUE axis the discriminator scalar-KEY here holds under, closing the per-HTTPRouteMatchpath-selection-predicate(type key → PathPrefix value)scalar-key/scalar-value discriminator axis pair this crate’sgateway_routesrenderer’s external:entradaper- path L7-filtering ingress contract rests on — the same shape the siblingKUBE_KEY_PROTOCOLkey +KUBE_PROTOCOL_TCP/GATEWAY_API_PROTOCOL_HTTPvalue pair already carries on the L4/L7-protocol scalar-discriminator surface. - KUBE_
PROTOCOL_ TCP - Canonical K8s core
ProtocolOpenAPI schema enum’sTCPL4-transport- protocol scalar value everycilium_network_policies-emittedCiliumNetworkPolicydocument’s per-spec.ingress[].toPorts[].ports[]port-tuple declares under its per-tuplecaixa_core::KUBE_KEY_PROTOCOLaxis. Re-export of the canonicalcaixa_core::KUBE_PROTOCOL_TCPso the K8s-core-Protocol-enum-side per-port-tuple L4-transport-selection scalar value lives in exactly one place across every caixa renderer — caixa-mesh’scilium_network_policiesper-(:de, :para)CNP emitter (the single production-code site the prior inline"TCP".into()literal sat at, caixa-mesh/src/lib.rs — the per-toPorts[].ports[]port-tupleKUBE_KEY_PROTOCOLscalar-value emit) and every future per-Cilium-CNP-side / K8s-core-Protocol-side renderer the M3.x absorption roadmap acknowledges now consult the same&'static str, so a future K8s coreProtocolenum rebrand (e.g. theKEP-3675 QUIC transportproposal’s"QUIC"addition to the enum, coordinated with the upstream SIG-Network per-version deprecation cycle) is a one-line edit on the canonicalcaixa_core::KUBE_PROTOCOL_TCPdeclaration, not a coordinated rewrite across this crate’scilium_network_policiesrenderer’s per-port-tupleKUBE_KEY_PROTOCOL-scalar-value emit + every future per-Cilium-CNP-side renderer the substrate adds. The prior inline literal would have let a K8s coreProtocolrebrand on the caixa-mesh side without a coordinated edit silently emit aCiliumNetworkPolicywhose per-toPorts[].ports[]port-tuple L4-transport-protocol scalar drifts off the K8s coreProtocolenum’s admitted closed set — apply-side: the Cilium operator’s per-CNP L4 dispatch pass rejects the object at admission (the K8s coreProtocolOpenAPI schema enum admits the closed set{"TCP", "UDP", "SCTP"}verbatim), and every intra-mesh:contratosL4-tuple-gated flow drops at the Cilium operator’s admission gate with no field naming the L4- transport-protocol-drift root cause; worse — because theprotocolscalar carries a schema-side default ofTCPon the K8s coreProtocolenum, a silently-elided drift on the emit lands aCiliumNetworkPolicywhose ingress rule falls back to the default L4-transport-protocol and every port-match on a non-default transport silently misses at the eBPF data plane’s per-tuple dispatch. Peer to theGATEWAY_API_PROTOCOL_HTTP+GATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXre-exports on the sibling canonical-Gateway-API-v1-OpenAPI-schema-enum-value surface — extends the Gateway-API-v1-OpenAPI-schema-enum-value re-export pair onto the sibling K8s-core-Protocol-OpenAPI-schema-enum-value axis the samecilium_network_policiesrenderer’s intra-mesh L4-tuple-gating contract carries under the sharedCiliumNetworkPolicybody. Canonical K8s coreProtocolOpenAPI schema enum’sTCPL4-transport- protocol scalar value everycilium_network_policies-emittedCiliumNetworkPolicydocument’s per-spec.ingress[].toPorts[].ports[]port-tuple declares under its per-tupleKUBE_KEY_PROTOCOLaxis. Pairs with the siblingKUBE_KEY_PROTOCOL(0307950) per-CR L4/L7 protocol-scalar-discriminator container-axis key the value nests directly under — the K8s coreProtocolschema pins per-ContainerPort/ServicePort/EndpointPort/NetworkPolicyPortL4-transport selection through theprotocolscalar (each port entry names one L4-transport-protocol discriminator the CNI / kube-proxy / eBPF-data- plane bpf policy dispatch loop keys off before applying the port match; the K8s coreProtocolOpenAPI schema enum admits the closed set{"TCP", "UDP", "SCTP"}verbatim — see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1/#protocol-v1-core), so drift on the L4-transport-protocol value is exactly as load-bearing as drift on the siblingGATEWAY_API_PROTOCOL_HTTP(1b57473) per- listener L7-parser-selection scalar value the peer Gateway-API v1ProtocolTypeOpenAPI schema enum admits under the sameKUBE_KEY_PROTOCOLcontainer-axis key (a"tcp"/"Tcp"/"TCP/IP"/"transport-tcp"typo at the production-code call site lands outside the K8s coreProtocolOpenAPI schema enum’s admitted set, surfacing apply-side as a non-self-locating “spec.ingress[0].toPorts[0].ports[0].protocol: Unsupported value: "tcp": supported values: "SCTP", "TCP", "UDP"” apiserver admission-rejection far from the sourcecaixa.lisp/ the renderer’sport_entry.insert(…)call site — the rendered per-(:de, :para)CiliumNetworkPolicyobject never reconciles at the Cilium operator’s per-CNP L4 dispatch pass and every intra-mesh:contratosL4-tuple- gated flow drops at the Cilium operator’s admission gate with no field naming the L4-transport-protocol-drift root cause; worse — because theprotocolscalar carries a schema-side default ofTCPon the K8s coreProtocolenum, a silently-elided drift on the emit lands aCiliumNetworkPolicywhose ingress rule falls back to the default L4- transport-protocol and every port-match on a non-default transport silently misses at the eBPF data plane’s per-tuple dispatch). - M3_
PLACEMENT_ ESTRATEGIA_ REPLICATED - Canonical M3
caixa_core::aplicacao::PlacementStrategy::Replicatedvariant discriminator scalar-value theSerializederive on the un-renamed enum emits undercaixa_core::M3_PLACEMENT_KEY_ESTRATEGIAon everyprograms_for_aplicacao-emitted programs.yaml entry authored with:placement (:estrategia Replicated …)(and — because the enum’sdefault()isReplicated— every programs.yaml entry authored without an explicit:estrategiaslot). Re-export of the canonicalcaixa_core::M3_PLACEMENT_ESTRATEGIA_REPLICATED. Theprograms_entry_placement_carries_strategytest-fixture probe pins the emitted value against this re-export so a future variant rename orrename_allattribute at the aplicacao module reaches the caixa- mesh probe by construction rather than silently rebranding the substrate’s default distribution posture. Peer to the siblingM3_PLACEMENT_ESTRATEGIA_SINGLE_NODE/M3_PLACEMENT_ESTRATEGIA_SHARDEDre-exports on the other two arms of the same closed enum surface. Canonical M3crate::aplicacao::PlacementStrategy::Replicatedvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underM3_PLACEMENT_KEY_ESTRATEGIAwhenever the typed slot’s distribution strategy is the every-cluster-active-active arm (the enum’sdefault()and the canonical happy-path per MESH-COMPOSITION.md §II.1). - M3_
PLACEMENT_ ESTRATEGIA_ SHARDED - Canonical M3
caixa_core::aplicacao::PlacementStrategy::Shardedvariant discriminator scalar-value theSerializederive on the un-renamed enum emits undercaixa_core::M3_PLACEMENT_KEY_ESTRATEGIAon everyprograms_for_aplicacao-emitted programs.yaml entry authored with:placement (:estrategia Sharded :shard-key …)— the one arm on which the siblingcaixa_core::M3_PLACEMENT_KEY_SHARD_KEYsub-block is required (AplicacaoSpec::validate_placementgatesshard_key.is_some() == matches!(estrategia, Sharded)as a structural partition of every validated Placement). Re-export of the canonicalcaixa_core::M3_PLACEMENT_ESTRATEGIA_SHARDED. Theprograms_entry_placement_carries_shard_key_when_shardedtest-fixture probe pins the emitted value against this re-export so a future variant rename orrename_allattribute at the aplicacao module reaches the caixa-mesh probe by construction rather than silently collapsing the hash-keyed distribution back onto the aggregator’s default. Peer to the siblingM3_PLACEMENT_ESTRATEGIA_SINGLE_NODE/M3_PLACEMENT_ESTRATEGIA_REPLICATEDre-exports on the other two arms of the same closed enum surface. Canonical M3crate::aplicacao::PlacementStrategy::Shardedvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underM3_PLACEMENT_KEY_ESTRATEGIAwhenever the typed slot’s distribution strategy is the hash-keyed-across-clusters arm (Akka cluster sharding, MESH-COMPOSITION.md §II.4). The one arm on which the typedM3_PLACEMENT_KEY_SHARD_KEYsub-block is required —AplicacaoSpec::validate_placementgatesshard_key.is_some() == matches!(estrategia, Sharded)as a structural partition of every validatedcrate::aplicacao::Placement. - M3_
PLACEMENT_ ESTRATEGIA_ SINGLE_ NODE - Canonical M3
caixa_core::aplicacao::PlacementStrategy::SingleNodevariant discriminator scalar-value theSerializederive on the un-renamed enum emits undercaixa_core::M3_PLACEMENT_KEY_ESTRATEGIAon everyprograms_for_aplicacao-emitted programs.yaml entry authored with:placement (:estrategia SingleNode …). Re-export of the canonicalcaixa_core::M3_PLACEMENT_ESTRATEGIA_SINGLE_NODEso the OTP-style single-cluster-takeover distribution-strategy scalar lives in exactly one place across every caixa renderer and every caixa-mesh test-fixture probe that dispatches on the strategy string. Peer to the siblingM3_PLACEMENT_ESTRATEGIA_REPLICATED/M3_PLACEMENT_ESTRATEGIA_SHARDEDre-exports on the other two arms of the same closed enum surface — together the three constants name every author-reachable arm of the M3 distribution-strategy discriminator. Canonical M3crate::aplicacao::PlacementStrategy::SingleNodevariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underM3_PLACEMENT_KEY_ESTRATEGIAwhenever the typed slot’s distribution strategy is the single-cluster-active-at-a-time arm (OTP distributed-application takeover, MESH-COMPOSITION.md §II.1).
Functions§
- cilium_
auth_ mode - Canonical
bool → &'static strbijection projection every consumer of the CiliumCiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’s closed-set author-reachable scalar-value pair (CILIUM_AUTH_MODE_REQUIRED/CILIUM_AUTH_MODE_DISABLED) consults so the per-tristate-arm dispatch —Some(true)(mTLS handshake mandatory) →CILIUM_AUTH_MODE_REQUIRED,Some(false)(mTLS handshake skipped, explicit opt-out) →CILIUM_AUTH_MODE_DISABLED— lives in exactly one place. Re-export of the canonicalcaixa_core::cilium_auth_modeso a future Cilium CNPMutualAuthenticationModeenum rebrand (either arm’s scalar-value or the per-arm dispatch shape) lands at the two consts + one projection body rather than at scattered per-emitter inline closure bodies. Consumed by thecilium_network_policiesper-(:de, :para)emitter’ssingle_field_overlay(spec.politicas.mtls_required, CILIUM_KEY_MODE, |required| serde_yaml::Value::String(cilium_auth_mode(required).into()))closure body the prior inlineif required { CILIUM_AUTH_MODE_REQUIRED } else { CILIUM_AUTH_MODE_DISABLED }per-arm dispatch sat at (plus the caixa-core in-filesingle_field_overlay_threads_typed_value_through_ closuregeneric-helper pin that mirrors the production overlay’s shape letter-for-letter and now threads through the same projection). Peer to theCILIUM_AUTH_MODE_REQUIRED/CILIUM_AUTH_MODE_DISABLEDre-export pair the two arms of the same enum land on — completes the canonical(closed-set-CRD-schema-enum-value pair, per-typed-arm dispatch projection)compound re-export triple this crate’scilium_network_policiesrenderer’s SPIFFE-identity-bound per-edge mTLS enforcement + explicit-opt-out contract rests on. Canonicalbool → &'static strbijection projection every consumer of the CiliumCiliumNetworkPolicyMutualAuthenticationModeOpenAPI schema enum’s closed-set author-reachable scalar-value pair (CILIUM_AUTH_MODE_REQUIRED/CILIUM_AUTH_MODE_DISABLED) consults so the per-tristate-arm dispatch —Some(true)(mTLS handshake mandatory) →CILIUM_AUTH_MODE_REQUIRED,Some(false)(mTLS handshake skipped, explicit opt-out) →CILIUM_AUTH_MODE_DISABLED— lives in exactly one place. The two arms of the:politicas :mtls-requiredtristate’s non-Nonevalue-space each land on a distinctMutualAuthenticationModescalar; theNoneslot-absent arm is the caller’ssingle_field_overlayemission-gate concern (the helper returnsNoneand the outerauthentication:block is omitted entirely), not this projection’s — see the per-emit-siteif let Some(overlay) = mtls_overlay { rule.insert(CILIUM_KEY_AUTHENTICATION, overlay.clone()) }guard. - cilium_
network_ policies - Render one
CiliumNetworkPolicy-shaped YAML per distinct(:de, :para)pair across:contratos. The policy whitelists the:de → :paraflow at L4 (every contract); HTTP contracts add L7 rules (path) keyed by the:witshape. - cilium_
network_ policy_ name - Canonical per-
(:de, :para)CiliumNetworkPolicymetadata.namecomposer — the<aplicacao>-<de>-to-<para>K8s-name-shaped scalar every caixa-meshcilium_network_policiesemitter mounts its per-edge CNP under. Re-export of the canonicalcaixa_core::cilium_network_policy_namecomposer so the per-CNP name construction lives in exactly one place across every caixa renderer. Composes on the liftedcontrato_edge_labelhelper so the two writer-side axes — the CNPmetadata.labels.pleme.pleme.io/contratovalue and the CNPmetadata.name— share one canonical edge-encoding source of truth (CONTRATO_EDGE_LABEL_SEPARATOR). Peer ofcontrato_edge_labelon the parent-composition axis — the two writer-side composers close the canonical(LABEL_CONTRATO-value, metadata.name)per-CNP identity pair so a future edge-encoding rebrand or a per-emitter typo can’t silently split the two axes at emit time and orphan every operator-side grep-by-label query at apply time far from the source caixa.lisp. Canonical per-(:de, :para)CiliumNetworkPolicymetadata.nameK8s-name-shaped scalar every caixa-meshcilium_network_policiesemitter mounts its per-edge CNP under. Composes on the liftedcontrato_edge_labelhelper (the CNP name is the parent Aplicacao’s:nomejoined to the contrato-edge-label by a canonical-separator:format!("{aplicacao}-{edge}")), so the two axes — the CNPmetadata.labels.pleme.pleme.io/contratovalue and the CNPmetadata.name— share one canonical edge-encoding source of truth (CONTRATO_EDGE_LABEL_SEPARATOR). - contrato_
edge_ label - Canonical M3
:contratosedge label value composer — the<de>-to-<para>K8s-name-shaped scalar every per-(:de, :para)CiliumNetworkPolicydocument carries at itsmetadata.labels.pleme.pleme.io/contratoaxis. Re-export of the canonicalcaixa_core::contrato_edge_labelcomposer so the per-CNPLABEL_CONTRATO-value construction lives in exactly one place across every caixa renderer. Reads from the liftedCONTRATO_EDGE_LABEL_SEPARATORbyte-string so a future edge-encoding rebrand lands at one canonical composition. Peer ofcilium_network_policy_nameon the sibling per-CNPmetadata.namecomposition axis — the two composers close the canonical(LABEL_CONTRATO-value, metadata.name)per-CNP identity pair on one shared edge-encoding source of truth (CONTRATO_EDGE_LABEL_SEPARATOR). Canonical M3:contratosedge label value — the<de>-to-<para>K8s-name-shaped scalar every per-(:de, :para)CiliumNetworkPolicydocument carries at itsmetadata.labels.pleme.pleme.io/contratoaxis (theLABEL_CONTRATOlabel key). Composes on the liftedCONTRATO_EDGE_LABEL_SEPARATORbyte-string so a future edge-encoding rebrand lands at one canonical composition, and every downstream consumer that grep-by-label picks up the new encoding by construction. - gateway_
api_ http_ route_ name - Canonical per-
:entradaHTTPRoutemetadata.namecomposer — the<aplicacao>-<para>K8s-name-shaped scalar every caixa-meshgateway_routesemitter mounts its per-:entradaHTTPRoute under. Re-export of the canonicalcaixa_core::gateway_api_http_route_namecomposer so the per-HTTPRoute name construction lives in exactly one place across every caixa renderer. Peer of the siblingcilium_network_policy_namecomposer on the per-Aplicacao per-CR K8s-name-shaped-identity-scalar axis: the CNP-name composer carries the per-(:de, :para)L4/L7 policy CR name and this composer carries the per-:entradaL7 route CR name — both share the same “aplicacao-prefixed sub-identity” discipline (an aplicacao-prefix joined to a per-CR sub-axis by a canonical-separator) so a future substrate-side per-Aplicacao Gateway API axis extension (GRPCRouteon grpc-shaped:contratospayloads,TCPRouteon l4-only tcp payloads, per-:entradaHTTPRouteFilter/BackendTLSPolicyoverlays) reaches the shared naming discipline through this composer’s peer-shape by construction. - gateway_
routes - Render the Gateway + HTTPRoute pair for
:entrada, when set. Returns an empty Vec when the Aplicacao has no external entry point (internal-only meshes). - programs_
for_ aplicacao - Render one
programs.yamlentry per:membrosin the Aplicacao. - render_
all - One-shot bundle that renders every cluster artifact for an Aplicacao:
- typed_
view - Compose a single typed view of the entire Aplicacao for downstream
renderers (Cilium, Gateway, observability). Convenience wrapper that
routes the compound
require_kind + aplicacao_view + validatecascade through the canonical substrate primitivecaixa_core::require_aplicacao_view, sibling to the per-Servicocaixa_core::require_v0_servico_shapecompound entry gate everycaixa-helm/caixa-fluxrenderer already routes through. The wrapper stays for turbofish elision at this crate’s three call sites (programs_for_aplicacao/cilium_network_policies/gateway_routes), matching the shape the siblingcaixa-flux/caixa-helmrenderers read the compound V0-Servico gate as, and every future per-Aplicacao consumer (caixa-tatara’s spec-consuming validate arm when it lands, the deferredmesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission webhook) gets the compound three-arm gate for free with one call rather than re-inlining the cascade — same discipline the peercaixa_core::require_v0_servico_shapelift closed on the per-Servico renderer axis.