Expand description
Render-side helpers shared by every per-Servico renderer
([caixa-helm], [caixa-flux]) — the canonical place for “if the
M2 typed slot is non-empty, emit its camelCase YAML fragment under
the agreed key” patterns to live exactly once.
Until this module landed both renderers carried an inline ~20-line block per render entry-point that:
- Checked
caixa.limits.is_some() && !limits.is_empty(). - Called
serde_yaml::to_value(limits).unwrap_or(Value::Null)— silently swallowing every serialization error as anull-shaped fragment that would render aslimits: nullin the values block, indistinguishable from “the author omitted the slot” downstream. - Inserted under the camelCase key
"limits"withor_insertsemantics so explicitspec.*fields from the ComputeUnit YAML take precedence over the manifest-derived overlay. - Repeated the same shape for
:behavior→"behavior"and:upgrade-from→"upgradeFrom".
That’s the duplication budget violated three ways: same emptiness check, same camelCase key, same precedence rule, written twice verbatim. THEORY.md §I.3.5 (“Generation first, composition second, hand-authoring last; the duplication budget is zero”) promotes that to a build-time concern: every recurring shape lives in a typed helper before its third occurrence — and PRIME DIRECTIVE work is exactly that lift.
servico_m2_overlay is that helper. Renderers iterate the map it
returns and merge each (key, value) pair into their target with
their own map type’s entry().or_insert() (so spec.* precedence
is preserved by construction).
Structs§
- CiDecompose
Failure - Typed
:ci-decompose-failure view: the canonical surface every per-Acaoconsumer raises whencanteiro_types::decomposerefuses the caixa’s declared:cirun (a duplicate node name, a dependency on an undeclared node, a dependency cycle — every failure mode the siblingcanteiro_types::DecomposeErrorenumerates). Carries the offending caixa’s:nomealongside the borrowedcanteiro_types::DecomposeErrorsource so the diagnostic readscaixa "<nome>": :ci decompose failed: <source>— naming whichcaixa.lispneeds author attention, not just the axis the consumer rejected. - Kind
Mismatch - Typed kind-mismatch view: the canonical surface every per-kind
caixa-<target>renderer raises when it’s handed aCaixawhose:kinddoesn’t match the kind that renderer is targeting. Carries the offending caixa’s:nomealongside the expected/actual kinds, so the diagnostic readscaixa "<nome>": expected :kind <expected>, got <actual>— naming which caixa needs author attention, not just which kind the renderer rejected. - Missing
CiSlot - Typed
:ci-slot-absence view: the canonical surface every per-Acaoconsumer raises when it’s handed a:kind AcaoCaixawhose:cislot is absent. Carries the offending caixa’s:nomeso the diagnostic readscaixa "<nome>": :kind Acao requires a :ci slot— naming whichcaixa.lispneeds author attention, not just the axis the consumer rejected. - Rendered
File - One rendered artifact — a
(path, contents)pair every per-targetcaixa-<target>renderer emits at every leaf of its output tree. Carries the sandboxed relative path the substrate writes the artifact under (relative to the renderer-chosen output root — the per-chart directory forcaixa-helm’slareira-<nome>chart tree, the per-caixa./clusters/<cluster>/services/<nome>/sub-tree forcaixa-flux’scluster_bundleFlux v2 CR trio) alongside the pre-serialized byte contents the substrate writes to it. - Servico
Count Mismatch - Typed
:servicos-count-mismatch view: the canonical surface every per-Servicocaixa-<target>renderer raises when it’s handed aCaixawhose:servicoslist doesn’t carry exactly one entry — the V0 contract every Servico-kind caixa satisfies (caixa-helm’srender_chart_for_servico,caixa-flux’sprograms_yaml_entry, the future per-Servico OCI/wasm packager). Carries the offending caixa’s:nomealongside the actual count, so the diagnostic readscaixa "<nome>": :servicos must declare exactly one entry for V0 (got <count>)— naming whichcaixa.lispneeds author attention, not just the count the renderer rejected.
Enums§
- Path
Shape Violation - Tagged reason a caixa-author-supplied path can fail the
sandboxed-relative shape gate every callback / script path must
pass for the layout checker’s
root.join(p)to stay inside the caixa root. - Render
Error - Errors the render helpers can raise.
Constants§
- CAIXA_
KEY_ DEPS - Canonical JSON/YAML top-level key for
crate::Caixa’s runtimedepsaxis — the runtime-closure dependency list every build the caixa participates in reaches (peer of the dev-only:deps-devlistCAIXA_KEY_DEPS_DEVpins). The Rust field is single-worddeps; the#[serde(rename_all = "camelCase")]attribute oncrate::Caixais a no-op on this axis (no_to transform), so the emitted JSON key equals the source-side field name byte-for-byte and equals this constant’s value. - CAIXA_
KEY_ DEPS_ DEV - Canonical camelCase JSON/YAML top-level key for
crate::Caixa’sdeps_devaxis — the dev-only dependency list that the M0 base package model already exposes (peer of the runtime:depslist, but excluded from published lacres and consumer builds). The Rust field issnake_casedeps_dev; the#[serde(rename_all = "camelCase")]attribute oncrate::Caixamaps it to the camelCase JSON key"depsDev"this constant pins. - CAIXA_
KIND_ LABEL_ ACAO - Canonical human-readable label the
crate::CaixaKind::Acaoarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display. Sixth peer ofCAIXA_KIND_LABEL_BIBLIOTECA/CAIXA_KIND_LABEL_BINARIO/CAIXA_KIND_LABEL_SERVICO/CAIXA_KIND_LABEL_SUPERVISOR/CAIXA_KIND_LABEL_APLICACAOon the same closedcrate::CaixaKindenum surface; seeCAIXA_KIND_LABEL_BIBLIOTECAfor the shared lift rationale. - CAIXA_
KIND_ LABEL_ APLICACAO - Canonical human-readable label the M3
crate::CaixaKind::Aplicacaoarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display. Peer ofCAIXA_KIND_LABEL_BIBLIOTECA/CAIXA_KIND_LABEL_BINARIO/CAIXA_KIND_LABEL_SERVICO/CAIXA_KIND_LABEL_SUPERVISORon the same closedcrate::CaixaKindenum surface; seeCAIXA_KIND_LABEL_BIBLIOTECAfor the shared lift rationale. - CAIXA_
KIND_ LABEL_ BIBLIOTECA - Canonical human-readable label the M0
crate::CaixaKind::Bibliotecaarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display— the byte-string every future diagnostic / graph / audit consumer that formats a:kindvariant as user-facing text lands on (the future wasm-operator’s per-caixa startup log line naming the loaded caixa’s typed shape, the futurefeira app graphper-member kind column, the future M4wasm.pleme.io/v1alpha1/ComputeUnit/mesh.pleme.io/v1alpha1/*CR materializer’s admission-webhook rejection body naming which typed kind the offending manifest carries). Peer of the sibling fourCAIXA_KIND_LABEL_BINARIO/CAIXA_KIND_LABEL_SERVICO/CAIXA_KIND_LABEL_SUPERVISOR/CAIXA_KIND_LABEL_APLICACAOconsts on the same closedcrate::CaixaKindenum surface — together the pentad names every author-reachable arm of the substrate’s most fundamental typed axis (what a caixa produces), mirroring the closed-enum-scalar-value trajectory the sibling OTP-shapedSUPERVISOR_ESTRATEGIA_ONE_FOR_ONEetc. (09ffb2d) andSUPERVISOR_CHILD_RESTART_PERMANENTetc. (ccdf955) and the M3M3_PLACEMENT_ESTRATEGIA_SINGLE_NODEetc. (3f0e21c) established on the sibling closed-set typed-enum discriminator axes. - CAIXA_
KIND_ LABEL_ BINARIO - Canonical human-readable label the M0
crate::CaixaKind::Binarioarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display. Peer ofCAIXA_KIND_LABEL_BIBLIOTECA/CAIXA_KIND_LABEL_SERVICO/CAIXA_KIND_LABEL_SUPERVISOR/CAIXA_KIND_LABEL_APLICACAOon the same closedcrate::CaixaKindenum surface; seeCAIXA_KIND_LABEL_BIBLIOTECAfor the shared lift rationale. - CAIXA_
KIND_ LABEL_ SERVICO - Canonical human-readable label the M0
crate::CaixaKind::Servicoarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display. Peer ofCAIXA_KIND_LABEL_BIBLIOTECA/CAIXA_KIND_LABEL_BINARIO/CAIXA_KIND_LABEL_SUPERVISOR/CAIXA_KIND_LABEL_APLICACAOon the same closedcrate::CaixaKindenum surface; seeCAIXA_KIND_LABEL_BIBLIOTECAfor the shared lift rationale. - CAIXA_
KIND_ LABEL_ SUPERVISOR - Canonical human-readable label the M2
crate::CaixaKind::Supervisorarm surfaces undercrate::CaixaKind::as_strand (routed through it)std::fmt::Display. Peer ofCAIXA_KIND_LABEL_BIBLIOTECA/CAIXA_KIND_LABEL_BINARIO/CAIXA_KIND_LABEL_SERVICO/CAIXA_KIND_LABEL_APLICACAOon the same closedcrate::CaixaKindenum surface; seeCAIXA_KIND_LABEL_BIBLIOTECAfor the shared lift rationale. - CAIXA_
KIND_ WIRE_ ACAO - Canonical PascalCase wire byte-string the
crate::CaixaKind::Acaoarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind. Sixth peer ofCAIXA_KIND_WIRE_BIBLIOTECA/CAIXA_KIND_WIRE_BINARIO/CAIXA_KIND_WIRE_SERVICO/CAIXA_KIND_WIRE_SUPERVISOR/CAIXA_KIND_WIRE_APLICACAOon the same closedcrate::CaixaKindenum surface; see the siblingCAIXA_KIND_WIRE_BIBLIOTECAdocstring for the shared lift rationale. - CAIXA_
KIND_ WIRE_ APLICACAO - Canonical PascalCase wire byte-string the
crate::CaixaKind::Aplicacaoarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind. Peer ofCAIXA_KIND_WIRE_BIBLIOTECAon the same closedcrate::CaixaKindenum surface; see the siblingCAIXA_KIND_WIRE_BIBLIOTECAdocstring for the shared lift rationale. - CAIXA_
KIND_ WIRE_ BIBLIOTECA - Canonical PascalCase wire byte-string the
crate::CaixaKind::Bibliotecaarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind— the exact byte-shape every wire surface that carries a Caixa’s:kindoutside the caixa-core boundary consumes (the [caixa_crd::caixa_cr::CaixaSpec]kind:field the K8sCaixaCR persists between apply and reconcile passes, the tatara-lisp author-surface:kind Bibliotecasymbol the sexp parser binds into the typedcrate::CaixaKindenum, the future M4mesh.pleme.io/v1alpha1/CaixaCR materializer’s per-CR admission- webhook wire binding). - CAIXA_
KIND_ WIRE_ BINARIO - Canonical PascalCase wire byte-string the
crate::CaixaKind::Binarioarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind. Peer ofCAIXA_KIND_WIRE_BIBLIOTECAon the same closedcrate::CaixaKindenum surface; see the siblingCAIXA_KIND_WIRE_BIBLIOTECAdocstring for the shared lift rationale. - CAIXA_
KIND_ WIRE_ SERVICO - Canonical PascalCase wire byte-string the
crate::CaixaKind::Servicoarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind. Peer ofCAIXA_KIND_WIRE_BIBLIOTECAon the same closedcrate::CaixaKindenum surface; see the siblingCAIXA_KIND_WIRE_BIBLIOTECAdocstring for the shared lift rationale. - CAIXA_
KIND_ WIRE_ SUPERVISOR - Canonical PascalCase wire byte-string the
crate::CaixaKind::Supervisorarm serializes as under the un-renamed#[derive(Serialize)]oncrate::CaixaKind. Peer ofCAIXA_KIND_WIRE_BIBLIOTECAon the same closedcrate::CaixaKindenum surface; see the siblingCAIXA_KIND_WIRE_BIBLIOTECAdocstring for the shared lift rationale. - CARGO_
FEATURE_ NAME_ MAX_ LEN - Practical cap on a
:caracteristicas(Cargo-feature-name-shaped) entry, in bytes. Cargo itself enforces no length cap on feature names — itsrestricted_names::validate_feature_nameaccepts any length — but every realistic feature in the Cargo ecosystem is well under this bound (derive6,serde_json10, the__private_…doubled-underscore convention rarely exceeds 32). 64 bytes is the substrate’s catch-the-paste-from-binary cap on the peer trajectoryis_dns_1123_label(63),is_wit_world_ref(128),is_nats_subject(256),is_wasi_keyvalue_slot(512),is_git_ref_name(255),is_git_oid(40/64),is_git_repo_url(2048) carry: an axis-appropriate ceiling above every legitimate authoring shape, tight enough to surface the “paste-from-binary” / “multi-line blob landed in a single-token slot” footgun at validate time. - CHART_
DESCRIPTION_ MAX_ LEN - Maximum byte length of a chart-description-shaped string. The
512-byte cap is the axis-appropriate ceiling for the free-form
prose summary the
:descricaoaxis carries: every realistic chart description in the wild ("Canonical Rust→wasm32-wasip2 caixa Servico.","Checkout flow.","AWS provider caixa for tatara-lisp") sits well under 256 bytes, and the 512-byte cap surfaces the “paste-from-doc multi-paragraph blob landed in the:descricaoslot” footgun at validate time. Peer withWASI_KV_SLOT_MAX_LEN(512) on the sibling longer-than- identifier axis; tighter thanGIT_REPO_URL_MAX_LEN(2048) which carries a different axis-class ceiling, and looser thanSPDX_EXPRESSION_MAX_LEN(256) which is the canonical short-identifier-class axis. - CHART_
KEYWORD_ MAX_ LEN - Maximum byte length of a chart-keyword-shaped string. The 20-byte
cap matches Cargo’s
[package] keywordsrule (https://doc.rust-lang.org/cargo/reference/manifest.html#the-keywords-field: “Each keyword should be ASCII text, start with a letter, and only contain letters, numbers, _ or -. Keywords are case-insensitive and limited to a maximum length of 20 characters.”) — the same parser crates.io routes itskeywords:array entries through at publish time. Tighter than every peer length cap on the typed Caixa surface (CHART_MAINTAINER_NAME_MAX_LEN128 on the sibling chart-metadataVec<String>axis,CARGO_FEATURE_NAME_MAX_LEN64 on the sibling:caracteristicasper-entry axis,CHART_DESCRIPTION_MAX_LEN512 on the free-form-prose axis); the search-tag class is the tightest short-identifier shape on the typed surface — every realistic:etiquetasentry in the wild ("iac","aws","pangea","hello-world","tatara-lisp","caixa-servico","infrastructure","pangea-native") sits well under 20 bytes, and the 20-byte cap surfaces the “paste-from-doc multi-tag blob landed in a single:etiquetasentry” footgun ("web-service web app","mesh,http,grpc") at validate time. - CHART_
MAINTAINER_ NAME_ MAX_ LEN - Maximum byte length of a chart-maintainer-name-shaped string. The
128-byte cap is the axis-appropriate ceiling for the per-entry
identifier the
:autoresVec axis carries: every realistic Helm chart maintainer name in the wild ("pleme-io","Pleme Contributors","alice <alice@example.com>","François Dupont") sits well under 64 bytes, and the 128-byte cap surfaces the “paste-from-doc multi-paragraph blob landed in a single:autoresentry” footgun at validate time. Tighter thanCHART_DESCRIPTION_MAX_LEN(512) on the sibling free-form-prose axis where multi-sentence summaries are the canonical shape; peer withWIT_IDENT_MAX_LEN(128) on the sibling short-identifier-class axis. - CILIUM_
API_ VERSION - Canonical Cilium CRD
apiVersioneverycaixa-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’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’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). 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
CiliumNetworkPolicydestination-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[]). Pairs with the siblingCILIUM_KEY_ENDPOINT_SELECTOR(7088789) — the Cilium CNP schema pins the destination workload identity through the per-CNP-bodyendpointSelectoraxis and the admitted source workload identities through the per-ingress-rulefromEndpoints[]axis, so drift on the identity-source axis is exactly as load-bearing as drift on the destination-identity axis it accompanies (the Cilium-operator-side CRD schema validator drops any per-ingress-rule block whose identity-source axis carries an unrecognized key — a"fromendpoints"/"fromEndPoint"/"sourceEndpoints"typo silently emits a CNP whose per-(:de, :para)ingress-rule identity- source list the Cilium operator’s per-CNP identity-resolution pass no-ops entirely: the ingress rule admits no source 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 identity-source-axis-drift root cause). - 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 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
CiliumNetworkPolicytraffic-direction container- axis key everycilium_network_policies-emitted CNP document mounts its inbound-per-(:de, :para)ingress-rule list under (spec.ingress[]). Pairs with the siblingCILIUM_KEY_ENDPOINT_SELECTOR(7088789) +CILIUM_KEY_TO_PORTS(c8d9cbf) — the per-CNPspecschema mounts the destination workload identity underendpointSelector, the permitted inbound-per-(:de, :para)ingress-rule list underingress[], and each per-ingress-rule port-set underingress[].toPorts[], so drift on the traffic-direction axis is exactly as load-bearing as drift on the destination-identity / port-set-container axes it accompanies (the Cilium-operator-side CRD schema validator drops anyspecblock whose traffic-direction axis carries an unrecognized key — an"Ingress"/"ingressRules"/"inbound"typo silently emits a CNP whose ingress-rule list the Cilium operator’s per-CNP L4/L7-dispatch pass no-ops entirely: the policy binds against the destination workload but admits no ingress traffic, 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 traffic-direction-axis-drift root cause). - 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). 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). 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[]). 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
CiliumNetworkPolicyL4/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 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). - CIRCUIT_
BREAKER_ KEY_ MAX_ FAILURES - Canonical camelCase JSON/YAML sub-key for the
crate::aplicacao::CircuitBreakerstruct’smax_failuresconsecutive-failure-count axis — themaxFailures:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::CircuitBreakeremits inside thePOLITICAS_KEY_CIRCUIT_BREAKERsub-block, and the exact camelCase scalar (Rust fieldmax_failures→ serde-emittedmaxFailures, the load-bearing non-trivial camelCase transform on thisCircuitBreakeraxis alongside the no-opCIRCUIT_BREAKER_KEY_WINDOWsibling) every downstream breaker- tuning consumer must probe on (the future M4 per-edge:politicasoverlay projection onto the mesh’s per-backend consecutive-failure-counter tripping threshold per MESH-COMPOSITION.md §III.3 breaker semantics, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission-time breaker cross-check againstcrate::POLICY_BREAKER_MAX_FAILURES_MAX, the futurefeira lintper-:politicas :circuit-breakerbound-check gate). - CIRCUIT_
BREAKER_ KEY_ WINDOW - Canonical camelCase JSON/YAML sub-key for the
crate::aplicacao::CircuitBreakerstruct’swindowfailure-counter reset-window axis — thewindow:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::CircuitBreakeremits inside thePOLITICAS_KEY_CIRCUIT_BREAKERsub-block. The Rust field is lowercasewindow;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. Peer ofCIRCUIT_BREAKER_KEY_MAX_FAILURESon the samecrate::aplicacao::CircuitBreakerserialized-key axis; seeCIRCUIT_BREAKER_KEY_MAX_FAILURESfor the full lift rationale. - CLUSTER_
BUNDLE_ LAREIRA_ ENABLED_ DEFAULT - Canonical substrate-side default for the
HelmRelease.spec.values.<library>.enabledscalar-value toggle everycaixa_flux::cluster_bundle-emittedhelmrelease.yamldocument seeds inside its per-caixa values overlay to force-on the pairedDEFAULT_LIBRARY_NAMEchild chart at the per-clusterHelmRelease-side apply step. Pairs with the siblingHELM_VALUES_KEY_ENABLEDleaf-scalar-key half of the(leaf-key, scalar-value)per-values-overlay child-chart enablement-toggle declaration pair — the key half names the canonicalvalues.<library>.enabledleaf-scalar-key axis every consumer (caixa-helm’svalues.yamlper-chart default, this crate’scluster_bundleoverlay) probes on, and this scalar-value half names the substrate-side default thecluster_bundleoverlay path seeds under it. Semantically distinct from — and inverse of — theRenderOpts::enabled_default = falsedefault that [caixa_helm::RenderOpts::default] seeds for the standalonelareira-<nome>chart’s ownvalues.yaml(that path rendersenabled: falseso cluster operators must opt each caixa in per-cluster); thecluster_bundlecomposition path is the substrate-side opt-in path where the operator has already asserted per-caixa cluster-scoped ownership by materializing a per-caixaGitRepository+HelmRelease+Kustomizationtrio, so the overlay forces the child chart on by seedingenabled: trueunder thevalues.<library>wrap. - COMPUTEUNIT_
MODULE_ KEY_ SOURCE - Canonical
wasm.pleme.io/v1alpha1/ComputeUnitCRDspec.module.sourceper-CR wasm-component-reference leaf-scalar sub-block key — the nestedspec.module.*child every renderedComputeUnitYAML carries to name the exact wasm-component artifact the M2.5 wasm-engine instantiator loads at Servico bring-up. Peer of the parentCOMPUTEUNIT_SPEC_KEY_MODULEon the same ComputeUnit CRD per-spec.module.*sub-block surface —COMPUTEUNIT_SPEC_KEY_MODULEnames the top-level per-CR module- reference block; this constant names the block’s leaf reference- value axis. Every renderedprograms[]entry thelareira-fleet-programslibrary chart consumes carries themodule.source: oci://ghcr.io/pleme-io/<caixa>:<versao>(ormodule.source: file://...for locally-mounted wasm bundles;module.source: github:<owner>/<repo>for git-hosted sources) as its per-Servico wasm-artifact reference; everyspec.module.sourcereadback across the [caixa_flux::programs_yaml_entry] round-trip pins + the [caixa_flux::upsert_into_programs_yaml] / [caixa_flux::upsert_into_helmrelease_programs] cross-upsert navigators resolves the same&'static str. - COMPUTEUNIT_
SPEC_ KEY_ CAPABILITIES - Canonical
wasm.pleme.io/v1alpha1/ComputeUnitCRDspec.capabilitiesper-CR WASI-capability-list sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to declare the wasm-component-capability tokens the M2.5 wasm-engine instantiator binds at Servico bring-up (http-in:0.0.0.0:8080for the HTTP incoming-handler,envfor read-only environment access,sock-*for TCP outbound, and the sibling WASI-preview-2 preview- interfaces per the WIT Component Model). Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEandCOMPUTEUNIT_SPEC_KEY_TRIGGERon the same ComputeUnit CRD per-spec.*sub-block surface — completes the substrate-side ComputeUnit-CRD per-spec.*sub-block re-export triple every rendered ComputeUnit YAML declares as its top-level(module, trigger, capabilities)axis. Same lift trajectory as the siblingCOMPUTEUNIT_SPEC_KEY_MODULEaxis — three verbatim inline test-side literals (one caixa-flux drift- detection navigator + two caixa-helm per-values drift-detection navigators, one under the canonical wrap-key + one under the library-name-override wrap-key) collapsed onto the same&'static strso any future rebrand (the substrate moving the capability-list axis tocaps:for terse-schema parity with the WASI-preview-2 upstream naming, splitting intocapabilities.wasi.*/capabilities.pleme.*runtime-vs-substrate discriminators, or the M4 WIT Component Model materializer moving to a typedimports:/exports:split) reaches every consumer by construction. SeeCOMPUTEUNIT_SPEC_KEY_MODULEfor the full lift rationale. - COMPUTEUNIT_
SPEC_ KEY_ MODULE - Canonical
wasm.pleme.io/v1alpha1/ComputeUnitCRDspec.moduleper-CR wasm-module-reference sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to name the wasm component (module.source: oci://...for OCI-hosted binaries,module.source: file://...for locally-mounted wasm bundles) the M2.5 wasm-engine instantiator loads at Servico bring-up. The single source of truth every downstream consumer that reads or emits the per-CR module sub-block reaches for: - COMPUTEUNIT_
SPEC_ KEY_ TRIGGER - Canonical
wasm.pleme.io/v1alpha1/ComputeUnitCRDspec.triggerper-CR invocation-trigger sub-block key — the top-levelspec.*child every renderedComputeUnitYAML carries to name how the wasm component is invoked (trigger.service.{port, paths}for HTTP-triggered Servicos,trigger.subscription.{subject}for the future NATS-triggered Servicos the M4:contratostyped-mesh pubsub axis will emit). Peer ofCOMPUTEUNIT_SPEC_KEY_MODULEon the same ComputeUnit CRD per-spec.*sub-block surface —COMPUTEUNIT_SPEC_KEY_MODULEnames the per-CR wasm-binary reference axis, this constant names the per-CR invocation-shape axis every downstream trigger consumer (thepleme-computeunitlibrary chart’s per-Servicotrigger.service.port/trigger.service.paths/trigger.service.breathabilityvalues- block routing, the future M4 pubsub-subscription binding, thecaixa-meshCiliumNetworkPolicyL4-port fallback that reads the destination Servico’s per-trigger.service.portaxis via a future resolver round-trip) reaches for. Same lift trajectory as the siblingCOMPUTEUNIT_SPEC_KEY_MODULEaxis — three verbatim inline test-side literals (one caixa-flux drift-detection navigator - COMPUTEUNIT_
YAML_ SUFFIX - The canonical compound suffix every
:servicosentry — the ComputeUnit-CR axis the M2 typed-substrate caixa-helm / caixa-flux renderers consume viaserde_yaml::from_str— must terminate in. Two-segment shape (.computeunit.yaml) rather than a single.yamlextension: the.computeunitsegment routes authoring-time to the typedComputeUnitCR shape thepleme-computeunitlibrary chart resolves, distinguishing the slot’s accepted set from the open.yamluniverse (Helmvalues.yaml, FluxCDKustomization.yaml, the generic K8s manifest YAML every operator emits) — same axis-discipline the peerLISP_SOURCE_EXTENSIONsibling carries on the tatara-lisp- source axis but with a compound suffix becausePath::extensiononly returns the post-last-.segment ("yaml"forfoo.computeunit.yaml), so the predicate routes throughPath::file_nameand a stringends_withcheck on the full suffix instead. - CONTRATO_
AUTHOR_ KEY_ DE - Canonical author-facing kebab-case
(:de "<caixa>")per-:contratosentry source-endpoint sub-slot label the M3 Aplicacao’s WIT-typed inter-Servico edge set surfaces under. Names the “edge tail” — which member:contratosentrynoriginates from — per MESH-COMPOSITION §IV table row “:contratos| typed inter-Servico edges | each :de + :para must be in :membros; :wit must reference a registered WIT world”. - CONTRATO_
AUTHOR_ KEY_ PARA - Canonical author-facing kebab-case
(:para "<caixa>")per-:contratosentry target-endpoint sub-slot label the M3 Aplicacao’s WIT-typed inter-Servico edge set surfaces under. Names the “edge head” — which member:contratosentrynterminates at — per MESH-COMPOSITION §IV table row “:contratos| typed inter-Servico edges | each :de + :para must be in :membros”. Peer ofCONTRATO_AUTHOR_KEY_DEon the sibling:contratosper-entry endpoint-shape axis; seeCONTRATO_AUTHOR_KEY_DEfor the full lift rationale. - 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 (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. - CONTRATO_
KEY_ DE - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::WitContractstruct’sdeper-entry source-endpoint-of-the-contract axis — thede:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::WitContractemits at each:contratosentry, and the exact scalar every downstream consumer reaching for the caller-Servico name viaValue::get(...)(the future wasm-operator’s per-:contratosedge resolver, the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission webhook per-edge cross-check, thefeira app graphverb’s per-edge tail-label lookup, the future per-:contratosCiliumNetworkPolicyemitter’s per-edgefromEndpointsselector projection) must probe on. - CONTRATO_
KEY_ PARA - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::WitContractstruct’sparaper-entry target-endpoint-of-the-contract axis. Peer ofCONTRATO_KEY_DEon the samecrate::aplicacao::WitContractper-entry serialized-key axis; seeCONTRATO_KEY_DEfor the full lift rationale. The Rust field is lowercasepara;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - CONTRATO_
KEY_ WIT - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::WitContractstruct’switper-entry WIT-world-reference-of-the-contract axis — the discriminator every downstream WIT-shape dispatcher ([crate::wit_shape_is_http] / [crate::wit_shape_is_pubsub] / [crate::wit_shape_is_store], the future M4 per-edge WIT registry resolver, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission-time WIT-world classification) keys off. Peer ofCONTRATO_KEY_DEon the samecrate::aplicacao::WitContractper-entry serialized-key axis; seeCONTRATO_KEY_DEfor the full lift rationale. The Rust field is lowercasewit;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - DEFAULT_
FLUX_ CHART_ SOURCE_ SUBPATH - Canonical Flux v2
HelmRelease.spec.chart.spec.chartper-CR chart- directory-in-GitRepository-source sub-path scalar everycaixa-flux-emittedhelmrelease.yamldocument declares as the default chart-directory-in-git-source pointer when the per-caixaClusterBundleOpts::for_caixaseed doesn’t carry an operator- pinned override. The Flux v2 source-controller resolves the pointer relative to the pairedFLUX_KIND_GIT_REPOSITORYthe siblingFLUX_KEY_SOURCE_REF-keyedsourceRef:block names — the substrate’s canonical contract with every caixa Servico’s git repository is that the per-caixalareira-<nome>chart the peercaixa-helmrenderer emits lives at the./chart/sub-tree of the repository root, so the helm-controller’s per-CR chart-open loop keys off this exact scalar to locate theHELM_CHART_YAML_FILENAME+HELM_VALUES_YAML_FILENAMEpair the per-caixa rendered chart declares. Every rendered per-caixaHelmReleaseCR consults the same&'static strat seed time so a future substrate-side chart-directory-in-git-source rebrand ("chart"→"charts"once a per-caixa multi-chart layout lands and the substrate publishes N siblinglareira-<nome>/charts under one git repository,"chart"→"helm"on a cross-language convention alignment with sibling wasm-runtime substrates,"chart"→"deploy"on a per-caixa-deploy-directory naming migration) is a one-line edit on this canonical declaration, not a coordinated rewrite across the [ClusterBundleOpts] default seed and every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ KUSTOMIZATION_ TIMEOUT - Canonical Flux v2
Kustomization.spec.timeoutper-CR reconcile wall-clock cap default the substrate seeds into every per-caixakustomization.yamldocument. Every rendered per-caixa Flux v2KustomizationCR consults the same&'static strat emit time so a future substrate-side reconcile-ceiling migration ("5m"→"3m"on faster per-caixa idempotency-checkpoint cadence once the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTretry-ceiling tightens,"5m"→"10m"on larger per-caixa manifest sets where the upstream Flux v2 kustomize-controller-side per-CR reconcile duration outgrows the substrate’s default ceiling — coordinated with the siblingDEFAULT_FLUX_RECONCILE_INTERVALreconcile-poll cadence tuning cycle) is a one-line edit on this canonical declaration, not a coordinated rewrite across the [cluster_bundle]kustomization.yamltemplate + every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ RECONCILE_ INTERVAL - Canonical Flux v2
spec.intervalreconcile-poll cadence duration scalar everycaixa-flux-emitted Flux v2 CR (the per-caixacluster_bundletriplet’sGitRepository+HelmRelease+Kustomization) declares as its default reconcile-schedule when the per-caixaClusterBundleOpts::for_caixaseed doesn’t carry an operator-pinned override. Every rendered per-caixa Flux v2 CR consults the same&'static strat seed time so a future substrate-side reconcile-cadence migration ("10m"→"5m"once the Flux v2 source- controller / helm-controller / kustomize-controller trio ships lower- latency-poll optimizations that make per-CR cluster load safe at a faster cadence,"10m"→"15m"on cost-optimized clusters where the per-CR source-controller poll cost outweighs the reconcile-freshness gain) is a one-line edit on this canonical declaration, not a coordinated rewrite across the [ClusterBundleOpts] default seed and every future per-target renderer the substrate adds. - DEFAULT_
FLUX_ SYSTEM_ NAMESPACE - Canonical FluxCD installation namespace every
caixa-fluxKustomizationdocument apply-targets. The single source of truth both axes of the renderedkustomization.yamldocument reach for: - DEFAULT_
GATEWAY_ CLASS_ NAME - Canonical K8s Gateway API
GatewayClassname everycaixa-mesh-emittedGatewaydocument declares at itsspec.gatewayClassNameaxis — the controller-discriminator that binds the emittedGatewayto a specificGatewayClassresource, which in turn names the controller (spec.controllerName) that reconciles everyHTTPRoute/GRPCRoute/TLSRoute/TCPRouteattached toGateways bound to that class. - DEFAULT_
LIBRARY_ NAME - Canonical Helm library-chart name every
lareira-<nome>chart depends on — thepleme-computeunitlibrary chart inpleme-io/helmworks/charts/pleme-computeunitthat owns the K8s resource templates (ComputeUnit + Service + ScaledObject + ConfigMap) every per-Servico chart consumes via Helm’s per-dep alias convention (when noalias:is set on a dependency, values are scoped under the dependency’sname:). - DEFAULT_
NAMESPACE - Default cluster-wide K8s namespace every caixa renderer emits
objects into when the source caixa doesn’t pin its own. The single
source of truth both
caixa-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. - DEP_
AUTHOR_ KEY_ DEPS - Canonical author-facing kebab-case
(defcaixa … :deps ((…)))top- level dep-list slot label the two-list dependency-graph slot family surfaces under. Peer ofDEP_AUTHOR_KEY_DEPS_DEVon the two-list dep-graph slot axis::depsnames the runtime-closure dep-list (everyCargo.toml [dependencies]equivalent — reached by every build the caixa participates in), the sibling:deps-devnames the dev-only dep-list (everyCargo.toml [dev-dependencies]equivalent — reached only by test / dev-shim builds). - DEP_
AUTHOR_ KEY_ DEPS_ DEV - Canonical author-facing kebab-case
(defcaixa … :deps-dev ((…)))top-level dep-list slot label the dev-only two-list dependency-graph slot family surfaces under. Peer ofDEP_AUTHOR_KEY_DEPSon the two-list dep-graph slot axis; seeDEP_AUTHOR_KEY_DEPSfor the full lift rationale. - DEP_
SOURCE_ KEY_ TIPO - Canonical lowercase JSON/YAML discriminator-key the
crate::dep::DepSourceenum’s#[serde(tag = "tipo", rename_all = "lowercase")]derive emits as the tag axis at each serializedDep.fonteblock — the load-bearing byte-string every downstream consumer reading a Dep source (the [caixa_resolver] per-:depsgit-clone dispatcher, the futurefeira lock/feira resolvelacre.lispclosure writer, every test payload that reachesValue::get(DEP_SOURCE_KEY_TIPO)to pin the variant discriminator) must probe on. Peer of the two variant tag constsDEP_SOURCE_TIPO_GITandDEP_SOURCE_TIPO_PATHthe siblingrename_all = "lowercase"axis lifts on the same discriminator block: theDEP_SOURCE_KEY_TIPOconst names the outer tag key ("tipo":) thetag = "tipo"attribute pins, the twoDEP_SOURCE_TIPO_*consts name the two admitted tag values ("git"/"path") therename_all = "lowercase"attribute pins as the discriminator’s closed-set arms. - DEP_
SOURCE_ TIPO_ GIT - Canonical lowercase JSON/YAML discriminator-value the
crate::dep::DepSource::Gitvariant surfaces under — the"git"scalar the#[serde(tag = "tipo", rename_all = "lowercase")]derive emits at theDEP_SOURCE_KEY_TIPOaxis for the Git arm. Peer ofDEP_SOURCE_TIPO_PATHon the sibling closed-set variant-tag axis; seeDEP_SOURCE_KEY_TIPOfor the full lift rationale. The scalar is derived from the Rust variant nameGitby therename_all = "lowercase"derive; ASCII-lowercase ofGitisgit. - DEP_
SOURCE_ TIPO_ PATH - Canonical lowercase JSON/YAML discriminator-value the
crate::dep::DepSource::Pathvariant surfaces under — the"path"scalar the#[serde(tag = "tipo", rename_all = "lowercase")]derive emits at theDEP_SOURCE_KEY_TIPOaxis for the Path arm. Peer ofDEP_SOURCE_TIPO_GITon the sibling closed-set variant-tag axis; seeDEP_SOURCE_KEY_TIPOfor the full lift rationale. - DNS_
1123_ LABEL_ MAX_ LEN - K8s DNS-1123 label rule’s max length, in bytes — the floor each
apiserver-side schema enforces independently on every
metadata.name/ Service name / label value axis a validated identifier lands in. - ENTRADA_
KEY_ HOST - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Entradastruct’shostexternal-hostname axis — thehost:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::Entradaemits at the singleton:entradablock, and the exact scalar every downstream consumer reaching for the external hostname viaValue::get(...)(the [caixa_mesh] Gateway/HTTPRoute emitter’s per-Aplicacaospec.hostnamesprojection underGATEWAY_API_KEY_HOSTNAME/GATEWAY_API_KEY_HOSTNAMES, the futureapp-operatorreconciler’s per-Aplicacao ingress-hostname bind, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission-time hostname cross-check against the cluster’s declaredGATEWAY_API_HOSTNAME_MAX_LENdiscipline) must probe on. - ENTRADA_
KEY_ PARA - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Entradastruct’sparadestination-member axis — thepara:field naming which:membrosentry the external Gateway routes to. Peer ofENTRADA_KEY_HOSTon the samecrate::aplicacao::Entradasingleton serialized-key axis; seeENTRADA_KEY_HOSTfor the full lift rationale. The Rust field is lowercasepara;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - ENTRADA_
KEY_ PATHS - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Entradastruct’spathsper-Aplicacao path-filter axis — thepaths:sequence the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive emits at the singleton:entradablock, and the exact scalar every downstream per-:entrada :pathsHTTPRoute-match-projection consumer must probe on (the [caixa_mesh] HTTPRoute emitter’s per-Aplicacaomatches[]projection underGATEWAY_API_KEY_MATCHES, defaulting toGATEWAY_API_DEFAULT_HTTP_ROUTE_PATHwhen the slot is empty per 48e2083). Peer ofENTRADA_KEY_HOSTon the samecrate::aplicacao::Entradasingleton serialized-key axis; seeENTRADA_KEY_HOSTfor the full lift rationale. The Rust field is lowercasepaths;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - ENTRADA_
KEY_ PORT - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Entradastruct’sportdestination-Servico port axis — theport:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive emits at the singleton:entradablock, defaulting via [crate::aplicacao::default_port] tocrate::DEFAULT_SERVICO_PORTwhen the author omits the slot. Peer ofENTRADA_KEY_HOSTon the samecrate::aplicacao::Entradasingleton serialized-key axis; seeENTRADA_KEY_HOSTfor the full lift rationale. The Rust field is lowercaseport;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - FLEET_
PROGRAMS_ KEY_ APLICACAO - Canonical
lareira-fleet-programsvalues-schema key naming the per-entry parent-Aplicacao-graph discriminator — theaplicacao:annotation the substrate operator’s fleet-aggregator reads to group each renderedprograms[]entry back onto the parent Aplicacao its M3:membroslist contributed it, and the exact key downstream fleet consumers (per-graph observability filters, per-Aplicacao Cilium-policy reconciliation, per-graph Gateway/HTTPRouteattachment) walk to project the flatprograms[]sequence back onto its typed Aplicacao graph. - FLEET_
PROGRAMS_ KEY_ NAME - Canonical
lareira-fleet-programsvalues-schema key naming the per-entry name discriminator — thename:field the library chart’srange .Values.programsstep reads to key each renderedComputeUnitCR’smetadata.nameoff, and the exact key both writer-side upsert paths in [caixa_flux] match against to replace-in-place-vs-append. Peer ofFLEET_PROGRAMS_KEY_PROGRAMSon the same fleet-programs values schema — that constant names the top-level array key, this one names the per-entry name-axis both writer verbs walk the array by. - FLEET_
PROGRAMS_ KEY_ PROGRAMS - Canonical
lareira-fleet-programsvalues-schema key naming the per-caixa entry sequence — the exact YAML key the fleet-programs library chart’svalues.yamlreads asprograms:(a sequence of per-Servico entries the chart’srangeiterates over to emit oneComputeUnitCR per entry). Two production consumers in [caixa_flux] carry this key on the same fleet-programs schema axis: - FLEET_
PROGRAMS_ KEY_ VERSAO - Canonical
lareira-fleet-programsvalues-schema key naming the per-entry version-constraint discriminator — theversao:field each renderedprograms[]entry carries so the substrate operator’s per-:membrosresolver can resolve each member’s caixa.lisp against its Aplicacao-declared version-constraint. Every:membrosrow’s:versao(the semver / range constraint the M3 Aplicacao names on its:membroslist) flows through this exact key on the emitted per-entry programs.yaml row. - FLUX_
GITREPOSITORY_ API_ VERSION - Canonical FluxCD
GitRepositoryCRDapiVersioneverycaixa-fluxgitrepository.yamldocument emits. The Flux v2source-controllerwatches resources at this exact group/version (source.toolkit.fluxcd.io/v1); drift to a stalev1beta1/v1beta2(the pre-GA Flux v2 source-controller betas every upstream Flux GA- migration doc names) silently routes the renderedGitRepositoryoutside the controller’sWatchesand breaks at apply time with a non-self-locating “no kind ‘GitRepository’ is registered for version ‘source.toolkit.fluxcd.io/v1beta2’” error far from the source caixa.lisp / the renderer’s format-string template. - FLUX_
GITREPOSITORY_ KEY_ REF - Canonical Flux v2 per-
GitRepositoryspec.refref-selection discriminated-union parent container-axis key everycaixa-flux- emittedgitrepository.yamldocument mounts its per-shape{tag, branch, commit}sub-selector arm under. Nests one level above the siblingFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_BRANCH/FLUX_GITREPOSITORY_REF_KEY_COMMITtriple it wraps — the K8s Flux v2source.toolkit.fluxcd.io/v1GitRepositoryCRD schema pins the per-CR ref-selection through thisspec.refcontainer- axis, and every renderedspec.ref.{tag,branch,commit}arm the [caixa_flux::GitRefSpec] discriminated-union emits nests beneath this exact key. - FLUX_
GITREPOSITORY_ KEY_ URL - Canonical Flux v2
GitRepository.spec.urlper-CR remote-repo-URL leaf-scalar-axis key everycaixa-flux-renderedgitrepository.yamldocument declares. The FluxCDsource-controllerreadsspec.urlas the git remote URL it clones per-reconcile — the authoritative remote the per-Servico artifact archive is sourced from at every reconcile cycle. A drifted key (e.g."URL","gitUrl","repo","repository") at the writer site would silently emit aGitRepositorywhose CRD schema validator drops the URL field as unknown, and the per-Servico artifact would never populate — the downstreamHelmRelease.spec.chart.spec.sourceRefreference dangles with an empty artifact at admission, every renderedHelmRelease/Kustomizationbundle document downstream silently no-ops at reconcile time with no field naming the URL-key-drift root cause. - FLUX_
GITREPOSITORY_ REF_ KEY_ BRANCH - Canonical Flux v2 per-
GitRepositoryspec.ref.branchgit-branch-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a branch-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_COMMITon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. - FLUX_
GITREPOSITORY_ REF_ KEY_ COMMIT - Canonical Flux v2 per-
GitRepositoryspec.ref.commitgit-commit-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a commit-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_TAG/FLUX_GITREPOSITORY_REF_KEY_BRANCHon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis; seeFLUX_GITREPOSITORY_REF_KEY_TAGfor the full lift rationale. - FLUX_
GITREPOSITORY_ REF_ KEY_ TAG - Canonical Flux v2 per-
GitRepositoryspec.ref.taggit-tag-selector scalar-axis key everycaixa-flux-emittedgitrepository.yamldocument declares when the per-Servico bundle’sgit_refis a tag-shaped selector. Peer ofFLUX_GITREPOSITORY_REF_KEY_BRANCH/FLUX_GITREPOSITORY_REF_KEY_COMMITon the sibling per-shape arms of theFluxCDsource-controllerGitRepository.spec.refref-selection discriminated-union axis — the three-way sub-selector key set the Flux v2source-controllerreads to bind the per-CR git-source clonerefspecfrom the (tag | branch | commit) input triple. A drifted value at any of the three keys ("Tag"/"gitTag"/"tagName"at this arm,"Branch"/"gitBranch"at the sibling arm,"Commit"/"sha"/"revision"at the third arm) silently dangles the wholespec.refsub-block at theFluxCDsource-controller’s CRD registration; the per-Servico clone never resolves at reconcile time and the siblingHelmRelease.spec.chart.spec.sourceRefreference dangles at admission with no field naming the sub-selector-key-drift root cause. Changing this value is a coordinated Flux v3 migration alongside the upstreamfluxcd/flux2deprecation cycle, not an incidental edit. - FLUX_
GITREPOSITORY_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
GitRepositorydocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinghelmrelease.yaml+kustomization.yamldocuments key against when the cluster-sideFluxCDsource-controllerreconciles the per-Servico Git-source poll cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - FLUX_
HELMCHART_ TEMPLATE_ KEY_ CHART - Canonical Flux v2
HelmChartTemplate.spec.chartper-CR chart-NAME- reference leaf-scalar-key everycaixa-flux-emittedHelmReleasedocument nests inside the parentspec.chart.specsub-document (theHelmChartTemplate.specblock the parentFLUX_KEY_CHART(8467748) container-axis key opens; a nestedKUBE_KEY_SPECaxis inside that container hosts this leaf plus its siblingFLUX_KEY_SOURCE_REFper-CR source-reference triple). - FLUX_
HELMRELEASE_ API_ VERSION - Canonical FluxCD
HelmReleaseCRDapiVersioneverycaixa-fluxhelmrelease.yamldocument emits. The Flux v2helm-controllerwatches resources at this exact group/version (helm.toolkit.fluxcd.io/v2); drift to a stalev2beta1/v2beta2(the pre-GA Flux v2 betas every upstream Flux GA-migration doc names) silently routes the renderedHelmReleaseoutside the controller’sWatchesand breaks at apply time with a non-self-locating “no kind ‘HelmRelease’ is registered for version ‘helm.toolkit.fluxcd.io/v2beta2’” error far from the source caixa.lisp / the renderer’s format-string template. - FLUX_
HELMRELEASE_ CREATE_ NAMESPACE_ DEFAULT - Canonical Flux v2
HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_CREATE_NAMESPACEleaf-scalar-key axis. Pairs with the siblingFLUX_HELMRELEASE_KEY_CREATE_NAMESPACE(ba9ab8b) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR install-path per-CR namespace-seeder-toggle declaration pair — the Flux v2 helm-controller’s per-CR install-path pre-apply loop reads the scalar under that exact leaf key to decide whether to first materialize the target namespace before the first-time chart apply, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen first-apply namespace-seeder semantic between the operator-facing canonical default and every per-caixaHelmReleasedocument’s per-CR install- path namespace-seeder-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format- string template). - FLUX_
HELMRELEASE_ KEY_ CREATE_ NAMESPACE - Canonical Flux v2
HelmRelease.spec.install.createNamespaceinstall-path- only per-CR namespace-seeder-toggle leaf-scalar-key everycaixa-flux- emittedhelmrelease.yamldocument seeds totrueunder the siblingFLUX_HELMRELEASE_KEY_INSTALLper-CR install-path phase-discriminator parent-container-axis-key. Peer to the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREupgrade-path-only per-CR remediation-toggle leaf-scalar-key at the co-resident per-CR install/ upgrade phase-discriminator parent-container position — closes thespec.{install.createNamespace, upgrade.remediation.remediateLastFailure}per-path per-CR phase-specific toggle leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR:createNamespacegates the “the Flux v2 helm-controller creates the target namespace itself if the emittedHelmRelease.metadata.namespace(or itsspec.targetNamespaceoverride) does not already exist” install-path pre-apply seeder pipeline, whileremediateLastFailuregates the upgrade-path post-retry-exhaustion rollback pipeline. The Flux v2 helm- controller-side per-CR install-path pre-apply loop keys off this exact leaf to decide whether to first materialize the target namespace or refuse the first-time chart apply when the target namespace does not yet exist (false); drift on this axis silently drops the substrate’s chosen first-apply namespace-seeder semantic from every emitted per- caixaHelmReleasedocument (the helm-controller then refuses every first-time per-caixa chart apply against a fresh cluster whose target namespace has not been pre-provisioned by an out-of-band pipeline — the substrate’s “no per-caixa Servico apply is blocked on manual namespace preprovisioning” MESH-COMPOSITION.md §V install-path-fluency guarantee silently regresses, with no diagnostic naming the seeder- toggle-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ INSTALL - Canonical Flux v2
HelmRelease.spec.installper-CR helm-action-phase discriminator parent-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key under, at the first-time chart apply per-CR phase the Flux v2 helm- controller reconciles when the emittedHelmReleaseCR first lands in the cluster. Pairs with the siblingFLUX_HELMRELEASE_KEY_UPGRADEper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR upgrade-path phase the helm-controller reconciles on every subsequent per-version chart re-apply the same CR gates. The Flux v2 helm-controller-side per-CR phase-dispatch loop keys off this exact parent-container-axis-key to select the install-path per-CR action pipeline (createNamespaceseeder, first-time chart values merge,spec.install.remediation.retriesretry-cap ceiling under the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container), so drift on this axis is exactly as load-bearing as drift on the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key it hosts (a"initialize"/"apply"/"create"/"first-run"typo at the production-code call site silently strips the entire install-path per-CR phase block from the emitted per-CR document — the helm- controller then falls back to the Flux v2 upstream defaults for the whole install-path phase surface rather than the substrate’s chosen per-CR install-path knob-set —createNamespacenever fires, the per-CR retry-cap ceiling silently drops off the emitted document, with no diagnostic naming the phase-discriminator-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ REMEDIATE_ LAST_ FAILURE - Canonical Flux v2
HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle leaf-scalar-key everycaixa-flux-emittedhelmrelease.yamldocument seeds totrueunder the siblingFLUX_HELMRELEASE_KEY_UPGRADEper-CR upgrade-path phase- discriminator parent-container-axis-key’s nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key. Sibling to the peerFLUX_HELMRELEASE_KEY_RETRIESretry-cap leaf-scalar-key at the same per-CR upgrade-path per-CR remediation sub-container position — closes thespec.upgrade.remediation.{retries, remediateLastFailure}per-path remediation-block leaf-scalar-key pair the substrate seeds into every emitted per-caixaHelmReleaseCR on the upgrade-path per-CR remediation block, with retries capping the per-version chart re-apply retry-count and remediateLastFailure gating the “the Flux v2 helm- controller must actively remediate — roll back to the prior success — when the final per-version chart re-apply attempt still fails” post- retry-exhaustion behavior. The Flux v2 helm-controller-side per-CR upgrade-path remediation loop keys off this exact leaf to decide whether to leave a failed upgrade in place (false) or trigger the prior-release rollback pipeline (true); drift on this axis silently drops the substrate’s chosen post-retry-exhaustion rollback semantic from every emitted per-caixaHelmReleasedocument (the helm- controller then leaves every terminally-failed upgrade in the failed state without rolling back to the prior last-known-good release the substrate’s “no chart apply leaves a per-caixa CR in a stalled, unremediated state” MESH-COMPOSITION.md §V guarantee mandates — with no diagnostic naming the remediation-toggle-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ REMEDIATION - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediationsub-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_RETRIESretry-cap leaf-scalar-key under, at both the install-path + upgrade-path per-CR remediation blocks. The parent-container-axis-key half of the same(container-axis-key, leaf-scalar-key, scalar-value)per-path retry-cap declaration triple the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value - FLUX_
HELMRELEASE_ KEY_ RETRIES - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediation.retriesleaf scalar-key everycaixa-flux-emittedhelmrelease.yamldocument carries at both its install-path + upgrade-path per-CR remediation blocks. Peer to the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULT(30dcdae) scalar-value half of the same(leaf-key, scalar-value)per-path retry-cap declaration pair — the Flux v2 helm-controller’s per-CR remediation loop reads the scalar under this exact leaf key, so drift on either axis is equally load-bearing (a typo on the leaf-key silently strips the retry-cap declaration from the emittedremediation:sub-block — the helm-controller then falls back to the Flux v2 upstream default rather than the substrate’s chosen ceiling — with no diagnostic naming the leaf-key-drift root cause far from the source caixa.lisp / the renderer’s format-string template). - FLUX_
HELMRELEASE_ KEY_ UPGRADE - Canonical Flux v2
HelmRelease.spec.upgradeper-CR helm-action-phase discriminator parent-container-axis-key everycaixa-flux-emittedhelmrelease.yamldocument nests the siblingFLUX_HELMRELEASE_KEY_REMEDIATION(6fe4e7e) sub-container-axis-key under, at every subsequent per-version chart re-apply per-CR phase the Flux v2 helm-controller reconciles after the initial install-path phase completes. Pairs with the siblingFLUX_HELMRELEASE_KEY_INSTALLper-CR helm-action-phase discriminator parent-container-axis-key on the peer per-CR install-path phase the helm-controller reconciles at first-time chart apply. The Flux v2 helm-controller-side per-CR phase-dispatch loop keys off this exact parent-container-axis-key to select the upgrade-path per-CR action pipeline (remediateLastFailuretoggle the substrate pins totrueon the upgrade-path per-CR sibling axis, the per-CR retry-cap ceiling under the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container), so drift on this axis is exactly as load-bearing as drift on the nestedFLUX_HELMRELEASE_KEY_REMEDIATIONsub-container-axis-key it hosts (a"reapply"/"reconcile"/"update"/"promote"typo at the production-code call site silently strips the entire upgrade- path per-CR phase block from the emitted per-CR document — the helm- controller then falls back to the Flux v2 upstream defaults for the whole upgrade-path phase surface rather than the substrate’s chosen per-CR upgrade-path knob-set —remediateLastFailurenever fires, the per-CR retry-cap ceiling silently drops off the emitted document, with no diagnostic naming the phase-discriminator-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ REMEDIATE_ LAST_ FAILURE_ DEFAULT - Canonical Flux v2
HelmRelease.spec.upgrade.remediation.remediateLastFailureupgrade-path-only per-CR remediation-toggle scalar-value default the substrate seeds into every per-caixahelmrelease.yamldocument at the pairedFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILUREleaf-scalar-key axis. Pairs with the siblingFLUX_HELMRELEASE_KEY_REMEDIATE_LAST_FAILURE(96581b7) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR upgrade-path per-CR post-retry-exhaustion-rollback-toggle declaration pair — the Flux v2 helm-controller’s per-CR upgrade-path remediation loop reads the scalar under that exact leaf key to decide whether to trigger the prior-release rollback pipeline once the pairedFLUX_HELMRELEASE_KEY_RETRIESretry-cap ceiling has been exhausted, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen post-retry- exhaustion rollback semantic between the operator-facing canonical default and every per-caixaHelmReleasedocument’s per-CR upgrade- path remediation-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
HELMRELEASE_ REMEDIATION_ RETRIES_ DEFAULT - Canonical Flux v2
HelmRelease.spec.{install,upgrade}.remediation.retriesbounded retry-count scalar everycaixa-flux-emittedhelmrelease.yamldocument declares under both the install-path and the upgrade-pathremediationblocks. The Flux v2helm-controllerper-CRInstall/Upgradeaction reconciler consumes this scalar as the ceiling on the number of times it will re-attempt a failed Helm install or Helm upgrade before it marks theHelmReleaseReady: Falseand stops retrying — the substrate’s canonical “how many times we let Flux re-try a chart apply before it stops” contract with the helm-controller-side per-CR remediation loop. - FLUX_
HELMRELEASE_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
HelmReleasedocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinggitrepository.yaml+kustomization.yamlbundle documents key against when the cluster-sideFluxCDcontrollers reconcile the per-Servico release cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - FLUX_
KEY_ CHART - Canonical Flux v2 per-
HelmReleaseinline-chart-template container-axis key everycaixa-flux-emittedHelmReleasedocument nests its per-CR chart-template block under (spec.chartonHelmRelease) — the Flux v2 CRD schema places theHelmChartTemplatesub-document (whose nestedspec.chartstring names the referenced chart,spec.sourceRefnames the source-of-truth(kind, name, namespace)triple, andspec.intervalnames the per-CR reconcile cadence) under this single container key, so drift on the container axis silently dangles the whole chart-template block the Flux v2helm-controller’s per-CR reconcile loop reads to source the referenced chart at Helm-render time (a"Chart"/"chartTemplate"/"helmChart"/"chartRef"typo at either the emit-side format-string template or a downstream test- fixture probe silently dangles theHelmRelease.spec.chartchart- template resolution at the Flux v2 helm-controller’s CRD registration; the referenced chart never resolves, and the per-Servico workload freezes at apply time with no field naming the container-axis-drift root cause). - FLUX_
KEY_ HEALTH_ CHECKS - Canonical Flux v2 per-
Kustomizationhealth-gate reference-list container-axis key everycaixa-flux-emittedkustomization.yamldocument mounts its per-sibling-HelmReleasehealth-probe list under (spec.healthChecksonKustomization) — the Flux v2 CRD schema places the[]NamespacedObjectKindReferencelist under this single container key, so drift on the container axis silently dangles the whole per- Kustomization health-gate the Flux v2kustomize-controller’s per-CR reconcile loop reads to gateReady=Trueon the referenced siblingHelmReleasereaching itsHelmReleaseReady=Truecondition (a"HealthChecks"/"healthchecks"/"healthcheck"/"health_checks"/"probes"typo at either the emit-side format- string template or a downstream test-fixture probe silently dangles the parentKustomizationatReconcilingforever at the Flux v2 kustomize-controller’s health-gate evaluation; the dependent per- cluster fleet-programs upsert chain never seesReady=Trueat apply time with no field naming the container-axis-drift root cause). - FLUX_
KEY_ INTERVAL - Canonical Flux v2 per-CR reconcile-poll cadence scalar-axis key every
caixa-flux-emitted Flux document (GitRepository,HelmRelease,Kustomization) declares its per-CRspec.intervalreconcile cadence under. Unlike the sibling per-CR body-key axes (FLUX_KEY_SOURCE_REF,FLUX_KEY_CHART,FLUX_KEY_VALUES,FLUX_KEY_HEALTH_CHECKS) which each land on exactly one of the three Flux v2 controller CRDs, the reconcile-poll cadence scalar-axis is the shared Flux v2 per-CR contract every controller (thesource-controller, thehelm-controller, thekustomize-controller) reads to schedule its per-CR reconcile loop off the sibling per-CR CRD registration. Drift on the scalar-axis key silently drops the per-CR reconcile schedule from the Flux v2 controllers’ per-CR watch registrations — a"Interval"/"period"/"cadence"/"pollInterval"/"reconcileInterval"typo at any of the three emit-side format-string template sites silently drops the per-CR reconcile schedule from the affected Flux v2 controller’s per-CR watch registration; the referenced Git source never re-polls / the referenced chart never re-templates / the parent Kustomization never re-applies at upstream drift, freezing the whole cluster’s per-caixaper-cluster bundle at the last-applied snapshot with no field naming the scalar-axis-drift root cause. - FLUX_
KEY_ SOURCE_ REF - Canonical Flux v2 per-
HelmRelease/Kustomizationsource-reference container-axis key everycaixa-flux-emitted bundle document mounts its per-CR source-of-truth pointer under (spec.chart.spec.sourceRefonHelmRelease,spec.sourceRefonKustomization) — the Flux v2 CRD schema places the(kind, name, namespace)reference triple under this single container key, so drift on the container axis is exactly as load-bearing as drift on the siblingFLUX_KIND_GIT_REPOSITORY(dbbcf29) kind-discriminator +DEFAULT_FLUX_SYSTEM_NAMESPACE(7197d38) namespace axes the block nests (a"source_ref"/"source"/"sourceReference"/"gitSourceRef"typo at either the emit-side format-string template or a downstream test-fixture probe silently dangles theHelmRelease.spec.chart.spec.sourceRefchart resolution + theKustomization.spec.sourceRefsource resolution at the Flux v2 source-controller’s CRD registration; the source-controller’s per-CR reconcile loop keys off this exact container axis to source the(kind, name, namespace)reference triple, and a drift silently freezes the dependent per-ServicodependsOnchain at apply time with no field naming the sourceRef-container-drift root cause). - FLUX_
KEY_ VALUES - Canonical Flux v2 per-
HelmReleasevalues-override block-body-axis key everycaixa-flux-emittedHelmReleasedocument nests its per-cluster value overrides under (spec.valuesonHelmRelease) — the Flux v2 CRD schema places the arbitrary per-cluster-override YAML body under this single key, so drift on the block-body-axis silently dangles the per-cluster override thehelm-controller’s per-CR reconcile loop merges into the referenced chart’svalues.yamlat Helm-render time (a"Values"/"vals"/"chartValues"/"overrides"typo at either the emit-side format-string template, theupsert_into_helmrelease_programsupsert-path’sspec.values.programs[]write, or a downstream test-fixture probe silently routes the per-cluster overrides nowhere; the workload silently comes up with the referenced chart’s admission- time defaults, far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KIND_ GIT_ REPOSITORY - Canonical FluxCD
GitRepositoryCRDkinddiscriminator everycaixa-flux-emitted document that names a Flux v2GitRepositoryat aKUBE_KEY_KIND-rooted axis declares. Paired peer to the siblingFLUX_GITREPOSITORY_API_VERSION(8a6c8a3) — 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("source.toolkit.fluxcd.io/v1", "GitRepostiory")typo at any one of the three production-code call sites lands outside the registered Flux v2 source-controller CRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘GitRepostiory’ is registered for version ‘source.toolkit.fluxcd.io/v1’” error far from the source caixa.lisp / the renderer’s format-string template). - FLUX_
KIND_ HELM_ RELEASE - Canonical FluxCD
HelmReleaseCRDkinddiscriminator everycaixa-flux-emitted document that names a Flux v2HelmReleaseat aKUBE_KEY_KIND-rooted axis declares. Paired peer to the siblingFLUX_HELMRELEASE_API_VERSION(55f0fd9) — 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("helm.toolkit.fluxcd.io/v2", "HelmRelase")typo at any one of the two production-code call sites lands outside the registered Flux v2 helm-controller CRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘HelmRelase’ is registered for version ‘helm.toolkit.fluxcd.io/v2’” error far from the source caixa.lisp / the renderer’s format-string template). - FLUX_
KIND_ KUSTOMIZATION - Canonical FluxCD
KustomizationCRDkinddiscriminator everycaixa-flux-emitted document that names a Flux v2Kustomizationat aKUBE_KEY_KIND-rooted axis declares. Paired peer to the siblingFLUX_KUSTOMIZATION_API_VERSION(d2dd1b1) — 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("kustomize.toolkit.fluxcd.io/v1", "Kustomizaton")typo at the production-code call site lands outside the registered Flux v2 kustomize-controller CRD’sRESTKindlookup, surfacing apply-side as a non-self-locating “no kind ‘Kustomizaton’ is registered for version ‘kustomize.toolkit.fluxcd.io/v1’” error far from the source caixa.lisp / the renderer’s format-string template). - FLUX_
KUSTOMIZATION_ API_ VERSION - Canonical FluxCD
KustomizationCRDapiVersioneverycaixa-fluxkustomization.yamldocument emits. The Flux v2kustomize-controllerwatches resources at this exact group/version (kustomize.toolkit.fluxcd.io/v1); drift to a stalev1beta1/v1beta2(the pre-GA Flux v2 kustomize-controller betas every upstream Flux GA-migration doc names) silently routes the renderedKustomizationoutside the controller’sWatchesand breaks at apply time with a non-self-locating “no kind ‘Kustomization’ is registered for version ‘kustomize.toolkit.fluxcd.io/v1beta2’” error far from the source caixa.lisp / the renderer’s format-string template. - FLUX_
KUSTOMIZATION_ KEY_ PATH - Canonical Flux v2
Kustomization.spec.pathper-CR source-sub-tree leaf-scalar-key everycaixa-flux-emittedkustomization.yamldocument seeds under its top-levelspecposition to name the sub- tree of the pairedFLUX_GITREPOSITORY_YAML_FILENAMEGitRepository the Flux v2 kustomize-controller-side per-CR reconcile loop pulls the desired-state manifest set from at reconcile time. Drift on this leaf silently unbinds every per-caixaKustomizationfrom its paired per-caixa sub-tree of the pleme-io k8s repository — the kustomize-controller then either reconciles the whole GitRepository root (when the CR omits the leaf, the controller defaults to./, pulling every unrelated cluster’s manifests through the wrong per-caixaKustomization) or refuses to reconcile at all (when the leaf points at a path the GitRepository doesn’t carry, the CR sits perpetually atBuildFailednaming the missing sub-tree far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KUSTOMIZATION_ KEY_ PRUNE - Canonical Flux v2
Kustomization.spec.pruneper-CR garbage-collection- toggle leaf-scalar-key everycaixa-flux-emittedkustomization.yamldocument seeds totrueat the top-levelspecposition of the emittedKustomizationCR. The Flux v2 kustomize-controller- side per-CR reconcile loop keys off this exact leaf to decide whether to garbage-collect resources that were previously reconciled by the CR but no longer appear in the CR’s current desired-state manifest set (spec.prune: trueopts every emitted per-caixaKustomizationinto the substrate’s canonical GitOps-side sweep-what-you-removed semantic;spec.prune: false(or absent — Flux v2 defaults the axis tofalseon any CR that omits the leaf) leaves orphaned resources dangling in the cluster after the source manifest set removes them, silently splitting per-caixa live cluster state from the caixa’s tatara-lisp source-of-truth and every downstreamfeira app deploy/feira deployreconcile the substrate’s per-caixa GitOps pipeline emits). - FLUX_
KUSTOMIZATION_ KEY_ TIMEOUT - Canonical Flux v2
Kustomization.spec.timeoutper-CR reconcile wall- clock cap leaf-scalar-key everycaixa-flux-emittedkustomization.yamldocument seeds under its top-levelspecposition to name the ceiling on how long the Flux v2 kustomize- controller-side per-CR reconcile loop is allowed to spend applying the pairedFLUX_KUSTOMIZATION_KEY_PATH-scoped sub-tree of the pairedFLUX_GITREPOSITORY_YAML_FILENAMEGitRepository before it marks theKustomizationReady: Falseand stops retrying — the substrate’s canonical “how long we let a per-caixa manifest-set reconcile run before Flux gives up” contract with the kustomize- controller’s per-CR reconcile loop. Drift on this leaf silently strips the substrate’s chosen reconcile-ceiling from every emitted per-caixaKustomizationdocument — the kustomize-controller then falls back to the upstream Flux v2 controller-side default cap (which the upstream project ships at a value tuned for the average upstream Flux-managed manifest set, not the substrate’s per-caixa idempotency-checkpoint cadence the siblingFLUX_HELMRELEASE_REMEDIATION_RETRIES_DEFAULTretry-ceiling andDEFAULT_FLUX_RECONCILE_INTERVALreconcile-poll cadence are jointly tuned against), letting a persistently-failing per-caixa manifest apply consume kustomize-controller reconcile-loop cycles past the substrate’s chosen ceiling with no field naming the timeout-drift root cause. - FLUX_
KUSTOMIZATION_ PRUNE_ DEFAULT - Canonical Flux v2
Kustomization.spec.pruneper-CR garbage-collection- toggle scalar-value default the substrate seeds into every per-caixakustomization.yamldocument at the pairedFLUX_KUSTOMIZATION_KEY_PRUNEleaf-scalar-key axis. Pairs with the siblingFLUX_KUSTOMIZATION_KEY_PRUNE(8ec7917) leaf-scalar-key half of the same(leaf-key, scalar-value)per-CR garbage-collection- toggle declaration pair — the Flux v2 kustomize-controller’s per-CR reconcile loop reads the scalar under that exact leaf key, so drift on either axis is equally load-bearing (a rebrand on this canonical scalar-value default that failed to reach every renderer’s emit site would silently split the substrate’s chosen sweep-what-you-removed semantic between the operator-facing canonical default and every per-caixaKustomizationdocument’s per-CR garbage-collection-toggle, with no field naming the semantic-drift root cause far from the sourcecaixa.lisp/ the renderer’s format-string template). - FLUX_
KUSTOMIZATION_ YAML_ FILENAME - Canonical Flux v2 per-cluster-bundle
Kustomizationdocument filename everycaixa-flux-renderedcluster_bundlecarries at the per-Servico bundle’s rendered file collection — the fixed filename the siblinggitrepository.yaml+helmrelease.yamldocuments key against when the cluster-sideFluxCDkustomize-controllerreconciles the per-Servico apply cycle, and the exact filename every downstream consumer that reaches into the rendered bundle by document name looks up. - GATEWAY_
API_ API_ VERSION - Canonical K8s Gateway API CRD
apiVersioneverycaixa-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_ DEFAULT_ HTTP_ LISTENER_ NAME - K8s Gateway API v1
Gateway.spec.listeners[].name— the substrate’s canonical author-chosen listener-name scalar every Aplicacao-levelcaixa_mesh::gateway_routes-emittedGateway’s sole per- listener name-discriminator axis reads from. Gateway API v1’sListener.nameisSectionName-typed (a required DNS-1123 label unique within the parent Gateway’s listener list — see the upstream docs at https://gateway-api.sigs.k8s.io/api-types/gateway/#listeners and the type reference at https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.SectionName); downstreamHTTPRoute.spec.parentRefs[].sectionNameselectors bind to this exact byte-string when the author wants to attach a route to one specific listener out of a multi-listener Gateway. The V0 substrate emits exactly one HTTP listener per Aplicacao, so the name is arbitrary from the CRD’s perspective — the substrate picks the byte-string"http"as the canonical short name (matching the listener’s protocol axisGATEWAY_API_PROTOCOL_HTTPin kind, but not in bytes: this is the lowercase-ASCII listener-name identifier, the sibling protocol scalar is the uppercase-ASCIIProtocolTypeenum value the Gateway API v1 CRD schema pins). - GATEWAY_
API_ DEFAULT_ HTTP_ LISTENER_ PORT - K8s Gateway API v1
Gateway.spec.listeners[].port— the substrate’s canonical port scalar every Aplicacao-levelcaixa_mesh::gateway_routes-emittedGateway’s sole per- listener HTTP-listener-port axis reads from. IANA-registered as the well-knownhttpservice port (RFC 9110 §4.2.2 / RFC 3986 §3.2.3 — the port implied by anhttp://<host>/…URL when the authority carries no explicit:<port>selector), so the substrate’s external:entradaHTTP flow surfaces athttp://<entrada.host>/with no per-client port override. - GATEWAY_
API_ DEFAULT_ HTTP_ ROUTE_ PATH - K8s Gateway API v1
HTTPRoute.spec.rules[].matches[].path.valuesubstrate-side catch-all path — the fallback URL path every Aplicacao-levelcaixa_mesh::gateway_routes-emittedHTTPRouterenders when the typed:entrada :pathsslot is empty, so an author who declares an external:entradabut no per-path rule surface still gets a route whose soleHTTPPathMatchmatches every incoming request under the pairedGATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIXdiscriminator. K8s Gateway API v1’sPathPrefixmatcher over the bare-root"/"is the canonical catch-all shape — the upstream docs at https://gateway-api.sigs.k8s.io/api-types/httproute/#path-based-routing pin thePathPrefix "/"combination as the “match anything the listener admits” idiom every gateway-class controller (Cilium’s Envoy today, Envoy Gateway / Istio Gateway on the peer controllers) treats as the equivalent of “no path predicate” under the CRD schema. - GATEWAY_
API_ HOSTNAME_ MAX_ LEN - K8s Gateway API v1
Listener.hostnameandHTTPRoute.spec.hostnames[]max length, in bytes — the apiserver-sideOpenAPIschema’smaxLength: 253cap, ultimately the RFC 1035 / RFC 1123 DNS name limit (255 wire bytes minus the trailing-dot + one length prefix). Lifted to a typed const so a future axis reaching for the same bound (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-:entrada :hostvalidator, the future per-CertificateSAN emitter keying off:entrada :hostfor cert-manager, the future multi-:entradahost-collision gate when M4 lands:entradaas aVec) reads the limit from one place. The sole landed call site — the:entrada :hostaxis’s total-length gate atcrate::AplicacaoSpec::validateviavalidate_entrada_host— reads this constant verbatim; drift between the landing site and the K8s CRD schema surfaces at this one const rather than a per-renderer “this passed validate but failed admission” surprise. - GATEWAY_
API_ HTTP_ PATH_ MAX_ LEN - K8s Gateway API v1
HTTPPathMatch.valuemax length, in bytes — the apiserver-sideOpenAPIschema’smaxLength: 1024cap. Lifted to a typed const so a future axis reaching for the same bound (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-path validator, the future per-HTTPRouteRuleper-path-match emission when M4 lands per-rule overrides, the future:politicas-derived per-edge HTTP path overlay’s per-path validator) reads the limit from one place. The two landed call sites —:entrada :pathsentries (caixa-mesh’sHTTPRoute.spec.rules[].matches[].path.valueemission) and:contratos :endpoint(caixa-mesh’s Cilium L7path:rule emission, caixa-mesh/src/lib.rs:311) — both inherit the same cap; drift between either landing site and the K8s CRD schema surfaces at this one const. - GATEWAY_
API_ KEY_ ATTEMPTS - Canonical K8s Gateway API
HTTPRouteper-rule retry-policyattemptsleaf scalar-key everygateway_routes-emittedHTTPRoutedocument mounts its per-rule:politicas :retriestypedu32attempt count under (spec.rules[].retry.attempts). Leaf peer to the container-axis parentGATEWAY_API_KEY_RETRY(231bbf5) — the sibling per-rule retry-policy body-axis lifted in the immediately-preceding commit; this closes the parent-leaf axis pair (retrycontainer +attemptsleaf) the Gateway API v1HTTPRouteRetrysub-shape pins underHTTPRoute.spec.rules[].retry.attempts. - GATEWAY_
API_ KEY_ BACKEND_ REFS - Canonical K8s Gateway API
HTTPRouteper-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). 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 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(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[]). 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[]). 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_ NAME - Canonical K8s Gateway API v1 per-child-object name-reference
discriminator axis key every
gateway_routes-emittedGatewaylistener +HTTPRouteparentRefs[]/backendRefs[]entry mounts its named-object binding under. Three peer sub-schemas on the sharedspec.…[].nameaxis: - 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}]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). 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 everygateway_routes-emittedHTTPRoutedocument mounts its per-rule:politicas :timeouttyped K8s-duration string under (spec.rules[].timeouts.request). Leaf peer to the container-axis parentGATEWAY_API_KEY_TIMEOUTS(db31108) — the sibling per-rule request-timeout-policy body-axis — and to the peer retry-container leafGATEWAY_API_KEY_ATTEMPTS(e2e136b) landed on the parallelretry.attemptsnesting; this closes the parent-leaf axis pair (timeoutscontainer +requestleaf) the K8s Gateway API v1HTTPRouteTimeoutssub-shape pins underHTTPRoute.spec.rules[].timeouts.request. - GATEWAY_
API_ KEY_ RETRY - Canonical K8s Gateway API
HTTPRouteper-rule retry-policy body-axis key everygateway_routes-emittedHTTPRoutedocument mounts its per-rule:politicas :retriesoverlay under (spec.rules[].retry). Sibling per-rule-body-axis peer toGATEWAY_API_KEY_TIMEOUTS(db31108) — same Gateway-API-CRD-body-axis discipline nested onto the per-rule retry-budget slot the Gateway API v1 CRD schema pins underHTTPRoute.spec.rules[]beside the sibling per-rule request-timeout- policy container. - 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 to pin the route to one specific listener out of the parent Gateway’sspec.listeners[]list (spec.parentRefs[].sectionName). Pairs with the siblingGATEWAY_API_KEY_PARENT_REFS(f44e823) — the Gateway API v1 CRD schema pins per-HTTPRoute route→Gateway attachment through thespec.parentRefs[]container axis and the per-entry listener-selection sub-axis throughsectionNamebeneath each entry (eachSectionName-typed scalar binds to aGateway.spec.listeners[].namebyte-string). Omitting the selector attaches the route to every listener on the parent Gateway — the Gateway API v1 default fan-out that silently doubles route emission once the substrate ships a second listener under the HTTPS-by-default trajectory the peerGATEWAY_API_DEFAULT_HTTP_LISTENER_NAME(cd60fde) docstring forecasts ("http"→"http-v1"alongside a sibling"https"listener once cert-manager-issued per-:entrada :hostcertificates land). Pinning the selector by construction binds each substrate- emitted route to exactly one listener on the parent Gateway, so a future multi-listener migration lands as one const-edit on the pairedGATEWAY_API_DEFAULT_HTTP_LISTENER_NAMEdeclaration instead of a silent per-route dispatch flip. - GATEWAY_
API_ KEY_ TIMEOUTS - Canonical K8s Gateway API
HTTPRouteper-rule request-timeout-policy body-axis key everygateway_routes-emittedHTTPRoutedocument mounts its per-rule:politicas :timeoutoverlay under (spec.rules[].timeouts). Sibling per-rule-body-axis peer toGATEWAY_API_KEY_BACKEND_REFS(a6c5679) andGATEWAY_API_KEY_HOSTNAMES(b77f744) — same Gateway-API-CRD-body-axis discipline nested one level deeper onto the per-rule request-deadline slot the Gateway API v1 CRD schema pins underHTTPRoute.spec.rules[]. - GATEWAY_
API_ KEY_ VALUE - Canonical K8s Gateway API v1
HTTPPathMatchvaluescalar-axis key everygateway_routes-emittedHTTPRouteper-matchpathblock mounts its request-path-selection scalar payload under (spec.rules[].matches[].path.value). Nests one level beneath the siblingGATEWAY_API_KEY_PATHper-HTTPRouteMatchpath-matcher container-axis it hangs off of — the Gateway API v1 CRD schema pins per-HTTPPathMatchrequest-path selection through the{type, value}two-axis pair (aGATEWAY_API_PATH_MATCH_TYPE_PATH_PREFIX-typedtypediscriminator picksExact | PathPrefix | RegularExpression; thevaluescalar carries the per-match request-path string the discriminator is applied against), so drift on thevaluescalar axis is exactly as load-bearing as drift on the peertypediscriminator axis it nests alongside (the K8s apiserver-side Gateway API CRD schema validator drops any per-match block whoseHTTPPathMatchscalar-payload axis carries an unrecognized key — a"path"/"prefix"/"pattern"typo silently emits anHTTPRoutewhose per-match request-path predicate the Gateway API implementation’s per-rule L7 dispatch loop treats as bare (no value evaluated against thetypediscriminator), 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 theHTTPPathMatch-scalar-payload-drift root cause). - GATEWAY_
API_ KIND_ GATEWAY - Canonical K8s Gateway API CRD
kinddiscriminator 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 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. 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
Gateway.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). - GIT_
OID_ SHA1_ LEN - Length, in lowercase-hex characters, of a full Git SHA-1 commit
OID — the canonical commit identifier every
git rev-parse HEADinvocation emits on a SHA-1-hashed repository.git’s loose-object store keys every object under.git/objects/<first-2-hex>/<last-38-hex>, so the full 40-char OID is the address-of-truth the porcelain consumes atgit fetch <remote> <40-hex>andgit checkout <40-hex>time; abbreviated OIDs are admitted by the porcelain through a separate prefix-lookup pass and are ambiguous across repository history (a 7-char prefix that resolves to one commit today can become a collision tomorrow as the repo grows). Lifted as a typed const so the:fonte :revvalidate gate, the future lacre-side resolved-rev gate, and the future M4 per-dep CR materializer’s per-pin validator all read from one place. - GIT_
OID_ SHA256_ LEN - Length, in lowercase-hex characters, of a full Git SHA-256 commit
OID — the canonical commit identifier on a SHA-256-hashed repository
(Git’s
extensions.objectFormat = sha256mode, GA since Git 2.42 / Oct 2023). Doubled width vs. SHA-1: 256 bits = 64 hex chars. Carried alongsideGIT_OID_SHA1_LENso the typed:revslot admits either canonical hash-algorithm OID without per-renderer branching; the lacre’s BLAKE3 content-addressing (THEORY.md §IV — typed reproducibility envelope) is orthogonal to the upstream git’s chosen object hash and neither OID width should leak into downstream code paths. - GIT_
REF_ NAME_ MAX_ LEN - Max length, in bytes, of a single typed git ref name passing the
is_git_ref_namepredicate. 255 bytes — matches the POSIXNAME_MAXfilesystem-component limit every Git porcelain ultimately stores refs into (looserefs/<category>/<name>files under.git/refs/, packed-refs index entries). Refs that exceed this cap fail to land on disk at clone/fetch time on every realistic filesystem (ext4, btrfs, xfs, APFS, NTFS), so a:tag/:branchpast that length is unsourceable in practice. The cap exists to reject the paste-from-binary footgun (a multi-line blob accidentally landed in the:tagslot) rather than to constrain legitimate authoring — realistic tag/branch names rarely exceed ~32 bytes ("v0.1.0"= 6 bytes,"release-1.0-alpha.1"= 19 bytes,"feature/checkout-rewrite"= 24 bytes). Lifted as a typed const so a future axis reaching for the same bound (the futurelacre.lispref-shape gate on resolved-pin axes, the future M4 per-dep CR materializer’s per-pin validator) reads from one place. - GIT_
REPO_ URL_ MAX_ LEN :fonte (:tipo git :repo …)value max length, in bytes — a generous URL-shaped cap covering every documented author surface (thegithub:org/reposhorthand, thehttps:///ssh:///git:///file://URL schemes, thegit@host:pathscp-style SSH form). The cap mirrors the conservative ceiling typical HTTP gateways and git porcelain entries enforce on URL inputs (the OWASP-recommended URL max of 2048 bytes); a:repovalue above this bound is structurally untenable on every realistic landing site — the caixa-resolver’sgit clone <repo>invocation, the future M4mesh.pleme.io/v1alpha1/CaixaCR materializer’s per-deprepo:axis, the future lacre BLAKE3 closure’s resolved-repo identity — and a value of that length is almost certainly a paste-from-binary slug or a multi-line blob that landed in the slot.- HELM_
CHART_ API_ VERSION - Canonical Helm 3
Chart.yamlapiVersioneverycaixa-helm-renderedlareira-<nome>chart declares at its top-levelapiVersionaxis. The Helm 3 chart-schema resolution contract keys off this exact"v2"value:helm dependency build,helm lint, andhelm templateall parse the chart under the Helm 3 v2 schema (which requiresChartYaml::descriptionand permitsdependencies:at the top level); drift to the legacy Helm 2"v1"(the pre-Helm-3 chart schema every upstream Helm-3-migration doc names) silently reroutes the renderedChart.yamlthrough the Helm 2 parser, where the top-leveldependencies:block is unknown and the chart’s dep on thepleme-computeunitlibrary chart never resolves —helm dependency buildreports “no requirements found” and every downstreamhelm template/helm installon the rendered chart emits an empty release (no ComputeUnit / Service / ScaledObject resources land) far from the source caixa.lisp / the renderer’sbuild_chart_yamlcall site. - HELM_
CHART_ DEPENDENCY_ KEY_ ALIAS - Canonical Helm 3
Chart.yamlper-dependencies[]-entry sub-mapping YAML axis-key naming the per-dep chart-alias override field — the load-bearing serde field-name atcaixa-helm’sChartDependencystruct’saliasfield. The chart-schema per-dep entry’salias:value, when set, overrides the per-dep values wrap-key (Helm’s per-dep alias convention scopes the per-dep values sub-block underalias:when set, and under the siblingHELM_CHART_DEPENDENCY_KEY_NAMEname:value otherwise); the caixa-helm substrate today emits the axis asNoneat every renderedlareira-<nome>chart’sdependencies[0].alias:(the#[serde(default, skip_serializing_if = "Option::is_none")]attribute on thealiasfield elides the axis entirely from the emitted YAML when unset), so the values wrap-key defaults to the per-depname:value — but the axis-key remains part of the substrate-side chart-schema-per-dep-entry contract for the future per-Aplicacao library chart’s per-Servico per-dep aliasingHELM_CHART_TYPE_LIBRARYdocstring names as a trajectory item. A drift on this per-dep sub-key (a future refactor that renamed theChartDependency::aliasRust field, or added a#[serde(rename_all = "camelCase")]attribute that silently activates on a future field addition) would rebrand the wire key silently — Helm’s per-dep alias-convention router would silently drop the alias from the parsed dep-entry (the per-dep values wrap- key falls back to the siblingname:value, and every per-cluster per-Servico per-dep values override the operator authored under the alias-key silently routes nowhere athelm templatetime). Peer toHELM_CHART_DEPENDENCY_KEY_NAME/HELM_CHART_DEPENDENCY_KEY_VERSION/HELM_CHART_DEPENDENCY_KEY_REPOSITORYon the sibling per-dep sub-key axes — completes the per-dependencies[]-entry YAML axis-key canonical-pin tetrad. SeeHELM_CHART_DEPENDENCY_KEY_NAMEfor the shared per-entry-sub-mapping lift rationale. - HELM_
CHART_ DEPENDENCY_ KEY_ NAME - Canonical Helm 3
Chart.yamlper-dependencies[]-entry sub-mapping YAML axis-key naming the per-dep chart-name field — the load-bearing serde field-name atcaixa-helm’sChartDependencystruct’snamefield. Byte-identical to the sibling K8s CRKUBE_KEY_NAMEaxis-key by Helm’s design decision to inherit the K8s CR body-key vocabulary at every schema surface it consumes (chart-metadata, per-CR install-payload, per-dep dependency-list); the paired [tests::helm_chart_dependency_key_name_matches_kube_key_name] pin asserts the two byte-shapes coincide, so a future K8s-side rebrand atKUBE_KEY_NAMEthat dropped the byte-identity would fail the pin at substrate-build time rather than silently drop the per-dep name lookup athelm dependency buildtime far from the drift site. - HELM_
CHART_ DEPENDENCY_ KEY_ REPOSITORY - Canonical Helm 3
Chart.yamlper-dependencies[]-entry sub-mapping YAML axis-key naming the per-dep chart-registry URL field — the load-bearing serde field-name atcaixa-helm’sChartDependencystruct’srepositoryfield. The chart-schema per-dep entry’srepository:value pins the Helm-registry URL (file://…,https://…,oci://…) Helm’s per-dep resolver consults athelm dependency buildtime to fetch the per-dep chart bytes. At the caixa-helm substrate the default value is the canonical [caixa_helm::DEFAULT_LIBRARY_REPO] pointing at the helmworks file:// path; the future per-edition library-chart re-emission for the OCI registry (oncepleme-io/helmworks/chartslands as an OCI-registry-backed chart-source) reaches this axis through a paired scalar-value lift on the per-dep repo axis. A drift on this per-dep sub-key would surface as one of two silent failure modes at chart-vendor time far from the drift site: Helm’s per-dep resolver silently drops the repository scalar from the parsed dep-entry (the per-dep resolver falls back to the “no repository set” shape and refuses to vendor the dep withno repository defined), or the per-dep chart-schema parser silently absorbs a rename drift via#[serde(default)]fall-through at the struct-side and the per-dep repo axis lands under Rust’s""default — Helm rejects the empty URL athelm dependency buildtime. Peer toHELM_CHART_DEPENDENCY_KEY_NAME/HELM_CHART_DEPENDENCY_KEY_VERSION/HELM_CHART_DEPENDENCY_KEY_ALIASon the sibling per-dep sub-key axes. SeeHELM_CHART_DEPENDENCY_KEY_NAMEfor the shared per-entry-sub-mapping lift rationale. - HELM_
CHART_ DEPENDENCY_ KEY_ VERSION - Canonical Helm 3
Chart.yamlper-dependencies[]-entry sub-mapping YAML axis-key naming the per-dep chart-version-constraint field — the load-bearing serde field-name atcaixa-helm’sChartDependencystruct’sversionfield. Distinct from the sibling per-Chart.yaml top-level chart-own-SemVer axis-key (version:at the top level, whose byte-shape coincides with this per-dep sub-key at the wire — a coincidence the substrate-side paired [tests::helm_chart_dependency_key_version_pins_canonical_value] pin holds byte-verbatim). The chart-schema per-dep entry’sversion:value pins the SemVer-range constraint Helm’s per-dep resolver matches against the target dep’s Chart.yamlversion:scalar athelm dependency build/helm dependency updatetime. A drift on this per-dep sub-key would surface as one of two silent failure modes at chart-vendor time far from the drift site: Helm’s per-dep chart-schema parser silently drops the version-constraint scalar from the parsed dep-entry (the per-dep resolver falls back to the wildcard*shape and vendors whatever chart-version the upstream registry currently advertises, silently promoting a chart upgrade the operator never authored), or a subsequent#[serde(rename_all)]addition rebrands the key to Helm’s unrecognized shape and the per-dep entry silently vanishes from the parsed dep-list. Peer toHELM_CHART_DEPENDENCY_KEY_NAME/HELM_CHART_DEPENDENCY_KEY_REPOSITORY/HELM_CHART_DEPENDENCY_KEY_ALIASon the sibling per-dep sub-key axes — extends the per-entry-sub-key canonical-lift tetrad at the substrate. SeeHELM_CHART_DEPENDENCY_KEY_NAMEfor the shared per-entry-sub-mapping lift rationale. - HELM_
CHART_ KEY_ API_ VERSION - Canonical Helm 3
Chart.yamltop-level YAML axis-key naming the per-chart chart-schema-apiVersion field whose scalar-valueHELM_CHART_API_VERSIONalready owns as the peer axis-value lift. Where the peer axis-value lift pins the byte-shape of theapiVersion:field’s admitted scalar (Helm 3’s"v2"), this axis-key lift pins the byte-shape of theapiVersion:field’s YAML-key name itself: the load-bearing serde-rename literal atcaixa-helm’sChartYamlstruct (caixa-helm/src/lib.rs:145,#[serde(rename = "apiVersion")]) that selects how the Rust fieldapi_versionserializes into the renderedChart.yamlYAML mapping. - HELM_
CHART_ KEY_ APP_ VERSION - Canonical Helm 3
Chart.yamltop-level YAML axis-key naming the per-chart underlying-application-version field — the load-bearing serde-rename literal atcaixa-helm’sChartYamlstruct (caixa-helm/src/lib.rs:152,#[serde(rename = "appVersion")]) that selects how the Rust fieldapp_versionserializes into the renderedChart.yamlYAML mapping. Distinct from the siblingChart.yamlversion:field (the chart’s own SemVer, incremented per release of the chart itself); theappVersion:field the Helm 3 chart-schema pins carries the underlying application’s version (see app-version-doc) — the version the containerized workload the chart installs advertises (an OCI image tag, a wasm-component:versao, a package release tag). At the caixa-helm renderer today the two axes both draw from the caixa’s:versaoat [build_chart_yaml] because a [caixa-core::Caixa]’s:versaonames both the chart’s own release cadence and the underlying wasm-component release cadence in one axis (caixa’s per-caixa BLAKE3-closure identity binds a caixa’s chart + wasm-binary + declared source at exactly one release axis), but the Chart.yaml schema pins the two YAML keys distinctly regardless — every downstream Helm-consumer (Artifact Hub’s per-chart-search index,helm search/helm show chartoperator surfaces) routes the two axes onto distinct display fields at chart-inspection time. - HELM_
CHART_ KEY_ DEPENDENCIES - Canonical Helm 3
Chart.yamltop-level YAML axis-key naming the per-chart dependency-list field — the load-bearing serde field-name atcaixa-helm’sChartYamlstruct’sdependenciesfield, the parent list-container the already-liftedHELM_CHART_DEPENDENCY_KEY_NAME/HELM_CHART_DEPENDENCY_KEY_VERSION/HELM_CHART_DEPENDENCY_KEY_REPOSITORY/HELM_CHART_DEPENDENCY_KEY_ALIASper-entry sub-mapping tetrad (69f62db) mounts under. The chart-schema top-leveldependencies:field pins the list of chart-registry references Helm’s per-dep resolver consults athelm dependency build/helm dependency updatetime to vendor each dependency chart under the substrate’s canonicalDEFAULT_LIBRARY_NAMEwrap-key convention. Every renderedlareira-<nome>chart declares exactly one entry today (theDEFAULT_LIBRARY_NAMEpleme-computeunitlibrary-chart dep the siblingcaixa-helm’sbuild_chart_yamlmounts) — see chart-dependencies-doc for the Helm 3 upstream axis documentation. - HELM_
CHART_ KEY_ TYPE - Canonical Helm 3
Chart.yamltop-level YAML axis-key naming the per-chart-kind discriminator field whose closed-set scalar-value pairHELM_CHART_TYPE_APPLICATION/HELM_CHART_TYPE_LIBRARYalready owns as the peer axis-value lift. Where the peer axis-value lifts pin the byte-shape of thetype:field’s admitted-value set, this axis-key lift pins the byte-shape of thetype:field’s YAML-key name itself: the load-bearing serde- rename literal atcaixa-helm’sChartYamlstruct (caixa-helm/src/lib.rs:149,#[serde(rename = "type")]) that selects how the Rust fieldchart_typeserializes into the renderedChart.yamlYAML mapping. - HELM_
CHART_ README_ FILENAME - Canonical
lareira-<nome>chart-directory human-facing readme filename every rendered chart carries at its top-level directory — the fixed filename thecaixa-helmrenderer emits alongside the two schema-load- bearingHELM_CHART_YAML_FILENAME+HELM_VALUES_YAML_FILENAMEfiles as the third leg of the canonical{Chart.yaml, values.yaml, README.md}per-lareira-<nome>chart-directoryChartFiletriple the peerHELM_CHART_YAML_FILENAMEdocstring explicitly acknowledges is the one axis where the substrate-side single-source discipline had not yet landed at the third file. The single source of truth every consumer that names the readme file — the sole caixa-helm production emit site the prior inline"README.md"literal sat at (caixa-helm’srender_chart_for_servicoChartDirassembly’s per-filepathaxis, the third of the three canonicallareira-<nome>chart-directory files the renderer emits as a bundle, sibling to the metadata-fileHELM_CHART_YAML_FILENAME+ values-fileHELM_VALUES_YAML_FILENAMEaxes) plus every test-side round-trip navigator that reaches into the renderedChartDirby the readme filename (two sites: therenders_three_filesfiles-vec- membership pin + theChartDir::write_topost-write existence pin) — reaches for the same&'static strby construction. - HELM_
CHART_ TYPE_ APPLICATION - Canonical Helm 3
Chart.yamltypefield per-chart-kind discriminator scalar-value every renderedlareira-<nome>chart declares. The Helm chart-schema pins the per-chart-kind axis to the closed set{"application", "library"}(see chart-type-doc) — theapplicationchart-kind is Helm’s default install-shape (an application chart that installs into a namespace as a workload + rendered manifests), while thelibrarychart-kind is Helm’s dependency-only shape (a chart authored as a shared-template substrate that can only be consumed as a dependency, never installed directly). Eachlareira-<nome>chart the caixa-helm renderer emits declares itself as anapplicationchart because it is the per- Servico install shape a cluster operator’shelm install/helm upgradeper-Servico release cycle materializes — the siblingDEFAULT_LIBRARY_NAMEpleme-computeunitchart (the substrate- side library-chart thelareira-<nome>chart depends on for template-shape) carries the siblinglibraryvalue verbatim in its authored Chart.yaml (out-of-tree at thepleme-io/helmworksrepo, so not this crate’s authority). - HELM_
CHART_ TYPE_ LIBRARY - Canonical Helm 3
Chart.yamltypefield per-chart-kind discriminator scalar-value the sibling library-chart shape lands on — the second and only other arm of the closed set{"application", "library"}the Helm chart-schema pins the per-chart-kind axis to (see chart-type-doc). Thelibrarychart-kind is Helm’s dependency-only install-shape: a chart authored as a shared-template substrate the per-Aplicacaolareira-<nome>application charts depend on for their emitted- object templates (theDEFAULT_LIBRARY_NAMEpleme-computeunitchart out-of-tree atpleme-io/helmworksis the substrate’s canonical instance today), and Helm refuses to install it directly (helm install <library-chart>fails with “Error: library charts cannot be installed”) — a chart declaring itself under this scalar-value is only ever consumed as a dependency by a siblingapplication-typed chart. - HELM_
CHART_ YAML_ FILENAME - Canonical Helm 3 per-chart-directory metadata-file filename every
rendered
lareira-<nome>chart carries at its top-level directory — the fixed filename Helm’s chart-schema parser (helm dependency build,helm lint,helm template,helm install) looks up by name at the chart-directory root to locate the per-chartHELM_CHART_API_VERSION+HELM_CHART_TYPE_APPLICATION+ name/version/dependencies scalars eachlareira-<nome>chart declares (see chart-yaml-desc). The single source of truth every consumer that names the metadata file — the sole caixa-helm production emit site the prior inline"Chart.yaml"literal sat at (caixa-helm’srender_chart_for_servicoChartDirassembly’s per-filepathaxis, one of the three canonicallareira-<nome>chart-directory files the renderer emits as a bundle) plus every test-side round-trip navigator that reaches into the renderedChartDirby the metadata filename (six sites acrosscaixa-helm’s per-chart-metadata-field sweep tests + [ChartDir::write_to] post-write existence pin) — reaches for the same&'static strby construction. - HELM_
VALUES_ KEY_ ENABLED - Canonical
pleme-computeunitlibrary-chart values-block enable-toggle key — theenabled: <bool>axis everylareira-<nome>chart’s values block carries under itsDEFAULT_LIBRARY_NAMEwrap key, and everycaixa-flux-renderedHelmReleasespec.values.<library>.enabledper-cluster override targets. The single source of truth all four downstream consumers reach for: - HELM_
VALUES_ YAML_ FILENAME - Canonical Helm 3 per-chart-directory values-file filename every
rendered
lareira-<nome>chart carries at its top-level directory — the fixed filename Helm’s chart-schema parser (helm dependency build,helm lint,helm template,helm install) looks up by name at the chart-directory root to locate the per-chartDEFAULT_LIBRARY_NAME-wrapped values block thatHELM_VALUES_KEY_ENABLEDtoggles (see values-yaml-desc). The single source of truth every consumer that names the values file — the sole caixa-helm production emit site the prior inline"values.yaml"literal sat at (caixa-helm’srender_chart_for_servicoChartDirassembly’s per-filepathaxis, the second of the three canonicallareira-<nome>chart-directory files the renderer emits as a bundle, sibling to the metadata-fileHELM_CHART_YAML_FILENAMEaxis) plus every test-side round-trip navigator that reaches into the renderedChartDirby the values filename (eleven sites acrosscaixa-helm’s per-chart-values-field sweep tests + [ChartDir::write_to] post-write existence pin) — reaches for the same&'static strby construction. - KUBE_
KEY_ API_ VERSION - Canonical K8s API key naming the resource’s API-version selector
(e.g.
cilium.io/v2,gateway.networking.k8s.io/v1,wasm.pleme.io/v1alpha1). Lifted to a const so a future API-server rename or a multi-version-skew migration is a one-line edit, not a search-and-replace across every per-target renderer. - KUBE_
KEY_ KIND - Canonical K8s API key naming the resource’s kind discriminator
(e.g.
CiliumNetworkPolicy,Gateway,HTTPRoute,ComputeUnit). - KUBE_
KEY_ LABELS - Canonical K8s API key naming the resource’s labels (under metadata).
- KUBE_
KEY_ MATCH_ LABELS - Canonical K8s API key naming the
matchLabelsaxis 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 API key naming the resource’s metadata block.
- KUBE_
KEY_ NAME - Canonical K8s API key naming the resource’s name (under metadata).
- KUBE_
KEY_ NAMESPACE - Canonical K8s API key naming the resource’s namespace (under metadata).
- KUBE_
KEY_ PORT - Canonical K8s API key naming the per-CR L4 port scalar axis —
the field the apiserver-side OpenAPI schema for every port-carrying
CR body-position (Cilium L7
spec.ingress[].toPorts[].ports[].portper-port-tuple L4 port number, Gateway APIGateway.spec.listeners[].portper-listener L4 port number, Gateway APIHTTPRoute.spec.rules[].backendRefs[].portper-rule per-backend L4 port number, and every future port-shaped CR body- position the M4mesh.pleme.io/v1alpha1/Aplicacaomaterializer + the per-edgeCiliumClusterwideEnvoyConfigemitter will land on) mounts the L4 port value under. Spelled exactly as the K8s apiserver expects (lowercaseport, notPort/portNumber/portValue/targetPort— the L4-port-number axis, distinct from thetargetPortL4-forwarding-destination axis on the K8s Service CRD that lives on a sibling field name the port-value axis is not) so the rendered YAML round-trips through every K8s schema parser without per-renderer string drift. - KUBE_
KEY_ PROTOCOL - Canonical K8s API key naming the per-CR L4/L7 protocol
scalar-discriminator axis — the field the apiserver-side
OpenAPIschema for every protocol-carrying CR body-position (Cilium L7spec.ingress[].toPorts[].ports[].protocolper-port-tuple L4 transport protocol discriminator picking betweenTCP/UDP/SCTP/ANY, Gateway APIGateway.spec.listeners[].protocolper-listener L7 listener-protocol discriminator picking betweenHTTP/HTTPS/TCP/TLS/UDP, and every future protocol-shaped CR body-position the M4mesh.pleme.io/v1alpha1/Aplicacaomaterializer + the per-edgeCiliumClusterwideEnvoyConfigemitter will land on) mounts the protocol-value discriminator under. Spelled exactly as the K8s apiserver expects (lowercaseprotocol, notProtocol/proto/transportProtocol— the singular scalar-key convention K8s uses across every protocol-carrying CR family, distinct from theprotocols[]plural-container axis used on a few application-layer-protocol CRDs which is not this axis) so the rendered YAML round-trips through every K8s schema parser without per-renderer string drift. - KUBE_
KEY_ RULES - Canonical K8s API key naming the per-CR
rulescollection axis — the container the apiserver-side OpenAPI schema for every rule-shaped CR (Cilium L7spec.ingress[].toPorts[].rules, Gateway APIHTTPRoute.spec.rules[], RBACRole.rules[]/ClusterRole.rules[], and every future rule-list-shaped CR the M4mesh.pleme.io/v1alpha1/Aplicacaomaterializer + the per-edgeCiliumClusterwideEnvoyConfigemitter will land on) mounts the per-CR list of match/action rules under. Spelled exactly as the K8s apiserver expects (lowercaserules, notRules/rule/ruleset) so the rendered YAML round-trips through every K8s schema parser without per-renderer string drift. - KUBE_
KEY_ SPEC - Canonical K8s API key naming the resource’s per-kind body (sibling
to
KUBE_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 API key naming the per-CR discriminated-union type
scalar-discriminator axis — the field the apiserver-side OpenAPI schema
for every discriminated-union CR body-position (Gateway API v1
HTTPRouteMatch.path.typeper-HTTPRouteMatchpath-selection-predicate discriminator picking betweenExact/PathPrefix/RegularExpression, K8s coreCondition.typeper-condition kind discriminator, K8s coreVolume.<projection>.typeper-projection content-source discriminator, and every future discriminated-union CR body-position the M4mesh.pleme.io/v1alpha1/Aplicacaomaterializer - 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-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). - LABEL_
APLICACAO - Canonical pleme-io label key naming the Aplicacao the workload
belongs to. Together with
LABEL_PROGRAMthis is the load-bearing identity tuple every per-Aplicacao mesh renderer (Cilium, Gateway, future caixa-otel) keys off —(LABEL_APLICACAO, LABEL_PROGRAM)= the unique workload selector inside one cluster. - LABEL_
CONTRATO - Canonical pleme-io label key naming the contrato (the M3
:contratosedge:<de>-to-<para>) a CiliumNetworkPolicy enforces. Carried on the policy’s own labels (not on workload pods) so Hubble + cluster operators can group flows by typed contrato edge, not just by source/destination pod identity. - LABEL_
PROGRAM - Canonical pleme-io label key naming the program (i.e. the
caixa Servico’s
:nome) a pod runs.LABEL_APLICACAO+LABEL_PROGRAMtogether pick exactly one workload identity in one cluster. Used as thematchLabelsaxis on every CiliumendpointSelector/fromEndpointsrule and on Gateway APIbackendRefsselectors emitted bycrate’s downstream renderers. - LAREIRA_
CHART_ KEYWORDS - Canonical substrate-fixed Chart.yaml
keywords:entries every renderedlareira-<nome>Helm chart carries — the ordered (BTreeSet-canonical, ascii-alphabetical) list of registry-search tagscaixa-helm’sbuild_chart_yamlunions in on top of the caixa author’s own:etiquetasbefore folding the joint set into aBTreeSet<String>for the emittedChart.yaml. Every entry —"caixa-servico"(the substrate-wide per-:kind Servicomarker axis),"lareira"(theLAREIRA_CHART_NAME_PREFIXchart-family tag),"tatara-lisp"(the tatara-lisp source-language marker), and"wasm"(the runtime execution-format marker) — is a load-bearing discovery axis for the Artifact Hub keyword-search index and the future caixa-registry keyword axis, so a drift between the production emit atcaixa-helm::build_chart_yamland the two substrate-side positive-set sweep tests ([crate::manifest::tests::validate_etiquetas_accepts_canonical_shaped_forms] and this crate’s ownchart_keyword_shape_accepts_canonical_forms) would silently cause every rendered chart to miss the search-index axis the substrate-fixed tag encodes — a chart published without the"caixa-servico"tag would silently drop off thehelm search hub caixa-servicoresults the substrate’s chart discovery pipeline promises. Two production-side call sites (this crate’sis_chart_keyword_shapedocstring narrates the four canonical tags verbatim +caixa-helm’sbuild_chart_yamlunions them into the emittedkeywords:sequence) and two test-side positive-sweep sites this array anchors under one source of truth. - LAREIRA_
CHART_ NAME_ NOME_ MAX_ LEN - The
:nome-side budget thelareira_chart_namecomposition imposes on every caixa:nomereaching a renderer that derives alareira-<nome>artifact (caixa-helm’sChartDir.name+Chart.yamlname:,caixa-flux’scluster_bundleHelmReleasechart:slot,caixa-tatara’sprocess_for_aplicacaorelease_name+oci://<registry>/lareira-<nome>chart ref). - LAREIRA_
CHART_ NAME_ PREFIX - Canonical Helm chart-name prefix for every per-Servico chart the
substrate emits — the
"lareira-"segment of the well-knownlareira-<nome>shape every caixa Servico renderer prepends to a caixa’s:nometo derive itsChart.yamlname:field, its OCI artifact reference (oci://<registry>/lareira-<nome>), and the resulting cluster-sideHelmReleaserelease_name. The single source of truth all three downstream Servico renderers consult —caixa-helm’srender_chart_for_servicochart-dir name (caixa-helm/src/lib.rs:207),caixa-flux’scluster_bundleHelmReleasechart:field (caixa-flux/src/lib.rs:329), andcaixa-tatara’sprocess_for_aplicacaorelease_name+derive_chart_refOCI ref (caixa-tatara/src/lib.rs:124,182) — so a future per-chart-name-prefix rebrand (e.g. moving toforno-oncelareira-outlives its scoping intent, or any segment-namespace migration the chart-publishing pipeline requires) is a one-line edit here, not a coordinated rewrite across every renderer crate’s chart- name-derivation site. - LAYOUT_
DIR_ EXE - Canonical caixa-root-relative directory name housing every
crate::CaixaKind::Binariocaixa’sexe/<name>entry (and every:exe ("exe/tool" …)per-entry source path the M0:kind Binariotyped slot admits). Peer ofLAYOUT_DIR_LIB/LAYOUT_DIR_SERVICOSon the sibling M0 per-CaixaKindon-disk-directory-name axes; seeLAYOUT_DIR_LIBfor the shared lift rationale. - LAYOUT_
DIR_ LIB - Canonical caixa-root-relative directory name housing every
crate::CaixaKind::Bibliotecacaixa’slib/<nome>.lispentry (and every:bibliotecas ("lib/foo.lisp" …)per-entry source path the M0:kind Bibliotecatyped slot admits). The single source of truth every consumer that composes a caixa-root-relative path pointing at the tatara-lisp library sub-tree reaches for: - LAYOUT_
DIR_ SERVICOS - Canonical caixa-root-relative directory name housing every
crate::CaixaKind::Servicocaixa’sservicos/<nome>.computeunit.yamlper-CRComputeUnitdescriptor (and every:servicos ("servicos/foo.computeunit.yaml" …)per-entry source path the M0:kind Servicotyped slot admits). Peer ofLAYOUT_DIR_LIB/LAYOUT_DIR_EXEon the sibling M0 per-CaixaKindon-disk-directory-name axes; seeLAYOUT_DIR_LIBfor the shared lift rationale. - LAYOUT_
MISSING_ ENTRY_ KIND_ BEHAVIOR_ CALLBACK - Canonical
crate::LayoutError::MissingEntrykind: &'static strdiscriminator scalar the M2:behaviortyped slot’s per-callback on-disk-leaf existence gate surfaces under — the byte-string everycrate::LayoutInvariants::verifyemission carries when a:behavior :on-init/:on-call/:on-cast/:on-info/:on-state-change/:on-terminatesub-slot’s tatara-lisp source path fails to resolve against the caixa root’s on-disk layout. Names the “M2 :behavior sub-slot leaf-kind” axis one altitude below theM2_AUTHOR_KEY_BEHAVIOR(f49c8b0) parent-slot label: the top-levelM2_AUTHOR_KEY_BEHAVIORconst names the M2 slot itself on the author surface ((defcaixa … :behavior (…))), the six [M2_BEHAVIOR_AUTHOR_KEY_ON_*] consts (889dc18) name the per- callback sub-slot labels the author writes ((:on-init "lib/init.lisp" …)), and this const names the per-slot-family leaf-kind byte-string the layout diagnostic emits when the on-disklib/init.lispfile doesn’t exist (“MissingEntry { kind: "behavior-callback", path: /root/lib/init.lisp }”). - LAYOUT_
MISSING_ ENTRY_ KIND_ BIBLIOTECA - Canonical
crate::LayoutError::MissingEntrykind: &'static strdiscriminator scalar the M0:kind Bibliotecatyped slot’s per-:bibliotecasentry on-disk-leaf existence gate surfaces under — the byte-string everycrate::LayoutInvariants::verifyemission carries when a:bibliotecas ("lib/foo.lisp" …)entry’s tatara-lisp source path fails to resolve against the caixa root’s on-disk layout. Peer ofLAYOUT_MISSING_ENTRY_KIND_EXE/LAYOUT_MISSING_ENTRY_KIND_SERVICOon the sibling M0 code-slot per-directory leaf-kind axes, and of the M2-tierLAYOUT_MISSING_ENTRY_KIND_BEHAVIOR_CALLBACK/LAYOUT_MISSING_ENTRY_KIND_UPGRADE_SCRIPT(95c9c4c) leaf-kind labels on thecrate::LayoutError::MissingEntrykind: &'static strdiscriminator’s accept-set — completes the M0-tier arm of the same per-slot leaf-kind categorization axis the M2 lift established. - LAYOUT_
MISSING_ ENTRY_ KIND_ EXE - Canonical
crate::LayoutError::MissingEntrykind: &'static strdiscriminator scalar the M0:kind Binariotyped slot’s per-:exeentry on-disk-leaf existence gate surfaces under — the byte-string everycrate::LayoutInvariants::verifyemission carries when an:exe ("exe/tool.lisp" …)entry’s tatara-lisp source path fails to resolve against the caixa root’s on-disk layout. Peer ofLAYOUT_MISSING_ENTRY_KIND_BIBLIOTECA/LAYOUT_MISSING_ENTRY_KIND_SERVICOon the sibling M0 code-slot per-directory leaf-kind axes; seeLAYOUT_MISSING_ENTRY_KIND_BIBLIOTECAfor the shared lift rationale. - LAYOUT_
MISSING_ ENTRY_ KIND_ SERVICO - Canonical
crate::LayoutError::MissingEntrykind: &'static strdiscriminator scalar the M0:kind Servicotyped slot’s per-:servicosentry on-disk-leaf existence gate surfaces under — the byte-string everycrate::LayoutInvariants::verifyemission carries when a:servicos ("servicos/foo.computeunit.yaml" …)entry fails to resolve against the caixa root’s on-disk layout. Peer ofLAYOUT_MISSING_ENTRY_KIND_BIBLIOTECA/LAYOUT_MISSING_ENTRY_KIND_EXEon the sibling M0 code-slot per-directory leaf-kind axes; seeLAYOUT_MISSING_ENTRY_KIND_BIBLIOTECAfor the shared lift rationale. Byte-identical tocrate::CaixaKind::Servico’scrate::CaixaKind::as_stroutput today (both resolve to the same seven-byte"servico"scalar). - LAYOUT_
MISSING_ ENTRY_ KIND_ UPGRADE_ SCRIPT - Canonical
crate::LayoutError::MissingEntrykind: &'static strdiscriminator scalar the M2:upgrade-fromtyped slot’s per-entrycrate::UpgradeInstruction::StateChangescript-path on-disk-leaf existence gate surfaces under — the byte-string everycrate::LayoutInvariants::verifyemission carries when a(:state-change "<script>.lisp")instruction’s tatara-lisp source path fails to resolve against the caixa root’s on-disk layout. Peer ofLAYOUT_MISSING_ENTRY_KIND_BEHAVIOR_CALLBACKon the sibling M2:behaviortyped slot’s per-callback leaf-kind axis; seeLAYOUT_MISSING_ENTRY_KIND_BEHAVIOR_CALLBACKfor the full lift rationale. - LISP_
SOURCE_ EXTENSION - The canonical tatara-lisp source-file extension every M2 typed
path-slot the M2.5 wasm-engine instantiator reads through
tatara_lisp::readat instance-start time must terminate in. - M2_
AUTHOR_ KEY_ BEHAVIOR - Canonical author-facing kebab-case
(defcaixa … :behavior (…))top-level slot label the M2 per-Servico OTP-shaped:behaviorgen_server-callback-set slot surfaces under. Peer ofM2_AUTHOR_KEY_LIMITSon the sibling M2 top-level slot dual axis; seeM2_AUTHOR_KEY_LIMITSfor the full lift rationale. - M2_
AUTHOR_ KEY_ LIMITS - Canonical author-facing kebab-case
(defcaixa … :limits (…))top-level slot label the M2 per-Servico Lunatic sandbox:limitsslot surfaces under. Peer ofM2_KEY_LIMITSon the dual-axis pair every M2 top-level slot carries: the camelCase [M2_KEY_*] const names the renderer-side overlay-container wire key the serde-derive-emitted programs.yaml / values.yaml block carries under ("limits", load-bearing per the#[serde(rename_all = "camelCase")]attribute on the emit-sideservico_m2_overlayshape), the kebab-case [M2_AUTHOR_KEY_*] const names the author-facing label thecrate::Caixa::declared_servico_slotstagger threads through as one of the&'static strentries in the canonical-declaration-order slot list every kind-coherence gate consults (crate::LayoutError::ServicoSlotsOnNonServicojoins them into the space-separatedslots:diagnostic naming which of the three M2 slots the offending caixa declared on a non-Servico kind). - M2_
AUTHOR_ KEY_ UPGRADE_ FROM - Canonical author-facing kebab-case
(defcaixa … :upgrade-from (…))top-level slot label the M2 per-Servico OTP-appup:upgrade-fromhot-code-reload table slot surfaces under. Peer ofM2_AUTHOR_KEY_LIMITSon the sibling M2 top-level slot dual axis; seeM2_AUTHOR_KEY_LIMITSfor the full lift rationale. - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ CALL - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-call …))slot label for the:behavior :on-callper-Servico OTP-shaped synchronous request/response handler axis. Peer ofM2_BEHAVIOR_AUTHOR_KEY_ON_INITon the sibling:behaviorsub-slot author-facing-label axis. - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ CAST - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-cast …))slot label for the:behavior :on-castper-Servico OTP-shaped asynchronous fire-and-forget handler axis. Peer ofM2_BEHAVIOR_AUTHOR_KEY_ON_INITon the sibling:behaviorsub-slot author-facing-label axis. - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ INFO - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-info …))slot label for the:behavior :on-infoper-Servico OTP-shaped out-of-band message handler axis. Peer ofM2_BEHAVIOR_AUTHOR_KEY_ON_INITon the sibling:behaviorsub-slot author-facing-label axis. - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ INIT - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-init …))slot label the:behavior :on-initper-Servico OTP-shaped instance-init callback axis surfaces under. Peer ofM2_BEHAVIOR_KEY_ON_INITon the dual-axis pair every M2:behaviorsub-slot carries: the camelCase [M2_BEHAVIOR_KEY_ON_*] const names the renderer-side wire key the serde-derive-emittedM2_KEY_BEHAVIORoverlay carries under ("onInit"etc, load-bearing per the#[serde(rename_all = "camelCase")]attribute oncrate::BehaviorSpec), the kebab-case [M2_BEHAVIOR_AUTHOR_KEY_ON_*] const names the author-facing label thecrate::BehaviorSpec::declared_slotstagger threads through as theslot: &'static strfield on everycrate::BehaviorErrorvariant (":on-init"etc, the exact byte-string authors see in the per-slot value-shape diagnostic naming which of the six typed callback slots the offending path landed on). - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ STATE_ CHANGE - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-state-change …))slot label for the:behavior :on-state-changeper-Servico OTP-shaped hot-upgrade state-migration axis. Peer ofM2_BEHAVIOR_AUTHOR_KEY_ON_INITon the sibling:behaviorsub-slot author-facing-label axis; the kebab-case shape (":on-state-change", not":on-statechange"/":on_state_change") is load-bearing per the author-facing(defcaixa …)macro’s canonical form and the exact byte-string the per-slotcrate::BehaviorErrordiagnostic threads through. - M2_
BEHAVIOR_ AUTHOR_ KEY_ ON_ TERMINATE - Canonical author-facing kebab-case
(defcaixa … :behavior (:on-terminate …))slot label for the:behavior :on-terminateper-Servico OTP-shaped graceful-shutdown callback axis. Peer ofM2_BEHAVIOR_AUTHOR_KEY_ON_INITon the sibling:behaviorsub-slot author-facing-label axis. - M2_
BEHAVIOR_ KEY_ ON_ CALL - Canonical camelCase YAML sub-key the
:behavior :on-callper-Servico OTP-shaped sync-request-handler path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_BEHAVIOR_KEY_ON_INITon the sibling:behaviorsub-slot axis. - M2_
BEHAVIOR_ KEY_ ON_ CAST - Canonical camelCase YAML sub-key the
:behavior :on-castper-Servico OTP-shaped async-fire-and-forget-handler path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_BEHAVIOR_KEY_ON_INITon the sibling:behaviorsub-slot axis. - M2_
BEHAVIOR_ KEY_ ON_ INFO - Canonical camelCase YAML sub-key the
:behavior :on-infoper-Servico OTP-shaped out-of-band-message-handler path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_BEHAVIOR_KEY_ON_INITon the sibling:behaviorsub-slot axis. - M2_
BEHAVIOR_ KEY_ ON_ INIT - Canonical camelCase YAML sub-key the
:behavior :on-initper-Servico OTP-shaped instance-init-callback path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_KEY_BEHAVIORon the sibling:behaviorsub-slot axis:M2_KEY_BEHAVIORnames the overlay-container’s top-level key (“behavior”), the sixM2_BEHAVIOR_KEY_ON_*consts name the six typed sub-keys the M2crate::BehaviorSpecstruct’s OTP-shaped callback fields (on_init/on_call/on_cast/on_info/on_state_change/on_terminate, analogs ofgen_server:init/1/handle_call/3/handle_cast/2/handle_info/2/code_change/3/terminate/2pertheory/INSPIRATIONS.md§II.3) serialize as under the#[serde(rename_all = "camelCase")]derive attribute ("onInit"/"onCall"/"onCast"/"onInfo"/"onStateChange"/"onTerminate"). Emitted byservico_m2_overlayas sub-keys of theM2_KEY_BEHAVIORoverlay block and consumed by every substrate-side test-side navigator that reaches into the renderedprograms.yamlper-Servico entry / lareira chartvalues.yamlper-pleme-computeunitblock to pin the per-callback round-trip. The lower-camel shape is load-bearing: the serde-derive oncrate::BehaviorSpecemits under the same shape and the drift-detection pin inbehavior.rs::tests(behavior_spec_serde_keys_match_lifted_m2_behavior_key_consts) serializes a fully-populatedcrate::BehaviorSpecand asserts each canonicalM2_BEHAVIOR_KEY_ON_*byte-sequence appears in the JSON — so a hypothetical futurerename_all = "snake_case"/"kebab-case"accident at the derive attribute or an OTP-lineage per-callback rebrand (:on-init→:on-startmatching Akka’s per-actor preStart naming,:on-call→:on-requestmatching a hypothetical wasi:http/incoming-handler terminology flip,:on-state-change→:on-code-changematching Erlang’s verbatimcode_change/3name) coordinated at the type’s derive attribute surfaces as a build-time test failure atbehavior.rsrather than as a silent test-side.get(<stale-camelCase-const>)returningNonefar from the derive-attr drift’s commit. Same “one canonical byte-string per typed axis” discipline every peer M2 / M3 wire-key axis carries (M2_KEY_LIMITS/M2_KEY_BEHAVIOR/M2_KEY_UPGRADE_FROM,M2_LIMITS_KEY_MEMORY/M2_LIMITS_KEY_FUEL/M2_LIMITS_KEY_WALL_CLOCK/M2_LIMITS_KEY_CPU(d8b8b4f),M3_PLACEMENT_KEY_ESTRATEGIAetc.). - M2_
BEHAVIOR_ KEY_ ON_ STATE_ CHANGE - Canonical camelCase YAML sub-key the
:behavior :on-state-changeper-Servico OTP-shaped hot-upgrade state-migration path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_BEHAVIOR_KEY_ON_INITon the sibling:behaviorsub-slot axis; the camelCase shape ("onStateChange", not"on_state_change") is load-bearing per the serde-derive attribute oncrate::BehaviorSpec. - M2_
BEHAVIOR_ KEY_ ON_ TERMINATE - Canonical camelCase YAML sub-key the
:behavior :on-terminateper-Servico OTP-shaped graceful-shutdown-callback path scalar-axis lands under inside theM2_KEY_BEHAVIORoverlay block. Peer ofM2_BEHAVIOR_KEY_ON_INITon the sibling:behaviorsub-slot axis. - M2_
KEY_ BEHAVIOR - Canonical camelCase YAML key for the
:behaviorslot’s overlay. - M2_
KEY_ LIMITS - Canonical camelCase YAML key for the
:limitsslot’s overlay. - M2_
KEY_ UPGRADE_ FROM - Canonical camelCase YAML key for the
:upgrade-fromslot’s overlay. - M2_
LIMITS_ KEY_ CPU - Canonical camelCase YAML sub-key the
:limits :cpuper-Servico soft-cgroup-CPU-share millicores scalar-axis lands under inside theM2_KEY_LIMITSoverlay block. Peer ofM2_LIMITS_KEY_MEMORYon the sibling:limitssub-slot axis. - M2_
LIMITS_ KEY_ FUEL - Canonical camelCase YAML sub-key the
:limits :fuelper-Servico wasm-instruction-budget scalar-axis lands under inside theM2_KEY_LIMITSoverlay block. Peer ofM2_LIMITS_KEY_MEMORYon the sibling:limitssub-slot axis. - M2_
LIMITS_ KEY_ MEMORY - Canonical camelCase YAML sub-key the
:limits :memoryper-Servico linear-memory-cap scalar-axis lands under inside theM2_KEY_LIMITSoverlay block. Peer ofM2_KEY_LIMITSon the sibling:limitssub-slot axis:M2_KEY_LIMITSnames the overlay-container’s top-level key (“limits”), the fourM2_LIMITS_KEY_*consts name the four typed sub-keys ([LIMITS_MEMORY_WASM32_MAX_BYTES]-bounded memory cap,crate::LIMITS_FUEL_MAX-bounded fuel budget,crate::LIMITS_WALL_CLOCK_MAX-bounded wall-clock cap,crate::LIMITS_CPU_MILLICORES_MAX-bounded soft cgroup CPU share) that the emit-sideservico_m2_overlayserializes through serde (LimitsSpeccarries#[serde(rename_all = "camelCase")]) and every substrate-side test-side navigator probes to pin the round-trip through the renderedprograms.yamlper-Servico entry / lareira chartvalues.yamlper-pleme-computeunitblock. The lower-camel shape ("memory"/"fuel"/"wallClock"/"cpu") is load-bearing: the serde-derive oncrate::LimitsSpecemits under the same shape and the drift-detection pin inlimits.rs::tests(limits_spec_serde_keys_match_lifted_m2_limits_key_consts) serializes a fully-populatedcrate::LimitsSpecand asserts each canonicalM2_LIMITS_KEY_*byte-sequence appears in the JSON — so a hypothetical futurerename_all = "snake_case"/"kebab-case"accident at the derive attribute surfaces as a build-time test failure atlimits.rsrather than as a silent test-side.get(<stale-camelCase-const>)returningNonefar from the derive-attr drift’s commit. Same “one canonical byte-string per typed axis” discipline every peer M2 / M3 wire-key axis carries (M2_KEY_LIMITS/M2_KEY_BEHAVIOR/M2_KEY_UPGRADE_FROM,M3_PLACEMENT_KEY_ESTRATEGIAetc.). - M2_
LIMITS_ KEY_ WALL_ CLOCK - Canonical camelCase YAML sub-key the
:limits :wall-clockper-Servico wall-clock-cap scalar-axis lands under inside theM2_KEY_LIMITSoverlay block. Peer ofM2_LIMITS_KEY_MEMORYon the sibling:limitssub-slot axis; the camelCase shape ("wallClock", not"wall_clock") is load-bearing per the serde-derive attribute oncrate::LimitsSpec. - M2_
UPGRADE_ FROM_ KEY_ FROM - Canonical camelCase YAML sub-key the
:upgrade-from :fromper-entry OTP-appup-shaped prior-:versaosemver-string scalar-axis lands under inside each element of theM2_KEY_UPGRADE_FROMoverlay sequence. Peer ofM2_KEY_UPGRADE_FROMon the sibling:upgrade-fromsub-slot axis:M2_KEY_UPGRADE_FROMnames the overlay-container’s top-level key (“upgradeFrom”), the twoM2_UPGRADE_FROM_KEY_*consts name the two typed sub-keys the M2crate::UpgradeFromEntrystruct’s OTP-appup-shaped per-entry fields (fromsemver-of-the-prior-:versao/instructionstypedcrate::UpgradeInstructionlist, analogs of the OTP.appupfile’s{FromVsn, [Instruction, …]}per-entry tuple pertheory/INSPIRATIONS.md§II.4) serialize as under the#[serde(rename_all = "camelCase")]derive attribute ("from"/"instructions"). Emitted byservico_m2_overlayas sub-keys of each element of theM2_KEY_UPGRADE_FROMoverlay sequence and consumed by every substrate-side test-side navigator that reaches into the renderedprograms.yamlper-Servico entry / lareira chartvalues.yamlper-pleme-computeunitblock to pin the per-entry round-trip. The lower-camel shape ("from"/"instructions") is load-bearing: the serde-derive oncrate::UpgradeFromEntryemits under the same shape and the drift-detection pin inupgrade.rs::tests(upgrade_from_entry_serde_keys_match_lifted_m2_upgrade_from_key_consts) serializes a fully-populatedcrate::UpgradeFromEntryand asserts each canonicalM2_UPGRADE_FROM_KEY_*byte-sequence appears in the JSON — so a hypothetical futurerename_all = "snake_case"/"kebab-case"accident at the derive attribute or an OTP-lineage per-entry-key rebrand (:from→:prior-versaomatching a hypothetical verbatim-ErlangFromVsncollapse,:instructions→:stepsmatching a hypothetical Akka appup-shape rebrand) coordinated at the type’s derive attribute surfaces as a build-time test failure atupgrade.rsrather than as a silent test-side.get(<stale-camelCase-const>)returningNonefar from the derive-attr drift’s commit. Same “one canonical byte-string per typed axis” discipline every peer M2 / M3 wire-key axis carries (M2_KEY_LIMITS/M2_KEY_BEHAVIOR/M2_KEY_UPGRADE_FROM,M2_LIMITS_KEY_MEMORY/M2_LIMITS_KEY_FUEL/M2_LIMITS_KEY_WALL_CLOCK/M2_LIMITS_KEY_CPU(d8b8b4f),M2_BEHAVIOR_KEY_ON_INIT/M2_BEHAVIOR_KEY_ON_CALL/M2_BEHAVIOR_KEY_ON_CAST/M2_BEHAVIOR_KEY_ON_INFO/M2_BEHAVIOR_KEY_ON_STATE_CHANGE/M2_BEHAVIOR_KEY_ON_TERMINATE(21fe462),M3_PLACEMENT_KEY_ESTRATEGIAetc.). Closes the M2 sub-slot camelCase key axis: with this lift the three M2 typed slots (:limits/:behavior/:upgrade-from) all have their canonical camelCase sub-slot key constants pinned into caixa-core. - M2_
UPGRADE_ FROM_ KEY_ INSTRUCTIONS - Canonical camelCase YAML sub-key the
:upgrade-from :instructionsper-entry OTP-appup-shaped typedcrate::UpgradeInstructionlist axis lands under inside each element of theM2_KEY_UPGRADE_FROMoverlay sequence. Peer ofM2_UPGRADE_FROM_KEY_FROMon the sibling:upgrade-fromsub-slot axis. - M2_
UPGRADE_ INSTRUCTION_ FIELD_ KEY_ MODULE - Canonical per-variant data-field JSON key the M2
:upgrade-from :instructionsper-entry OTP-appupcrate::UpgradeInstruction::LoadModule/crate::UpgradeInstruction::SoftPurge/crate::UpgradeInstruction::Purgevariants surface their module-name payload under on serde emission — the internally-tagged per-variant field byte-string every downstream consumer reading the module string reaches for (serde_json::to_value(&instr).get("module")/serde_yaml::Value::Mapping.get("module")/ hand-authored{"kind": "load-module", "module": "hello-rio"}JSON blobs the wasm-operator’s upgrade-dispatch step consumes to route the per-module load / soft-purge / purge action). The three variants carrying amodule: Stringfield (crate::UpgradeInstruction::LoadModule,crate::UpgradeInstruction::SoftPurge,crate::UpgradeInstruction::Purge) all emit this exact byte-sequence as the data-field JSON key alongside theM2_UPGRADE_INSTRUCTION_KEY_KINDtag-key on the same instruction blob — the#[serde(tag = "kind", rename_all = "kebab-case")]attribute oncrate::UpgradeInstructionpromotes each variant’s struct-field name to a sibling JSON key at the same nesting level as the tag, so aLoadModule { module: "hello-rio" }serializes to{"kind": "load-module", "module": "hello-rio"}— one tag axis, one data-field axis, both live on the same JSON object and both must be pinned into caixa-core so a future rebrand at either axis surfaces as a build-time test failure rather than an apply-time.get(<stale-field-key>)returningNonefar from the field-name drift’s commit. - M2_
UPGRADE_ INSTRUCTION_ FIELD_ KEY_ SCRIPT - Canonical per-variant data-field JSON key the M2
:upgrade-from :instructionsper-entrycrate::UpgradeInstruction::StateChangevariant surfaces its script-path payload under on serde emission — the internally-tagged per-variant field byte-string every downstream consumer reading the migration-script path reaches for (serde_json::to_value(&instr).get("script")/serde_yaml::Value::Mapping.get("script")/ hand-authored{"kind": "state-change", "script": "lib/migrations/v01-to-v02.lisp"}JSON blobs the wasm-operator’s upgrade-dispatch step consumes to route the per-gen_servercode_change/3migration action). Peer ofM2_UPGRADE_INSTRUCTION_FIELD_KEY_MODULEon the sibling module-payload axis; seeM2_UPGRADE_INSTRUCTION_FIELD_KEY_MODULEfor the full lift rationale. - M2_
UPGRADE_ INSTRUCTION_ KEY_ KIND - Canonical
#[serde(tag = "…")]discriminator-key byte-sequence the M2:upgrade-from :instructionsper-entry OTP-appupcrate::UpgradeInstructionenum surfaces its variant tag under on serde emission — the internally-tagged wire key downstream consumers navigate to (serde_json::to_value(&instr).get("kind")/serde_yaml::Value::Mapping.get("kind")/ hand-authored{"kind": "load-module", "module": "…"}JSON) to disambiguate which of the five OTP-shaped variants they hold. The#[serde(tag = "kind", rename_all = "kebab-case")]attribute oncrate::UpgradeInstructionemits exactly this byte-sequence as the tag-slot key, and this const names the same byte-string one altitude above the derive attribute so every downstream consumer that reaches for the tag (the reflection-vs-serde round-trip check in [caixa-core/tests/dispatcher_registration.rs] that probesv.get("kind")against every variant’s expected kebab-case tag, the future M4mesh.pleme.io/v1alpha1/CaixaCR materializer’s upgrade-instruction admission webhook, any wasm-operator dispatch step that navigates the serialized instruction blob to route by variant) routes through one canonical&'static strrather than re-inlining the literal. - M2_
UPGRADE_ INSTRUCTION_ KIND_ LOAD_ MODULE - Canonical author-facing kebab-case tag the M2
:upgrade-from :instructionsper-entry OTP-appupcrate::UpgradeInstruction::LoadModulevariant surfaces under — the:kindfield thecrate::UpgradeError::ModuleEmpty/crate::UpgradeError::ModuleInvalid/crate::UpgradeError::DuplicateCleanup/crate::UpgradeError::PurgeWithoutPriorLoaddiagnostics carry so the author can grep their caixa.lisp for(:load-module …)and fix it in one edit. Thecrate::UpgradeInstruction::lisp_formproduction dispatch and every test-side probe that pins akind:/kinds:/other_kinds:/prior_cleanup_kind:field routes through this const, so a future per-variant kebab-case rebrand (:load-module→:loadmatching a hypothetical Erlangcode:load_modulecollapse,:load-module→:reloadmatching a hypothetical Elixir/Phoenix hot-reload rebrand, or a per-consumer disambiguation as thedefcaixamacro stabilizes) lands at one const-edit per arm and reaches both surfaces (production dispatch + tests) by construction. Peer ofM2_UPGRADE_FROM_KEY_FROM/M2_UPGRADE_FROM_KEY_INSTRUCTIONSon the sibling:upgrade-fromsub-slot renderer-wire-key axis (36ffe65) — this const family extends the same “one canonical byte-string per typed axis” discipline onto the author-facing per-instruction-variant tag axis one altitude below the:instructionscontainer. Same “one canonical declaration per arm, next to the axis” discipline the peerM2_BEHAVIOR_AUTHOR_KEY_ON_INITetc. (889dc18) established for the M2:behaviorsub-slot’s per-callback kebab-case labels,CONTRATO_AUTHOR_KEY_DE/CONTRATO_AUTHOR_KEY_PARA(f50c875) for the M3:contratosper-entry endpoint labels, and every top-levelM2_AUTHOR_KEY_LIMITS(f49c8b0) /M3_AUTHOR_KEY_MEMBROS(882f498) /SUPERVISOR_AUTHOR_KEY_ESTRATEGIA(be40492) family established. - M2_
UPGRADE_ INSTRUCTION_ KIND_ PURGE - Canonical author-facing kebab-case tag the M2
:upgrade-from :instructionsper-entrycrate::UpgradeInstruction::Purgevariant surfaces under. Peer ofM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEon the sibling per-instruction-variant tag axis; seeM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEfor the full lift rationale. - M2_
UPGRADE_ INSTRUCTION_ KIND_ RESTART - Canonical author-facing kebab-case tag the M2
:upgrade-from :instructionsper-entrycrate::UpgradeInstruction::Restartvariant surfaces under. Peer ofM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEon the sibling per-instruction-variant tag axis; seeM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEfor the full lift rationale. - M2_
UPGRADE_ INSTRUCTION_ KIND_ SOFT_ PURGE - Canonical author-facing kebab-case tag the M2
:upgrade-from :instructionsper-entrycrate::UpgradeInstruction::SoftPurgevariant surfaces under. Peer ofM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEon the sibling per-instruction-variant tag axis; seeM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEfor the full lift rationale. - M2_
UPGRADE_ INSTRUCTION_ KIND_ STATE_ CHANGE - Canonical author-facing kebab-case tag the M2
:upgrade-from :instructionsper-entrycrate::UpgradeInstruction::StateChangevariant surfaces under. Peer ofM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEon the sibling per-instruction-variant tag axis; seeM2_UPGRADE_INSTRUCTION_KIND_LOAD_MODULEfor the full lift rationale. - M3_
AUTHOR_ KEY_ CONTRATOS - Canonical author-facing kebab-case
(defcaixa … :contratos (…))top-level mesh slot label the M3 Aplicacao’s WIT-typed inter-Servico edge set surfaces under. Peer ofM3_AUTHOR_KEY_MEMBROSon the sibling M3 top-level mesh-slot dual axis; seeM3_AUTHOR_KEY_MEMBROSfor the full lift rationale. - M3_
AUTHOR_ KEY_ ENTRADA - Canonical author-facing kebab-case
(defcaixa … :entrada (…))top-level mesh slot label the M3 Aplicacao’s external-ingress gateway surface (crate::aplicacao::Entrada::host,:para,:paths,:port) surfaces under. Peer ofM3_AUTHOR_KEY_MEMBROSon the sibling M3 top-level mesh-slot dual axis; seeM3_AUTHOR_KEY_MEMBROSfor the full lift rationale. - M3_
AUTHOR_ KEY_ MEMBROS - Canonical author-facing kebab-case
(defcaixa … :membros (…))top-level mesh slot label the M3 Aplicacao’s constituent-Servico set surfaces under. Peer of the four sibling M3 top-level mesh-slot labels (M3_AUTHOR_KEY_CONTRATOS,M3_AUTHOR_KEY_POLITICAS,M3_AUTHOR_KEY_PLACEMENT,M3_AUTHOR_KEY_ENTRADA) on the dual-axis pair every M3 top-level mesh slot carries: the author-facing kebab-case[M3_AUTHOR_KEY_*]const names the label thecrate::Caixa::declared_mesh_slotstagger threads through as one of the&'static strentries in the canonical-declaration-order slot list the kind-coherence gate (crate::LayoutError::MeshSlotsOnNonAplicacao) joins into the space-separatedslots:diagnostic naming which of the five mesh slots the offending caixa declared on a non-Aplicacao kind. Peer of theM3_KEY_PLACEMENTrenderer-side wire-key const declared immediately above on the sole M3 mesh slot the renderer surfaces as a per-entry overlay-container key (:membros/:contratos/:politicas/:entradarender as per-arm derived artifacts — programs.yaml fan-out, CiliumNetworkPolicies, per-edge overlays, Gateway/HTTPRoute — not as a single overlay-container key). - M3_
AUTHOR_ KEY_ PLACEMENT - Canonical author-facing kebab-case
(defcaixa … :placement (…))top-level mesh slot label the M3 Aplicacao’s cross-cluster distribution strategy (crate::aplicacao::Placement::estrategia+:clusters+:shard-key/:affinity) surfaces under. Peer ofM3_AUTHOR_KEY_MEMBROSon the sibling M3 top-level mesh-slot dual axis; seeM3_AUTHOR_KEY_MEMBROSfor the full lift rationale. Byte-identical to the peerM3_KEY_PLACEMENTrenderer-side wire key modulo the leading:— the two consts split on the axis every M3 top-level slot carries (author-facing kebab-case label vs. renderer-side camelCase overlay key), the same split theM2_AUTHOR_KEY_LIMITS/M2_KEY_LIMITSpeer pair established on the sibling M2 axis. - M3_
AUTHOR_ KEY_ POLITICAS - Canonical author-facing kebab-case
(defcaixa … :politicas (…))top-level mesh slot label the M3 Aplicacao’s mesh-level policy overlay (crate::aplicacao::MeshPolicy::timeout,:retries,:circuit-breaker,:mtls-required,:rate-limit) surfaces under. Peer ofM3_AUTHOR_KEY_MEMBROSon the sibling M3 top-level mesh-slot dual axis; seeM3_AUTHOR_KEY_MEMBROSfor the full lift rationale. - M3_
KEY_ PLACEMENT - Canonical YAML key for the M3
:placementslot’s overlay on a rendered programs.yaml entry. The lareira-fleet-programs aggregator (and the futureapp-operatorper-Aplicacao reconciler) both key off this exact spelling to filter entries byplacement.clustersfor cross-cluster fanout (MESH-COMPOSITION §III.4) and to dispatch onplacement.estrategiafor distributed-app takeover semantics (§II.1, §V cross-cluster federation). Lifted as a const alongside the M2 keys so the Aplicacao-side renderer (crate::aplicacao::Placement→ caixa-meshprograms_for_aplicacao) and every consumer (the M4 cluster-fanout renderer, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer, theapp-operator’s placement-strategy dispatcher) spell the same key exactly the same way — drift here = a programs.yaml entry whose placement is silently dropped at the aggregator’s filter step (visible only as “the workload doesn’t land where the typed slot said it should”). - M3_
PLACEMENT_ ESTRATEGIA_ REPLICATED - Canonical M3
crate::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
crate::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
crate::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). - M3_
PLACEMENT_ KEY_ AFFINITY - Canonical camelCase YAML sub-key for the
crate::aplicacao::Placementstruct’saffinityplacement-engine-hint axis — the per-M3_KEY_PLACEMENT- block optional field carrying the validated non-empty affinity hint (percrate::aplicacao::AplicacaoSpec::validate_placement) that every downstream placement-hint consumer weights off: - M3_
PLACEMENT_ KEY_ CLUSTERS - Canonical camelCase YAML sub-key for the
crate::aplicacao::Placementstruct’sclusterscluster-pool axis — the per-M3_KEY_PLACEMENT-block field carrying the validated cluster-list (non-empty + duplicate-free percrate::aplicacao::AplicacaoSpec::validate_placement) that every downstream cross-cluster consumer filters off: - M3_
PLACEMENT_ KEY_ ESTRATEGIA - Canonical camelCase YAML sub-key for the
crate::aplicacao::Placementstruct’sestrategiadistribution-strategy discriminator — the per-M3_KEY_PLACEMENT-block field the M3crate::aplicacao::PlacementStrategyenum’sSerializederive emits, and the exact scalar every downstream consumer dispatches on: - M3_
PLACEMENT_ KEY_ SHARD_ KEY - Canonical camelCase YAML sub-key for the
crate::aplicacao::Placementstruct’sshard_keyshard-selection-template axis — the per-M3_KEY_PLACEMENT- block optional field carrying the validated non-empty shard-key template (percrate::aplicacao::AplicacaoSpec::validate_placement’sShardedKeyEmptyarm — the build rejects any:placement Shardedthat omits the slot, and rejects any non-Sharded strategy that carries the slot asShardKeyOnNonSharded) that every downstream shard-dispatch consumer materializes off: - MEMBRO_
KEY_ CAIXA - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Membrostruct’scaixaper-entry-name-of-the- member-Servico axis — thecaixa:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::Membroemits at each:membrosentry, and the exact scalar every downstream#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::Membroemits at each:membrosentry, and the exact scalar every downstream consumer reaching for the member’scrate::Caixa::nomeviaValue::get(...)(the future wasm-operator’s per-:membrosresolver, the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission webhook, thefeira app graphverb’s per-member name-lookup, the [caixa_resolver] per-:membrosgit-clone step) must probe on. - MEMBRO_
KEY_ VERSAO - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::Membrostruct’sversaoper-entry-semver- constraint-of-the-member axis. Peer ofMEMBRO_KEY_CAIXAon the samecrate::aplicacao::Membroper-entry serialized-key axis; seeMEMBRO_KEY_CAIXAfor the full lift rationale. The Rust field is lowercaseversao;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - NATS_
SUBJECT_ MAX_ LEN - Max length, in bytes, of a single typed
:contratos :subjectNATS subject passing theis_nats_subjectpredicate. 256 bytes — matches the upstream NATS Java client’sMAX_SUBJECT_LENGTHconstant and sits well above the longest legitimate subject the caixa-mesh test fixtures + example checkout-aplicacao carry ("checkout.events.charge.failed"= 30 bytes,"rio.events.order.charged"= 25 bytes). The cap exists to reject the paste-from-binary footgun (a multi-line blob accidentally landed in the:subjectslot) rather than to constrain legitimate authoring. Lifted as a typed const so a future axis reaching for the same bound (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-subject validator, the future NATS Stream/Consumer CR emitter for thenats:pub-subbranch of:contratos, the future per-edge:politicas-derived NATS-aware policy overlay) reads from one place. - OCI_
SCHEME_ PREFIX - Canonical OCI URL scheme prefix — the
"oci://"byte-string every substrate-side renderer that composes an OCI artifact reference for a Helm chart prepends. The Helm 3 OCI storage protocol (Helm 3.8+) and theFluxCDHelmRepositorytype: ocisource both key off this literal —helm pull/helm install/helm registry login/FluxCD’s source-controller all reject any other scheme on the OCI path — so a byte-shape drift on this prefix silently splits the substrate’s published chart references from the cluster-side resolvers that consume them athelm registry/FluxCDreconcile time far from the source renderer. - PLEME_
LABEL_ PREFIX - Canonical pleme-io label namespace prefix. Every cluster object
emitted by any caixa-side renderer that needs to carry the
pleme-io workload identity uses this prefix; runtime label
injectors (
lareira-fleet-programschart’s pod template,pleme-computeunitlibrary chart’s identity sidecar, the caixa-operator’s pod-mutating webhook) and runtime label consumers (Cilium identity-based policy, Hubble flow attribution,caixa-mesh’s policy / Gateway emission, future observability/tracing renderers) all spell the same prefix exactly the same way — drift between any of those = a CiliumNetworkPolicy that matches no pods, a Hubble flow that can’t be correlated to its workload, an OpenTelemetry resource attribute that doesn’t join to its caixa lacre. - POLITICAS_
KEY_ CIRCUIT_ BREAKER - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::MeshPolicystruct’scircuit_breakercircuit-breaker sub-block axis — thecircuitBreaker:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::MeshPolicyemits at the singleton:politicasblock, and the exact camelCase scalar (Rust fieldcircuit_breaker→ serde-emittedcircuitBreaker, one of the twoMeshPolicyaxes the derive-attribute non-trivially transforms alongsidePOLITICAS_KEY_MTLS_REQUIREDandPOLITICAS_KEY_RATE_LIMIT) every downstream circuit-breaker consumer must probe on (the future M4 per-edge:politicasoverlay projection onto the mesh’s per-backend failure-counter reset window per MESH-COMPOSITION.md §III.3 breaker semantics, the futurefeira lintper-:politicasbreaker-window bound-check againstcrate::POLICY_BREAKER_WINDOW_MAXandcrate::POLICY_BREAKER_MAX_FAILURES_MAX). Peer ofPOLITICAS_KEY_TIMEOUTon the samecrate::aplicacao::MeshPolicysingleton serialized-key axis; seePOLITICAS_KEY_TIMEOUTfor the full lift rationale. - POLITICAS_
KEY_ MTLS_ REQUIRED - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::MeshPolicystruct’smtls_requiredmTLS-enforcement-toggle axis — themtlsRequired:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::MeshPolicyemits at the singleton:politicasblock, and the exact camelCase scalar (Rust fieldmtls_required→ serde-emittedmtlsRequired) every downstream mesh-identity consumer must probe on (the future M4 per-edge:politicasoverlay projection onto CiliumCiliumNetworkPolicyper-ruleCILIUM_KEY_AUTHENTICATIONmode dispatch under thecilium_auth_modebijection projection (a4dc43c) — the mesh’s sandboxing-by-default posture MESH-COMPOSITION.md §III.3 promises keys off this exact byte-sequence to opt out of mTLS enforcement per-edge, so drift here silently reopens the every-edge-mTLS invariant the substrate defaults to). Peer ofPOLITICAS_KEY_TIMEOUTon the samecrate::aplicacao::MeshPolicysingleton serialized-key axis; seePOLITICAS_KEY_TIMEOUTfor the full lift rationale. - POLITICAS_
KEY_ RATE_ LIMIT - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::MeshPolicystruct’srate_limittoken-bucket-rate-limit axis — therateLimit:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::MeshPolicyemits at the singleton:politicasblock, and the exact camelCase scalar (Rust fieldrate_limit→ serde-emittedrateLimit) every downstream rate-limit consumer must probe on (the future M4 per-edge:politicasoverlay projection onto the mesh’s per-backend token-bucket(rate, window)decoder driven by the canonical [crate::aplicacao::rate_limit_codec] unit-suffix bijection). Peer ofPOLITICAS_KEY_TIMEOUTon the samecrate::aplicacao::MeshPolicysingleton serialized-key axis; seePOLITICAS_KEY_TIMEOUTfor the full lift rationale. - POLITICAS_
KEY_ RETRIES - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::MeshPolicystruct’sretriestransient-failure retry-count axis — theretries:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::MeshPolicyemits at the singleton:politicasblock. Peer ofPOLITICAS_KEY_TIMEOUTon the samecrate::aplicacao::MeshPolicysingleton serialized-key axis; seePOLITICAS_KEY_TIMEOUTfor the full lift rationale. The Rust field is lowercaseretries;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - POLITICAS_
KEY_ TIMEOUT - Canonical camelCase JSON/YAML top-level key for the
crate::aplicacao::MeshPolicystruct’stimeoutper-call wall-clock cap axis — thetimeout:field the M3 Aplicacao’s#[serde(rename_all = "camelCase")]derive oncrate::aplicacao::MeshPolicyemits at the singleton:politicasblock, and the exact scalar every downstream mesh-timeout consumer must probe on (the future M4 per-edge:politicasoverlay projection onto CiliumL7Rules/ Gateway APIHTTPRouteper-backendtimeouts.backendRequestaxis per MESH-COMPOSITION.md §III.3, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’s admission-time mesh-timeout cross-check, the futurefeira lintper-:politicasauthored-duration bound-check againstcrate::POLICY_TIMEOUT_MAX). - SPDX_
EXPRESSION_ MAX_ LEN - Practical cap on a
:licenca(SPDX-expression-shaped) value, in bytes. The SPDX specification places no length cap on expressions — the grammar admits arbitrarily-nested composite expressions — but every realistic pleme-io fixture stays well under this bound (MIT3,Apache-2.010,Apache-2.0 OR MIT17, the longest SPDX dual-license-with-exception shapeApache-2.0 WITH LLVM-exception31; a(MIT OR Apache-2.0) AND BSD-3-Clause AND ISCcomposite caps near 50). 256 bytes is the substrate’s catch-the-paste-from-binary cap on the peer trajectoryis_dns_1123_label(63),is_cargo_feature_name(64),is_wit_world_ref(128),is_nats_subject(256),is_wasi_keyvalue_slot(512),is_git_ref_name(255),is_git_oid(40/64),is_git_repo_url(2048) carry: an axis-appropriate ceiling above every legitimate authoring shape, tight enough to surface the “paste-from-license-text” / “multi-line license blob landed in the:licencaslot” footgun at validate time. - STANDALONE_
LAREIRA_ ENABLED_ DEFAULT - Canonical substrate-side default for the
values.<library>.enabledscalar-value toggle everycaixa_helm::render_chart_for_servico-emitted standalonelareira-<nome>chart’svalues.yamldocument seeds inside its per-caixaDEFAULT_LIBRARY_NAMEwrap block to leave the pairedDEFAULT_LIBRARY_NAMEchild chart opted-out at the per-clusterhelm template/helm installapply step. Pairs with the siblingHELM_VALUES_KEY_ENABLEDleaf-scalar-key half of the(leaf-key, scalar-value)per-values-block child-chart-enablement-toggle declaration pair — the key half names the canonicalvalues.<library>.enabledleaf-scalar-key axis every consumer (this standalone-path default,caixa_flux::cluster_bundle’s per-CR values-overlay) probes on, and this scalar-value half names the substrate-side default the standalone per-chart path seeds under it. Semantically distinct from — and inverse of — the peerCLUSTER_BUNDLE_LAREIRA_ENABLED_DEFAULTdefault thatcaixa_flux::cluster_bundle’shelmrelease.yamlvalues overlay seeds for the substrate-side composition-path force-on (that path rendersenabled: truein the per-clusterHelmRelease.spec.values.<library>overlay so the operator’s per-caixa cluster-scoped ownership at bundle materialization time carries a force-on for the child chart); the standalone per-chart path is the substrate-side opt-out path where the operator has not yet asserted per-caixa cluster-scoped ownership by materializing a per-caixaGitRepository+HelmRelease+Kustomizationtrio, so the per-chartvalues.yamlseedsenabled: falseunder thevalues.<library>wrap and cluster operators must opt each caixa in per-cluster. - SUPERVISOR_
AUTHOR_ KEY_ CHILDREN - Canonical author-facing kebab-case
(defcaixa … :children (…))top-level supervisor-tree slot label the OTP:kind Supervisorcaixa’s static child-spec list (crate::supervisor::ChildSpec) surfaces under. Peer ofSUPERVISOR_AUTHOR_KEY_ESTRATEGIAon the sibling supervision-tree slot axis; seeSUPERVISOR_AUTHOR_KEY_ESTRATEGIAfor the full lift rationale. - SUPERVISOR_
AUTHOR_ KEY_ ESTRATEGIA - Canonical author-facing kebab-case
(defcaixa … :estrategia <s>)top-level supervisor-tree slot label the OTP:kind Supervisorcaixa’scrate::supervisor::RestartStrategydiscriminator surfaces under. Peer ofM2_AUTHOR_KEY_LIMITS/M3_AUTHOR_KEY_MEMBROSon the third kind-scoped typed-slot-family axis: the M2M2_AUTHOR_KEY_*consts (f49c8b0) name the Servico-runtime slots, the M3M3_AUTHOR_KEY_*consts (882f498) name the Aplicacao mesh slots, and theseSUPERVISOR_AUTHOR_KEY_*consts close the last remaining kind ↔ slot-family axis — the Supervisor supervision-tree slots (:estrategia,:max-restarts,:restart-window,:children) thatcrate::Caixa::declared_supervisor_slotstags for the siblingcrate::LayoutError::SupervisorSlotsOnNonSupervisorkind-coherence gate. - SUPERVISOR_
AUTHOR_ KEY_ MAX_ RESTARTS - Canonical author-facing kebab-case
(defcaixa … :max-restarts <n>)top-level supervisor-tree slot label the OTP:kind Supervisorcaixa’sMaxIntensityrestart-budget counter surfaces under. Peer ofSUPERVISOR_AUTHOR_KEY_ESTRATEGIAon the sibling supervision-tree slot axis; seeSUPERVISOR_AUTHOR_KEY_ESTRATEGIAfor the full lift rationale. - SUPERVISOR_
AUTHOR_ KEY_ RESTART_ WINDOW - Canonical author-facing kebab-case
(defcaixa … :restart-window "<duration>")top-level supervisor-tree slot label the OTP:kind Supervisorcaixa’sPeriodrolling-window counter surfaces under. Peer ofSUPERVISOR_AUTHOR_KEY_ESTRATEGIAon the sibling supervision-tree slot axis; seeSUPERVISOR_AUTHOR_KEY_ESTRATEGIAfor the full lift rationale. - SUPERVISOR_
CHILD_ KEY_ CAIXA - Canonical camelCase JSON/YAML top-level key for the
crate::supervisor::ChildSpecstruct’scaixaper-entry-name-of- the-child-caixa axis — thecaixa:field the M2 Supervisor’s#[serde(rename_all = "camelCase")]derive oncrate::supervisor::ChildSpecemits at each entry of thecrate::supervisor::SupervisorSpec::childrenlist, and the exact scalar every downstream consumer reaching for the child caixa’scrate::Caixa::nomeviaValue::get(...)(the future wasm-operator’s per-supervisor-tree child resolver, the M4caixa.pleme.io/v1alpha1/SupervisorCR materializer’s admission webhook per-child cross-check, the futurefeirasupervisor-tree walker’s per-child name-lookup, the [caixa_resolver] per-child git-clone step) must probe on. - SUPERVISOR_
CHILD_ KEY_ RESTART - Canonical camelCase JSON/YAML top-level key for the
crate::supervisor::ChildSpecstruct’srestartper-entrycrate::supervisor::RestartPolicydiscriminator axis. Peer ofSUPERVISOR_CHILD_KEY_CAIXAon the samecrate::supervisor::ChildSpecper-entry serialized-key axis; seeSUPERVISOR_CHILD_KEY_CAIXAfor the full lift rationale. The Rust field is lowercaserestart;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - SUPERVISOR_
CHILD_ KEY_ VERSAO - Canonical camelCase JSON/YAML top-level key for the
crate::supervisor::ChildSpecstruct’sversaoper-entry-semver- constraint-of-the-child axis. Peer ofSUPERVISOR_CHILD_KEY_CAIXAon the samecrate::supervisor::ChildSpecper-entry serialized-key axis; seeSUPERVISOR_CHILD_KEY_CAIXAfor the full lift rationale. The Rust field is lowercaseversao;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - SUPERVISOR_
CHILD_ RESTART_ PERMANENT - Canonical M2
crate::supervisor::RestartPolicy::Permanentvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_CHILD_KEY_RESTARTwhenever the typed:children :restartper-child restart-policy slot is the always-restart-regardless-of-exit arm (the enum’sdefault()and the canonical happy-path per theory/INSPIRATIONS.md §II.2 — Erlang/OTPpermanent, the long-running-service posture where the supervisor must bring the child back on every failure mode). - SUPERVISOR_
CHILD_ RESTART_ TEMPORARY - Canonical M2
crate::supervisor::RestartPolicy::Temporaryvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_CHILD_KEY_RESTARTwhenever the typed:children :restartper-child restart-policy slot is the never-restart arm (Erlang/OTPtemporary, the one-shot posture where the child’s completion — clean or not — is itself the success signal; theoneShotcrate::render::COMPUTEUNIT_SPEC_KEY_TRIGGERarm maps here). - SUPERVISOR_
CHILD_ RESTART_ TRANSIENT - Canonical M2
crate::supervisor::RestartPolicy::Transientvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_CHILD_KEY_RESTARTwhenever the typed:children :restartper-child restart-policy slot is the restart-only-on-abnormal-exit arm (Erlang/OTPtransient, the “restart on non-zero exit or unhandled exception; a clean exit completes the child” posture — the third canonical OTP per-child restart-decision arm alongsidepermanentandtemporary). - SUPERVISOR_
ESTRATEGIA_ ONE_ FOR_ ALL - Canonical M2
crate::supervisor::RestartStrategy::OneForAllvariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_KEY_ESTRATEGIAwhenever the typed:supervisor :estrategiaslot’s strategy is the restart-every-sibling-on-any- failure arm (Erlang/OTPone_for_all, used when children share state and must be in sync). - SUPERVISOR_
ESTRATEGIA_ ONE_ FOR_ ONE - Canonical M2
crate::supervisor::RestartStrategy::OneForOnevariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_KEY_ESTRATEGIAwhenever the typed:supervisor :estrategiaslot’s strategy is the restart-only-the-failed-child arm (the enum’sdefault()and the canonical happy-path per theory/INSPIRATIONS.md §II.2 — Erlang/OTPone_for_one). - SUPERVISOR_
ESTRATEGIA_ REST_ FOR_ ONE - Canonical M2
crate::supervisor::RestartStrategy::RestForOnevariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_KEY_ESTRATEGIAwhenever the typed:supervisor :estrategiaslot’s strategy is the restart-failed-and-later-started- siblings arm (Erlang/OTPrest_for_one, used when later children depend on earlier ones so the startup-order suffix must be re-established). - SUPERVISOR_
ESTRATEGIA_ SIMPLE_ ONE_ FOR_ ONE - Canonical M2
crate::supervisor::RestartStrategy::SimpleOneForOnevariant discriminator scalar-value — the exact byte-string theSerializederive on the un-renamed enum emits underSUPERVISOR_KEY_ESTRATEGIAwhenever the typed:supervisor :estrategiaslot’s strategy is the dynamic-children-of-one-shape arm (Erlang/OTPsimple_one_for_one, the one arm on whichcrate::supervisor::SupervisorSpec::validategateschildren.is_empty()as a structural partition — static:childrenon aSimpleOneForOnesupervisor is a build-time rejection). - SUPERVISOR_
KEY_ CHILDREN - Canonical camelCase JSON/YAML top-level key for
crate::supervisor::SupervisorSpec’schildrenaxis. Peer ofSUPERVISOR_KEY_ESTRATEGIAon the same sibling supervision-tree serialized-key axis; seeSUPERVISOR_KEY_ESTRATEGIAfor the full lift rationale. The Rust field is lowercasechildren;#[serde(rename_all = "camelCase")]is a no-op on this axis and the emitted key equals the source-side field name byte-for-byte. - SUPERVISOR_
KEY_ ESTRATEGIA - Canonical camelCase JSON/YAML top-level key for
crate::supervisor::SupervisorSpec’sestrategiarestart-strategy discriminator — the exact byte-sequence the type’s#[serde(rename_all = "camelCase")]derive emits, and the scalar every downstream JSON/YAML consumer that reaches into a serializedSupervisorSpec(viaValue::get(...)) must probe on. - SUPERVISOR_
KEY_ MAX_ RESTARTS - Canonical camelCase JSON/YAML top-level key for
crate::supervisor::SupervisorSpec’smax_restartsaxis. Peer ofSUPERVISOR_KEY_ESTRATEGIAon the same sibling supervision-tree serialized-key axis; seeSUPERVISOR_KEY_ESTRATEGIAfor the full lift rationale. The Rust field issnake_casemax_restarts;#[serde(rename_all = "camelCase")]maps it to the camelCase JSON key"maxRestarts"this constant pins. - SUPERVISOR_
KEY_ RESTART_ WINDOW - Canonical camelCase JSON/YAML top-level key for
crate::supervisor::SupervisorSpec’srestart_windowaxis. Peer ofSUPERVISOR_KEY_ESTRATEGIAon the same sibling supervision-tree serialized-key axis; seeSUPERVISOR_KEY_ESTRATEGIAfor the full lift rationale. The Rust field issnake_caserestart_window;#[serde(rename_all = "camelCase")]maps it to the camelCase JSON key"restartWindow"this constant pins. - WASI_
KV_ SLOT_ MAX_ LEN - Max length, in bytes, of a single typed
:contratos :slotWASI keyvalue store key/template passing theis_wasi_keyvalue_slotpredicate. 512 bytes — generously above the longest realistic slot template ("checkout/$orderId"= 17 bytes,"users:{tenant}/{id}"= 19 bytes,"session.tokens.<sid>"= 20 bytes) and well under any canonical WASI-keyvalue backend’s per-key limit (etcd: 1.5 MB, DynamoDB partition+sort key: 2 KB combined, Redis: 512 MB — the cap is chosen for the template slot a typed:contratosedge authors, not the realized key at runtime). The cap exists to reject the paste-from-binary footgun (a multi-line blob accidentally landed in the:slotslot) rather than to constrain legitimate authoring. Lifted as a typed const so a future axis reaching for the same bound (the M4mesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-slot validator, the future per-Servico:capabilitieswasi:keyvalue/storeaxis’s per-slot validator when M4 lands per-capability typed slots, the future per-edge:politicas-derived kv-backend-aware policy overlay’s per-slot validator) reads from one place. Same lift trajectory asNATS_SUBJECT_MAX_LEN(which caps the peer pub-sub payload axis at 256 bytes — twice that here because kv slot templates legitimately compose more/-separated path segments + template variables than NATS subjects do.-separated tokens). - WIT_
IDENT_ MAX_ LEN - Max length, in bytes, of a single typed
:contratos :witworld reference passing theis_wit_world_refpredicate. 128 bytes — roughly 8× the longest real-world WIT reference the caixa-mesh test fixtures carry (wasi:keyvalue/store= 19 bytes) and the WIT registry references its peers under (wasi:http/proxy@0.2.0= 21 bytes), so the cap exists to reject the paste-from-binary footgun (a multi-line blob accidentally landed in the:witslot) rather than to constrain legitimate authoring. Lifted as a typed const so a future axis reaching for the same bound (the M4 per-edge WIT registry resolver, the futuremesh.pleme.io/v1alpha1/AplicacaoCR materializer’s per-contract WIT validator) reads from one place.
Traits§
- Mapping
Ext - Extension methods on
serde_yaml::Mappingthat lift the per-key scalar-promotion boilerplate every K8s-artifact-emitter acrosscaixa-mesh,caixa-flux,caixa-helm, andcaixa-core::rendercarries: the canonicalmapping.insert(Value::String(key.into()), value)three-liner the schema-key axis of every emitted YAML document tunnels a&'static strkey axis-name through. - Sequence
Ext - Extension methods for the
Vec<serde_yaml::Value>emission surface that the K8s-artifact-emit sites ofcaixa-mesh/caixa-flux/caixa-helm/caixa-core::renderbuild up asspec.ingress[]/spec.rules[]/spec.hostnames[]/ per- programs.yaml-entry payloads before wrapping each vec as aserde_yaml::Value::Sequenceon an outerserde_yaml::Mapping(viaMappingExt::insert_sequence).
Functions§
- assert_
str_ reexport_ identity - Test-side pin that asserts a renderer-crate
pub use caixa_core::X;re-export shares both the byte value and the&'static strallocation of its canonicalcaixa_core::Xdeclaration — the stronger predicate than a plainassert_eq!byte-equality check. - ci_
declared_ edge_ count - Substrate-canonical per-
Acaodeclared-edge-count projection every consumer of a borrowedcanteiro_types::CiRunthat needs the total number of author-declareddepsedges across everycanteiro_types::CiNodekeys off — returns the plainusizesumci.nodes.iter().map(|n| n.deps.len()).sum()verbatim, without runningcanteiro_types::decomposeagain (the count is a property of the borrowed run’s shape, not of the ownedcanteiro_types::CanteiroDagthe siblingdecompose_cireturns — an author-declared cycle carries the same edge count as an author-declared linear DAG of the same node-and-dep list). - 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. 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_ policy_ name - 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 — 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. - decompose_
ci - Predicate: decompose a borrowed
canteiro_types::CiRuninto its typedcanteiro_types::CanteiroDagviacanteiro_types::decompose, wrapping anycanteiro_types::DecomposeErrorin a typedCiDecomposeFailureview (carryingCaixa::nome) on rejection. The canonical entry-point every per-Acaoconsumer wraps in its ownthiserrorErrorvariant via#[from]— the call site becomes a singlelet cd = caixa_core::decompose_ci(caixa, ci)?;in place of the prior inlinelet cd = canteiro_types::decompose(ci).map_err(|source| CiDecomposeFailure { nome: caixa.nome().to_string(), source })?;block. - find_
ascii_ whitespace_ byte - Predicate: find the first ASCII whitespace byte in
s, orNoneif none of the string’s bytes matchu8::is_ascii_whitespace. - find_
by_ kind - Locate the first K8s CR YAML document in
docswhose top-levelkinddiscriminator axis equalskind. - find_
non_ ascii_ whitespace_ char - Predicate: find the first non-ASCII Unicode-
White_Spacecharacter ins, orNoneif every character lies in the ASCII byte range. - flux_
kustomization_ source_ subtree - Canonical substrate-side per-cluster / per-caixa
Kustomization.spec.pathsource-sub-tree scalar composer — the./clusters/<cluster>/services/<nome>GitRepository-relative directory-tree seed everycaixa-flux-emittedkustomization.yamldocument mounts under its liftedFLUX_KUSTOMIZATION_KEY_PATHleaf-scalar-key at the top-levelspecposition so the Flux v2 kustomize-controller’s per-CR reconcile loop walks into the paired per-cluster / per-caixa sub-tree of the pleme-io k8s repository (rather than theGitRepositoryroot, which would pull every unrelated cluster’s manifests through the wrong per-caixaKustomization). - gateway_
api_ http_ route_ name - Canonical per-
:entradaHTTPRoutemetadata.nameK8s-name-shaped scalar every caixa-meshgateway_routesemitter mounts its per-:entradaHTTPRoute under. Composes the parent Aplicacao’s:nomeand the:entrada :paradestination Servico’s:nomeon a canonical-separator (format!("{aplicacao}-{para}")), so the per-(:aplicacao, :entrada.para)HTTPRoute identity axis lives at one composer instead of a verbatim inlineformat!("{}-{}", caixa.nome, entrada.para)at the [caixa_mesh::gateway_routes]kube_resource_skeletonname:argument. - insert_
first_ seen - Bracket a per-list uniqueness gate with the shared “insert into
seen; caller-shapedErron the second occurrence” gate every declaration-order-preservingVec-authored slot in caixa-core carries. Delegates tostd::collections::HashSet::insertverbatim (which returnstrueon first insertion,falseon repeat), then invokes the caller’son_duplicateclosure only on the duplicate arm — keeping the hot path (the unique case) allocation-free. - is_
cargo_ feature_ name - Predicate: assert that
sis a valid Cargo feature name. The contract — modeled on Cargo’srestricted_names::validate_feature_namegrammar (the parser the Cargo resolver routes every[dependencies.<dep>.features]entry through atcargo metadatatime), narrowed to the strict ASCII subset every realistic feature in the Cargo ecosystem uses: - is_
chart_ description_ shape - Predicate: assert that
sis a valid chart-description shape. The:descricaoaxis is a free-form prose summary that lands in the renderedlareira-<nome>Helm chart’sChart.yamldescription:field (a YAML scalar consumed byhelm list,helm search, Artifact Hub, and every chart-aware UI) and in the chart’sREADME.mdheader paragraph (caixa-helm/src/lib.rs:232,caixa-helm/src/lib.rs:333). The contract — modeled on the YAML 1.2 plain-style scalar grammar and the Helm chart spec’s expectation thatdescription:is a one-line summary: - is_
chart_ keyword_ shape - Predicate: assert that
sis a valid chart-keyword shape. The:etiquetasaxis is a per-entry registry-search-tag identifier that lands in the renderedlareira-<nome>Helm chart’sChart.yamlkeywords:array via [caixa-helm]’sbuild_chart_yaml(folded through astd::collections::BTreeSetalongside the four substrate-fixed tagslareira/wasm/tatara-lisp/caixa-servico) and indexes the chart through Artifact Hub’s keyword-search axis + the future caixa-registry’s keyword index. The contract — modeled on Cargo’s crates.io[package] keywordsgrammar (the parser the crates.io publish API routes everykeywords:entry through at publish time), narrowed to the strict ASCII subset every realistic search tag uses: - is_
chart_ maintainer_ name_ shape - Predicate: assert that
sis a valid chart-maintainer-name shape. The:autoresaxis is a per-entry maintainer identifier that lands in the renderedlareira-<nome>Helm chart’sChart.yamlmaintainers: [{name: …, email: null}]array via [caixa-helm]’sbuild_chart_yaml(caixa-helm/src/lib.rs:251); each entry becomes thename:value of a singleMaintainerrecord (a YAML scalar consumed byhelm list,helm search, Artifact Hub’s maintainer index, and every chart-aware UI). The contract — modeled on the same YAML 1.2 plain-style scalar grammaris_chart_description_shapeenforces on the sibling:descricaoaxis, with a tighter length cap for the per-entry identifier class: - is_
computeunit_ yaml_ extension - Predicate: assert that
pathterminates in the canonicalCOMPUTEUNIT_YAML_SUFFIX(lowercase.computeunit.yaml) — the file-type shape every:servicosentry, the ComputeUnit-CR axis the M2 typed-substrate caixa-helm / caixa-flux renderers consume viaserde_yaml::from_str, must take. The contract: - is_
digit_ only_ magnitude - Predicate:
sis a non-empty digit-only magnitude — every byte is an ASCII digit[0-9]. - is_
dns_ 1123_ label - Predicate: assert that
sis a valid K8s DNS-1123 label. The contract — exactly the regex the K8s apiserver enforces on everymetadata.name/ Service name / label value via OpenAPI v3 admission validation,[a-z0-9]([-a-z0-9]*[a-z0-9])?with a 63-byte cap: - is_
gateway_ api_ http_ path - Predicate: assert that
pathis a valid HTTP path under both the K8s Gateway API v1HTTPPathMatch.valueadmission grammar AND the Cilium L7path:rule grammar — the two landing sites every validated pleme-io HTTP-shaped path lands in. The contract: - is_
git_ oid - Predicate: assert that
sis a valid Git commit OID — the canonical shape the typed:fonte (:tipo git …):revaxis carries. The reproducibility contract:revcarries vs.:tag/:branch(CAIXA-SDLC §V — Substrate;:tagresolves to whatever the upstream has tagged today,:branchto whatever the upstream’s HEAD points at today,:revto exactly one immutable commit forever — same shape Unison’s content-addressed code identity gives terms by construction: the hash is the address, the address never moves): - is_
git_ ref_ name - Predicate: assert that
sis a valid Git ref name under thegit check-ref-format --allow-onelevelrule set — the canonical shape every typed:fonte (:tipo git …):tag/:branchvalue carries. The contract — modeled on thegit check-ref-formatgrammar the Git porcelain enforces at clone/fetch/checkout time, with the multi-component requirement waived (:tag "v0.1.0"and:branch "main"are both single-component refs, the canonical leaf form for caixa’s:fontepin axes): - is_
git_ repo_ url - Predicate: assert that
sis a value-shape-valid:fonte (:tipo git :repo …)value — the canonical shape every typed:deps :fonte(and future:deps-dev :fonte) git-source carries. The contract — modeled on the intersection of (a) the git porcelain’s URL-parser accepted set the caixa-resolver invokes atgit clone <repo>time, (b) the OWASP URL-shape guidance for author-surface inputs that flow to a CLI subprocess, and (c) the typed slot’s documented accepted shapes (crate::DepSource::Gitdoc comment:github:org/reposhorthand,https://…/ssh://…/git://…/file://…URL schemes,git@host:pathscp-style SSH): - is_
lareira_ chart_ name_ shape - Predicate: assert that
nomeproduces alareira_chart_nameoutput satisfying the K8s DNS-1123 label rule — the joint-length invariant the canonicallareira_chart_namehelper’s doc comment (f7320d7) defers to “the M4 admission webhook will pin … when it lands”. This predicate lands it at the manifest-validate layer rather than waiting for the apiserver. - is_
leading_ zero_ padded_ magnitude - Predicate:
scarries a leading-zero-padded magnitude — its length exceeds one byte and its first byte is ASCII'0'. - is_
lisp_ extension - Predicate: assert that
pathterminates in the canonicalLISP_SOURCE_EXTENSION(lowercase.lisp) — the file-type shape every M2 typed path-slot the wasm-engine instantiator reads as tatara-lisp source must take. The contract: - is_
nats_ subject - Predicate: assert that
sis a valid NATS subject — the canonical shape every typed:contratos :subjectvalue carries. The contract — modeled on the NATS subject grammar (dot- separated tokens with*/>wildcards), restricted to the strict[A-Za-z0-9_-]per-token character set the NATS server’s subject parser accepts at runtime: - is_
sandboxed_ relative_ path - Predicate: assert that
pathis a sandboxed-relative path — the shape every caixa-author-supplied callback / script path must take so the layout checker’sroot.join(p)resolves inside the caixa root sandbox. The contract: - is_
spdx_ expression_ shape - Predicate: assert that
sis a valid SPDX-expression shape. The contract — modeled on the SPDX 2.1 expression grammar (compound-expression = simple-expression | "(" compound-expression ")" | compound-expression "WITH" exception-id | compound-expression "AND" compound-expression | compound-expression "OR" compound-expression;simple-expression = license-id | license-id "+" | "LicenseRef-" idstring | "DocumentRef-" idstring ":" "LicenseRef-" idstring;idstring = 1*(ALPHA / DIGIT / "-" / ".")), narrowed to the structural alphabet floor every realistic SPDX expression in the wild uses: - is_
wasi_ keyvalue_ slot - Predicate: assert that
sis a valid WASI keyvalue store slot template — the canonical shape every typed:contratos :slotvalue carries when its:witdispatch resolves to theWitTarget::Storearm (wasi:keyvalue/store,kv:*). The WASI keyvalue 0.2 specification (bucket = string,key = string, both opaque) places no syntactic constraints on the key shape, so the substrate enforces the canonical printable-ASCII floor every realistic kv backend admits: no raw whitespace, no control bytes, no non-ASCII bytes, length-bounded byWASI_KV_SLOT_MAX_LEN. The grammar: - is_
wit_ world_ ref - Predicate: assert that
sis a valid WIT (WebAssembly Component Model) world reference — the canonical shape every typed:contratos :witvalue carries. The contract — modeled on the WIT IDL grammar (namespace:package(/interface)*(@version)?) restricted to the lowercase subset the pleme-io substrate dispatches on: - kube_
kind_ is - Predicate: does the K8s custom resource YAML document at
valuedeclare its top-levelkinddiscriminator axis as exactlykind? - kube_
metadata_ str_ field - Read the string-scalar value at
metadata.<field>on a K8s custom resource YAML document, returningNonewhen either the top-levelKUBE_KEY_METADATAblock is absent (a defensively-tolerated missing sub-mapping — the caller’s own test-sideexpect(...)/ production-sideunwrap_or(...)names the axis), the requested<field>scalar is absent under it, or the scalar is present but carries a non-string YAML type (a numeric, boolean, or nested mapping — invalid K8s CR shape per the apiserver’s OpenAPI schema but tolerated here asNoneso the readback stays a total function). The returned&strborrows into the inputValue— the caller decides whether to compare (==), clone (.to_string()), or unwrap-then-panic. The three-hop navigation happens in one method call the caller reads as intent (kube_metadata_str_field(<value>, <FIELD>)— “read thismetadata.<FIELD>string-scalar off this K8s CR document”) rather than three hand-spelled positional artifacts (theget(KUBE_KEY_METADATA)outer hop, theand_then(|m| m.get(<FIELD>))inner hop, theand_then(|n| n.as_str())shape gate). - kube_
resource_ skeleton - Build the canonical K8s-resource skeleton — the
apiVersion+kind+metadata.{name, namespace, labels?}block every cluster artifact emitted by every caixa-side renderer carries — and return it as a freshserde_yaml::Mappingthe caller adds itsspec:(and any other top-level keys) to. - kube_
root_ str_ field - Read the string-scalar value at a top-level
<field>axis-key on a K8s custom resource YAML document — the root-level readback peer tokube_metadata_str_fieldon the sub-metadata:axis. ReturnsNonewhen either the requested<field>scalar is absent (defensively tolerated — the caller’s ownunwrap_or(...)/expect(...)names the axis) or the scalar is present but carries a non-string YAML type (a numeric, boolean, or nested mapping — invalid K8s CR shape per the apiserver’s OpenAPI schema but tolerated here asNoneso the readback stays a total function). The returned&strborrows into the inputValue— the caller decides whether to compare (==), clone (.to_string()), or unwrap-then-panic. The two-hop navigation happens in one function call the caller reads as intent (kube_root_str_field(<value>, <FIELD>)— “read this K8s CR’s top-level<FIELD>string-scalar”) rather than two hand-spelled positional artifacts (theget(<FIELD>)outer hop, theand_then(|n| n.as_str())shape gate). - label_
selector - Wrap a typed string-valued label mapping in the canonical K8s
LabelSelectorshape —{matchLabels: <string-string-map>}— and return it as aserde_yaml::Value::Mappingready to drop directly under any K8s field that takes a label selector (CiliumendpointSelector/fromEndpoints[].matchLabels, Gateway APIBackendReffilters, ComputeUnitselector, Servicespec.selector, the futuremesh.pleme.io/v1alpha1/AplicacaoCRspec.selector). - lareira_
chart_ name - Derive the canonical per-Servico Helm chart name from a caixa’s
:nome— the substrate-widelareira-<nome>shape every per-Servico renderer (caixa-helm’srender_chart_for_servicochart-dir name,caixa-flux’scluster_bundleHelmReleasechart:field,caixa-tatara’sprocess_for_aplicacaorelease_name, and theoci://<registry>/lareira-<nome>OCI ref) composes by prependingLAREIRA_CHART_NAME_PREFIX. - oci_
chart_ ref - Compose the canonical OCI artifact reference for a per-Servico Helm
chart — the
oci://<registry>/lareira-<nome>shape every renderer that materializes a chart-publish target (or a cluster-side chart resolver keyed off one) composes by prependingOCI_SCHEME_PREFIX, joining the caller-supplied registry, and appending the per-Servico chart name derived through the canonicallareira_chart_namehelper. - pleme_
program_ in_ aplicacao_ selector - Build the canonical Cilium
matchLabelsselector for a single pleme-io program scoped to its Aplicacao — the safe default every per-Aplicacao mesh renderer (caixa-mesh’scilium_network_policiesfromEndpoints, future per-edge policy emission, Gateway APIbackendRefsfilters) should use, since two different Aplicacaos can carry programs with the same:nomein the same cluster (e.g. twocartServicos under different applications) and aLABEL_PROGRAM-only selector would match pods belonging to the wrong Aplicacao. - pleme_
program_ selector - Build the canonical Cilium
matchLabelsselector for a single pleme-io program without the Aplicacao constraint — deliberately broader thanpleme_program_in_aplicacao_selectorfor the cases where matching a program across every Aplicacao that hosts it is the intent (cluster-wide rate limits, breakglass observability, the per-cluster operator identity scope). - require_
acao_ view - Compound per-
Acaoentry gate: the canonical three-linerequire_kind(caixa, CaixaKind::Acao)? + require_ci(caixa)? + decompose_ci(caixa, ci)?prelude every per-Acaocaixa-<target>consumer runs at its entry-point, collapsed onto one call the caller reads as intent (“gate the input on the V0 Acao shape and hand back the borrowedcanteiro_types::CiRun+ the decomposedcanteiro_types::CanteiroDag”) rather than three hand-spelled steps. - require_
aplicacao_ view - Compound per-Aplicacao entry gate: the canonical three-line
require_kind(caixa, CaixaKind::Aplicacao)? + caixa.aplicacao_view().expect(…) + spec.validate()?prelude every per-Aplicacaocaixa-<target>renderer runs at its entry-point, collapsed onto one call the caller reads as intent (“gate the input on the V0 Aplicacao shape and hand back a validatedcrate::aplicacao::AplicacaoSpec”) rather than three hand-spelled steps. - require_
ci - Predicate: assert that
caixa.ci().is_some(), returning the borrowedcanteiro_types::CiRunon success and a typedMissingCiSlotview (carryingCaixa::nome) on rejection. The canonical entry-point every per-Acaoconsumer wraps in its ownthiserrorErrorvariant via#[from]— the call site becomes a singlelet ci = caixa_core::require_ci(caixa)?;in place of the prior two-linelet ci = caixa.ci().ok_or_else(|| Error::MissingCi { nome: caixa.nome().to_string() })?;block. - require_
kind - Predicate: assert that
caixa.kind == expected, returning a typedKindMismatchview (carryingCaixa::nome) on rejection. The canonical entry-point every per-kind renderer wraps in its ownthiserrorErrorvariant via#[from]— the call site becomes a singlecaixa_core::require_kind(caixa, CaixaKind::X)?;in place of the prior inlineif caixa.kind != CaixaKind::X { return Err(Error::NotAnX(caixa.kind)); }block. - require_
positive_ bounded_ u32 - Bracket a typed
u32axis with the “zero-floor + upper-cap” gate pair every capped-u32:politicas/:supervisor/:limitsaxis carries. Returnson_zero()whenvalue == 0,on_cap_exceeded(value)whenvalue > cap,Ok(())otherwise. - require_
positive_ bounded_ u64 - Peer of
require_positive_bounded_u32on theu64-typed axes. Returnson_zero()whenvalue == 0,on_cap_exceeded(value)whenvalue > cap,Ok(())otherwise. Seerequire_positive_bounded_u32for the ordering / lift rationale (same “zero-floor arm strictly precedes cap arm so0surfaces the self-locating diagnostic” discipline the peer helper documents). - require_
positive_ canonical_ bounded_ duration - Bracket a typed
Durationaxis with the “zero-floor + canonical-form + upper-cap” three-arm gate every typed-Durationslot in the crate carries. Returnson_zero()whenvalueisDuration::ZERO,on_not_canonical(value)whenvaluecarries sub-millisecond residue the sharedcrate::supervisor::duration_codeccannot round-trip losslessly,on_cap_exceeded(value)whenvalue > cap,Ok(())otherwise. - require_
sandboxed_ lisp_ path - Bracket a sandboxed-relative
.lisp-terminating path axis with the shared “empty → absolute → parent-escape → non-.lisp-extension” four-arm gate every author-supplied M2 tatara-lisp source-path slot on the caixa surface carries. Delegates tois_sandboxed_relative_pathfor the three structural arms and tois_lisp_extensionfor the extension arm; returns each arm’s caller-owned error variant via the fourFnOnceclosures. - require_
single_ servico - Predicate: assert that
caixa.servicos.len() == 1, returning a typedServicoCountMismatchview (carryingCaixa::nome+ the actual count) on rejection. The canonical entry-point every per-Servico renderer wraps in its ownthiserrorErrorvariant via#[from]— the call site becomes a singlecaixa_core::require_single_servico(caixa)?;in place of the prior inlineif caixa.servicos.len() != 1 { return Err(Error::UnsupportedServicoCount(caixa.servicos.len())); }block. - require_
v0_ servico_ shape - Compound V0-shape entry gate: the canonical two-line
require_kind(caixa, Servico)? + require_single_servico(caixa)?prelude every per-Servicocaixa-<target>renderer runs at its entry-point, collapsed onto one call the caller reads as intent (“gate the input on the V0 Servico shape”) rather than two hand-spelled predicate calls. - require_
valid_ dns_ 1123_ label - Bracket a K8s DNS-1123-label-shaped axis with the shared
“empty-first, then
is_dns_1123_label” gate pair every Servico- name reference slot carries. Returnson_empty()whenvalue.is_empty(),on_invalid(reason)whenis_dns_1123_labelrejects the non-empty input,Ok(())otherwise. - require_
valid_ versao_ requirement - Bracket a
:versaorequirement-string axis with the shared “empty-first, thencrate::parse_requirement” gate pair every dep-shaped:versaoslot carries. Returnson_empty()whenversao.is_empty(),on_invalid(reason)whencrate::parse_requirementrejects the non-empty input,Ok(())otherwise. - servico_
m2_ overlay - Render the M2 typed-slot YAML overlay for a Caixa: the camelCase
(key, value)fragments every per-Servico renderer ([caixa-helm]’s values block, [caixa-flux]’s programs.yaml entry) merges into its target withor_insertsemantics so explicitspec.*fields from the ComputeUnit YAML take precedence over the manifest-derived overlay. - servico_
spec_ and_ m2_ overlay_ entries - Compose the canonical per-Servico value-block splice every per-Servico
renderer applies to the target values / entry mapping — the two-step
sequence [
caixa_helm::build_values_yaml] and [caixa_flux::programs_yaml_entry] both re-derived inline before this lift: - single_
field_ overlay - Build a single-field
serde_yaml::Value::Mappingfrom a typedOption<T>slot —Nonewhen the slot is unset,Some(Mapping { inner_key: f(t) })otherwise. - singleton_
mapping_ sequence - Wrap a single
serde_yaml::Mappingas the sole element of aserde_yaml::Value::Sequence, returning the ready-to-drop singleton-mapping-sequenceValue. - string_
keyed_ entries - Iterator over the string-keyed entries of a
serde_yaml::Valuethat may or may not be aserde_yaml::Mapping— the canonical shape both per-Servico renderers reach for when splicing the upstreamComputeUnitYAML’sspec.*fields into their emitted output map. - upsert_
named_ entry - Upsert
new_entryinto a typed sequence of programs.yaml-shaped entries by matching onnew_entry’s<name_key>scalar — the idempotent “replace-in-place if present, else append” contract every writer-side aggregator overlay lands the same 11-line block in front of. ReturnsOk(true)when the entry was appended new,Ok(false)when an existing entry with the same<name_key>value was replaced in place (preserving position); returnson_missing_name()whennew_entrydoesn’t carry<name_key>as a string scalar (the caller’s own typedcrate::RenderError-shaped error surface, threaded through the closure so this helper stays crate-agnostic). - yaml_
string_ mapping - Convert a typed string-valued mapping (e.g. one of the canonical
pleme_program_selector/pleme_program_in_aplicacao_selectorselectors, or any caller-builtBTreeMap<&'static str, String>) into aserde_yaml::Value::MappingwithString → Stringshape — the surface every Cilium / Gateway / HTTPRoute / ComputeUnitmatchLabels/metadata.labels/selectorfield expects.