caixa_core/dialeto.rs
1//! `defcaixa` is spoken by two unrelated declarations. This module makes that
2//! a **typed fact** instead of an anonymous parse failure.
3//!
4//! # The finding
5//!
6//! Measured 2026-07-31 over the pleme-io org checkout (270 `caixa.lisp` /
7//! `*.caixa.lisp` files found with `rg --no-ignore`; a bare `rg` from the org
8//! root returns 0, which is how this stayed invisible), the corpus splits into
9//! two schemas that share zero required slots:
10//!
11//! * [`CaixaDialeto::Pacote`] — this crate's [`crate::Caixa`]. `:nome
12//! :versao :kind :deps :bibliotecas :exe :servicos` + the supervisor/mesh
13//! slots. It declares a **tatara-lisp package**: the thing `feira` resolves,
14//! builds, links and publishes.
15//! * [`CaixaDialeto::Molde`] — `:name :kind :ecosystem :package {…} :workflows
16//! […] :ci-config {…} :files […]`. It declares a **repo's generated
17//! surface**: which foreign ecosystem (rust / go / python / …), that
18//! ecosystem's own package metadata, the CI shims to emit, and byte-captured
19//! file bodies. Read by `pleme-doc-gen`, never by `feira`.
20//!
21//! `:package`, `:ecosystem`, `:supports` and `:profile` have no counterpart in
22//! [`crate::Caixa`] at all — the theory doc's own D4 note records the same
23//! thing: those manifests "are authored against a schema that does not exist in
24//! Rust". They are not two spellings of one declaration. They are two domains
25//! that collided on one word, because *caixa* names a box and both are boxes.
26//!
27//! # Why this is not a bug report about broken files
28//!
29//! The Molde-dialect files are not malformed. They are correct inputs to their
30//! own consumer, and nothing in the shipped `feira` reads them, so nothing is
31//! failing today. The hazard is **latent and certain**: any new declarative
32//! surface written against "a `.caixa.lisp` is a [`crate::Caixa`]" meets a
33//! corpus where that is false for the large majority of files, and gets a flat
34//! unknown-keyword rejection that reads as "this manifest is broken" rather
35//! than "this manifest is not yours".
36//!
37//! # What this module does about it
38//!
39//! [`classify`] is total: every `(defcaixa …)` form lands in exactly one
40//! [`CaixaDialeto`], including [`CaixaDialeto::Desconhecido`] for one that
41//! matches neither. [`crate::Caixa::from_lisp`] runs it first, so a foreign
42//! dialect is [`crate::ManifestError::DialetoEstrangeiro`] — an error that
43//! names the dialect it found and the consumer that speaks it — rather than an
44//! unknown-kwarg error indistinguishable from a typo.
45//!
46//! Tier-honest: this is **parse-time rejection with a named cause**, not
47//! unrepresentability. A caller that ignores the `Err` still gets nothing
48//! useful; what it can no longer do is mistake "wrong dialect" for "bad file".
49
50use tatara_lisp::{Atom, Sexp};
51
52/// Canonical `PascalCase` variant-name byte-string the internal-
53/// classification [`CaixaDialeto::Pacote`] arm surfaces under — the
54/// per-arm `&'static str` payload every consumer that formats the
55/// dialect axis as census-facing text (the `feira dialeto` census
56/// counter output line, future `feira dialeto --list-dialects` /
57/// `--filter <Pacote|Molde|MoldePosicional|Desconhecido>` CLI-side
58/// enumerations, a future M4 `mesh.pleme.io/v1alpha1/Manifesto` CR
59/// materializer's admission-webhook rejection body naming the
60/// accepted-dialect set, structured-log `tracing::field::Value::Str`
61/// per-dialect emits on the caixa-build pipeline's per-file classify
62/// path) converges onto verbatim through the paired
63/// [`CaixaDialeto::as_str`] `pub const fn` accessor and the sibling
64/// [`CaixaDialeto::from_wire`] reverse-projection parser. Peer of
65/// [`CAIXA_DIALETO_WIRE_MOLDE`] / [`CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL`]
66/// / [`CAIXA_DIALETO_WIRE_DESCONHECIDO`] on the four-arm dialect-
67/// classification wire-form axis.
68///
69/// Same "one canonical byte-string per typed axis" discipline the
70/// peer [`crate::render::RENDER_PATH_SHAPE_VIOLATION_WIRE_EMPTY`]
71/// (0330bd3) / [`crate::render::CAIXA_KIND_WIRE_BIBLIOTECA`] /
72/// [`crate::render::M2_UPGRADE_INSTRUCTION_WIRE_LOAD_MODULE`]
73/// (36ffe65) / [`crate::render::SUPERVISOR_ESTRATEGIA_ONE_FOR_ONE`]
74/// (be40492) / [`crate::render::M3_PLACEMENT_ESTRATEGIA_SINGLE_NODE`]
75/// families established for the sibling render-side path-shape-
76/// diagnostic / M2 OTP-shape / supervisor / M3 mesh-shape closed-set
77/// typed-enum wire-form axes — extends the discipline onto the
78/// tatara-lisp dialect-classification axis, the eleventh substrate-
79/// side closed-set typed enum to converge onto it and the first
80/// dialect-classification axis (as distinct from the top-level
81/// manifest surface or a render-side path-shape-diagnostic surface)
82/// to reach it. Until this lift landed the byte-string sat twice
83/// inline in [`CaixaDialeto::as_str`] and [`CaixaDialeto::from_wire`]
84/// with no compile-time link between the emit and parse arms nor to
85/// any downstream roster; a future rebrand (a per-arm variant
86/// rename under an M4 vocabulary shift, an operator-vocabulary
87/// migration for a `feira dialeto --list-dialects` per-arm listing)
88/// would have desynchronized the paired arm-set until a downstream
89/// consumer surfaced the drift at runtime. Routing all halves
90/// (`as_str` + `from_wire` + the paired
91/// [`CaixaDialeto::WIRE_NAMES`] roster) through this const closes
92/// the drift structurally by construction. Pinned load-bearing by
93/// [`tests::caixa_dialeto_wire_names_covers_every_arm`] (paired
94/// roster / emitter round-trip).
95pub const CAIXA_DIALETO_WIRE_PACOTE: &str = "Pacote";
96
97/// Canonical `PascalCase` variant-name byte-string the internal-
98/// classification [`CaixaDialeto::Molde`] arm surfaces under. Peer of
99/// [`CAIXA_DIALETO_WIRE_PACOTE`] on the four-arm dialect-classification
100/// wire-form axis; see [`CAIXA_DIALETO_WIRE_PACOTE`] for the full lift
101/// rationale.
102pub const CAIXA_DIALETO_WIRE_MOLDE: &str = "Molde";
103
104/// Canonical `PascalCase` variant-name byte-string the internal-
105/// classification [`CaixaDialeto::MoldePosicional`] arm surfaces under.
106/// Peer of [`CAIXA_DIALETO_WIRE_PACOTE`] on the four-arm dialect-
107/// classification wire-form axis; see [`CAIXA_DIALETO_WIRE_PACOTE`] for
108/// the full lift rationale. The full-word (rather than abbreviated)
109/// spelling here is load-bearing — a `format!("{:?}", …).to_lowercase()`
110/// round-trip on the source-side `Debug` derive would collapse the
111/// multi-word arm to `"moldeposicional"` and desynchronize the tag
112/// from every peer substrate-side census-facing `PascalCase` axis.
113pub const CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL: &str = "MoldePosicional";
114
115/// Canonical `PascalCase` variant-name byte-string the internal-
116/// classification [`CaixaDialeto::Desconhecido`] arm surfaces under.
117/// Peer of [`CAIXA_DIALETO_WIRE_PACOTE`] on the four-arm dialect-
118/// classification wire-form axis; see [`CAIXA_DIALETO_WIRE_PACOTE`] for
119/// the full lift rationale.
120pub const CAIXA_DIALETO_WIRE_DESCONHECIDO: &str = "Desconhecido";
121
122/// Which `(defcaixa …)` declaration a source speaks.
123///
124/// The [`gen_platform::IsVariant`] derive emits per-arm arm-discriminator
125/// predicates (`is_pacote` / `is_molde` / `is_molde_posicional` /
126/// `is_desconhecido`) as substrate-side typed dispatches on the closed
127/// four-arm dialect-classification discriminator. Peer of the sibling
128/// closed-set fieldless typed enums' [`crate::CaixaKind`] /
129/// [`crate::supervisor::RestartStrategy`] /
130/// [`crate::supervisor::RestartPolicy`] /
131/// [`crate::aplicacao::PlacementStrategy`] /
132/// [`crate::aplicacao::RateLimitUnit`] /
133/// [`crate::dep::DepList`] `IsVariant` derives on the sibling
134/// closed-set typed-enum discriminator axes.
135///
136/// The pre-lift `is_molde_family` predicate hand-rolled its own
137/// `matches!(self, Self::Molde | Self::MoldePosicional)` two-arm literal
138/// with no compile-time link back to the closed set — post-lift it routes
139/// through `self.is_molde() || self.is_molde_posicional()` so a future
140/// arm rename (e.g. `Molde → MoldeKW` under an M4 vocabulary shift) trips
141/// exhaustively at every derive-generated predicate site rather than
142/// leaving the hand-rolled `matches!` silently drifting.
143#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, gen_platform::IsVariant)]
144pub enum CaixaDialeto {
145 /// This crate's [`crate::Caixa`] — a tatara-lisp package manifest.
146 /// Keyword-argument form headed by `:nome`.
147 Pacote,
148 /// `pleme-doc-gen`'s repo-surface declaration, keyword-argument form
149 /// headed by `:name` (plus `:ecosystem` / `:package`).
150 Molde,
151 /// The same declaration as [`Self::Molde`], written with the package name
152 /// as a bare positional symbol — `(defcaixa todoku-go :kind :Biblioteca
153 /// :ecosystem :go …)`. `pleme-doc-gen`'s parser reads the first token
154 /// after the head as the name, so this is one arity of one declaration,
155 /// not a third schema.
156 MoldePosicional,
157 /// A `(defcaixa …)` form matching neither. Kept as a variant rather than
158 /// an error so [`classify`] is total and a census can COUNT the residue —
159 /// a classifier that threw here would report "0 unknown" by construction.
160 Desconhecido,
161}
162
163impl CaixaDialeto {
164 /// Exhaustive iteration surface for every consumer that walks the
165 /// closed four-arm [`CaixaDialeto`] discriminator set — the
166 /// [`feira dialeto`](../../caixa_feira/cmd/dialeto/index.html)
167 /// census counter's per-arm accept-set, a future
168 /// `feira dialeto --list-dialects` CLI listing of the accepted
169 /// classifications, a future M4 `mesh.pleme.io/v1alpha1/Manifesto`
170 /// CR materializer's admission-webhook rejection body naming the
171 /// accepted-dialect set, any future census-report shape probe that
172 /// sweeps every arm to compute per-arm coverage. A future arm
173 /// addition (a fifth dialect the [`crate::dialeto`] module doc's
174 /// "third dialect" hazard actualises — the module explicitly frames
175 /// its purpose as "what stops a third dialect appearing", and this
176 /// slice is the substrate-side answer: the arm-set is one edit and
177 /// every consumer picks up the new entry by construction) extends
178 /// this slice as one edit and every downstream consumer picks up
179 /// the new entry through the shared iteration; the compiler-checked
180 /// exhaustiveness on the sibling method `match` arms
181 /// ([`Self::palavra_canonica`] / [`Self::consumidor`] /
182 /// [`Self::descricao`] / [`std::fmt::Display`]) is the build-time
183 /// guarantee that no arm forgets to grow.
184 ///
185 /// Peer of the sibling closed-set typed enums'
186 /// [`crate::CaixaKind::ALL`] (6b1f4fb) /
187 /// [`crate::aplicacao::PlacementStrategy::ALL`] (18c7342) /
188 /// [`crate::aplicacao::RateLimitUnit::ALL`] (6bce03d) /
189 /// [`crate::dep::DepList::ALL`] (45ee563) /
190 /// [`crate::supervisor::RestartStrategy::ALL`] (4eec29c) /
191 /// [`crate::supervisor::RestartPolicy::ALL`] (dd32ccf)
192 /// exhaustive-iteration surfaces — the seventh closed-set typed
193 /// enum on the caixa surface to converge onto the same
194 /// one-canonical-arm-list-per-enum discipline, and the first
195 /// dialect-classification axis (as distinct from an OTP-shape M2
196 /// slot or an M3 mesh slot) to reach it. Order matches variant
197 /// declaration order verbatim (`Pacote` → `Molde` →
198 /// `MoldePosicional` → `Desconhecido`) so the slice is the
199 /// canonical ordering every listing / rendering consumer defers to.
200 pub const ALL: &'static [Self] = &[
201 Self::Pacote,
202 Self::Molde,
203 Self::MoldePosicional,
204 Self::Desconhecido,
205 ];
206
207 /// Substrate-canonical `PascalCase` variant-name byte-string every consumer
208 /// that formats the dialect as census-facing text lands on. Returns the
209 /// per-arm `PascalCase` name of the variant (`"Pacote"` / `"Molde"` /
210 /// `"MoldePosicional"` / `"Desconhecido"`) — the one canonical
211 /// byte-string the paired [`std::fmt::Display`] impl routes through so
212 /// every downstream consumer (the `feira dialeto` census counter output
213 /// line, a future `feira dialeto --list-dialects` CLI enumeration, a
214 /// future M4 `mesh.pleme.io/v1alpha1/Manifesto` CR materializer's
215 /// admission-webhook rejection body naming the accepted-dialect set)
216 /// reaches for the same substrate primitive rather than the pre-lift
217 /// hand-rolled four-arm literal-string match every [`std::fmt::Display`]
218 /// call previously routed through in place.
219 ///
220 /// Peer of the sibling closed-set typed enums'
221 /// [`crate::CaixaKind::as_str`] / [`crate::supervisor::RestartStrategy::as_str`]
222 /// / [`crate::supervisor::RestartPolicy::as_str`] /
223 /// [`crate::aplicacao::PlacementStrategy::as_str`] /
224 /// [`crate::dep::DepList::as_str`] projections on the sibling closed-set
225 /// typed-enum discriminator axes — the seventh (and last unlifted)
226 /// closed-set fieldless typed enum on the caixa surface to converge
227 /// onto the same one-canonical-byte-string-per-arm-through-`as_str`
228 /// discipline the six siblings already carry. Unlike [`crate::CaixaKind`]
229 /// (which carries two axes: `as_str` returning lowercase Portuguese
230 /// diagnostic form vs `wire_name` returning `PascalCase` tatara-lisp
231 /// author-surface bytes), [`CaixaDialeto`] is an internal
232 /// classification with no wire surface — the `PascalCase` variant name
233 /// is the census-facing form every consumer reads, so `as_str`
234 /// suffices without a paired `wire_name` axis.
235 #[must_use]
236 pub const fn as_str(self) -> &'static str {
237 match self {
238 Self::Pacote => CAIXA_DIALETO_WIRE_PACOTE,
239 Self::Molde => CAIXA_DIALETO_WIRE_MOLDE,
240 Self::MoldePosicional => CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL,
241 Self::Desconhecido => CAIXA_DIALETO_WIRE_DESCONHECIDO,
242 }
243 }
244
245 /// Substrate-canonical exhaustive accept-set on the
246 /// [`CaixaDialeto`] `PascalCase` variant-name wire-form byte-string
247 /// axis — the closed four-arm roster of every byte-string
248 /// [`Self::as_str`] returns, routed byte-for-byte through the paired
249 /// [`CAIXA_DIALETO_WIRE_PACOTE`] / [`CAIXA_DIALETO_WIRE_MOLDE`] /
250 /// [`CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL`] /
251 /// [`CAIXA_DIALETO_WIRE_DESCONHECIDO`] lifted `pub const` scalars the
252 /// [`Self::as_str`] emitter (and the [`std::fmt::Display`] /
253 /// [`AsRef<str>`] / `From<{Self,&Self}> for {&'static str, String,
254 /// Cow<'static, str>, Box<str>, Arc<str>}` trait triple + quintuple
255 /// routed through it) walks — and byte-for-byte the same four strings
256 /// the paired [`Self::from_wire`] and [`TryFrom<&str>`] reverse
257 /// projections accept.
258 ///
259 /// Peer of the sibling [`crate::CaixaKind::WIRE_NAMES`] (bd708bd) /
260 /// [`crate::supervisor::RestartStrategy::WIRE_NAMES`] (3033f45) /
261 /// [`crate::supervisor::RestartPolicy::WIRE_NAMES`] (ce9412b) /
262 /// [`crate::aplicacao::PlacementStrategy::WIRE_NAMES`] (3e5b194) /
263 /// [`crate::render::PathShapeViolation::WIRE_NAMES`] (0330bd3)
264 /// rosters on the `PascalCase` / lowercase-kebab wire-form axes, the
265 /// sibling [`crate::CaixaKind::LABELS`] (427fe75) /
266 /// [`crate::aplicacao::WitShape::LABELS`] (9d9f585) rosters on the
267 /// lowercase-kebab census-label axis, the sibling
268 /// [`crate::aplicacao::RateLimitUnit::SUFFIXES`] (b553ec9) roster on
269 /// the single-char canonical-suffix axis, the sibling
270 /// [`crate::upgrade::UpgradeInstruction::LISP_FORMS`] (1898d77) /
271 /// [`crate::upgrade::UpgradeInstruction::WIRE_FORMS`] (cc42c0e)
272 /// rosters on the OTP-appup two-axis roster split, and the sibling
273 /// [`crate::dep::DepList::AUTHOR_KEYS`] (af6ad3a) roster on the
274 /// two-list dep-graph axis — the same closed-set exhaustive-accept-
275 /// set roster discipline extended here onto the tatara-lisp dialect-
276 /// classification closed-set typed enum, the eleventh substrate-side
277 /// closed-set typed enum on the roster axis and the first
278 /// dialect-classification axis (as distinct from the top-level
279 /// manifest surface or a render-side path-shape-diagnostic surface)
280 /// to converge onto the discipline. The sibling
281 /// [`crate::render::PathShapeViolation::WIRE_NAMES`] doc block's
282 /// closing sentence names this enum ("The sibling
283 /// [`crate::dialeto::CaixaDialeto`] closed-set typed enum on the
284 /// tatara-lisp dialect axis remains the next natural peer, still
285 /// carrying only [`crate::dialeto::CaixaDialeto::ALL`]") as the next
286 /// natural peer — this lift closes the naming.
287 ///
288 /// Downstream consumers of the closed accepted-wire-form set — a
289 /// future `feira dialeto --list-dialects` CLI-side enumeration of
290 /// the accepted dialect classifications whose candidate-list must
291 /// byte-match the wire byte-string [`Self::as_str`] emits (rather
292 /// than the source-side variant identifier), a future `feira dialeto
293 /// --filter <Pacote|Molde|MoldePosicional|Desconhecido>` CLI arg-
294 /// parse's "did you mean" hint that scans this slice rather than
295 /// open-coding the four literal `PascalCase` strings, a future M4
296 /// `mesh.pleme.io/v1alpha1/Manifesto` CR admission-webhook rejection
297 /// body enumerating accepted per-dialect wire-form slugs on an
298 /// unknown-tag miss, a future `feira dialeto` per-arm histogram
299 /// column that walks the roster to render every arm's tally
300 /// (including zero-count arms — a hand-rolled projection off
301 /// [`Self::ALL`] alone would need a companion per-variant-to-tag
302 /// map at every consumer; this roster closes the two-axis walk in
303 /// one lifted const), a future `tracing::field::valuable::Value::List`
304 /// structured-log accepted-dialect emit on the caixa-build
305 /// pipeline's per-file classify emission path — now reach for one
306 /// lifted substrate-primitive roster rather than open-coding a
307 /// `["Pacote", "Molde", "MoldePosicional", "Desconhecido"]` four-
308 /// string array literal whose arm-set has no compile-time link back
309 /// to the typed [`CaixaDialeto`] enum. A future arm addition (the
310 /// module doc's "third dialect" hazard actualising as a fifth arm —
311 /// a third arity variant, an alias-declaration family pleme-doc-gen
312 /// sharpens as its schema evolves) extends this roster as a single
313 /// edit — paired with the [`Self::as_str`] match's compiler-checked
314 /// exhaustiveness on the new arm — and every consumer picks up the
315 /// new wire form by construction.
316 ///
317 /// Length is pinned load-bearing at `CaixaDialeto::ALL.len()`
318 /// (four) by
319 /// [`tests::caixa_dialeto_wire_names_covers_every_arm`], every
320 /// variant's [`Self::as_str`] projection is pinned to a member of
321 /// the roster so a silent skew between the emitter's arm-set and
322 /// this const's arm-set trips at caixa-core test time rather than at
323 /// a downstream consumer's accepted-set enumeration miss, every
324 /// entry is pinned to open with an uppercase ASCII byte (matching
325 /// the substrate-wide `PascalCase` convention every peer closed-set
326 /// enum whose canonical projection is a `PascalCase` census-facing
327 /// name carries), and the roster's declaration order is pinned
328 /// byte-for-byte against the variant declaration order (`Pacote` →
329 /// `Molde` → `MoldePosicional` → `Desconhecido`) so a future arm-
330 /// swap on the roster or the paired `CAIXA_DIALETO_WIRE_*` constants
331 /// trips at caixa-core test time under `assert_eq!` rather than at
332 /// a downstream per-dialect ordering table's miss.
333 pub const WIRE_NAMES: &'static [&'static str] = &[
334 CAIXA_DIALETO_WIRE_PACOTE,
335 CAIXA_DIALETO_WIRE_MOLDE,
336 CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL,
337 CAIXA_DIALETO_WIRE_DESCONHECIDO,
338 ];
339
340 /// Substrate-canonical reverse projection on the [`CaixaDialeto`]
341 /// closed-set dialect-classification axis — parses the `PascalCase`
342 /// variant-name byte-string back to the typed variant, or `None` when
343 /// `s` is outside the closed-set arm-string set [`Self::as_str`]
344 /// emits. Walks the same four `"Pacote"` / `"Molde"` /
345 /// `"MoldePosicional"` / `"Desconhecido"` byte-strings the sibling
346 /// [`Self::as_str`] emitter returns, so the parse and emit halves of
347 /// the round-trip migrate through one caixa-core edit on any future
348 /// arm addition (the module doc's "third dialect" hazard actualising
349 /// as a fifth arm) — the compiler-checked exhaustiveness on
350 /// [`Self::as_str`]'s `match self` arms and the round-trip pin
351 /// [`tests::caixa_dialeto_round_trips_through_as_str_and_from_wire`]
352 /// together lock the two halves mutually.
353 ///
354 /// Prior to this lift the substrate carried only the forward
355 /// `Self → &str` projection on the dialect-classification axis (the
356 /// [`Self::as_str`] emitter, the [`std::fmt::Display`] impl routed
357 /// through it, the [`AsRef<str>`] impl routed through it) — every
358 /// future consumer that wanted to promote the census-facing text back
359 /// to the typed enum (a future `feira dialeto --filter
360 /// <Pacote|Molde|MoldePosicional|Desconhecido>` CLI arg-parse that
361 /// binds the wire form into the typed enum before dispatching to the
362 /// per-arm counter, a future M4 `mesh.pleme.io/v1alpha1/Manifesto`
363 /// CR materializer's admission-time re-parse of the per-dialect
364 /// audit body, a future audit-report re-loader that binds a prior
365 /// [`Self::as_str`] output back to the typed enum for cross-run
366 /// comparison) would have had to re-inline a four-arm `match s`
367 /// cascade that expressed no compile-time link back to the typed
368 /// [`CaixaDialeto`] enum.
369 ///
370 /// Same closed-set-reverse-projection discipline the sibling
371 /// [`crate::CaixaKind::from_wire`] (2aa6d23) /
372 /// [`crate::supervisor::RestartStrategy::from_wire`] (4eec29c) /
373 /// [`crate::supervisor::RestartPolicy::from_wire`] (dd32ccf) /
374 /// [`crate::aplicacao::PlacementStrategy::from_wire`] (18c7342) /
375 /// [`crate::dep::DepList::from_wire`] (45ee563) typed enums carry on
376 /// the peer wire-side `str → Self` axes — extends the family onto
377 /// the seventh closed-set fieldless typed enum on the caixa surface
378 /// (the dialect-classification axis), matching the same
379 /// two-way `str ↔ Self` round-trip every sibling closed-set enum
380 /// already carries. Method-named `from_wire` (not `from_str`) to
381 /// match the peer shapes verbatim and side-step the derived
382 /// [`std::str::FromStr`] impls the sibling
383 /// [`gen_platform::FromStrKind`]-carrying axes install on their
384 /// kebab-case dispatcher-catalog identity. Returns `Option<Self>`
385 /// (rather than `Result<Self, _>`) to match the peer shapes: the
386 /// caller picks the diagnostic form appropriate for its use site.
387 #[must_use]
388 pub fn from_wire(s: &str) -> Option<Self> {
389 match s {
390 CAIXA_DIALETO_WIRE_PACOTE => Some(Self::Pacote),
391 CAIXA_DIALETO_WIRE_MOLDE => Some(Self::Molde),
392 CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL => Some(Self::MoldePosicional),
393 CAIXA_DIALETO_WIRE_DESCONHECIDO => Some(Self::Desconhecido),
394 _ => None,
395 }
396 }
397
398 /// The keyword an author should write for this dialect, once the
399 /// migration named in [`Self::consumidor`] completes.
400 #[must_use]
401 pub const fn palavra_canonica(self) -> &'static str {
402 match self {
403 Self::Pacote => "defcaixa",
404 Self::Molde | Self::MoldePosicional => "defmolde",
405 Self::Desconhecido => "?",
406 }
407 }
408
409 /// Who reads this dialect.
410 #[must_use]
411 pub const fn consumidor(self) -> &'static str {
412 match self {
413 Self::Pacote => "caixa-core / feira",
414 Self::Molde | Self::MoldePosicional => "pleme-doc-gen",
415 Self::Desconhecido => "nobody known",
416 }
417 }
418
419 /// A one-line description for a census row or an error message.
420 #[must_use]
421 pub const fn descricao(self) -> &'static str {
422 match self {
423 Self::Pacote => "tatara-lisp package manifest (:nome :versao :kind :deps …)",
424 Self::Molde => "repo-surface declaration (:name :ecosystem :package {…} …)",
425 Self::MoldePosicional => {
426 "repo-surface declaration, positional name (defcaixa <nome> :kind …)"
427 }
428 Self::Desconhecido => "unrecognised — matches no known defcaixa schema",
429 }
430 }
431
432 /// True when this arm belongs to the `defmolde` declaration family —
433 /// the two-arity closure of [`Self::Molde`] and [`Self::MoldePosicional`]
434 /// under the shared `defmolde` head keyword the sibling
435 /// [`Self::palavra_canonica`] projection already collapses onto
436 /// `"defmolde"` for both arms (and the sibling [`Self::consumidor`]
437 /// projection collapses onto `"pleme-doc-gen"` for the same two arms).
438 /// False on [`Self::Pacote`] (the sibling `defcaixa` tatara-lisp
439 /// package manifest, [`Self::palavra_canonica`] `→ "defcaixa"`) and
440 /// on [`Self::Desconhecido`] (the residue that names no known
441 /// declaration, [`Self::palavra_canonica`] `→ "?"`).
442 ///
443 /// The [`Self::Molde`] / [`Self::MoldePosicional`] split is one
444 /// declaration written two ways ([`Self::MoldePosicional`]'s
445 /// variant-declaration docstring at [`Self::MoldePosicional`] frames
446 /// it exactly: "the same declaration as [`Self::Molde`], written with
447 /// the package name as a bare positional symbol … this is one arity
448 /// of one declaration, not a third schema"). Every downstream gate
449 /// that keys off "does this dialect belong to the `defmolde` family"
450 /// (as distinct from the four-arm-per-arm census-counter axis the
451 /// sibling `feira dialeto` verb already fans on separately at
452 /// `caixa-feira/src/cmd/dialeto.rs:110-127`) previously hand-rolled
453 /// the two-arm collapse inline as `matches!(d, CaixaDialeto::Molde |
454 /// CaixaDialeto::MoldePosicional)` — a compile-time-anonymous
455 /// two-arm literal set with no link back to the [`CaixaDialeto`]
456 /// variant declaration nor to the sibling
457 /// [`Self::palavra_canonica`] / [`Self::consumidor`] projections
458 /// that already carry the same two-arm collapse under the shared
459 /// `defmolde` / `pleme-doc-gen` axis. The `feira dialeto` verb's
460 /// [`caixa-feira/src/cmd/dialeto.rs`] carried the same
461 /// `matches!` twice — once in the `--strict-palavra` gate that
462 /// refuses a repo-surface declaration still written as
463 /// `(defcaixa …)`, once in the wrong-declaration-under-`caixa.lisp`
464 /// gate that refuses a repo-surface declaration under the filename
465 /// `feira` loads as a package manifest — with no compile-time link
466 /// between the two hand-rolled arm sets. A future arm addition (the
467 /// module doc's "third dialect" hazard actualises as a fifth arm
468 /// [`CaixaDialeto`] that belongs to the `defmolde` declaration
469 /// family — a third arity variant, an alias-declaration family
470 /// pleme-doc-gen sharpens as its schema evolves) would silently
471 /// split the two hand-rolled `matches!` arm-sets from each other
472 /// and from the paired [`Self::palavra_canonica`] projection: one
473 /// call site picks up the new arm, one does not, and the disagreement
474 /// surfaces far from the arm-addition commit as a `feira dialeto`
475 /// consumer reporting a repo-surface declaration under one gate but
476 /// not the other. Routing every "belongs to the `defmolde` family"
477 /// predicate through this one substrate primitive closes the axis:
478 /// a future arm addition lands one match arm here (a compile-time
479 /// exhaustiveness error otherwise), not a coordinated per-`matches!`
480 /// rewrite across every caller.
481 ///
482 /// Peer of the sibling [`crate::CaixaKind::requires_lib`] (0421c22)
483 /// per-arm-set predicate on the [`crate::CaixaKind`] closed-set
484 /// discriminator's "kind requires a `lib/` surface" axis — extends
485 /// the same "one canonical typed predicate per per-arm-set gate,
486 /// one dispatch on the substrate primitive" discipline onto the
487 /// [`CaixaDialeto`] closed-set discriminator's "belongs to the
488 /// `defmolde` declaration family" axis. The dialect-classification
489 /// axis's second per-arm-set predicate (first being the implicit
490 /// palavra_canonica-through-consumidor-through-descricao arm-set
491 /// collapse already carried on the sibling projections) — the first
492 /// explicitly-typed per-arm-set predicate on the axis, matching the
493 /// discipline the sibling M2 [`crate::CaixaKind`] closed-set
494 /// discriminator already carries with `requires_lib`.
495 ///
496 /// Three consumers now route through this one typed dispatch: the
497 /// [`caixa-feira`](../../caixa_feira/cmd/dialeto/index.html) verb's
498 /// `--strict-palavra` gate (refusing a repo-surface declaration
499 /// still written as `(defcaixa …)`), the same verb's wrong-
500 /// declaration-under-`caixa.lisp` gate (refusing a repo-surface
501 /// declaration under the filename `feira` loads as a package
502 /// manifest), and [`crate::Caixa::from_lisp`]'s foreign-dialect
503 /// gate (raising [`crate::ManifestError::DialetoEstrangeiro`] before
504 /// the derive's `parse_kwargs_strict` walk on any `defmolde`-family
505 /// classification — the pre-lift hand-rolled three-arm
506 /// `match { Pacote => {}, Desconhecido => {}, foreign => Err(…) }`
507 /// literal whose `foreign =>` wildcard silently absorbed anything
508 /// non-Pacote-non-Desconhecido, now the third external consumer of
509 /// the `defmolde`-family partition).
510 #[must_use]
511 pub const fn is_molde_family(self) -> bool {
512 // Routed through the derive-generated per-arm predicates
513 // [`Self::is_molde`] + [`Self::is_molde_posicional`] so the
514 // two-arm collapse links compile-time back to the closed-set
515 // typed dispatch every peer arm-set predicate on the caixa
516 // surface (e.g. [`crate::CaixaKind::requires_lib`] on the
517 // sibling `:kind` axis) now carries. Byte-equivalent to the
518 // pre-lift `matches!(self, Self::Molde | Self::MoldePosicional)`
519 // form (the derived `is_*` predicates each expand to the same
520 // `matches!(self, Self::X)` shape by construction), but a
521 // future arm rename or IsVariant `#[is_variant(name = "…")]`
522 // override lands at exactly one dispatch on the substrate
523 // primitive rather than a hand-rolled two-arm literal.
524 self.is_molde() || self.is_molde_posicional()
525 }
526}
527
528/// [`std::fmt::Display`] routed through [`CaixaDialeto::as_str`], so the
529/// pretty-printed byte-string every consumer that formats the dialect as
530/// user-facing / census text lands on (the `feira dialeto` per-manifest
531/// `--list` row, the `feira dialeto` census summary line's per-arm
532/// counters, a future M4 admission-webhook's rejection body naming the
533/// accepted-dialect set) reaches for the same `PascalCase` per-arm
534/// byte-string the [`CaixaDialeto::as_str`] helper returns.
535///
536/// Prior to this lift the [`std::fmt::Display`] impl hand-rolled its own
537/// four-arm literal-string match — the one hand-rolled per-arm dispatch
538/// on the closed [`CaixaDialeto`] discriminator that had NO substrate
539/// primitive accessor to defer to (the sibling [`CaixaDialeto::palavra_canonica`] /
540/// [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`] projections
541/// carry distinct byte-shapes per axis, so none of them could serve as
542/// the Display source). A future variant addition (a fifth dialect the
543/// module doc's "third dialect" hazard actualises) would land one arm at
544/// the enum and per-arm returns at the paired accessors, but a hand-rolled
545/// [`std::fmt::Display`] match would silently drop the new arm to compile-
546/// fail-at-the-match-arm-site rather than through the shared substrate
547/// primitive. Routing [`std::fmt::Display`] through [`CaixaDialeto::as_str`]
548/// closes the last unlifted per-arm `PascalCase`-name projection on the
549/// caixa surface — the seventh (and last unlifted) closed-set fieldless
550/// typed enum on the caixa surface to converge onto the same
551/// `Display`-through-`as_str` discipline the six siblings
552/// ([`crate::CaixaKind`] / [`crate::supervisor::RestartStrategy`] /
553/// [`crate::supervisor::RestartPolicy`] /
554/// [`crate::aplicacao::PlacementStrategy`] / [`crate::aplicacao::RateLimitUnit`]
555/// / [`crate::dep::DepList`]) already carry.
556impl std::fmt::Display for CaixaDialeto {
557 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
558 f.write_str(self.as_str())
559 }
560}
561
562/// Substrate-canonical [`AsRef<str>`] projection on the [`CaixaDialeto`]
563/// closed-set fieldless typed dialect-classification enum — routes through
564/// the same [`CaixaDialeto::as_str`] `pub const fn` scalar accessor the
565/// paired [`std::fmt::Display`] impl already delegates through, so any
566/// future consumer that binds a [`CaixaDialeto`] through the standard-
567/// library `impl AsRef<str>` bound (a [`std::process::Command::arg`]
568/// shell-out that composes the canonical `PascalCase` variant-name into a
569/// `feira dialeto --strict-palavra <Pacote|Molde|MoldePosicional|Desconhecido>`
570/// diagnostic overlay, a `tracing::field::Value::Str`-arm structured-log
571/// recorder on the [`crate::Caixa::from_lisp`] foreign-dialect
572/// [`crate::ManifestError::DialetoEstrangeiro`] refusal path, a
573/// [`std::collections::HashMap`] lookup keyed on the canonical name
574/// through `map.get::<str>(dialeto.as_ref())` on a future M4 admission-
575/// webhook's per-dialect rejection-body composition table) reaches the
576/// paired `"Pacote"` / `"Molde"` / `"MoldePosicional"` / `"Desconhecido"`
577/// byte-string through one substrate-primitive dispatch rather than an
578/// open-coded `.as_str()` re-inlining at every wire-up.
579///
580/// Same "route the trait impl through the substrate-primitive accessor"
581/// discipline the sibling [`crate::CaixaVersion`] [`AsRef<str>`] impl
582/// (16d5c7e), the paired M2 [`crate::supervisor::RestartStrategy`]
583/// [`AsRef<str>`] impl (63eb1a4), the paired M2
584/// [`crate::supervisor::RestartPolicy`] [`AsRef<str>`] impl (419ea81),
585/// the M3 [`crate::aplicacao::PlacementStrategy`] [`AsRef<str>`] impl
586/// (d86edd2), the M3 [`crate::aplicacao::RateLimitUnit`] [`AsRef<str>`]
587/// impl (d8136db), and the top-level [`crate::CaixaKind`] [`AsRef<str>`]
588/// impl (cd2091f) carry — extends the substrate primitive's
589/// [`AsRef<str>`] projection axis onto the seventh closed-set typed enum
590/// on the caixa surface: the dialect-classification axis previously
591/// carried [`fmt::Display`]-through-`as_str` but not yet the paired
592/// [`AsRef<str>`] impl, so a downstream consumer that bound the enum
593/// through the standard-library `AsRef<str>` trait had to reach the
594/// canonical byte-string through an open-coded `.as_str()` call rather
595/// than the trait-idiomatic `.as_ref()` the peer closed-set typed enums
596/// already admit.
597///
598/// Pinned load-bearing by
599/// [`tests::caixa_dialeto_as_ref_str_routes_through_as_str_accessor`]
600/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
601/// closed set) and
602/// [`tests::caixa_dialeto_as_ref_str_routes_through_display_via_shared_accessor`]
603/// (three-path convergence: `AsRef<str>` + `Display` + `as_str` all
604/// resolve to the same byte-string per arm) — any future silent detour
605/// that routes the impl through a divergent projection (a per-arm inline
606/// `match self { CaixaDialeto::Pacote => "Pacote", … }` re-inlining that
607/// opens a compile-time link to the un-lifted arm-literal, a swap onto
608/// the second-axis [`CaixaDialeto::palavra_canonica`] /
609/// [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`] accessors
610/// that carry distinct byte-shapes per axis) trips at caixa-core test
611/// time under `assert_eq!` rather than at a downstream
612/// `impl AsRef<str>`-bound consumer's silent split.
613impl AsRef<str> for CaixaDialeto {
614 fn as_ref(&self) -> &str {
615 self.as_str()
616 }
617}
618
619/// Trait-idiomatic reverse projection on the [`CaixaDialeto`] closed-set
620/// dialect-classification typed enum — routes byte-for-byte through the
621/// paired substrate-primitive [`CaixaDialeto::from_wire`] `Option<Self>`
622/// accessor so every future consumer that binds a `PascalCase` variant-
623/// name byte-string through the standard-library `.try_into()` /
624/// [`TryFrom`] axis (a future `feira dialeto --filter
625/// <Pacote|Molde|MoldePosicional|Desconhecido>` CLI arg-parse that
626/// composes into `let d: CaixaDialeto = s.try_into()?`, a future audit-
627/// report re-loader binding a prior [`CaixaDialeto::as_str`] output
628/// through `CaixaDialeto::try_from(&s)?`, a generic
629/// `<T: TryFrom<&str>>`-bound loader over any of the substrate's closed-
630/// set typed enums) reaches the same four-arm accept-set the sibling
631/// [`CaixaDialeto::from_wire`] parses through and the sibling
632/// [`CaixaDialeto::as_str`] emits, rather than an open-coded per-arm
633/// `match s { "Pacote" => …, … }` cascade whose arm-set has no
634/// compile-time link back to the substrate primitive.
635///
636/// Complements the pre-existing forward-projection triple
637/// ([`std::fmt::Display`], [`AsRef<str>`], [`CaixaDialeto::as_str`]) with
638/// the paired trait-idiomatic reverse-projection axis: Rust-side
639/// newtype/typed-enum convention pairs [`AsRef<str>`] with either
640/// [`std::str::FromStr`] or [`TryFrom<&str>`] on the same primitive so a
641/// caller who can project *out to* a `&str` can also project *in from*
642/// one. The [`TryFrom<&str>`] axis is deliberately chosen over
643/// [`std::str::FromStr`] to sidestep the `clippy::should_implement_trait`
644/// lint that the sibling method-named `from_wire` would trigger under a
645/// `FromStr` impl (the same design tradeoff the peer
646/// [`crate::CaixaKind`] `TryFrom<&str>` impl (3c83606) and the peer
647/// [`crate::provedor::ferrite::FerriteRuntime::from_wire`] block note)
648/// — this impl closes the trait-idiomatic reverse axis without disturbing
649/// the method-named `from_wire` shape every sibling closed-set typed
650/// enum on the substrate already carries.
651///
652/// `type Error = ()` matches the sibling [`CaixaDialeto::from_wire`]'s
653/// `Option<Self>` return-shape's deliberate deferral of error typing:
654/// the caller picks the diagnostic form appropriate for its use site
655/// (a future `feira dialeto --filter` arg-parse composes its own per-verb
656/// "unknown dialect: <arg> — accepted: {…}" message enumerating
657/// [`CaixaDialeto::ALL`], a future admission-webhook rejection body
658/// wraps the `Err(())` outcome with the accepted-set enumeration for
659/// operator diagnostics, a `Result::map_err` at the call site lifts the
660/// unit-error to a per-verb error type). Same shape the peer
661/// [`crate::CaixaKind`] `TryFrom<&str>` impl (3c83606) and the peer
662/// [`FerriteRuntime::from_wire`] doc block motivate on the sibling
663/// closed-set typed enums' reverse projections.
664///
665/// The paired [`TryFrom<&str>`] impl reaches the same four-arm accept-
666/// set the [`CaixaDialeto::from_wire`] resolver dispatches through, so
667/// any future arm addition (the module doc's "third dialect" hazard
668/// actualises as a fifth arm belonging to the `defmolde` family or a
669/// wholly new declaration) grows the trait-idiomatic axis by
670/// construction — one caixa-core edit on [`CaixaDialeto::from_wire`]
671/// extends both the method-named reverse projection every existing
672/// consumer keys off and the trait-idiomatic reverse projection this
673/// impl exposes, without a coordinated rewrite across every future
674/// `TryFrom<&str>`-bound consumer's arm-set.
675///
676/// Pinned load-bearing by
677/// [`tests::caixa_dialeto_try_from_str_routes_through_from_wire_accessor`]
678/// (byte-parity pin against [`CaixaDialeto::from_wire`] across the four-
679/// arm accept-set) and
680/// [`tests::caixa_dialeto_try_from_str_rejects_unknown_byte_strings`]
681/// (rejection witness against silent accept-set widening).
682impl TryFrom<&str> for CaixaDialeto {
683 type Error = ();
684
685 fn try_from(s: &str) -> Result<Self, Self::Error> {
686 Self::from_wire(s).ok_or(())
687 }
688}
689
690/// Trait-idiomatic [`std::str::FromStr`] parse axis on the
691/// [`CaixaDialeto`] closed-set dialect-classification typed enum —
692/// routes byte-for-byte through the paired
693/// [`TryFrom<&str> for CaixaDialeto`] impl (which in turn routes
694/// through the substrate-primitive [`CaixaDialeto::from_wire`]
695/// `Option<Self>` accessor), so `"...".parse::<CaixaDialeto>()` /
696/// `<CaixaDialeto as FromStr>::from_str(…)` reaches the same four-arm
697/// `PascalCase` accept-set the sibling method-named
698/// [`CaixaDialeto::from_wire`] resolver and the paired
699/// [`TryFrom<&str>`] impl already resolve against.
700///
701/// Extends the substrate-wide trait-idiomatic `str::parse`-axis
702/// campaign — opened on [`crate::dep::DepList`] via 6167092 as
703/// first-mover on the two-list dep-graph closed-set typed enum, then
704/// extended onto the structurally most fundamental closed-set typed
705/// enum via [`crate::CaixaKind`] (9867432), then onto the first
706/// M3-mesh-primitive-defining slot enum via
707/// [`crate::aplicacao::PlacementStrategy`] (62ef49a) — onto the
708/// dialect-classification axis every [`crate::Caixa`] carries through
709/// its parsed manifest form. Unlike the peer
710/// [`crate::supervisor::RestartStrategy`] /
711/// [`crate::supervisor::RestartPolicy`] enums (which carry a
712/// [`gen_platform::FromStrKind`]-derived `FromStr` on a paired
713/// *kebab-case dispatcher-catalog* axis and therefore rule the
714/// `PascalCase` wire axis out of a second `FromStr` impl by
715/// coherence), and unlike the peer
716/// [`crate::aplicacao::WitShape`] /
717/// [`crate::aplicacao::RateLimitUnit`] enums (whose two-axis splits
718/// [`WitShape::from_wire`] + [`WitShape::classify`] and
719/// [`RateLimitUnit::from_suffix`] + [`RateLimitUnit::from_window`]
720/// motivate deliberate deferral of the `FromStr` axis so a plain
721/// `s.parse::<T>()` cannot obscure which axis the caller reaches),
722/// [`CaixaDialeto`] carries exactly one census-facing `PascalCase`
723/// axis (the module doc block above the [`CaixaDialeto::as_str`]
724/// accessor names this out: "an internal classification with no wire
725/// surface — the `PascalCase` variant name is the census-facing form
726/// every consumer reads, so `as_str` suffices without a paired
727/// `wire_name` axis"), so lifting [`FromStr`] onto it is coherent by
728/// construction.
729///
730/// [`FromStr`] is the canonical Rust-idiomatic parse-set entry point
731/// every stdlib-shaped consumer reaches for — [`str::parse::<T>()`]
732/// is a `T: FromStr`-bounded generic, not a
733/// `T: for<'a> TryFrom<&'a str>`-bounded one — so lifting [`FromStr`]
734/// onto the closed-set enum unlocks the `.parse::<CaixaDialeto>()`
735/// short-form on every consumer (a future `feira dialeto --filter
736/// <Pacote|Molde|MoldePosicional|Desconhecido>` clap-style arg-parse
737/// composes `arg.parse::<CaixaDialeto>()`; a `serde` string-tagged
738/// deserializer routes through the same `FromStr` bound; a future
739/// dialect-partitioned census-column loader that walks a
740/// `Vec<String>` of prior `CaixaDialeto::as_str` outputs reaches the
741/// typed enum through `line.parse::<CaixaDialeto>()` without a
742/// per-consumer `TryFrom<&str>` restatement).
743///
744/// The impl trivially delegates to the paired [`TryFrom<&str>`] —
745/// same `type Err = ()` deliberate-deferral shape the sibling
746/// reverse-projection trait carries — so both trait-idiomatic
747/// parse-axis paths (`TryFrom<&str>` and `FromStr::from_str`)
748/// resolve to the same four-arm accept-set by construction. A
749/// future accept-set widening (the module doc's "third dialect"
750/// hazard actualising as a fifth arm belonging to the `defmolde`
751/// family or a wholly new declaration) reaches every parse path
752/// through one edit on the substrate-primitive
753/// [`CaixaDialeto::from_wire`] accessor, not a coordinated rewrite
754/// across the two reverse-projection trait impls.
755///
756/// Pinned load-bearing by
757/// [`tests::caixa_dialeto_from_str_routes_through_try_from_str_impl`]
758/// (byte-parity pin across the four-arm accept-set + delegated-
759/// `.parse()`-projection witness) and
760/// [`tests::caixa_dialeto_from_str_rejects_unknown_byte_strings`]
761/// (rejection witness against silent accept-set widening).
762impl std::str::FromStr for CaixaDialeto {
763 type Err = ();
764
765 fn from_str(s: &str) -> Result<Self, Self::Err> {
766 <Self as TryFrom<&str>>::try_from(s)
767 }
768}
769
770/// Trait-idiomatic forward projection on the [`CaixaDialeto`] closed-set
771/// dialect-classification typed enum — routes byte-for-byte through the
772/// sibling substrate-primitive [`CaixaDialeto::as_str`] `pub const fn`
773/// accessor so every future consumer that needs `&'static str` lifetime
774/// bytes on the dialect-classification axis (a
775/// `tracing::field::valuable::Value::Str` recording where the `Str` arm's
776/// typing demands `&'static str`, a
777/// `Cow::Borrowed::<'static, str>(dialeto.into())` composer on the future
778/// M4 admission-webhook rejection body where the `Cow<'static, str>`
779/// typing rules out the sibling [`AsRef<str>`] borrowed return, a generic
780/// `<T: Into<&'static str>>`-bound serializer or error formatter that
781/// requires the `'static` bound) reaches the same four `"Pacote"` /
782/// `"Molde"` / `"MoldePosicional"` / `"Desconhecido"` byte-strings the
783/// sibling [`CaixaDialeto::as_str`] emitter returns, rather than an
784/// open-coded per-arm literal cascade whose arm-set has no compile-time
785/// link back to the substrate primitive.
786///
787/// Return type is `&'static str` by construction — every
788/// [`CaixaDialeto::as_str`] arm resolves to a compile-time `pub const fn`
789/// return of a `&'static str` literal, so the trait's return-type promise
790/// is upheld structurally without a `String::leak()` cast or a per-arm
791/// inline literal.
792///
793/// Complements the pre-existing reverse-projection axis pair
794/// ([`TryFrom<&str>`] above + method-named [`CaixaDialeto::from_wire`])
795/// with the trait-idiomatic forward-projection axis: Rust-side
796/// newtype/typed-enum convention pairs [`TryFrom<&str>`] with the mirror-
797/// image [`From<Self> for &'static str`] on the same primitive so a
798/// caller who can project *in from* a `&str` can also project *out to*
799/// one under a `'static`-lifetime bound. The
800/// [`AsRef<str>`] impl already carries the same emit-set on the borrowed
801/// return path; this impl closes the trait-idiomatic axis pair with the
802/// stricter `&'static str` lifetime the sibling `AsRef<str>` cannot
803/// promise (its return borrows from `&self`, not from the
804/// [`CaixaDialeto::as_str`] `pub const fn`'s static-string result).
805///
806/// Same "route the trait impl through the substrate-primitive accessor"
807/// discipline the sibling [`crate::supervisor::RestartStrategy`]
808/// `From<Self> for &'static str` impl (523157d — first-mover on this
809/// forward-projection family), [`crate::supervisor::RestartPolicy`]
810/// `From<Self> for &'static str` impl (9fb37d0 — second peer, closing
811/// the M2 OTP-shape sibling pair), and [`crate::CaixaKind`]
812/// `From<Self> for &'static str` impl (edb827b — third peer, opening
813/// the campaign onto the top-level caixa surface) carry — extends the
814/// substrate primitive's trait-idiomatic forward-projection axis onto
815/// the fourth closed-set fieldless typed enum on the caixa surface: the
816/// dialect-classification axis, previously carrying the paired
817/// [`std::fmt::Display`] / [`AsRef<str>`] / [`CaixaDialeto::as_str`] /
818/// [`TryFrom<&str>`] / [`CaixaDialeto::from_wire`] forward+reverse
819/// projections but not yet the trait-idiomatic forward projection with
820/// the `&'static str` lifetime bound.
821///
822/// Unlike the peer [`crate::CaixaKind`] impl (which carries a two-axis
823/// split between the lowercase Portuguese `as_str` diagnostic axis and
824/// the `PascalCase` `wire_name` author-surface axis, so the trait's
825/// round-trip witness must cross through the wire axis rather than
826/// composing the two trait impls directly), [`CaixaDialeto`] is an
827/// internal classification whose [`CaixaDialeto::as_str`] output and
828/// [`CaixaDialeto::from_wire`] input share the same `PascalCase`
829/// vocabulary by construction — the trait-idiomatic axis pair
830/// ([`From<Self> for &'static str`] + [`TryFrom<&str> for Self`])
831/// therefore round-trips directly, without an intermediate wire-vocab
832/// hop.
833///
834/// The paired [`CaixaDialeto::as_str`] accessor's four-arm emit-set is
835/// the single source of truth — every future arm addition (the module
836/// doc's "third dialect" hazard actualises as a fifth arm belonging to
837/// the `defmolde` family or a wholly new declaration) grows the trait-
838/// idiomatic forward axis by construction: one caixa-core edit on
839/// [`CaixaDialeto::as_str`] extends every one of the sibling forward-
840/// projection paths ([`std::fmt::Display`], [`AsRef<str>`],
841/// [`CaixaDialeto::as_str`] itself, and this
842/// [`From<Self> for &'static str`]) without a coordinated rewrite across
843/// every future `Into<&'static str>`-bound consumer's arm-set. This lift
844/// closes the fourth peer on the trait-idiomatic forward-projection
845/// campaign the recently-landed peer commits opened; the remaining ten
846/// closed-set typed enums on the caixa substrate surface
847/// (`PlacementStrategy`, `WitShape`, `RateLimitUnit`,
848/// `PathShapeViolation`, `InvariantKind`, `ArchVerdict`, `Severity`,
849/// `FixSafety`, `Semantic`, `FerriteRuntime`) are the future targets
850/// of this campaign.
851///
852/// Pinned load-bearing by
853/// [`tests::caixa_dialeto_from_into_static_str_routes_through_as_str_accessor`]
854/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
855/// emit-set, plus a `const`-context materialization witness for the
856/// `&'static str` lifetime promise, plus a paired `.into()` shape
857/// assertion covering the blanket-derived `Into<&'static str>` shape)
858/// and
859/// [`tests::caixa_dialeto_from_into_static_str_and_as_str_partition_the_emit_set`]
860/// (partition pin asserting `<&'static str as From<CaixaDialeto>>::from`
861/// and [`CaixaDialeto::as_str`] agree on every arm, plus a two-way
862/// direct round-trip witness through the paired trait-idiomatic
863/// [`TryFrom<&str>`] axis that closes the two-way `Self ↔ &'static str`
864/// round-trip on the trait-idiomatic axis pair without the wire-vocab
865/// intermediate the peer [`crate::CaixaKind`] axis pair requires).
866impl From<CaixaDialeto> for &'static str {
867 fn from(dialeto: CaixaDialeto) -> &'static str {
868 dialeto.as_str()
869 }
870}
871
872/// Trait-idiomatic *forward* projection on [`CaixaDialeto`] from a
873/// *borrowed* input onto the `&'static str` axis — the borrowed-input
874/// companion to the paired owned-input [`From<CaixaDialeto> for &'static
875/// str`] impl immediately above. Routes byte-for-byte through the same
876/// substrate-primitive [`CaixaDialeto::as_str`] `pub const fn` accessor so
877/// every consumer that binds a `&CaixaDialeto` through the standard-
878/// library `.into()` / [`From<&Self> for &'static str`] axis (a
879/// `CaixaDialeto::ALL.iter().map(<&'static str>::from).collect::<Vec<_>>()`
880/// per-arm accept-set materializer — whose iterator over
881/// `&'static [CaixaDialeto]` yields `&CaixaDialeto`, not `CaixaDialeto`,
882/// so the owned-input [`From<CaixaDialeto>`] axis alone forces every call
883/// site through an explicit `.copied()` / dereference / [`Copy`]-bound
884/// restatement rather than the direct trait-idiomatic projection; a
885/// future generic `<T: Copy + for<'a> Into<&'static str>>`-bound
886/// diagnostic column that walks the `iter().map(Into::into)` shape
887/// verbatim over any of the substrate's closed-set typed enums; the
888/// future M4 admission-webhook rejection body composer's per-dialect
889/// accepted-set enumeration built from an iterated
890/// `CaixaDialeto::ALL.iter().map(|d| d.into())` pipe rather than a
891/// per-arm `match d { … }` cascade; a
892/// `HashMap::<&'static str, CaixaDialeto>::from_iter(
893/// CaixaDialeto::ALL.iter().map(|d| (d.into(), *d)))`-style
894/// per-dialect reverse-lookup table the sibling [`TryFrom<&str>`] impl
895/// cannot compose without this borrowed-input axis in place) reaches the
896/// same four `"Pacote"` / `"Molde"` / `"MoldePosicional"` /
897/// `"Desconhecido"` byte-strings the paired owned-input
898/// [`From<CaixaDialeto> for &'static str`], the sibling
899/// [`std::fmt::Display`], [`AsRef<str>`], and [`CaixaDialeto::as_str`]
900/// surfaces already return.
901///
902/// Third peer on the substrate-wide trait-idiomatic *borrowed-input*
903/// forward-projection family opened on
904/// [`crate::dep::DepList`] (64aa742) and extended onto
905/// [`crate::CaixaKind`] (5ab993a). Rust's `From` trait does not
906/// auto-derive the `From<&Self>` sibling from a `From<Self>` impl (the
907/// blanket `impl<T, U> From<&T> for U where T: Copy, U: From<T>` does
908/// not exist in `core`), so every closed-set typed enum that carries
909/// the owned-input axis but not the borrowed-input axis forces every
910/// borrowed-input call site through a `.copied()` /
911/// `<&'static str>::from(*dialeto)` / `dialeto.as_str()` detour whose
912/// type bounds have no compile-time link to the substrate primitive.
913///
914/// Unlike the peer [`crate::CaixaKind`] impl (which carries a two-axis
915/// split between the lowercase Portuguese `as_str` diagnostic axis and
916/// the `PascalCase` `wire_name` author-surface axis, so a `.into()`
917/// pipe over `CaixaKind::ALL` yields the diagnostic vocabulary rather
918/// than the wire vocabulary), [`CaixaDialeto`]'s [`CaixaDialeto::as_str`]
919/// and [`CaixaDialeto::from_wire`] share the same `PascalCase`
920/// vocabulary by construction — the borrowed-input projection this impl
921/// exposes therefore composes directly with the sibling
922/// [`TryFrom<&str>`] axis to build reverse-lookup tables without the
923/// wire-vocab intermediate hop the peer axis pair requires.
924///
925/// Pinned load-bearing by
926/// [`tests::caixa_dialeto_from_borrowed_into_static_str_routes_through_as_str_accessor`]
927/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
928/// emit-set via a borrowed input, plus a `const`-context materialization
929/// witness for the `&'static str` lifetime promise, plus a blanket
930/// `.into()` shape assertion) and
931/// [`tests::caixa_dialeto_from_owned_and_borrowed_into_static_str_agree_on_every_arm`]
932/// (cross-axis partition pin against the paired owned-input
933/// [`From<CaixaDialeto> for &'static str`] impl, plus a
934/// `.iter().map(Into::into)` pipe witness over [`CaixaDialeto::ALL`]
935/// that materializes the four-arm accept-set through the borrowed-input
936/// axis alone, plus a direct round-trip witness through the paired
937/// trait-idiomatic [`TryFrom<&str>`] axis that closes the two-way
938/// `&Self → &'static str → Self` round-trip on the borrowed-input axis
939/// without the wire-vocab intermediate the peer [`crate::CaixaKind`]
940/// axis pair requires).
941impl From<&CaixaDialeto> for &'static str {
942 fn from(dialeto: &CaixaDialeto) -> &'static str {
943 dialeto.as_str()
944 }
945}
946
947/// Trait-idiomatic *forward* projection on [`CaixaDialeto`] from an *owned*
948/// input onto the owned-[`String`] axis — routes byte-for-byte through the
949/// substrate-primitive [`CaixaDialeto::as_str`] `pub const fn` accessor so
950/// every consumer that binds a [`CaixaDialeto`] through the standard-library
951/// `.into()` / [`From<Self> for String`] (equivalently [`Into<String>`]) axis
952/// reaches the same four `"Pacote"` / `"Molde"` / `"MoldePosicional"` /
953/// `"Desconhecido"` byte-strings the paired owned-input
954/// [`From<CaixaDialeto> for &'static str`], the borrowed-input
955/// [`From<&CaixaDialeto> for &'static str`], the sibling [`std::fmt::Display`],
956/// [`AsRef<str>`], and [`CaixaDialeto::as_str`] surfaces already return.
957///
958/// Extends the trait-idiomatic *owned-[`String`]* forward-projection family
959/// (opened on [`crate::supervisor::RestartStrategy`] — 7baa18a — the first-
960/// mover on the M2 OTP-shape sibling-restart-strategy axis, extended onto
961/// [`crate::supervisor::RestartPolicy`] — 7851725 — the second-of-two-in-M2
962/// per-child restart-decision axis, then onto [`crate::CaixaKind`] — 231a18c
963/// — the structurally most fundamental closed-set fieldless typed enum on
964/// the caixa surface) onto the fourth peer: the dialect-classification axis
965/// [`CaixaDialeto`] carries. Rust's standard library does not carry a blanket
966/// `impl<T: AsRef<str>> From<T> for String` (nor an
967/// `impl<T: fmt::Display> From<T> for String`), so every closed-set typed
968/// enum that carries the paired `AsRef<str>` / `Display` /
969/// `From<Self> for &'static str` triple but not the owned-[`String`] axis
970/// forces every owned-string call site through a `.to_string()` /
971/// `.as_str().to_owned()` / `String::from(dialeto.as_str())` detour whose
972/// type bounds have no compile-time link to the substrate primitive.
973///
974/// Unlike the peer [`crate::CaixaKind`] enum (which carries a two-axis split
975/// between the lowercase Portuguese [`crate::CaixaKind::as_str`] diagnostic
976/// axis and the `PascalCase` [`crate::CaixaKind::wire_name`] author-surface
977/// axis, so the owned-[`String`] forward emit and the reverse
978/// [`TryFrom<&str>`] parse land on disjoint vocabularies and the round-trip
979/// crosses through [`crate::CaixaKind::wire_name`] as the reverse-axis
980/// vocabulary rather than composing the owned-[`String`] emit directly),
981/// [`CaixaDialeto`]'s [`CaixaDialeto::as_str`] emit and
982/// [`CaixaDialeto::from_wire`] parse share the same `PascalCase` vocabulary
983/// by construction (there is no wire/diagnostic axis split on this enum —
984/// it is an internal classification with no wire surface), so the
985/// owned-[`String`] forward projection this impl exposes composes directly
986/// with the sibling [`TryFrom<&str>`] axis on the owned-[`String`]'s
987/// [`String::as_str`] borrow, byte-identically to the peer
988/// [`crate::supervisor::RestartStrategy`] /
989/// [`crate::supervisor::RestartPolicy`] owned-[`String`] axis pairs
990/// (whose forward emit and reverse parse also share one `PascalCase`
991/// vocabulary by construction).
992///
993/// The remaining ten closed-set typed enums on the caixa substrate surface
994/// (`DepList`, `PlacementStrategy`, `WitShape`, `RateLimitUnit`,
995/// `PathShapeViolation`, `InvariantKind`, `ArchVerdict`, `Severity`,
996/// `FixSafety`, `Semantic`, `FerriteRuntime`) are the future targets of
997/// this campaign — each carries the same paired `AsRef<str>` / `Display` /
998/// `From<Self> for &'static str` / `From<&Self> for &'static str` quadruple
999/// that this owned-[`String`] axis extends onto.
1000///
1001/// Pinned load-bearing by
1002/// [`tests::caixa_dialeto_from_into_owned_string_routes_through_as_str_accessor`]
1003/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1004/// emit-set, plus a blanket `.into::<String>()` shape witness) and
1005/// [`tests::caixa_dialeto_from_into_owned_string_and_static_str_agree_on_every_arm`]
1006/// (cross-axis partition pin against the paired owned-input
1007/// [`From<CaixaDialeto> for &'static str`] impl and the sibling
1008/// [`ToString::to_string`] surface routed through [`std::fmt::Display`],
1009/// plus a `.iter().copied().map(String::from)` pipe witness over
1010/// [`CaixaDialeto::ALL`], plus a direct round-trip witness through
1011/// [`TryFrom<&str>`] on the owned-[`String`]'s [`String::as_str`] borrow
1012/// that closes the two-way `Self → String → Self` round-trip on the
1013/// trait-idiomatic owned-[`String`] forward + reverse axis pair without
1014/// the wire-vocab intermediate hop the peer [`crate::CaixaKind`] axis pair
1015/// requires).
1016impl From<CaixaDialeto> for String {
1017 fn from(dialeto: CaixaDialeto) -> String {
1018 dialeto.as_str().to_owned()
1019 }
1020}
1021
1022/// Trait-idiomatic *borrowed-input, owned-`String` output* forward
1023/// projection on the dialect-classification [`CaixaDialeto`] closed-set
1024/// typed enum — the fourth (and closing) corner of the
1025/// `{Self, &Self} × {&'static str, String}` 2×2 trait-idiomatic
1026/// projection family on this enum, mirror of the peer M2 OTP-shape
1027/// [`From<&crate::supervisor::RestartStrategy> for String`] (579385f) /
1028/// [`From<&crate::supervisor::RestartPolicy> for String`] (8465740),
1029/// the two-list dep-graph [`From<&crate::dep::DepList> for String`]
1030/// (e0cb617), and the top-level [`From<&crate::CaixaKind> for String`]
1031/// (e76436d) that opened and extended the corner off the M2 OTP-shape
1032/// sibling axis pair onto the sibling closed-set fieldless typed enum
1033/// peers. Routes byte-for-byte through the substrate-primitive
1034/// [`CaixaDialeto::as_str`] `pub const fn` accessor (via
1035/// [`str::to_owned`]) so every consumer that holds a borrowed
1036/// [`&CaixaDialeto`] and needs an owned [`String`] — a future
1037/// `serde_json::Value::String(String::from(&dialeto))` structured-
1038/// payload composer over a borrowed field, a future `Iterator::map`
1039/// over `&[CaixaDialeto]` that projects to owned keys through
1040/// `.iter().map(String::from)` (whose iterator yields `&CaixaDialeto`,
1041/// not `CaixaDialeto`, so the owned-input
1042/// [`From<CaixaDialeto> for String`] axis alone forces every call site
1043/// through an explicit `.copied()` / spurious [`Copy`] deref restatement
1044/// rather than the direct trait-idiomatic projection), a future
1045/// `HashMap::<String, CaixaDialeto>::from_iter` that keys off a
1046/// borrowed-iteration axis where dereferencing the dialect would force
1047/// an unnecessary [`Copy`] at every step, the future
1048/// `feira dialeto --list-dialects` CLI enumeration that walks
1049/// [`CaixaDialeto::ALL`] through the borrowed-iteration axis by
1050/// construction, the future M4
1051/// `mesh.pleme.io/v1alpha1/Manifesto` CR materializer's admission-
1052/// webhook rejection body composer that names the accepted-dialect
1053/// set through an iterated `.iter().map(String::from).collect()`
1054/// pipe rather than a per-arm cascade — reaches the same four
1055/// `"Pacote"` / `"Molde"` / `"MoldePosicional"` / `"Desconhecido"`
1056/// byte-strings the paired [`std::fmt::Display`], [`AsRef<str>`],
1057/// [`CaixaDialeto::as_str`], and the three other trait-idiomatic
1058/// forward-projection impls ([`From<CaixaDialeto> for &'static str`],
1059/// [`From<&CaixaDialeto> for &'static str`],
1060/// [`From<CaixaDialeto> for String`]) already return.
1061///
1062/// Fifth peer on the substrate-wide trait-idiomatic *borrowed-input,
1063/// owned-`String` output* forward-projection family opened on
1064/// [`crate::supervisor::RestartStrategy`] (579385f), closed on the M2
1065/// OTP-shape sibling axis pair by
1066/// [`crate::supervisor::RestartPolicy`] (8465740), extended onto the
1067/// two-list dep-graph peer by [`crate::dep::DepList`] (e0cb617) and
1068/// onto the top-level [`crate::CaixaKind`] (e76436d) — extends the
1069/// `{Self, &Self} × {&'static str, String}` 2×2 projection corner off
1070/// the top-level `:kind` axis onto the dialect-classification axis
1071/// (the fourth closed-set fieldless typed enum on the caixa surface;
1072/// second peer outside the M2 OTP-shape sibling pair to reach the
1073/// 2×2-completion corner). Rust's standard library does not carry a
1074/// blanket `impl<T: AsRef<str>> From<&T> for String` (nor an
1075/// `impl<T: fmt::Display> From<&T> for String`), so every closed-set
1076/// typed enum that carries the paired `AsRef<str>` / `Display` /
1077/// `From<Self> for &'static str` / `From<&Self> for &'static str` /
1078/// `From<Self> for String` quintuple but not the borrowed-input
1079/// owned-[`String`] axis forces every borrowed-input owned-string call
1080/// site through a `dialeto.as_str().to_owned()` /
1081/// `String::from(*dialeto)` (with a spurious [`Copy`]) /
1082/// `dialeto.to_string()` (through [`std::fmt::Display`]) detour whose
1083/// type bounds have no compile-time link to the substrate primitive.
1084///
1085/// Same as the peer [`crate::supervisor::RestartStrategy`] /
1086/// [`crate::supervisor::RestartPolicy`] / [`crate::dep::DepList`]
1087/// borrowed-input owned-[`String`] axis pairs (whose forward emit and
1088/// reverse parse share one vocabulary by construction — `PascalCase`
1089/// on the M2 OTP-shape peers, the lifted
1090/// [`crate::render::DEP_AUTHOR_KEY_DEPS`] /
1091/// [`crate::render::DEP_AUTHOR_KEY_DEPS_DEV`] consts on the two-list
1092/// dep-graph peer) and unlike the peer [`crate::CaixaKind`] pair
1093/// (whose forward emit lands on the lowercase Portuguese
1094/// diagnostic vocabulary while the reverse parse lands on the
1095/// `PascalCase` wire vocabulary, forcing the round-trip through an
1096/// intermediate [`crate::CaixaKind::wire_name`] hop), [`CaixaDialeto`]
1097/// is an internal classification with no wire surface — the
1098/// [`CaixaDialeto::as_str`] emit and [`CaixaDialeto::from_wire`] parse
1099/// share the same `PascalCase` vocabulary by construction (there is
1100/// no wire/diagnostic axis split on this enum), so the borrowed-
1101/// input owned-[`String`] projection this impl exposes composes
1102/// directly with the paired trait-idiomatic reverse [`TryFrom<&str>`]
1103/// axis on the owned-[`String`]'s [`String::as_str`] borrow — no
1104/// intermediate wire-vocab hop required.
1105///
1106/// The remaining nine closed-set typed enums on the caixa substrate
1107/// surface (`PlacementStrategy`, `WitShape`, `RateLimitUnit`,
1108/// `PathShapeViolation`, `InvariantKind`, `ArchVerdict`, `Severity`,
1109/// `FixSafety`, `Semantic`, `FerriteRuntime`) are the future targets
1110/// of this 2×2-completion campaign — each carries the same paired
1111/// quintuple that this borrowed-input owned-[`String`] axis extends
1112/// onto.
1113///
1114/// Pinned load-bearing by
1115/// [`tests::caixa_dialeto_from_into_borrowed_owned_string_routes_through_as_str_accessor`]
1116/// (byte-parity pin against [`CaixaDialeto::as_str`] across the
1117/// four-arm emit-set through the borrowed-input surface) and
1118/// [`tests::caixa_dialeto_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm`]
1119/// (cross-axis partition pin against the paired owned-input owned-
1120/// [`String`] [`From<CaixaDialeto> for String`] impl, the paired
1121/// borrowed-input owned-[`&'static str`]
1122/// [`From<&CaixaDialeto> for &'static str`] impl, the paired owned-
1123/// input owned-[`&'static str`] [`From<CaixaDialeto> for &'static str`]
1124/// impl, and the sibling [`ToString::to_string`] surface routed
1125/// through [`std::fmt::Display`], plus a `.iter().map(String::from)`
1126/// pipe witness over [`CaixaDialeto::ALL`] (whose iterator yields
1127/// `&CaixaDialeto` by construction, so the borrowed-input owned-
1128/// [`String`] axis is what routes the pipe through the substrate-
1129/// primitive [`CaixaDialeto::as_str`] accessor without a spurious
1130/// [`Copy`] deref), plus a direct round-trip witness through
1131/// [`TryFrom<&str>`] on the owned-[`String`]'s [`String::as_str`]
1132/// borrow that closes the two-way `&Self → String → Self` round-trip
1133/// on the trait-idiomatic borrowed-input owned-[`String`] forward +
1134/// reverse axis pair — no intermediate wire-vocab hop like the peer
1135/// [`crate::CaixaKind`] axis pair requires).
1136impl From<&CaixaDialeto> for String {
1137 fn from(dialeto: &CaixaDialeto) -> String {
1138 dialeto.as_str().to_owned()
1139 }
1140}
1141
1142/// Trait-idiomatic *owned-input, [`std::borrow::Cow<'static, str>`]
1143/// output* forward projection on the dialect-classification
1144/// [`CaixaDialeto`] closed-set typed enum — routes byte-for-byte
1145/// through the substrate-primitive [`CaixaDialeto::as_str`]
1146/// `pub const fn` accessor (via [`std::borrow::Cow::Borrowed`]) so
1147/// every consumer that binds a [`CaixaDialeto`] through the
1148/// standard-library `.into()` /
1149/// [`From<Self> for std::borrow::Cow<'static, str>`] (equivalently
1150/// [`Into<std::borrow::Cow<'static, str>>`]) axis — a future
1151/// `axum::response::IntoResponse` body composer whose typing folds a
1152/// per-arm rejection line into a [`std::borrow::Cow<'static, str>`]
1153/// boundary, a future M4 `mesh.pleme.io/v1alpha1/Manifesto` CR
1154/// materializer's admission-webhook rejection body composer whose
1155/// typing rules out the sibling [`AsRef<str>`] borrowed return and
1156/// the sibling [`From<Self> for &'static str`] axis's non-
1157/// [`std::borrow::Cow`]-parameterized shape, a future substrate-wide
1158/// per-arm diagnostic surface that folds either the zero-alloc
1159/// [`std::borrow::Cow::Borrowed`] arm (for the closed-set arms whose
1160/// byte-string is build-time-lifted) or the [`std::borrow::Cow::Owned`]
1161/// arm (for a caller that mutates the projection) through one uniform
1162/// trait dispatch, a future generic
1163/// `<T: Into<std::borrow::Cow<'static, str>>>`-bound emitter on a
1164/// per-dialect structured-log or admission-webhook rejection body —
1165/// reaches the same four `"Pacote"` / `"Molde"` / `"MoldePosicional"` /
1166/// `"Desconhecido"` byte-strings the paired [`std::fmt::Display`],
1167/// [`AsRef<str>`], [`CaixaDialeto::as_str`], and the four
1168/// `{Self, &Self} × {&'static str, String}` 2×2 trait-idiomatic
1169/// forward-projection corners
1170/// ([`From<CaixaDialeto> for &'static str`],
1171/// [`From<&CaixaDialeto> for &'static str`],
1172/// [`From<CaixaDialeto> for String`],
1173/// [`From<&CaixaDialeto> for String`]) already return, rather than an
1174/// open-coded per-call-site
1175/// `std::borrow::Cow::Borrowed(dialeto.as_str())` /
1176/// `std::borrow::Cow::Owned(dialeto.to_string())` /
1177/// `String::from(dialeto).into()` composition whose type bounds have
1178/// no compile-time link back to the substrate primitive.
1179///
1180/// Deliberately returns [`std::borrow::Cow::Borrowed`] rather than
1181/// [`std::borrow::Cow::Owned`] — the substrate-primitive
1182/// [`CaixaDialeto::as_str`] accessor's return carries the
1183/// `&'static str` lifetime by construction (each `match` arm resolves
1184/// to a `pub const &'static str` literal with static lifetime), so the
1185/// zero-alloc borrowed arm is the type-correct projection with no
1186/// runtime allocation. The paired [`std::borrow::Cow::Owned`] arm
1187/// stays reachable at the call site through the existing
1188/// [`From<CaixaDialeto> for String`] axis composed with
1189/// [`std::borrow::Cow::from`] on the resulting owned [`String`] — a
1190/// caller who chose to mutate the projection lands on the owned arm
1191/// by their own composition, not by the substrate-primitive
1192/// projection silently allocating on their behalf.
1193///
1194/// Same as the sibling [`crate::CaixaKind`] /
1195/// [`crate::supervisor::RestartStrategy`] /
1196/// [`crate::supervisor::RestartPolicy`] /
1197/// [`crate::aplicacao::WitShape`] /
1198/// [`crate::aplicacao::PlacementStrategy`] /
1199/// [`crate::aplicacao::RateLimitUnit`] /
1200/// [`crate::dep::DepList`] peers on the substrate-wide trait-idiomatic
1201/// [`std::borrow::Cow<'static, str>`] forward-projection campaign,
1202/// unlike the peer [`crate::CaixaKind`] pair (whose forward emit
1203/// lands on the lowercase Portuguese diagnostic vocabulary while the
1204/// reverse parse lands on the `PascalCase` wire vocabulary, forcing
1205/// the round-trip through an intermediate
1206/// [`crate::CaixaKind::wire_name`] hop), [`CaixaDialeto`] is an
1207/// internal classification with no wire surface — the
1208/// [`CaixaDialeto::as_str`] emit and [`CaixaDialeto::from_wire`]
1209/// parse share the same `PascalCase` vocabulary by construction (no
1210/// wire/diagnostic axis split on this enum), so the
1211/// [`std::borrow::Cow<'static, str>`] projection this impl exposes
1212/// composes directly with the paired trait-idiomatic reverse
1213/// [`TryFrom<&str>`] axis on the projection's
1214/// [`std::borrow::Cow::as_ref`] borrow — no intermediate wire-vocab
1215/// hop required.
1216///
1217/// Eighth peer on the substrate-wide trait-idiomatic
1218/// [`std::borrow::Cow<'static, str>`] forward-projection family
1219/// opened on the top-level [`crate::CaixaKind`] by 99c1735 (extended
1220/// off the closed `{Self, &Self} × {&'static str, String}` 2×2
1221/// corner closed on the last outside-caixa-core enum peer by
1222/// 29f8af3), closed on the `{Self, &Self}` input-shape corner on
1223/// [`crate::CaixaKind`] by d45c409, extended onto the M2 OTP-shape
1224/// tier by 7dd28b3 / 9b3e4b3 (opens/closes on
1225/// [`crate::supervisor::RestartStrategy`]) and 0612398 / ee577fd
1226/// (opens/closes on [`crate::supervisor::RestartPolicy`], closing the
1227/// M2 OTP-shape tier), extended onto the M3 mesh-shape tier by
1228/// 8634dec / 25690ef (opens/closes on [`crate::aplicacao::WitShape`])
1229/// and eee504d / afdf0f4 (opens/closes on
1230/// [`crate::aplicacao::PlacementStrategy`]) and 1d59925 (closes M3
1231/// mesh-shape tier on [`crate::aplicacao::RateLimitUnit`]), extended
1232/// onto the outside-M3 caixa-core tier by 6858bac / 702cdf4
1233/// (opens/closes on [`crate::dep::DepList`]) — extends the axis onto
1234/// the dialect-classification [`CaixaDialeto`] closed-set fieldless
1235/// typed enum (the second outside-M3 caixa-core peer, and the sole
1236/// remaining internal-classification enum on the caixa-core surface).
1237/// Rust's standard library does not carry a blanket
1238/// `impl<T: AsRef<str>> From<T> for std::borrow::Cow<'static, str>`
1239/// (nor an `impl<T: fmt::Display> From<T> for
1240/// std::borrow::Cow<'static, str>`), so every closed-set fieldless
1241/// typed enum peer on the substrate that carries the paired
1242/// [`AsRef<str>`] / [`std::fmt::Display`] /
1243/// [`From<Self> for &'static str`] / [`From<&Self> for &'static str`]
1244/// / [`From<Self> for String`] / [`From<&Self> for String`] sextet but
1245/// not the [`std::borrow::Cow<'static, str>`] axis forces every
1246/// [`std::borrow::Cow<'static, str>`]-parameterized call site through
1247/// a `std::borrow::Cow::Borrowed(dialeto.as_str())` /
1248/// `std::borrow::Cow::Owned(dialeto.to_string())` /
1249/// `String::from(dialeto).into()` detour whose type bounds have no
1250/// compile-time link to the substrate primitive.
1251///
1252/// The remaining outside-`caixa-core` closed-set fieldless typed
1253/// enum peers on the substrate surface (`PathShapeViolation`,
1254/// `InvariantKind`, `ArchVerdict`, `Severity`, `FixSafety`,
1255/// `Semantic`, `FerriteRuntime`) are the future targets of this
1256/// campaign — each carries the same paired sextet that this axis
1257/// extends onto.
1258///
1259/// Pinned load-bearing by
1260/// [`tests::caixa_dialeto_from_into_static_cow_str_routes_through_as_str_accessor`]
1261/// (byte-parity pin against [`CaixaDialeto::as_str`] across the
1262/// four-arm emit-set through the [`std::borrow::Cow<'static, str>`]
1263/// surface, plus a [`std::borrow::Cow::Borrowed`] discriminator
1264/// witness that the projection lands on the zero-alloc arm rather
1265/// than silently allocating through [`std::borrow::Cow::Owned`],
1266/// plus a blanket-derived [`Into<std::borrow::Cow<'static, str>>`]
1267/// shape witness that also lands on [`std::borrow::Cow::Borrowed`])
1268/// and
1269/// [`tests::caixa_dialeto_from_into_static_cow_str_agrees_with_paired_axes_on_every_arm`]
1270/// (cross-axis partition pin against the paired owned-input
1271/// [`From<CaixaDialeto> for &'static str`] and
1272/// [`From<CaixaDialeto> for String`] forward-projection corners plus
1273/// the sibling [`ToString::to_string`]-through-[`std::fmt::Display`]
1274/// surface, plus a `.iter().copied().map(std::borrow::Cow::from)`
1275/// pipe witness over [`CaixaDialeto::ALL`] whose zero-alloc
1276/// [`std::borrow::Cow::Borrowed`] outcome is load-bearing on every
1277/// arm, plus a direct round-trip witness through [`TryFrom<&str>`]
1278/// on the projection's [`std::borrow::Cow::as_ref`] borrow that
1279/// closes the two-way `Self → Cow<'static, str> → Self` round-trip
1280/// on the trait-idiomatic [`std::borrow::Cow<'static, str>`]
1281/// forward + reverse axis pair without the wire-vocab intermediate
1282/// hop the peer [`crate::CaixaKind`] axis pair requires).
1283impl From<CaixaDialeto> for std::borrow::Cow<'static, str> {
1284 fn from(dialeto: CaixaDialeto) -> std::borrow::Cow<'static, str> {
1285 std::borrow::Cow::Borrowed(dialeto.as_str())
1286 }
1287}
1288
1289/// Trait-idiomatic *borrowed-input, [`std::borrow::Cow<'static, str>`]
1290/// output* forward projection on the dialect-classification
1291/// [`CaixaDialeto`] closed-set typed enum — the borrowed-input companion
1292/// to the paired owned-input [`From<CaixaDialeto> for
1293/// std::borrow::Cow<'static, str>`] impl immediately above (8322511).
1294/// Routes byte-for-byte through the same substrate-primitive
1295/// [`CaixaDialeto::as_str`] `pub const fn` accessor (via
1296/// [`std::borrow::Cow::Borrowed`]) so every consumer that holds a
1297/// [`&CaixaDialeto`] and needs a [`std::borrow::Cow<'static, str>`] — a
1298/// `CaixaDialeto::ALL.iter().map(std::borrow::Cow::from).collect::<Vec<_>>()`
1299/// per-arm accept-set materializer whose iterator over
1300/// `&'static [CaixaDialeto]` yields `&CaixaDialeto` (not
1301/// [`CaixaDialeto`], so the paired owned-input
1302/// [`From<CaixaDialeto> for std::borrow::Cow<'static, str>`] axis alone
1303/// forces every call site through an explicit `.copied()` / dereference
1304/// / [`Copy`]-bound restatement rather than the direct trait-idiomatic
1305/// projection), a future generic
1306/// `<T: for<'a> Into<std::borrow::Cow<'static, str>>>`-bound emitter on
1307/// a per-dialect diagnostic column that walks the
1308/// `iter().map(Into::into)` shape verbatim, the future M4
1309/// `mesh.pleme.io/v1alpha1/Manifesto` CR admission-webhook rejection
1310/// body that composes the accepted-dialect enumeration from an iterated
1311/// `CaixaDialeto::ALL.iter().map(|d| d.into())` pipe rather than a
1312/// per-arm `match d { … }` cascade — reaches the same four `"Pacote"` /
1313/// `"Molde"` / `"MoldePosicional"` / `"Desconhecido"` byte-strings the
1314/// paired [`std::fmt::Display`], [`AsRef<str>`], [`CaixaDialeto::as_str`],
1315/// the four `{Self, &Self} × {&'static str, String}` 2×2 trait-idiomatic
1316/// forward-projection corners, and the paired owned-input
1317/// [`From<CaixaDialeto> for std::borrow::Cow<'static, str>`] impl
1318/// already return.
1319///
1320/// Deliberately returns [`std::borrow::Cow::Borrowed`] rather than
1321/// [`std::borrow::Cow::Owned`] — the substrate-primitive
1322/// [`CaixaDialeto::as_str`] accessor's return carries the `&'static str`
1323/// lifetime by construction (each `match` arm resolves to a `pub const
1324/// &'static str` literal), so the zero-alloc borrowed arm is the
1325/// type-correct projection with no runtime allocation on the
1326/// borrowed-input surface just as on the paired owned-input surface.
1327///
1328/// Closes the `{Self, &Self}` input-shape corner on the second
1329/// outside-M3 caixa-core peer of the substrate-wide
1330/// [`std::borrow::Cow<'static, str>`] forward-projection campaign,
1331/// opened one commit prior (8322511) on the paired owned-input impl.
1332/// Rust's standard library does not carry a blanket
1333/// `impl<T: AsRef<str>> From<&T> for std::borrow::Cow<'static, str>`
1334/// (nor an `impl<T: fmt::Display> From<&T> for
1335/// std::borrow::Cow<'static, str>`, nor a `Copy`-based
1336/// `impl<T: Copy, U: From<T>> From<&T> for U`), so every closed-set
1337/// fieldless typed enum peer on the substrate that carries the paired
1338/// owned-input [`Cow<'static, str>`] axis but not the borrowed-input
1339/// axis forces every borrowed-input [`Cow<'static, str>`]-parameterized
1340/// call site through a spurious [`Copy`] deref
1341/// (`std::borrow::Cow::from(*dialeto)`) or a
1342/// `std::borrow::Cow::Borrowed(dialeto.as_str())` open-code whose type
1343/// bounds have no compile-time link to the substrate primitive.
1344///
1345/// Matches the closure discipline afdf0f4 landed on the M3-mesh-shape
1346/// [`crate::aplicacao::PlacementStrategy`] axis one commit after eee504d,
1347/// 25690ef on [`crate::aplicacao::WitShape`] one commit after 8634dec,
1348/// d45c409 on the top-level [`crate::CaixaKind`] one commit after
1349/// 99c1735, 9b3e4b3 / ee577fd on the M2 OTP-shape
1350/// [`crate::supervisor::RestartStrategy`] /
1351/// [`crate::supervisor::RestartPolicy`] sibling peers one commit after
1352/// 7dd28b3 / 0612398, and 702cdf4 on the two-list dep-graph
1353/// [`crate::dep::DepList`] axis one commit after 6858bac. The remaining
1354/// outside-M3 caixa-core peer ([`crate::render::PathShapeViolation`])
1355/// and the outside-`caixa-core` peers (`InvariantKind`, `ArchVerdict`,
1356/// `Severity`, `FixSafety`, `Semantic`, `FerriteRuntime`) are the
1357/// remaining future targets on the axis.
1358///
1359/// Unlike the peer [`crate::CaixaKind`] pair (whose forward emit lands
1360/// on the lowercase Portuguese diagnostic vocabulary while the reverse
1361/// parse lands on the `PascalCase` wire vocabulary, forcing the
1362/// round-trip through an intermediate [`crate::CaixaKind::wire_name`]
1363/// hop), [`CaixaDialeto`] is an internal classification with no wire
1364/// surface — the [`CaixaDialeto::as_str`] emit and
1365/// [`CaixaDialeto::from_wire`] parse share the same `PascalCase`
1366/// vocabulary by construction (no wire/diagnostic axis split on this
1367/// enum), so the borrowed-input [`std::borrow::Cow<'static, str>`]
1368/// projection this impl exposes composes directly with the paired
1369/// trait-idiomatic reverse [`TryFrom<&str>`] axis on the projection's
1370/// [`std::borrow::Cow::as_ref`] borrow — no intermediate wire-vocab hop
1371/// required.
1372///
1373/// Pinned load-bearing by
1374/// [`tests::caixa_dialeto_from_borrowed_into_static_cow_str_routes_through_as_str_accessor`]
1375/// (byte-parity + zero-alloc [`std::borrow::Cow::Borrowed`]-arm pin
1376/// against [`CaixaDialeto::as_str`] across the four-arm
1377/// [`CaixaDialeto::ALL`] through the borrowed-input surface, plus a
1378/// blanket-derived [`Into<std::borrow::Cow<'static, str>>`] shape
1379/// witness that also lands on [`std::borrow::Cow::Borrowed`]) and
1380/// [`tests::caixa_dialeto_from_borrowed_into_static_cow_str_agrees_with_paired_axes_on_every_arm`]
1381/// (cross-axis partition pin against the paired owned-input
1382/// [`From<CaixaDialeto> for std::borrow::Cow<'static, str>`], the paired
1383/// borrowed-input owned-`&'static str`
1384/// [`From<&CaixaDialeto> for &'static str`], and the paired
1385/// borrowed-input owned-`String` [`From<&CaixaDialeto> for String`]
1386/// impls plus [`ToString::to_string`]-through-[`std::fmt::Display`], a
1387/// `.iter().map(std::borrow::Cow::from)` pipe witness over
1388/// [`CaixaDialeto::ALL`] — whose iterator yields `&CaixaDialeto` by
1389/// construction, so the borrowed-input axis is what routes the pipe
1390/// without a spurious [`Copy`] deref and every collected element
1391/// satisfies the zero-alloc [`std::borrow::Cow::Borrowed`]-arm
1392/// predicate — plus a direct round-trip witness through
1393/// [`TryFrom<&str>`] on the projection's [`std::borrow::Cow::as_ref`]
1394/// borrow that closes the two-way `&Self → Cow<'static, str> → Self`
1395/// round-trip on the borrowed-input axis without the wire-vocab
1396/// intermediate hop the peer [`crate::CaixaKind`] axis pair requires).
1397impl From<&CaixaDialeto> for std::borrow::Cow<'static, str> {
1398 fn from(dialeto: &CaixaDialeto) -> std::borrow::Cow<'static, str> {
1399 std::borrow::Cow::Borrowed(dialeto.as_str())
1400 }
1401}
1402
1403/// Trait-idiomatic *owned-input, [`Box<str>`] output* forward projection on
1404/// the outside-M3 caixa-core dialect-classification [`CaixaDialeto`]
1405/// closed-set fieldless typed enum. Routes byte-for-byte through the
1406/// substrate-primitive [`CaixaDialeto::as_str`] `pub const fn` accessor
1407/// via [`Box::<str>::from`] on the returned `&'static str`, so every
1408/// consumer that binds a `let key: Box<str> = dialeto.into();`-shaped
1409/// call site reaches the same four `"Pacote"` / `"Molde"` /
1410/// `"MoldePosicional"` / `"Desconhecido"` byte-strings the sibling
1411/// `{Self, &Self} × {&'static str, String, Cow<'static, str>}` forward-
1412/// projection corner already returns.
1413///
1414/// Rust's standard library carries `impl From<&str> for Box<str>` and
1415/// `impl From<String> for Box<str>` but no blanket
1416/// `impl<T: AsRef<str>> From<T> for Box<str>`, so this axis is a distinct
1417/// trait-idiomatic surface that a downstream `CaixaDialeto → Box<str>`
1418/// `.into()` reaches through this impl and no other — without a
1419/// `Box::from(dialeto.as_str())` open-code whose type bounds have no
1420/// compile-time link back to the substrate primitive.
1421///
1422/// Extends the caixa-core-internal tier of the substrate-wide trait-
1423/// idiomatic [`Box<str>`] forward-projection campaign onto the third
1424/// caixa-core-internal peer, after the render-side path-shape-diagnostic
1425/// [`crate::render::PathShapeViolation`] pair (0d87a72, both corners in
1426/// one axis) opened the tier and the outside-M3 caixa-core two-list
1427/// dep-graph [`crate::dep::DepList`] pair (4aada99, both corners in one
1428/// axis) extended it. Follows the M2 OTP-shape
1429/// [`crate::supervisor::RestartStrategy`] / [`crate::supervisor::RestartPolicy`]
1430/// pair (59ae5dc + cb1d068), the M3 mesh-shape
1431/// [`crate::aplicacao::PlacementStrategy`] / [`crate::aplicacao::WitShape`] /
1432/// [`crate::aplicacao::RateLimitUnit`] triple (6d73e84 → df7040c) that
1433/// closed the M3 mesh-shape tier, and the outside-`caixa-core` tier
1434/// (`InvariantKind` 10613a7 + 5901887, `ArchVerdict` 3e08f5a + c4319a8,
1435/// `Severity` 5116c95, `FixSafety` cf0174b, `Semantic` 0cd7dc3,
1436/// `FerriteRuntime` 14886a8) that closed one tier prior. Same discipline
1437/// as those peers: forward emit (this impl, the sibling `{&'static str,
1438/// String, Cow<'static, str>}` forward-projection corner,
1439/// [`std::fmt::Display`], [`AsRef<str>`], [`CaixaDialeto::as_str`]) and
1440/// reverse parse ([`CaixaDialeto::from_wire`], [`TryFrom<&str>`]) route
1441/// through the same four `PascalCase` byte-strings by construction, so
1442/// the round-trip composes directly without the wire-vocab intermediate
1443/// hop the peer [`crate::CaixaKind`] axis pair requires.
1444///
1445/// A future arm addition (the module doc's "third dialect" hazard
1446/// actualising as a fifth arm) reaches the paired [`Box<str>`] output
1447/// axis through one match-arm edit on the [`CaixaDialeto::as_str`]
1448/// `pub const fn` accessor, not a coordinated rewrite of every
1449/// downstream `Box::from(dialeto.as_str())` open-code.
1450///
1451/// Pinned load-bearing by
1452/// [`tests::caixa_dialeto_from_into_box_str_routes_through_as_str_accessor`]
1453/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1454/// [`CaixaDialeto::ALL`] emit-set on the owned-input surface, plus a
1455/// blanket-derived [`Into`] shape witness).
1456impl From<CaixaDialeto> for Box<str> {
1457 fn from(dialeto: CaixaDialeto) -> Box<str> {
1458 Box::<str>::from(dialeto.as_str())
1459 }
1460}
1461
1462/// Trait-idiomatic *borrowed-input, [`Box<str>`] output* forward projection
1463/// on the outside-M3 caixa-core dialect-classification [`CaixaDialeto`]
1464/// closed-set fieldless typed enum. Routes byte-for-byte through the
1465/// substrate-primitive [`CaixaDialeto::as_str`] `pub const fn` accessor
1466/// via [`Box::<str>::from`] on the returned `&'static str`, so every
1467/// consumer that binds a `let key: Box<str> = (&dialeto).into();`-shaped
1468/// call site or a `CaixaDialeto::ALL.iter().map(Box::<str>::from)`-shaped
1469/// pipe (whose iterator over `&'static [CaixaDialeto]` yields
1470/// `&CaixaDialeto` by construction) reaches the same four `"Pacote"` /
1471/// `"Molde"` / `"MoldePosicional"` / `"Desconhecido"` byte-strings the
1472/// sibling `{Self, &Self} × {&'static str, String, Cow<'static, str>}`
1473/// forward-projection corner and the paired owned-input
1474/// [`From<CaixaDialeto> for Box<str>`] already return.
1475///
1476/// Rust's standard library carries `impl From<&str> for Box<str>` and
1477/// `impl From<String> for Box<str>` but no blanket
1478/// `impl<T: AsRef<str>> From<&T> for Box<str>` (nor a `Copy`-based
1479/// `impl<T: Copy, U: From<T>> From<&T> for U`), so this borrowed-input
1480/// axis is a distinct trait-idiomatic surface that the pipe shape
1481/// [`CaixaDialeto::ALL`]`.iter().map(Box::<str>::from)` reaches through
1482/// this impl and no other — without it, the same pipe would force an
1483/// explicit `.copied()` restatement whose type bounds have no compile-
1484/// time link back to the substrate primitive, and a
1485/// `let key: Box<str> = (&dialeto).into();`-shaped call site would force
1486/// an explicit `Copy` deref (`Box::<str>::from(*dialeto)`) or a
1487/// `Box::<str>::from(dialeto.as_str())` open-code with the same defect.
1488///
1489/// Closes the `{Self, &Self}` input-shape corner on the third caixa-
1490/// core-internal closed-set fieldless typed enum peer of the substrate-
1491/// wide trait-idiomatic [`Box<str>`] forward-projection campaign,
1492/// matching the trajectory the paired render-side path-shape-diagnostic
1493/// [`crate::render::PathShapeViolation`] pair (0d87a72, both corners in
1494/// one axis) and the paired outside-M3 caixa-core two-list dep-graph
1495/// [`crate::dep::DepList`] pair (4aada99, both corners in one axis)
1496/// walked before it.
1497///
1498/// Pinned load-bearing by
1499/// [`tests::caixa_dialeto_from_borrowed_into_box_str_routes_through_as_str_accessor`]
1500/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1501/// [`CaixaDialeto::ALL`] emit-set on the borrowed-input surface, plus a
1502/// blanket-derived [`Into`] shape witness, plus a
1503/// `.iter().map(Box::<str>::from)` pipe witness over
1504/// [`CaixaDialeto::ALL`] — whose iterator yields `&CaixaDialeto` by
1505/// construction, so the borrowed-input [`Box<str>`] axis is what routes
1506/// the pipe through the substrate-primitive [`CaixaDialeto::as_str`]
1507/// accessor without a spurious [`Copy`] deref).
1508impl From<&CaixaDialeto> for Box<str> {
1509 fn from(dialeto: &CaixaDialeto) -> Box<str> {
1510 Box::<str>::from(dialeto.as_str())
1511 }
1512}
1513
1514/// Trait-idiomatic *owned-input, [`std::sync::Arc<str>`] output* forward
1515/// projection on the outside-M3 caixa-core dialect-classification
1516/// [`CaixaDialeto`] closed-set fieldless typed enum. Routes byte-for-byte
1517/// through the substrate-primitive [`CaixaDialeto::as_str`] `pub const fn`
1518/// accessor via [`std::sync::Arc::<str>::from`] on the returned
1519/// `&'static str`, so every consumer that binds a
1520/// `let key: std::sync::Arc<str> = dialeto.into();`-shaped call site
1521/// reaches the same four `"Pacote"` / `"Molde"` / `"MoldePosicional"` /
1522/// `"Desconhecido"` byte-strings the sibling
1523/// `{Self, &Self} × {&'static str, String, Cow<'static, str>, Box<str>}`
1524/// forward-projection corner already returns.
1525///
1526/// Rust's standard library carries `impl From<&str> for std::sync::Arc<str>`
1527/// and `impl From<String> for std::sync::Arc<str>` but no blanket
1528/// `impl<T: AsRef<str>> From<T> for std::sync::Arc<str>` (nor an
1529/// `impl<T: fmt::Display> From<T> for std::sync::Arc<str>`), so this axis is
1530/// a distinct trait-idiomatic surface that a downstream
1531/// `CaixaDialeto → std::sync::Arc<str>` `.into()` reaches through this impl
1532/// and no other — a paired `std::sync::Arc::<str>::from(dialeto.as_str())`
1533/// open-code has no compile-time link back to the substrate primitive, and
1534/// a two-step `std::sync::Arc::<str>::from(String::from(dialeto))`
1535/// composition through the owned-`String` axis allocates twice (once into
1536/// the intermediate `String`, once into the [`std::sync::Arc<str>`] on the
1537/// `From<String>` conversion) where the single-step trait impl allocates
1538/// once.
1539///
1540/// Extends the caixa-core-internal tier of the substrate-wide trait-
1541/// idiomatic [`std::sync::Arc<str>`] forward-projection campaign onto the
1542/// third caixa-core-internal peer, after the structurally most fundamental
1543/// [`crate::CaixaKind`] pair (c17be64, both corners in one axis) opened the
1544/// tier and the outside-M3 two-list dep-graph [`crate::dep::DepList`] pair
1545/// (d8a4652, both corners in one axis) extended it. Follows the M2
1546/// OTP-shape [`crate::supervisor::RestartStrategy`] /
1547/// [`crate::supervisor::RestartPolicy`] pair (bca2ec8 → ea91551), the M3
1548/// mesh-shape [`crate::aplicacao::PlacementStrategy`] /
1549/// [`crate::aplicacao::WitShape`] / [`crate::aplicacao::RateLimitUnit`]
1550/// triple (977d577 → dae722f) that closed the M3 mesh-shape tier, and the
1551/// outside-`caixa-core` tier (`InvariantKind` 4e923c1 + 03c043f,
1552/// `ArchVerdict` 1682f8b + 92ddfb2, `Severity` a7a9a6d + 4f041e1,
1553/// `FixSafety` fb73edb + 822138e, `Semantic` 65dbcff + f3a55c7,
1554/// `FerriteRuntime` 938d915 + 0afef4b) that closed one tier prior. The
1555/// shared-ownership + [`Sync`] + [`Send`] contract [`std::sync::Arc<str>`]
1556/// provides is what makes the per-arm canonical dialect-classification
1557/// label safely reachable off both input-shape axes without a `.clone()`-
1558/// per-task materialization, distinct from the sibling [`Box<str>`] axis's
1559/// owned-move-only contract.
1560///
1561/// A future arm addition (the module doc's "third dialect" hazard
1562/// actualising as a fifth arm) reaches the paired [`std::sync::Arc<str>`]
1563/// output axis through one match-arm edit on the [`CaixaDialeto::as_str`]
1564/// `pub const fn` accessor, not a coordinated rewrite of every downstream
1565/// `std::sync::Arc::<str>::from(dialeto.as_str())` open-code.
1566///
1567/// Pinned load-bearing by
1568/// [`tests::caixa_dialeto_from_into_arc_str_routes_through_as_str_accessor`]
1569/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1570/// [`CaixaDialeto::ALL`] emit-set on the owned-input surface, plus a
1571/// blanket-derived [`Into`] shape witness and cross-axis byte-parity pins
1572/// against the sibling owned-input
1573/// `{&'static str, String, Cow<'static, str>, Box<str>}` return-shape axes).
1574impl From<CaixaDialeto> for std::sync::Arc<str> {
1575 fn from(dialeto: CaixaDialeto) -> std::sync::Arc<str> {
1576 std::sync::Arc::<str>::from(dialeto.as_str())
1577 }
1578}
1579
1580/// Trait-idiomatic *borrowed-input, [`std::sync::Arc<str>`] output* forward
1581/// projection on the outside-M3 caixa-core dialect-classification
1582/// [`CaixaDialeto`] closed-set fieldless typed enum — the borrowed-input
1583/// companion to the paired owned-input
1584/// [`From<CaixaDialeto> for std::sync::Arc<str>`] impl one commit above
1585/// that extends the caixa-core-internal tier of the substrate-wide trait-
1586/// idiomatic [`std::sync::Arc<str>`] forward-projection campaign onto the
1587/// third caixa-core-internal peer. Routes byte-for-byte through the
1588/// substrate-primitive [`CaixaDialeto::as_str`] `pub const fn` accessor via
1589/// [`std::sync::Arc::<str>::from`] on the returned `&'static str`, so every
1590/// consumer that binds a `let key: std::sync::Arc<str> = (&dialeto).into();`
1591/// -shaped call site or a
1592/// `CaixaDialeto::ALL.iter().map(std::sync::Arc::<str>::from)`-shaped pipe
1593/// (whose iterator over `&'static [CaixaDialeto]` yields `&CaixaDialeto` by
1594/// construction) reaches the same four `"Pacote"` / `"Molde"` /
1595/// `"MoldePosicional"` / `"Desconhecido"` byte-strings the sibling
1596/// `{Self, &Self} × {&'static str, String, Cow<'static, str>, Box<str>}`
1597/// forward-projection corner and the paired owned-input
1598/// [`From<CaixaDialeto> for std::sync::Arc<str>`] already return.
1599///
1600/// Rust's standard library carries `impl From<&str> for std::sync::Arc<str>`
1601/// and `impl From<String> for std::sync::Arc<str>` but no blanket
1602/// `impl<T: AsRef<str>> From<&T> for std::sync::Arc<str>` (nor a `Copy`-
1603/// based `impl<T: Copy, U: From<T>> From<&T> for U`), so this borrowed-
1604/// input axis is a distinct trait-idiomatic surface that the pipe shape
1605/// [`CaixaDialeto::ALL`]`.iter().map(std::sync::Arc::<str>::from)` reaches
1606/// through this impl and no other — without it, the same pipe would force
1607/// a spurious [`Copy`] deref
1608/// (`std::sync::Arc::<str>::from((*dialeto).as_str())`) or a `.copied()`
1609/// restatement whose type bounds have no compile-time link back to the
1610/// substrate primitive.
1611///
1612/// Closes the `{Self, &Self}` input-shape corner on the third caixa-core-
1613/// internal closed-set fieldless typed enum peer of the substrate-wide
1614/// trait-idiomatic [`std::sync::Arc<str>`] forward-projection campaign,
1615/// matching the trajectory the paired structurally most fundamental
1616/// [`crate::CaixaKind`] pair (c17be64, both corners in one axis) and the
1617/// paired outside-M3 caixa-core two-list dep-graph [`crate::dep::DepList`]
1618/// pair (d8a4652, both corners in one axis) walked before it on the
1619/// caixa-core-internal tier of the same axis. Same
1620/// `{Self, &Self} × {&'static str, String, Cow<'static, str>, Box<str>,
1621/// std::sync::Arc<str>}` 2×5 forward-projection matrix the peer projection
1622/// surfaces already close on this same enum.
1623///
1624/// Pinned load-bearing by
1625/// [`tests::caixa_dialeto_from_borrowed_into_arc_str_routes_through_as_str_accessor`]
1626/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1627/// [`CaixaDialeto::ALL`] emit-set on the borrowed-input surface, plus a
1628/// blanket-derived [`Into`] shape witness, a cross-axis partition pin
1629/// against the paired owned-input
1630/// [`From<CaixaDialeto> for std::sync::Arc<str>`] and the sibling borrowed-
1631/// input `{&'static str, String, Cow<'static, str>, Box<str>}` return-shape
1632/// axes, and a `.iter().map(std::sync::Arc::<str>::from)` pipe witness over
1633/// [`CaixaDialeto::ALL`] that resolves through the borrowed-input axis
1634/// without a spurious [`Copy`] deref).
1635impl From<&CaixaDialeto> for std::sync::Arc<str> {
1636 fn from(dialeto: &CaixaDialeto) -> std::sync::Arc<str> {
1637 std::sync::Arc::<str>::from(dialeto.as_str())
1638 }
1639}
1640
1641/// Trait-idiomatic *owned-input, [`std::rc::Rc<str>`] output* forward
1642/// projection on the outside-M3 caixa-core dialect-classification
1643/// [`CaixaDialeto`] closed-set fieldless typed enum — the single-threaded
1644/// shared-ownership companion to the paired atomically-refcounted
1645/// [`From<CaixaDialeto> for std::sync::Arc<str>`] impl one commit above.
1646/// Routes byte-for-byte through the substrate-primitive
1647/// [`CaixaDialeto::as_str`] `pub const fn` accessor via
1648/// [`std::rc::Rc::<str>::from`] on the returned `&'static str`, so every
1649/// consumer that binds a `let key: std::rc::Rc<str> = dialeto.into();`-
1650/// shaped call site reaches the same four `"Pacote"` / `"Molde"` /
1651/// `"MoldePosicional"` / `"Desconhecido"` byte-strings the sibling
1652/// `{Self, &Self} × {&'static str, String, Cow<'static, str>, Box<str>,
1653/// std::sync::Arc<str>}` forward-projection corner already returns.
1654///
1655/// Rust's standard library carries `impl From<&str> for std::rc::Rc<str>`
1656/// and `impl From<String> for std::rc::Rc<str>` but no blanket
1657/// `impl<T: AsRef<str>> From<T> for std::rc::Rc<str>` (nor an
1658/// `impl<T: fmt::Display> From<T> for std::rc::Rc<str>`), and — critically
1659/// — the [`std::sync::Arc<str>`] and [`std::rc::Rc<str>`] layouts share
1660/// the same on-disk shape but the trait tables are disjoint (no blanket
1661/// `impl<T> From<T> for std::rc::Rc<str> where std::sync::Arc<str>: From<T>`
1662/// exists in `core`), so a closed-set enum that carries the paired
1663/// [`std::sync::Arc<str>`] axis but not the paired [`std::rc::Rc<str>`]
1664/// axis forces every single-threaded [`std::rc::Rc<str>`]-typed call site
1665/// through an [`std::rc::Rc::<str>::from`]`(dialeto.as_str())` open-code
1666/// (no compile-time link back to the substrate primitive) or a
1667/// [`std::rc::Rc::<str>::from`]`(String::from(dialeto))` two-step
1668/// composition through the owned-`String` axis that allocates twice
1669/// (once into the intermediate [`String`], once into the
1670/// [`std::rc::Rc<str>`] on the `From<String>` conversion) where the
1671/// single-step trait impl allocates once. The single-threaded shared-
1672/// ownership contract [`std::rc::Rc<str>`] provides — the non-atomic
1673/// strong-and-weak refcount header, cheaper `Clone` than the paired
1674/// atomically-refcounted [`std::sync::Arc<str>`] axis by a measurable
1675/// margin on hot single-threaded call sites — is the distinct value the
1676/// sibling [`std::sync::Arc<str>`] axis's [`Send`] and [`Sync`] return-
1677/// shape cannot provide without paying the atomic-increment cost on
1678/// every clone: a single-threaded `feira dialeto` census pipeline whose
1679/// per-file classify path composes a [`std::rc::Rc<str>`] label into a
1680/// per-arm counter reaches through this axis and not the atomic sibling;
1681/// a single-threaded `HashMap::<std::rc::Rc<str>, _>::from_iter` per-
1682/// dialect lookup where the map's key type is [`std::rc::Rc<str>`] so
1683/// the same dialect-label pointer can key both the map and the payload
1684/// without a second heap allocation reaches through this axis.
1685///
1686/// Extends the caixa-core-internal tier of the substrate-wide trait-
1687/// idiomatic [`std::rc::Rc<str>`] forward-projection campaign onto the
1688/// second caixa-core-internal peer, after the structurally most
1689/// fundamental [`crate::CaixaKind`] pair (4fdfa37, both corners in one
1690/// axis) opened the campaign on the closed-set fieldless typed-enum
1691/// family. Same `{Self, &Self} × {&'static str, String, Cow<'static, str>,
1692/// Box<str>, std::sync::Arc<str>, std::rc::Rc<str>}` 2×6 forward-
1693/// projection matrix the sibling projection surfaces already carry —
1694/// this impl extends the sixth column onto the dialect-classification
1695/// enum's owned-input row.
1696///
1697/// A future arm addition (the module doc's "third dialect" hazard
1698/// actualising as a fifth arm) reaches the paired [`std::rc::Rc<str>`]
1699/// output axis through one match-arm edit on the [`CaixaDialeto::as_str`]
1700/// `pub const fn` accessor, not a coordinated rewrite of every downstream
1701/// `std::rc::Rc::<str>::from(dialeto.as_str())` open-code.
1702///
1703/// Pinned load-bearing by
1704/// [`tests::caixa_dialeto_from_into_rc_str_routes_through_as_str_accessor`]
1705/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1706/// [`CaixaDialeto::ALL`] emit-set on the owned-input surface, plus a
1707/// blanket-derived [`Into`] shape witness and cross-axis byte-parity pins
1708/// against the sibling owned-input `{&'static str, String,
1709/// Cow<'static, str>, Box<str>, std::sync::Arc<str>}` return-shape axes).
1710impl From<CaixaDialeto> for std::rc::Rc<str> {
1711 fn from(dialeto: CaixaDialeto) -> std::rc::Rc<str> {
1712 std::rc::Rc::<str>::from(dialeto.as_str())
1713 }
1714}
1715
1716/// Trait-idiomatic *borrowed-input, [`std::rc::Rc<str>`] output* forward
1717/// projection on the outside-M3 caixa-core dialect-classification
1718/// [`CaixaDialeto`] closed-set fieldless typed enum — the borrowed-input
1719/// companion to the paired owned-input
1720/// [`From<CaixaDialeto> for std::rc::Rc<str>`] impl immediately above.
1721/// Routes byte-for-byte through the substrate-primitive
1722/// [`CaixaDialeto::as_str`] `pub const fn` accessor via
1723/// [`std::rc::Rc::<str>::from`] on the returned `&'static str`, so a
1724/// `CaixaDialeto::ALL.iter().map(std::rc::Rc::<str>::from)`-shaped pipe
1725/// (whose iterator over `&'static [CaixaDialeto]` yields `&CaixaDialeto`
1726/// by construction) reaches the same four `"Pacote"` / `"Molde"` /
1727/// `"MoldePosicional"` / `"Desconhecido"` byte-strings the paired owned-
1728/// input axis and the sibling `{Self, &Self} × {&'static str, String,
1729/// Cow<'static, str>, Box<str>, std::sync::Arc<str>}` forward-projection
1730/// corner already return.
1731///
1732/// Rust's standard library carries no blanket
1733/// `impl<T: AsRef<str>> From<&T> for std::rc::Rc<str>` (nor a `Copy`-
1734/// based `impl<T: Copy, U: From<T>> From<&T> for U`), so this borrowed-
1735/// input axis is a distinct trait-idiomatic surface that the pipe shape
1736/// [`CaixaDialeto::ALL`]`.iter().map(std::rc::Rc::<str>::from)` reaches
1737/// through this impl and no other — without it, the same pipe would
1738/// force a spurious [`Copy`] deref
1739/// (`std::rc::Rc::<str>::from((*dialeto).as_str())`) or a `.copied()`
1740/// restatement whose type bounds have no compile-time link back to the
1741/// substrate primitive.
1742///
1743/// Closes the `{Self, &Self}` input-shape corner on the second caixa-
1744/// core-internal closed-set fieldless typed enum peer of the substrate-
1745/// wide trait-idiomatic [`std::rc::Rc<str>`] forward-projection campaign,
1746/// matching the trajectory the paired structurally most fundamental
1747/// [`crate::CaixaKind`] pair (4fdfa37, both corners in one axis) walked
1748/// before it on the caixa-core-internal tier of the same axis. Same
1749/// `{Self, &Self} × {&'static str, String, Cow<'static, str>, Box<str>,
1750/// std::sync::Arc<str>, std::rc::Rc<str>}` 2×6 forward-projection matrix
1751/// the peer projection surfaces already close on this same enum.
1752///
1753/// Pinned load-bearing by
1754/// [`tests::caixa_dialeto_from_borrowed_into_rc_str_routes_through_as_str_accessor`]
1755/// (byte-parity pin against [`CaixaDialeto::as_str`] across the four-arm
1756/// [`CaixaDialeto::ALL`] emit-set on the borrowed-input surface, plus a
1757/// blanket-derived [`Into`] shape witness, a cross-axis partition pin
1758/// against the paired owned-input
1759/// [`From<CaixaDialeto> for std::rc::Rc<str>`] and the sibling borrowed-
1760/// input `{&'static str, String, Cow<'static, str>, Box<str>,
1761/// std::sync::Arc<str>}` return-shape axes, and a
1762/// `.iter().map(std::rc::Rc::<str>::from)` pipe witness over
1763/// [`CaixaDialeto::ALL`] that resolves through the borrowed-input axis
1764/// without a spurious [`Copy`] deref).
1765impl From<&CaixaDialeto> for std::rc::Rc<str> {
1766 fn from(dialeto: &CaixaDialeto) -> std::rc::Rc<str> {
1767 std::rc::Rc::<str>::from(dialeto.as_str())
1768 }
1769}
1770
1771/// Substrate-canonical [`AsRef<[u8]>`] byte-view projection on the
1772/// caixa-core-internal dialect-classification [`CaixaDialeto`] closed-set
1773/// fieldless typed enum — routes byte-for-byte through the substrate-
1774/// primitive [`CaixaDialeto::as_str`] `pub const fn` accessor via
1775/// [`str::as_bytes`] on the returned `&'static str`, so any future
1776/// consumer that binds a [`CaixaDialeto`] through a standard-library
1777/// `<T: AsRef<[u8]>>` trait bound reaches the same lifted
1778/// [`CAIXA_DIALETO_WIRE_PACOTE`] / [`CAIXA_DIALETO_WIRE_MOLDE`] /
1779/// [`CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL`] /
1780/// [`CAIXA_DIALETO_WIRE_DESCONHECIDO`] `pub const &str` roster the paired
1781/// sibling [`AsRef<str>`] / [`std::fmt::Display`] /
1782/// [`CaixaDialeto::as_str`] / `{Self, &Self} × {&'static str, String,
1783/// Cow<'static, str>, Box<str>, std::sync::Arc<str>, std::rc::Rc<str>}`
1784/// str-view + reverse-projection surfaces already return — through the
1785/// byte-view axis, which the str-view axes cannot express.
1786///
1787/// Unlike the sibling top-level [`crate::CaixaKind`] enum — which
1788/// carries a two-axis split ([`crate::CaixaKind::as_str`] returning
1789/// lowercase-Portuguese diagnostic form vs
1790/// [`crate::CaixaKind::wire_name`] returning `PascalCase` tatara-lisp
1791/// author-surface bytes) — [`CaixaDialeto`] is an internal
1792/// classification with no wire-surface split (see the
1793/// [`CaixaDialeto::as_str`] docstring: "the `PascalCase` variant name
1794/// is the census-facing form every consumer reads, so `as_str`
1795/// suffices without a paired `wire_name` axis"). The byte-view axis
1796/// therefore lands on the same `PascalCase` census-facing byte-string
1797/// every str-view and reverse-projection axis on this enum already
1798/// returns, and no wire-axis cross-witness applies.
1799///
1800/// The primary compounding target is the same [`crate`]-adjacent
1801/// [`caixa-lacre`](../../caixa-lacre/) BLAKE3 content-address closure
1802/// the peer [`crate::CaixaKind`] `AsRef<[u8]>` impl (69d8d86) opens
1803/// onto: [`blake3::hash`] and [`blake3::Hasher::update`] both bind
1804/// their input through `impl AsRef<[u8]>`, so any future per-caixa
1805/// content-address tag that folds a `:dialect` classification-byte
1806/// into the [`crate::Lacre`] closure (a hypothetical
1807/// `hasher.update(dialeto);`-shape composition on the per-caixa
1808/// BLAKE3 closure builder that keys off the caixa source's dialect
1809/// classification) reaches the substrate-primitive
1810/// [`CaixaDialeto::as_str`] accessor through this impl and no other —
1811/// without it, every such call site opens the two-hop composition
1812/// `dialeto.as_str().as_bytes()` whose byte-tail has no compile-time
1813/// link back to the byte-projection axis. Peer consumer paths on the
1814/// byte-view axis: any future [`std::io::Write::write_all`]-bound
1815/// structured-log dialect-column emitter (whose input binds through
1816/// `impl AsRef<[u8]>`), any future byte-keyed
1817/// [`std::collections::HashMap`] `<K: AsRef<[u8]>, V>` per-dialect
1818/// tally lookup whose entry-key trait bound rules out the sibling
1819/// [`AsRef<str>`] str-view projection, and any future
1820/// `ring::digest::Context::update` / `sha2::Sha256::update` /
1821/// `blake3::Hasher::update` byte-input surface on any future per-
1822/// dialect content-address digest.
1823///
1824/// Rust's standard library carries `impl AsRef<[u8]> for str` and
1825/// `impl AsRef<[u8]> for String`, so the two-hop composition
1826/// `dialeto.as_str().as_bytes()` (or, equivalently,
1827/// `AsRef::<str>::as_ref(&dialeto).as_bytes()`) is reachable through
1828/// the pre-existing str-view axis alone. But that two-hop shape has
1829/// no compile-time link back to the byte-projection axis, forces
1830/// every downstream `<T: AsRef<[u8]>>`-bound consumer to open-code
1831/// the two-hop composition at every call site rather than pass a
1832/// [`CaixaDialeto`] through the trait bound directly, and admits a
1833/// silent split whenever a future call site takes the sibling
1834/// [`std::fmt::Display`] or [`From<Self> for String`] axis (whose
1835/// `.as_bytes()` byte-tails byte-equal `as_str`'s by construction
1836/// but carry no compile-time byte-view surface, since `Display`
1837/// returns a formatter and `String` allocates). The lifted single-
1838/// hop impl closes the byte-view axis so every future
1839/// `<T: AsRef<[u8]>>`-bound consumer reaches the substrate primitive
1840/// through one trait dispatch, and every future arm addition (the
1841/// module doc's "third dialect" hazard actualising as a fifth arm)
1842/// grows the byte-view axis through one edit on the substrate-
1843/// primitive `as_str` accessor, not a coordinated rewrite across
1844/// every future `<T: AsRef<[u8]>>`-bound consumer's arm-set.
1845///
1846/// Extends the trait-idiomatic *byte-view* axis onto the second
1847/// closed-set fieldless typed-enum peer on the substrate — the
1848/// caixa-core-internal dialect-classification enum — matching the
1849/// trajectory the sibling [`crate::CaixaKind`] first-mover
1850/// [`AsRef<[u8]>`] impl (69d8d86) walked before it on the caixa-core
1851/// tier of the byte-view axis, and matching the discipline the
1852/// paired sibling closed-set fieldless typed enums already carry on
1853/// the peer str-view ([`AsRef<str>`]), parse
1854/// ([`std::str::FromStr`]), and reverse-projection
1855/// (`{Self, &Self} × {&'static str, String, Cow<'static, str>,
1856/// Box<str>, std::sync::Arc<str>, std::rc::Rc<str>}`) axes on this
1857/// same enum.
1858///
1859/// Pinned load-bearing by
1860/// [`tests::caixa_dialeto_as_ref_bytes_routes_through_as_str_accessor`]
1861/// (fail-before-pass-after byte-parity pin against
1862/// [`CaixaDialeto::as_str`] `.as_bytes()` across the four-arm
1863/// [`CaixaDialeto::ALL`] emit-set, cross-axis witness against the
1864/// paired str-view [`AsRef<str>`] / [`std::fmt::Display`] /
1865/// [`CaixaDialeto::as_str`] axes' `.as_bytes()` byte-tails, cross-
1866/// axis witness against the paired reverse-projection
1867/// `{&'static str, String, Cow<'static, str>, Box<str>,
1868/// std::sync::Arc<str>, std::rc::Rc<str>}` return-shape axes'
1869/// `.as_bytes()` byte-tails, a `<T: AsRef<[u8]>>`-bound-consumer
1870/// witness that a generic byte-input function accepts a
1871/// [`CaixaDialeto`] directly through the trait bound on both owned
1872/// and borrowed input shapes, and a `blake3::Hasher::update`-shape
1873/// byte-input surface witness routed through the
1874/// `<T: AsRef<[u8]>>`-bound consumer axis to reach the caixa-lacre
1875/// compounding target on both owned and borrowed input shapes). Any
1876/// future silent detour that routes the byte-view impl off the
1877/// substrate-primitive [`CaixaDialeto::as_str`] accessor (a per-arm
1878/// inline `b"Pacote".as_slice()`-shaped re-inlining that opens a
1879/// compile-time link to the un-lifted arm-literal, a swap onto the
1880/// sibling [`CaixaDialeto::palavra_canonica`] /
1881/// [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`]
1882/// accessors that carry distinct byte-shapes per axis) trips at
1883/// caixa-core test time rather than at a downstream byte-consumer's
1884/// silent split.
1885impl AsRef<[u8]> for CaixaDialeto {
1886 fn as_ref(&self) -> &[u8] {
1887 self.as_str().as_bytes()
1888 }
1889}
1890
1891/// A source that is not a `(defcaixa …)` / `(defmolde …)` form at all.
1892#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
1893pub enum DialetoError {
1894 #[error("source has no top-level form")]
1895 Vazio,
1896 #[error("top-level form is not a list — a manifest is `(defcaixa …)`")]
1897 NaoEhLista,
1898 #[error(
1899 "top-level form is headed by `{encontrado}`, not `defcaixa` or `defmolde` \
1900 (a manifest's first form must be the declaration itself)"
1901 )]
1902 CabecaErrada { encontrado: String },
1903 #[error("manifest does not parse as tatara-lisp: {0}")]
1904 Leitura(String),
1905}
1906
1907impl DialetoError {
1908 /// Construct a [`DialetoError::CabecaErrada`] naming the offending
1909 /// head symbol found at the top-level form.
1910 ///
1911 /// Substrate primitive every [`classify_form`] wrong-head fallthrough
1912 /// wire-up site now routes through, folding the pre-lift uniform
1913 /// three-line `Self::CabecaErrada { encontrado: <head>.to_string() }`
1914 /// one-field struct-literal onto one substrate primitive matching the
1915 /// peer `LimitsError::unknown_byte_unit(unit: &str)` /
1916 /// `LimitsError::unknown_duration_unit(unit: &str)`
1917 /// (`limits_codec_unit_only_ctors!` — 29fac09) single-slot
1918 /// discipline on the sibling one-field `{ <field>: String }` envelope
1919 /// axis, and matching the peer `ManifestError::code_path_empty` /
1920 /// `BehaviorError::empty_path` / `UpgradeError::duplicate_from` /
1921 /// `AplicacaoError::placement_cluster_duplicate` (94dabc8 / 0e33b37 /
1922 /// 7e52aec / 92b1c92) single-slot inherent-ctor discipline every
1923 /// sibling `{ <field>: <T> }` error-envelope variant on caixa-core's
1924 /// error surface now carries.
1925 ///
1926 /// The one open-coded wire-up site — `classify_form`'s wrong-head
1927 /// fallthrough arm on the `head: &str` binding read from the
1928 /// top-level form via [`tatara_lisp::Sexp::as_symbol`] — opened the
1929 /// identical three-line
1930 /// `Self::CabecaErrada { encontrado: <head>.to_string() }` block
1931 /// against the codec-scoped `<head>: &str` binding. Now routes
1932 /// through `DialetoError::cabeca_errada(head)`, byte-equal to the
1933 /// pre-lift struct-literal on the same `&str` fixture, so any future
1934 /// widening of the diagnostic shape (e.g. carrying the source-file
1935 /// path alongside the head symbol, carrying the head symbol's
1936 /// position offset for an authoring-surface caret pointer) lands at
1937 /// exactly one dispatch on the substrate primitive rather than re-
1938 /// inlining the struct-literal at every wrong-head fallthrough
1939 /// consumer.
1940 #[must_use]
1941 pub fn cabeca_errada(encontrado: &str) -> Self {
1942 Self::CabecaErrada {
1943 encontrado: encontrado.to_string(),
1944 }
1945 }
1946
1947 /// Construct a [`DialetoError::Leitura`] carrying the offending
1948 /// tatara-lisp reader-error message `reason` verbatim in the
1949 /// variant's tuple-newtype payload.
1950 ///
1951 /// Substrate primitive every [`classify`] tatara-lisp-reader
1952 /// map-err wire-up site now routes through, folding the pre-lift
1953 /// uniform `Self::Leitura(<into-String-expr>)` tuple-newtype
1954 /// construction onto one substrate primitive matching the peer
1955 /// `LimitsError::empty_byte_size` / `LimitsError::empty_duration`
1956 /// (7a4b003 / 319216c) `(String)` single-slot tuple-newtype
1957 /// discipline on the sibling
1958 /// [`crate::limits::LimitsError`] envelope's empty-shape axis of
1959 /// the paired codec-magnitude family. Peer to the sibling
1960 /// [`DialetoError::cabeca_errada`] ctor on the same envelope's
1961 /// wrong-head axis but on the tatara-lisp-reader axis rather than
1962 /// the classifier-fallthrough axis. Closes the last un-lifted
1963 /// variant on [`DialetoError`] — every one of the sole wire-up
1964 /// sites (the [`classify`] tatara-lisp-reader `.map_err(|e|
1965 /// Self::Leitura(e.to_string()))` arm) opened the identical
1966 /// `DialetoError::Leitura(<into-String-expr>)` block against the
1967 /// codec-scoped `String` (`e.to_string()`) binding, so the fold
1968 /// routes the site through one dispatch on a uniform
1969 /// `impl Into<String>` param, byte-equal to the pre-lift
1970 /// tuple-newtype construction on the same argument.
1971 ///
1972 /// The `impl Into<String>` bound covers both wire-up shapes on
1973 /// [`classify`] — a `String` binding (`e.to_string()` on the
1974 /// [`tatara_lisp::Error`]-carrying `e` binding) and a `&str`
1975 /// binding (a future admission-webhook consumer probing a
1976 /// caller-scoped `&'static str` fixture, a future
1977 /// `feira lint --tatara-reader-round-trip` verb sweeping every
1978 /// `tatara_lisp::read` return through the same shape gate) —
1979 /// without forcing the caller to spell the conversion at the
1980 /// wire-up site. Same shape the peer
1981 /// [`crate::limits::LimitsError::empty_byte_size`] /
1982 /// [`crate::limits::LimitsError::empty_duration`] /
1983 /// [`crate::limits::LimitsError::bad_millicores`] /
1984 /// [`crate::limits::LimitsError::bad_byte_magnitude`] /
1985 /// [`crate::limits::LimitsError::bad_duration_magnitude`] folds
1986 /// carry on the peer bad-magnitude and empty-shape axes of the
1987 /// same paired `(String)` tuple-newtype codec-magnitude family.
1988 /// `#[must_use]` fires a compile warning at any wire-up that
1989 /// mistakenly discards the constructed error.
1990 ///
1991 /// Every future consumer that wants to construct this variant
1992 /// outside [`classify`] (a deferred `feira lint --tatara-reader-
1993 /// round-trip` per-caixa admission verb probing each authored
1994 /// manifest against the tatara-lisp-reader shape gate, an M4
1995 /// typed `mesh.pleme.io/v1alpha1/Servico` CR materializer's
1996 /// per-manifest admission validator re-checking one edited
1997 /// `caixa.lisp` against the reader floor, a per-`caixa.lisp`
1998 /// value-shape pre-emitter probing each declared manifest ahead
1999 /// of the operator's admit-cycle) now reaches the variant
2000 /// through one call rather than re-inlining the tuple-newtype
2001 /// block in lockstep with the pre-existing wire-up.
2002 #[must_use]
2003 pub fn leitura(reason: impl Into<String>) -> Self {
2004 Self::Leitura(reason.into())
2005 }
2006}
2007
2008/// Classify a manifest source without committing to either schema.
2009///
2010/// Deliberately reads only the head symbol and the set of top-level keywords —
2011/// enough to route, never enough to half-parse. A classifier that started
2012/// validating would grow into a third parser, which is the shape of the problem
2013/// it exists to name.
2014///
2015/// # Errors
2016/// [`DialetoError`] when the source is not a manifest declaration at all.
2017pub fn classify(src: &str) -> Result<CaixaDialeto, DialetoError> {
2018 let forms = tatara_lisp::read(src).map_err(|e| DialetoError::leitura(e.to_string()))?;
2019 let first = forms.first().ok_or(DialetoError::Vazio)?;
2020 classify_form(first)
2021}
2022
2023/// [`classify`] over an already-read form.
2024///
2025/// # Errors
2026/// [`DialetoError`] when the form is not a manifest declaration.
2027pub fn classify_form(form: &Sexp) -> Result<CaixaDialeto, DialetoError> {
2028 let list = form.as_list().ok_or(DialetoError::NaoEhLista)?;
2029 let head = list
2030 .first()
2031 .and_then(Sexp::as_symbol)
2032 .ok_or(DialetoError::NaoEhLista)?;
2033
2034 match head {
2035 // `defmolde` is unambiguous by construction — it exists precisely so a
2036 // consumer never has to infer which declaration it holds. Both arities
2037 // are the same declaration; the positional one keeps its own variant
2038 // only so a census can report the split.
2039 "defmolde" => {
2040 return Ok(if starts_with_positional_name(&list[1..]) {
2041 CaixaDialeto::MoldePosicional
2042 } else {
2043 CaixaDialeto::Molde
2044 });
2045 }
2046 "defcaixa" => {}
2047 other => {
2048 return Err(DialetoError::cabeca_errada(other));
2049 }
2050 }
2051
2052 let args = &list[1..];
2053
2054 // `(defcaixa <symbol> :kind … :ecosystem …)`. Only the Molde dialect has a
2055 // positional arity; `Caixa` is keyword-only, so a leading bare symbol
2056 // settles it without looking further.
2057 if starts_with_positional_name(args) {
2058 return Ok(CaixaDialeto::MoldePosicional);
2059 }
2060
2061 let keys = top_level_keywords(args);
2062 let has = |k: &str| keys.iter().any(|s| s == k);
2063
2064 // Order matters, and it is not arbitrary: `:nome` and `:name` are the two
2065 // required head slots and no file in the measured corpus carries both.
2066 // Checking them FIRST means the decision rests on the one slot each schema
2067 // makes mandatory, rather than on optional evidence like `:ecosystem`.
2068 if has("nome") {
2069 return Ok(CaixaDialeto::Pacote);
2070 }
2071 if has("name") || has("ecosystem") || has("package") {
2072 return Ok(CaixaDialeto::Molde);
2073 }
2074 Ok(CaixaDialeto::Desconhecido)
2075}
2076
2077/// True when the first argument is a bare symbol rather than a keyword — the
2078/// positional-name arity.
2079fn starts_with_positional_name(args: &[Sexp]) -> bool {
2080 matches!(args.first(), Some(Sexp::Atom(Atom::Symbol(_))))
2081}
2082
2083/// The top-level keyword names (without the leading `:`) of a kwarg list.
2084///
2085/// Steps in pairs so a keyword appearing as a VALUE — `:kind :Biblioteca`, or a
2086/// nested `(:nome "dep" :versao "^0.1")` inside `:deps` — is never counted as a
2087/// top-level slot. A naive scan for `:nome` anywhere in the source classifies
2088/// every Molde manifest with a `:deps` list as a Pacote.
2089fn top_level_keywords(args: &[Sexp]) -> Vec<String> {
2090 let mut out = Vec::new();
2091 let mut i = 0;
2092 while i < args.len() {
2093 if let Sexp::Atom(Atom::Keyword(k)) = &args[i] {
2094 out.push(k.clone());
2095 i += 2;
2096 } else {
2097 i += 1;
2098 }
2099 }
2100 out
2101}
2102
2103#[cfg(test)]
2104mod tests {
2105 use super::*;
2106
2107 const PACOTE: &str = r#"
2108 (defcaixa
2109 :nome "checkout"
2110 :versao "0.1.0"
2111 :kind Servico
2112 :deps ((:nome "caixa-teia" :versao "^0.1")))
2113 "#;
2114
2115 const MOLDE: &str = r#"
2116 (defcaixa
2117 :name "base64"
2118 :kind :Biblioteca
2119 :ecosystem :rust-single-crate
2120 :package {:name "base64" :version "0.22.1"}
2121 :workflows [:auto-release])
2122 "#;
2123
2124 const MOLDE_POSICIONAL: &str = r#"
2125 (defcaixa todoku-go
2126 :kind :Biblioteca
2127 :ecosystem :go
2128 :package {:name "todoku-go" :version "0.3.0"})
2129 "#;
2130
2131 #[test]
2132 fn the_package_dialect_is_recognised() {
2133 assert_eq!(classify(PACOTE), Ok(CaixaDialeto::Pacote));
2134 }
2135
2136 #[test]
2137 fn the_repo_surface_dialect_is_recognised() {
2138 assert_eq!(classify(MOLDE), Ok(CaixaDialeto::Molde));
2139 }
2140
2141 #[test]
2142 fn the_positional_arity_is_recognised() {
2143 assert_eq!(
2144 classify(MOLDE_POSICIONAL),
2145 Ok(CaixaDialeto::MoldePosicional)
2146 );
2147 }
2148
2149 #[test]
2150 fn defmolde_classifies_without_inference() {
2151 // The whole point of the new keyword: no schema sniffing required.
2152 let src = r#"(defmolde :name "x" :kind :Biblioteca :ecosystem :go)"#;
2153 assert_eq!(classify(src), Ok(CaixaDialeto::Molde));
2154 let pos = r"(defmolde todoku-go :kind :Biblioteca :ecosystem :go)";
2155 assert_eq!(classify(pos), Ok(CaixaDialeto::MoldePosicional));
2156 }
2157
2158 #[test]
2159 fn a_nested_nome_does_not_make_a_repo_surface_look_like_a_package() {
2160 // The exact failure a substring scan produces: `:deps ((:nome …))`
2161 // contains `:nome`, but not as a top-level slot.
2162 let src = r#"
2163 (defcaixa
2164 :name "x"
2165 :ecosystem :rust-single-crate
2166 :deps ((:nome "inner" :versao "^0.1")))
2167 "#;
2168 assert_eq!(classify(src), Ok(CaixaDialeto::Molde));
2169 }
2170
2171 #[test]
2172 fn a_keyword_in_value_position_is_not_a_slot() {
2173 // `:kind :Biblioteca` — the value is itself a keyword. Stepping one at
2174 // a time would read `:Biblioteca` as a top-level slot.
2175 let src = r#"(defcaixa :kind :Biblioteca :name "x")"#;
2176 assert_eq!(classify(src), Ok(CaixaDialeto::Molde));
2177 }
2178
2179 #[test]
2180 fn an_unrecognised_defcaixa_is_reported_not_guessed() {
2181 let src = r#"(defcaixa :licenca "MIT")"#;
2182 assert_eq!(classify(src), Ok(CaixaDialeto::Desconhecido));
2183 }
2184
2185 #[test]
2186 fn a_form_that_is_not_a_manifest_is_an_error_not_a_dialect() {
2187 assert_eq!(
2188 classify("(defflake :nome \"x\")"),
2189 Err(DialetoError::cabeca_errada("defflake"))
2190 );
2191 assert_eq!(classify(""), Err(DialetoError::Vazio));
2192 }
2193
2194 #[test]
2195 fn every_dialect_names_its_consumer_and_its_canonical_keyword() {
2196 // Guards the routing table itself: a new variant added without an arm
2197 // here is a compile error in the match, and a variant that claims
2198 // `defcaixa` while being read by pleme-doc-gen would re-open the
2199 // collision this module closes. Sweeps [`CaixaDialeto::ALL`] rather
2200 // than the pre-lift open-coded four-arm literal list — a future arm
2201 // addition extends the slice as one edit and this pin picks it up
2202 // by construction.
2203 for &d in CaixaDialeto::ALL {
2204 assert!(!d.descricao().is_empty(), "{d}");
2205 assert!(!d.consumidor().is_empty(), "{d}");
2206 }
2207 assert_eq!(CaixaDialeto::Pacote.palavra_canonica(), "defcaixa");
2208 assert_eq!(CaixaDialeto::Molde.palavra_canonica(), "defmolde");
2209 assert_ne!(
2210 CaixaDialeto::Pacote.palavra_canonica(),
2211 CaixaDialeto::Molde.palavra_canonica(),
2212 "the two dialects must not share a canonical keyword — that IS the defect"
2213 );
2214 }
2215
2216 #[test]
2217 fn caixa_dialeto_all_enumerates_every_variant_exactly_once() {
2218 // Three-legged exhaustiveness pin, peer of the sibling
2219 // `caixa_kind_all_enumerates_every_variant_exactly_once`
2220 // (caixa-core/src/kind.rs) /
2221 // `restart_strategy_all_enumerates_every_variant_exactly_once`
2222 // (caixa-core/src/supervisor.rs) shape.
2223 //
2224 // 1. arm-count invariant: `ALL.len()` matches the declared arm
2225 // count (four — a fifth arm added without extending `ALL`
2226 // fails this pin at caixa-core test time);
2227 // 2. pairwise-distinctness invariant: every variant appears at
2228 // most once in the slice (a duplicate arm would silently
2229 // double-count in the census consumer, so the pin rejects
2230 // duplicates outright);
2231 // 3. coverage invariant: every literal `CaixaDialeto::X` is in
2232 // the slice (the compiler-checked exhaustiveness on the peer
2233 // per-arm `match self` in the accessors keeps the enum arm
2234 // set and the `ALL` slice mutually aligned).
2235 assert_eq!(
2236 CaixaDialeto::ALL.len(),
2237 4,
2238 "ALL must list every arm exactly once; a fifth arm added \
2239 without extending ALL fails this pin — extend ALL alongside \
2240 the new variant"
2241 );
2242
2243 let mut seen: Vec<CaixaDialeto> = Vec::new();
2244 for &d in CaixaDialeto::ALL {
2245 assert!(
2246 !seen.contains(&d),
2247 "ALL contains a duplicate arm: {d}. Every variant appears \
2248 exactly once — a duplicate would double-count in every \
2249 iteration consumer"
2250 );
2251 seen.push(d);
2252 }
2253
2254 // Coverage: exhaustively assert every literal variant is somewhere
2255 // in the slice. Written as an exhaustive `match` so a future arm
2256 // addition fails to compile here (missing match arm) until the
2257 // corresponding `assert` is added — the compiler enforces the pin's
2258 // completeness rather than a hand-maintained variant list.
2259 for variant in [
2260 CaixaDialeto::Pacote,
2261 CaixaDialeto::Molde,
2262 CaixaDialeto::MoldePosicional,
2263 CaixaDialeto::Desconhecido,
2264 ] {
2265 let coverage_probe = match variant {
2266 CaixaDialeto::Pacote
2267 | CaixaDialeto::Molde
2268 | CaixaDialeto::MoldePosicional
2269 | CaixaDialeto::Desconhecido => variant,
2270 };
2271 assert!(
2272 CaixaDialeto::ALL.contains(&coverage_probe),
2273 "ALL is missing variant {coverage_probe} — extend the slice"
2274 );
2275 }
2276 }
2277
2278 #[test]
2279 fn caixa_dialeto_all_is_const_and_matches_iteration_count() {
2280 // Pins the const-ness of the slice at const-fold time. A future
2281 // change that promoted `ALL` to a non-const initializer (a lazy-
2282 // static, a runtime-computed Vec) would fail to compile here —
2283 // the pin locks in the compile-time-known iteration surface
2284 // every consumer builds against. Peer of the sibling
2285 // `caixa_kind_all_is_const_and_matches_iteration_count` (kind.rs)
2286 // / `restart_strategy_all_is_const_and_matches_iteration_count`
2287 // (supervisor.rs) shape.
2288 const ALL: &[CaixaDialeto] = CaixaDialeto::ALL;
2289 assert_eq!(ALL.len(), CaixaDialeto::ALL.len());
2290 // Sweep the iterator without collapsing to `.len()` so a future
2291 // change to `ALL`'s carrier that decouples `.len()` from the
2292 // iteration count (a lazy-computed shape, an alias `impl Iterator`
2293 // return, a wrapper newtype) still passes here iff the two agree
2294 // arm-for-arm; the `#[allow]` opts this local pin out of the
2295 // clippy `iter_count` collapse that would defeat the intent.
2296 #[allow(clippy::iter_count)]
2297 let iterated = ALL.iter().count();
2298 assert_eq!(iterated, CaixaDialeto::ALL.len());
2299 }
2300
2301 #[test]
2302 fn caixa_dialeto_all_covers_every_variant_by_display_probe() {
2303 // Fanning `Display` over the slice sweeps the paired accessors
2304 // ([`CaixaDialeto::palavra_canonica`] / [`CaixaDialeto::consumidor`]
2305 // / [`CaixaDialeto::descricao`]) at every arm — every returned
2306 // byte-string is non-empty (the accessors' contract). A future
2307 // arm added without extending its per-arm `match self` return
2308 // would compile-fail at the accessor call inside the loop;
2309 // together with the `ALL.len() == 4` pin above, this locks the
2310 // accessor arm-set and the `ALL` slice mutually.
2311 for &d in CaixaDialeto::ALL {
2312 let display_form = d.to_string();
2313 assert!(
2314 !display_form.is_empty(),
2315 "Display must render a non-empty byte-string for every \
2316 arm; empty: {d:?}"
2317 );
2318 // Consumidor / descricao / palavra-canonica must each surface
2319 // a non-empty scalar; every downstream diagnostic consumer
2320 // reaches through these accessors.
2321 assert!(!d.palavra_canonica().is_empty(), "{d}");
2322 assert!(!d.consumidor().is_empty(), "{d}");
2323 assert!(!d.descricao().is_empty(), "{d}");
2324 }
2325 }
2326
2327 #[test]
2328 fn caixa_dialeto_as_str_returns_pascal_case_variant_name() {
2329 // Fail-before-pass-after per-arm shape pin: the four
2330 // [`CaixaDialeto::as_str`] arms must return the canonical
2331 // `PascalCase` byte-string that names the variant. Pre-lift this
2332 // byte-string existed only inside the hand-rolled Display impl's
2333 // four-arm literal-string match — every consumer that wanted the
2334 // `PascalCase` name reached through `format!("{d}")`'s allocation
2335 // path. Pinning the four arms explicitly here refuses a future
2336 // regression that ever reroutes an arm to a distinct spelling
2337 // (`"pacote"` lowercase, `"MoldePositional"` English rebrand,
2338 // `"Unknown"` for `Desconhecido`) — the census output and the
2339 // typed accessor would silently disagree until a downstream
2340 // consumer surfaced the drift at census time. Peer of the sibling
2341 // [`crate::supervisor::tests::restart_strategy_variants_serialize_to_lifted_scalar_values`]
2342 // / `placement_strategy_variants_serialize_to_lifted_scalar_values`
2343 // / `caixa_kind_as_str_returns_lifted_peer_const` shape on the
2344 // sibling closed-set typed-enum discriminator axes — the seventh
2345 // (and last unlifted) closed-set typed enum on the caixa surface
2346 // to converge onto the same per-arm-shape-pin discipline.
2347 for (variant, expected) in [
2348 (CaixaDialeto::Pacote, "Pacote"),
2349 (CaixaDialeto::Molde, "Molde"),
2350 (CaixaDialeto::MoldePosicional, "MoldePosicional"),
2351 (CaixaDialeto::Desconhecido, "Desconhecido"),
2352 ] {
2353 assert_eq!(
2354 variant.as_str(),
2355 expected,
2356 "CaixaDialeto::{variant:?}.as_str() must return the \
2357 canonical `PascalCase` variant-name byte-string; drift here \
2358 splits the census-facing text from the substrate \
2359 primitive every downstream consumer will read"
2360 );
2361 }
2362 }
2363
2364 #[test]
2365 fn caixa_dialeto_wire_names_covers_every_arm() {
2366 // Load-bearing pin on the substrate-canonical
2367 // [`super::CaixaDialeto::WIRE_NAMES`] exhaustive accept-set
2368 // roster on the `PascalCase` variant-name wire-form axis: every
2369 // variant of the sibling [`super::CaixaDialeto::ALL`] exhaustive-
2370 // iteration surface must project through
2371 // [`super::CaixaDialeto::as_str`] onto an entry the
2372 // [`super::CaixaDialeto::WIRE_NAMES`] roster carries, and the
2373 // roster's length must byte-equal `super::CaixaDialeto::ALL.len()`
2374 // so a silent skew between the [`super::CaixaDialeto::as_str`]
2375 // match's arm-set and the roster's arm-set trips here at
2376 // caixa-core test time rather than at a downstream `feira dialeto
2377 // --list-dialects` per-arm listing / M4 admission-webhook
2378 // rejection-body accepted-tag enumeration miss / structured-log
2379 // accepted-wire-form emit drift.
2380 //
2381 // A future arm addition (the module doc's "third dialect"
2382 // hazard actualising as a fifth arm — a third arity variant, an
2383 // alias-declaration family `pleme-doc-gen` sharpens as its
2384 // schema evolves) extends [`super::CaixaDialeto::ALL`] as a
2385 // single edit and this pin sweeps the new arm by iteration; the
2386 // paired [`super::CaixaDialeto::WIRE_NAMES`] roster must grow in
2387 // lockstep or this assertion trips. Every entry is further
2388 // pinned to open with an uppercase ASCII byte (matching the
2389 // substrate-wide `PascalCase` convention every peer closed-set
2390 // enum whose canonical projection is a `PascalCase` census-
2391 // facing name carries), so a silent collapse of the dialect-
2392 // classification wire-form axis with any hypothetical lowercase-
2393 // kebab peer wire-form axis (an entry byte-identical to a
2394 // sibling lowercase-Portuguese label that would let a wire-axis
2395 // consumer accept the diagnostic byte-string) trips here rather
2396 // than at a downstream census-report round-trip miss.
2397 //
2398 // Peer of the sibling
2399 // [`crate::kind::tests::caixa_kind_wire_names_covers_every_arm`]
2400 // (bd708bd) /
2401 // [`crate::kind::tests::caixa_kind_labels_covers_every_arm`]
2402 // (427fe75) /
2403 // [`crate::supervisor::tests::restart_strategy_wire_names_covers_every_arm`]
2404 // (3033f45) /
2405 // [`crate::supervisor::tests::restart_policy_wire_names_covers_every_arm`]
2406 // (ce9412b) /
2407 // [`crate::aplicacao::tests::placement_strategy_wire_names_covers_every_arm`]
2408 // (3e5b194) /
2409 // [`crate::aplicacao::tests::wit_shape_labels_covers_every_arm`]
2410 // (9d9f585) /
2411 // [`crate::aplicacao::tests::rate_limit_unit_suffixes_covers_every_arm`]
2412 // (b553ec9) /
2413 // [`crate::upgrade::tests::upgrade_instruction_lisp_forms_covers_every_arm`]
2414 // (1898d77) /
2415 // [`crate::upgrade::tests::upgrade_instruction_wire_forms_covers_every_arm`]
2416 // (cc42c0e) /
2417 // [`crate::dep::tests::dep_list_author_keys_covers_every_arm`]
2418 // (af6ad3a) /
2419 // [`crate::render::tests::path_shape_violation_wire_names_covers_every_arm`]
2420 // (0330bd3) pins — the same closed-set exhaustive-roster
2421 // coverage discipline extended here onto the tatara-lisp
2422 // dialect-classification closed-set typed enum, the eleventh
2423 // substrate-side closed-set typed enum on the roster axis and
2424 // the first dialect-classification axis to converge onto the
2425 // discipline.
2426 //
2427 // Fail-before-pass-after locally verified by mutating one arm
2428 // of the paired `CAIXA_DIALETO_WIRE_*` const family (e.g.
2429 // rebranding `CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL` from
2430 // `"MoldePosicional"` to `"MoldePositional"`) — the length pin
2431 // still passes but the `contains` check fires on the mutated
2432 // arm; and by shortening the roster to three entries — the
2433 // length pin fires first.
2434 assert_eq!(
2435 CaixaDialeto::WIRE_NAMES.len(),
2436 CaixaDialeto::ALL.len(),
2437 "CaixaDialeto::WIRE_NAMES.len() must byte-equal \
2438 CaixaDialeto::ALL.len() — a mismatch means the roster and \
2439 the enum's arm-set have drifted; downstream consumers that \
2440 fan through both will silently disagree on the accepted \
2441 arm-set"
2442 );
2443 for &variant in CaixaDialeto::ALL {
2444 let wire = variant.as_str();
2445 assert!(
2446 CaixaDialeto::WIRE_NAMES.contains(&wire),
2447 "CaixaDialeto::{variant:?}.as_str() = {wire:?} must be \
2448 a member of CaixaDialeto::WIRE_NAMES — the emitter and \
2449 the roster have drifted out of lockstep"
2450 );
2451 }
2452 for tag in CaixaDialeto::WIRE_NAMES {
2453 let first = tag.chars().next().unwrap_or_else(|| {
2454 panic!(
2455 "CaixaDialeto::WIRE_NAMES entry {tag:?} must be a \
2456 non-empty `PascalCase` variant-name byte-string"
2457 )
2458 });
2459 assert!(
2460 first.is_ascii_uppercase(),
2461 "CaixaDialeto::WIRE_NAMES entry {tag:?} must open with \
2462 an uppercase ASCII byte (matching the substrate-wide \
2463 `PascalCase` convention) — an entry opening with a \
2464 lowercase byte would collide the roster with any \
2465 hypothetical peer lowercase-kebab wire-form axis a \
2466 downstream consumer might disambiguate against"
2467 );
2468 }
2469 // Pin the exact four-arm roster in declaration order so a
2470 // future arm-swap on either the roster or the paired
2471 // `CAIXA_DIALETO_WIRE_*` constants (a rebrand of the arm-tag
2472 // mapping that leaves both the length pin and the membership
2473 // pin passing on their own) trips at caixa-core test time
2474 // under `assert_eq!`. Order matches variant declaration order
2475 // verbatim (`Pacote` → `Molde` → `MoldePosicional` →
2476 // `Desconhecido`) so the roster is the canonical ordering
2477 // every listing / rendering consumer defers to. Same
2478 // declaration-order pin the sibling
2479 // [`crate::render::tests::path_shape_violation_wire_names_covers_every_arm`]
2480 // (0330bd3) closes on the render-side path-shape-diagnostic
2481 // axis.
2482 assert_eq!(
2483 CaixaDialeto::WIRE_NAMES,
2484 &[
2485 CAIXA_DIALETO_WIRE_PACOTE,
2486 CAIXA_DIALETO_WIRE_MOLDE,
2487 CAIXA_DIALETO_WIRE_MOLDE_POSICIONAL,
2488 CAIXA_DIALETO_WIRE_DESCONHECIDO,
2489 ],
2490 "CaixaDialeto::WIRE_NAMES must enumerate every arm's wire-\
2491 form tag exactly once, in variant declaration order \
2492 (Pacote → Molde → MoldePosicional → Desconhecido)"
2493 );
2494 // Byte-parity pin on the paired reverse projection: every
2495 // entry in the roster must round-trip cleanly through
2496 // [`super::CaixaDialeto::from_wire`] back to the same arm the
2497 // [`super::CaixaDialeto::as_str`] emitter returned it for.
2498 // Refuses any future de-lift that swaps the four consts through
2499 // the reverse projection out of lockstep with the forward
2500 // emitter (a mid-arm rebrand touching only `as_str` but not
2501 // `from_wire`, an argument-ordering swap on one of the match
2502 // arms, a stray `to_lowercase` normalization on either side
2503 // that would silently pass the identity round-trip on the
2504 // already-PascalCase corpus but split the two projections on
2505 // any future non-PascalCase input).
2506 for (&variant, tag) in CaixaDialeto::ALL.iter().zip(CaixaDialeto::WIRE_NAMES) {
2507 assert_eq!(
2508 CaixaDialeto::from_wire(tag),
2509 Some(variant),
2510 "CaixaDialeto::from_wire({tag:?}) must round-trip back \
2511 to CaixaDialeto::{variant:?} — emitter and parser have \
2512 drifted off the paired CAIXA_DIALETO_WIRE_* const family"
2513 );
2514 }
2515 }
2516
2517 #[test]
2518 fn caixa_dialeto_display_routes_through_as_str_helper() {
2519 // Fail-before-pass-after convergence pin: for every arm in
2520 // [`CaixaDialeto::ALL`], the [`std::fmt::Display`] rendered form
2521 // must byte-equal [`CaixaDialeto::as_str`]'s return value. Pre-
2522 // lift these two paths were structurally independent — the
2523 // Display impl hand-rolled its own four-arm literal-string
2524 // match with no compile-time link back to any substrate accessor
2525 // — so a future variant rename could land at `Display` without
2526 // touching a paired accessor (or vice versa), silently splitting
2527 // the two paths on the renamed arm. Pinning the byte-equality
2528 // here makes any such split a caixa-core build-time failure at
2529 // this test rather than surfacing far from the rename commit as
2530 // a downstream census consumer emitting one spelling while the
2531 // typed accessor returned another. Peer of the sibling
2532 // [`crate::kind::tests::caixa_kind_display_routes_through_as_str_helper`]
2533 // (which pins the same convergence on the [`crate::CaixaKind`]
2534 // closed-set axis) — extends the discipline onto the seventh
2535 // (and last unlifted) closed-set fieldless typed enum on the
2536 // caixa surface.
2537 for &variant in CaixaDialeto::ALL {
2538 assert_eq!(
2539 variant.to_string(),
2540 variant.as_str(),
2541 "CaixaDialeto::{variant:?} Display must route through \
2542 CaixaDialeto::as_str (single source of truth: the \
2543 lifted per-arm `PascalCase` variant-name byte-string)"
2544 );
2545 }
2546 }
2547
2548 #[test]
2549 fn caixa_dialeto_as_ref_str_routes_through_as_str_accessor() {
2550 // Fail-before-pass-after byte-parity pin on the lifted
2551 // `impl AsRef<str> for CaixaDialeto` — asserts the standard-
2552 // library trait impl and the substrate-primitive
2553 // [`CaixaDialeto::as_str`] `pub const fn` accessor resolve to
2554 // the same `&str` per instance across the four-arm closed set,
2555 // so any future silent detour that routes the impl through a
2556 // divergent projection (a per-arm inline
2557 // `match self { CaixaDialeto::Pacote => "Pacote", … }` re-inlining
2558 // that opens a compile-time link to the un-lifted arm-literal,
2559 // a swap onto the second-axis
2560 // [`CaixaDialeto::palavra_canonica`] /
2561 // [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`]
2562 // accessors that carry distinct byte-shapes per axis) trips at
2563 // caixa-core test time under `PartialEq` rather than at a
2564 // downstream `impl AsRef<str>`-bound consumer's silent split.
2565 // Sweeps every one of the four arms [`CaixaDialeto::ALL`]
2566 // carries so no arm's projection is covered only by the sibling
2567 // `Display` path. Peer of the sibling
2568 // `rate_limit_unit_as_ref_str_routes_through_as_suffix_accessor`
2569 // (d8136db) on the M3 `:politicas :rate-limit` closed-set typed
2570 // enum, and the peer
2571 // [`crate::kind::tests::caixa_kind_as_ref_str_routes_through_as_str_accessor`]
2572 // (cd2091f) pin on the top-level closed-set typed
2573 // discriminator — the pins together close the substrate
2574 // primitive's `AsRef<str>` projection axis onto the seventh
2575 // closed-set fieldless typed enum on the caixa surface.
2576 for &variant in CaixaDialeto::ALL {
2577 assert_eq!(
2578 <CaixaDialeto as AsRef<str>>::as_ref(&variant),
2579 variant.as_str(),
2580 "AsRef<str> impl on CaixaDialeto::{variant:?} must \
2581 byte-equal CaixaDialeto::as_str on the same instance \
2582 — divergence signals a silent detour off the \
2583 substrate-primitive accessor"
2584 );
2585 }
2586 }
2587
2588 #[test]
2589 fn caixa_dialeto_as_ref_str_routes_through_display_via_shared_accessor() {
2590 // Fail-before-pass-after byte-parity pin on the three-path
2591 // convergence discipline the [`CaixaDialeto`] closed-set
2592 // dialect-classification enum now carries on the `&str`-
2593 // projection axis: `<CaixaDialeto as AsRef<str>>::as_ref(&v)`
2594 // (the newly lifted impl), `format!("{v}")` (the pre-existing
2595 // [`fmt::Display`] impl), and `v.as_str()` (the substrate-
2596 // primitive `pub const fn` accessor both trait impls delegate
2597 // through) must resolve to the same byte-string on every
2598 // instance across the four-arm closed set. Refuses any future
2599 // divergence between the two trait impls (a stray
2600 // [`fmt::Display::fmt`] rewrite that hand-rolls the arms
2601 // rather than delegating through the shared accessor; a
2602 // hypothetical `AsRef<str>` rewrite that inlines a per-arm
2603 // literal cascade) that would silently split the two
2604 // projection paths of the same closed-set typed enum. Mirrors
2605 // the sibling three-path-convergence discipline the peer
2606 // [`crate::aplicacao::RateLimitUnit`] typed enum carries
2607 // (`rate_limit_unit_as_ref_str_routes_through_display_via_shared_accessor`,
2608 // d8136db), the peer [`crate::CaixaKind`] triple
2609 // (`caixa_kind_as_ref_str_routes_through_display_via_shared_accessor`,
2610 // cd2091f), and the [`crate::CaixaVersion`] typed newtype
2611 // triple (`caixa_version_as_ref_str_routes_through_display_via_shared_accessor`,
2612 // 16d5c7e).
2613 for &variant in CaixaDialeto::ALL {
2614 let via_as_ref: &str = <CaixaDialeto as AsRef<str>>::as_ref(&variant);
2615 let via_display: String = format!("{variant}");
2616 let via_accessor: &str = variant.as_str();
2617 assert_eq!(via_as_ref, via_accessor);
2618 assert_eq!(via_display, via_accessor);
2619 assert_eq!(via_as_ref, via_display.as_str());
2620 }
2621 }
2622
2623 #[test]
2624 fn caixa_dialeto_is_molde_family_returns_true_on_molde_and_positional_arms() {
2625 // Fail-before-pass-after per-arm shape pin on the two `defmolde`
2626 // declaration-family arms: [`CaixaDialeto::is_molde_family`] must
2627 // return `true` for [`CaixaDialeto::Molde`] and
2628 // [`CaixaDialeto::MoldePosicional`] — the two-arity closure of
2629 // one declaration ([`CaixaDialeto::MoldePosicional`]'s docstring:
2630 // "same declaration as [`Self::Molde`], written with the package
2631 // name as a bare positional symbol … one arity of one
2632 // declaration, not a third schema"). A future accidental flip that
2633 // reversed a per-arm arm's return without touching the paired
2634 // false-arm pin would silently open the substrate primitive to
2635 // false-positive on either arm — the `feira dialeto` verb's
2636 // `--strict-palavra` gate would then silently accept
2637 // repo-surface declarations under `(defcaixa …)` on one arm and
2638 // reject them on the other. Pinning the two true arms explicitly
2639 // here refuses that split at caixa-core build time.
2640 assert!(
2641 CaixaDialeto::Molde.is_molde_family(),
2642 "CaixaDialeto::Molde.is_molde_family() must return true — \
2643 Molde is the primary `defmolde` arm"
2644 );
2645 assert!(
2646 CaixaDialeto::MoldePosicional.is_molde_family(),
2647 "CaixaDialeto::MoldePosicional.is_molde_family() must return \
2648 true — MoldePosicional is the positional-arity form of the \
2649 same `defmolde` declaration Molde carries"
2650 );
2651 }
2652
2653 #[test]
2654 fn caixa_dialeto_is_molde_family_returns_false_on_pacote_and_desconhecido_arms() {
2655 // Fail-before-pass-after per-arm shape pin on the two non-`defmolde`
2656 // arms: [`CaixaDialeto::is_molde_family`] must return `false` for
2657 // [`CaixaDialeto::Pacote`] (the sibling `defcaixa` tatara-lisp
2658 // package manifest, `palavra_canonica → "defcaixa"`) and for
2659 // [`CaixaDialeto::Desconhecido`] (the residue that names no
2660 // known declaration, `palavra_canonica → "?"`). Pinning the two
2661 // false arms explicitly here refuses a future accidental flip
2662 // that let the predicate widen to include either arm — the
2663 // `feira dialeto` verb's `--strict-palavra` gate would then
2664 // spuriously refuse every `(defcaixa …)` package manifest as if
2665 // it were a repo-surface declaration.
2666 assert!(
2667 !CaixaDialeto::Pacote.is_molde_family(),
2668 "CaixaDialeto::Pacote.is_molde_family() must return false — \
2669 Pacote is the `defcaixa` tatara-lisp package manifest, not \
2670 the `defmolde` repo-surface declaration"
2671 );
2672 assert!(
2673 !CaixaDialeto::Desconhecido.is_molde_family(),
2674 "CaixaDialeto::Desconhecido.is_molde_family() must return \
2675 false — the residue arm names no known declaration; it is \
2676 not silently promoted into the `defmolde` family"
2677 );
2678 }
2679
2680 #[test]
2681 fn caixa_dialeto_is_molde_family_agrees_with_palavra_canonica_defmolde_projection() {
2682 // Load-bearing pin: for every arm in [`CaixaDialeto::ALL`], the
2683 // typed [`CaixaDialeto::is_molde_family`] predicate must agree
2684 // byte-for-byte with the paired [`CaixaDialeto::palavra_canonica`]
2685 // projection's `== "defmolde"` classifier — i.e. the two paths
2686 // partition the four-arm discriminator set into the same
2687 // `{Molde, MoldePosicional}` and `{Pacote, Desconhecido}` halves.
2688 // Pre-lift the sibling [`CaixaDialeto::palavra_canonica`] projection
2689 // (which returns `"defmolde"` for `Molde | MoldePosicional`,
2690 // `"defcaixa"` for `Pacote`, `"?"` for `Desconhecido`) was the
2691 // only substrate-side surface carrying the two-arm collapse; the
2692 // hand-rolled `matches!(d, CaixaDialeto::Molde |
2693 // CaixaDialeto::MoldePosicional)` sites in the `feira dialeto`
2694 // verb expressed no compile-time link back to it. A future arm
2695 // addition — the module doc's "third dialect" hazard actualises
2696 // as a fifth arm belonging to the `defmolde` family — would land
2697 // one match arm at [`Self::palavra_canonica`]'s `defmolde` return
2698 // (extending the sibling projection) but silently split the
2699 // hand-rolled two-arm `matches!` predicate sites if the new arm's
2700 // `is_molde_family` return were forgotten. Pinning byte-equality
2701 // between the two paths here makes any such split a caixa-core
2702 // build-time failure at this test rather than surfacing far from
2703 // the arm-addition commit as a downstream `--strict-palavra` /
2704 // `caixa.lisp`-holds-wrong-declaration gate silently ignoring the
2705 // new arm.
2706 for &d in CaixaDialeto::ALL {
2707 let via_palavra_canonica = d.palavra_canonica() == "defmolde";
2708 let via_is_molde_family = d.is_molde_family();
2709 assert_eq!(
2710 via_is_molde_family, via_palavra_canonica,
2711 "CaixaDialeto::{d:?}.is_molde_family() ({via_is_molde_family}) \
2712 must agree with CaixaDialeto::{d:?}.palavra_canonica() == \
2713 \"defmolde\" ({via_palavra_canonica}) — a split between the \
2714 typed predicate and the sibling keyword projection would let \
2715 a future arm addition land at one path and drift at the other, \
2716 which is exactly the drift this pin refuses"
2717 );
2718 }
2719 }
2720
2721 #[test]
2722 fn caixa_dialeto_is_molde_family_is_const_fn() {
2723 // Const-context pin: [`CaixaDialeto::is_molde_family`] must remain
2724 // `const fn` (its match is a fieldless-arm literal-pattern
2725 // discriminator, so no non-const operation exists on the resolution
2726 // path). Downstream consumers reaching for the predicate from a
2727 // `const` context (a future substrate-wide const-fold-driven audit
2728 // table that materializes per-arm gate-membership at build time,
2729 // a per-arm CR-admission-webhook gate registration in a `const`
2730 // context) rely on the const-ness. A future accidental downgrade
2731 // to non-`const` (an added runtime helper reachable only from a
2732 // non-`const` context) trips at caixa-core build time rather than
2733 // surfacing as a downstream `const`-context regression far from
2734 // the predicate declaration. Peer of the sibling
2735 // [`caixa_dialeto_as_str_is_const_fn`] pin on the paired
2736 // [`CaixaDialeto::as_str`] byte-string axis.
2737 const ARMS: [(CaixaDialeto, bool); 4] = [
2738 (CaixaDialeto::Pacote, CaixaDialeto::Pacote.is_molde_family()),
2739 (CaixaDialeto::Molde, CaixaDialeto::Molde.is_molde_family()),
2740 (
2741 CaixaDialeto::MoldePosicional,
2742 CaixaDialeto::MoldePosicional.is_molde_family(),
2743 ),
2744 (
2745 CaixaDialeto::Desconhecido,
2746 CaixaDialeto::Desconhecido.is_molde_family(),
2747 ),
2748 ];
2749 // Materialize the const-fold-evaluated table into a runtime slice
2750 // assertion — carries the same `bool = const fn call` shape a raw
2751 // `assert!(const_bool)` would, without tripping the
2752 // `assertions_on_constants` clippy lint that a per-arm
2753 // `assert!(CONST)` on a `const bool` triggers when the arm-count
2754 // is enumerated flat rather than compared as a whole-table shape.
2755 assert_eq!(
2756 ARMS,
2757 [
2758 (CaixaDialeto::Pacote, false),
2759 (CaixaDialeto::Molde, true),
2760 (CaixaDialeto::MoldePosicional, true),
2761 (CaixaDialeto::Desconhecido, false),
2762 ],
2763 "CaixaDialeto::is_molde_family() must evaluate in const context \
2764 for every arm and land on the {{false, true, true, false}} \
2765 partition — a future accidental downgrade to non-`const` \
2766 would trip the const-context array-initializer here"
2767 );
2768 }
2769
2770 #[test]
2771 fn caixa_dialeto_as_str_is_const_fn() {
2772 // Const-context pin: [`CaixaDialeto::as_str`] must remain
2773 // `const fn` (its match arms return `pub const` byte-strings, so
2774 // no non-const operation exists on the resolution path).
2775 // Downstream consumers reaching for the accessor from a `const`
2776 // context (a future substrate-wide const-fold-driven audit table
2777 // that materializes every dialect's census label at build time,
2778 // a per-arm CR-admission-webhook message registration in a
2779 // `const` gate) rely on the const-ness. A future accidental
2780 // downgrade to non-`const` (an added runtime helper reachable
2781 // only from a non-`const` context, a manual hand-rolled `impl`
2782 // that shadows this method) trips at caixa-core build time
2783 // rather than surfacing as a downstream `const`-context
2784 // regression far from the accessor declaration. Peer of the
2785 // sibling [`crate::kind::tests::caixa_kind_wire_name_is_const_fn`]
2786 // pin on the paired [`crate::CaixaKind`] byte-string axis.
2787 const PACOTE: &str = CaixaDialeto::Pacote.as_str();
2788 const MOLDE: &str = CaixaDialeto::Molde.as_str();
2789 const MOLDE_POSICIONAL: &str = CaixaDialeto::MoldePosicional.as_str();
2790 const DESCONHECIDO: &str = CaixaDialeto::Desconhecido.as_str();
2791 assert_eq!(PACOTE, "Pacote");
2792 assert_eq!(MOLDE, "Molde");
2793 assert_eq!(MOLDE_POSICIONAL, "MoldePosicional");
2794 assert_eq!(DESCONHECIDO, "Desconhecido");
2795 }
2796
2797 #[test]
2798 fn caixa_dialeto_is_variant_predicates_partition_the_arm_set() {
2799 // Fail-before-pass-after pin on the [`gen_platform::IsVariant`]
2800 // derive: for each of the four variants at [`CaixaDialeto::ALL`]`[idx]`
2801 // the observed four-slot predicate row must equal a one-hot row
2802 // with the `true` at exactly `idx`. Pre-derive the closed four-arm
2803 // dialect-classification partition lived only inside the paired
2804 // per-arm projections' four-arm match resolvers ([`Self::as_str`] /
2805 // [`Self::palavra_canonica`] / [`Self::consumidor`] /
2806 // [`Self::descricao`]) plus the two-arm [`Self::is_molde_family`]
2807 // hand-rolled `matches!` (now routed through the derived
2808 // predicates); a future rebrand (an accidental
2809 // `#[is_variant(name = "…")]` drift, a manual hand-rolled `impl`
2810 // that shadows the derive-generated method, an arm rename that
2811 // reroutes one arm through the wrong predicate lane) trips this
2812 // pin at caixa-core build time rather than surfacing far from the
2813 // derive declaration as a downstream [`Self::is_molde_family`]
2814 // consumer accepting the wrong arm-set. The expected row is
2815 // generated live from the [`Self::ALL`] declaration order rather
2816 // than transcribed by hand so a copy-paste flip reroutes at the
2817 // identity-diagonal assertion.
2818 //
2819 // Peer of the sibling
2820 // [`crate::kind::tests::caixa_kind_is_variant_predicates_partition_the_arm_set`]
2821 // / [`crate::supervisor::tests::restart_strategy_is_variant_predicates_partition_the_arm_set`]
2822 // / [`crate::aplicacao::tests::placement_strategy_is_variant_predicates_partition_the_arm_set`]
2823 // / [`crate::upgrade::tests::upgrade_instruction_is_variant_predicates_partition_the_arm_set`]
2824 // pins on the sibling closed-set typed-enum discriminator axes.
2825 for (idx, &variant) in CaixaDialeto::ALL.iter().enumerate() {
2826 let observed = [
2827 variant.is_pacote(),
2828 variant.is_molde(),
2829 variant.is_molde_posicional(),
2830 variant.is_desconhecido(),
2831 ];
2832 let mut expected = [false; 4];
2833 expected[idx] = true;
2834 assert_eq!(
2835 observed, expected,
2836 "CaixaDialeto::{variant:?} at ALL[{idx}] is_* predicates \
2837 must fire only on their own arm lane (identity diagonal); \
2838 got {observed:?}",
2839 );
2840 }
2841 }
2842
2843 #[test]
2844 fn caixa_dialeto_is_variant_predicates_are_const_fn() {
2845 // The [`gen_platform::IsVariant`] derive emits `const fn`
2846 // predicates on the peer [`crate::CaixaKind`] +
2847 // [`crate::upgrade::UpgradeInstruction`] +
2848 // [`crate::supervisor::RestartStrategy`] +
2849 // [`crate::supervisor::RestartPolicy`] +
2850 // [`crate::aplicacao::PlacementStrategy`] +
2851 // [`crate::aplicacao::RateLimitUnit`] +
2852 // [`crate::dep::DepList`] closed-set typed enums — pin the same
2853 // posture on [`CaixaDialeto`] so a future accidental downgrade
2854 // to non-`const` (an added runtime helper reachable only from a
2855 // non-`const` context, a manual hand-rolled `impl` that shadows
2856 // the derive-generated method) trips at caixa-core build time
2857 // rather than surfacing as a downstream `const`-context
2858 // regression far from the derive declaration.
2859 // Use `const { assert!(…) }` (peer of the sibling
2860 // [`crate::render::PathShapeViolation`] +
2861 // [`crate::aplicacao::RateLimitUnit`] +
2862 // [`caixa_theme::style::Semantic`] const-fn pins) so the
2863 // const-context evaluation trips at const-fold time without
2864 // opening a per-`const bool` `assertions_on_constants` clippy
2865 // debt row this crate does not carry today for `dialeto.rs`.
2866 const { assert!(CaixaDialeto::Pacote.is_pacote()) };
2867 const { assert!(CaixaDialeto::Molde.is_molde()) };
2868 const { assert!(CaixaDialeto::MoldePosicional.is_molde_posicional()) };
2869 const { assert!(CaixaDialeto::Desconhecido.is_desconhecido()) };
2870 }
2871
2872 #[test]
2873 fn caixa_dialeto_from_wire_accepts_every_as_str_output() {
2874 // Fail-before-pass-after per-arm accept pin on the newly lifted
2875 // [`CaixaDialeto::from_wire`] reverse projection: every arm in
2876 // [`CaixaDialeto::ALL`] must parse back through `from_wire` when
2877 // fed its own [`CaixaDialeto::as_str`] output, landing on
2878 // `Some(same_variant)` — a regression that hand-rolled either
2879 // side's per-arm match without threading through the shared
2880 // four-string closed set would silently disagree on any future
2881 // arm rename and this pin flags it at caixa-core build time.
2882 // Peer of the sibling
2883 // [`crate::kind::tests::caixa_kind_wire_round_trips_through_from_wire`]
2884 // (2aa6d23) /
2885 // `placement_strategy_from_wire_accepts_every_lifted_constant`
2886 // (18c7342) /
2887 // `dep_list_round_trips_through_as_str_and_from_wire` (45ee563)
2888 // shape on the sibling closed-set typed-enum reverse-projection
2889 // axes.
2890 for &variant in CaixaDialeto::ALL {
2891 let wire = variant.as_str();
2892 let parsed = CaixaDialeto::from_wire(wire).unwrap_or_else(|| {
2893 panic!(
2894 "CaixaDialeto::from_wire({wire:?}) must accept every \
2895 CaixaDialeto::as_str output — got None for the \
2896 wire byte-string of {variant:?}"
2897 )
2898 });
2899 assert_eq!(
2900 parsed, variant,
2901 "CaixaDialeto::from_wire(CaixaDialeto::{variant:?}.as_str()) \
2902 must return CaixaDialeto::{variant:?} — the (as_str, \
2903 from_wire) pair must form a total round-trip on the \
2904 closed four-arm CaixaDialeto arm-set"
2905 );
2906 }
2907 }
2908
2909 #[test]
2910 fn caixa_dialeto_from_wire_rejects_unknown_byte_strings() {
2911 // Rejection pin on the parser's accept-set: any string outside
2912 // the four-arm [`CaixaDialeto::as_str`] output set must return
2913 // `None`. A future accidental widening of the accept-set (a
2914 // case-insensitive match that accepts `"pacote"` on the wire
2915 // axis, a hand-rolled Levenshtein-forgiving arm-lookup that
2916 // admits `"Pacotee"` typos, a silent acceptance of the sibling
2917 // [`Self::palavra_canonica`] `"defcaixa"` / `"defmolde"`
2918 // byte-shapes on this axis) would silently drift the parser's
2919 // accept-set from the emitter's — a downstream audit-report
2920 // re-loader that bound a prior audit's [`Self::as_str`] output
2921 // back to the typed enum through this parser would then bind a
2922 // malformed byte-string to a plausibly-wrong typed arm the
2923 // caller does not route through any fallback, silently
2924 // misclassifying the reloaded row. Also rejects the sibling
2925 // [`Self::palavra_canonica`] (`"defcaixa"` / `"defmolde"`) and
2926 // the sibling [`Self::consumidor`] (`"caixa-core / feira"`,
2927 // `"pleme-doc-gen"`, `"nobody known"`) byte-shapes, which are
2928 // the substrate's *distinct-axis* projections on the same enum
2929 // — the two-axis split the sibling
2930 // [`Self::palavra_canonica`] / [`Self::consumidor`] /
2931 // [`Self::descricao`] docstrings explicitly frame forbids
2932 // accepting one axis's byte-shapes as parseable on the other
2933 // axis. Peer of the sibling
2934 // [`crate::kind::tests::caixa_kind_from_wire_rejects_unknown_byte_strings`]
2935 // (2aa6d23) /
2936 // `placement_strategy_from_wire_rejects_unknown_byte_strings`
2937 // (18c7342) /
2938 // `dep_list_from_wire_returns_none_on_unknown_wire_scalar`
2939 // (45ee563) rejection pins on the sibling closed-set typed-enum
2940 // reverse-projection axes.
2941 for bad in [
2942 "",
2943 " ",
2944 "pacote",
2945 "PACOTE",
2946 "molde",
2947 "MoldePositional",
2948 "desconhecido",
2949 "Unknown",
2950 "defcaixa",
2951 "defmolde",
2952 "?",
2953 "caixa-core / feira",
2954 "pleme-doc-gen",
2955 "nobody known",
2956 "Pacote ",
2957 " Pacote",
2958 ] {
2959 assert!(
2960 CaixaDialeto::from_wire(bad).is_none(),
2961 "CaixaDialeto::from_wire({bad:?}) must return None — the \
2962 parser's accept-set is exactly the four CaixaDialeto::as_str \
2963 outputs; a widening would silently split the parser's \
2964 accept-set from the emitter's arm-set"
2965 );
2966 }
2967 }
2968
2969 #[test]
2970 fn cabeca_errada_ctor_matches_struct_literal_wrap() {
2971 // Fail-before-pass-after byte-identity pin: the lifted
2972 // [`DialetoError::cabeca_errada`] ctor MUST land on the exact
2973 // same struct-literal shape the pre-lift open-coded wire-up
2974 // block wrote by hand — `DialetoError::CabecaErrada {
2975 // encontrado: <head>.to_string() }`. A future accidental
2976 // divergence (`.into()` swap, per-arm constant substitution, an
2977 // added default field, an `.to_ascii_lowercase()` normalization
2978 // silently injected into the ctor body, a rebrand of the
2979 // `encontrado` field carrying a distinct byte-shape) trips this
2980 // pin at caixa-core build time rather than surfacing far from
2981 // the ctor declaration as a downstream `classify_form`
2982 // wrong-head consumer emitting one diagnostic shape while a
2983 // hand-written test peer opens another. Peer of the sibling
2984 // `unknown_byte_unit_ctor_matches_struct_literal_wrap`
2985 // (limits.rs; 29fac09) / `duplicate_from_ctor_matches_struct_
2986 // literal_wrap` (upgrade.rs; 7e52aec) shape on the sibling
2987 // single-slot `{ <field>: String }` envelope constructors.
2988 assert_eq!(
2989 DialetoError::cabeca_errada("defflake"),
2990 DialetoError::CabecaErrada {
2991 encontrado: "defflake".to_string(),
2992 },
2993 "DialetoError::cabeca_errada must byte-equal the pre-lift \
2994 open-coded struct-literal — a drift here means the ctor \
2995 stopped being a substrate primitive for the wrong-head \
2996 fallthrough site"
2997 );
2998 }
2999
3000 #[test]
3001 fn cabeca_errada_routes_encontrado_verbatim_across_boundary_inputs() {
3002 // Fail-before-pass-after boundary-sweep pin: the lifted
3003 // [`DialetoError::cabeca_errada`] ctor MUST route its
3004 // `encontrado: &str` argument verbatim into the
3005 // [`DialetoError::CabecaErrada`] `encontrado: String` field
3006 // for every boundary-covering `&str` input — empty string, a
3007 // canonical `defcaixa`-adjacent head, a non-ASCII head, a
3008 // whitespace-carrying head, a Unicode-full-width head. Any
3009 // wrapper-side truncation, silent `.trim()`, accidental
3010 // `.to_ascii_lowercase()` normalization, or `.into()` divergence
3011 // on the ctor body surfaces here as a byte-mismatch against the
3012 // input rather than at a downstream
3013 // [`DialetoError::to_string()`] diagnostic-shape drift at a
3014 // wrong-head fallthrough consumer far from the ctor declaration.
3015 // Peer of the sibling `limits_codec_unit_only_ctors_route_unit_
3016 // verbatim_across_every_variant` (limits.rs; 29fac09) shape on
3017 // the sibling single-slot `{ <field>: String }` envelope
3018 // boundary-sweep discipline.
3019 for encontrado in [
3020 "",
3021 "defflake",
3022 "def-molde",
3023 "defcaixa ",
3024 " defcaixa",
3025 "μdefcaixa",
3026 "\u{00A0}defcaixa",
3027 "\u{3000}defcaixa",
3028 "def\u{2028}caixa",
3029 ] {
3030 let via_ctor = DialetoError::cabeca_errada(encontrado);
3031 let via_literal = DialetoError::CabecaErrada {
3032 encontrado: encontrado.to_string(),
3033 };
3034 assert_eq!(
3035 via_ctor, via_literal,
3036 "DialetoError::cabeca_errada({encontrado:?}) must byte- \
3037 equal the open-coded struct-literal on the same input — \
3038 a drift here would let the ctor silently normalize / \
3039 truncate the head symbol before it reached the \
3040 CabecaErrada envelope"
3041 );
3042 let DialetoError::CabecaErrada { encontrado: routed } = via_ctor else {
3043 panic!(
3044 "DialetoError::cabeca_errada must construct the \
3045 CabecaErrada arm — got a different variant on \
3046 input {encontrado:?}"
3047 );
3048 };
3049 assert_eq!(
3050 routed, encontrado,
3051 "DialetoError::cabeca_errada must route the input \
3052 {encontrado:?} verbatim into the encontrado field — \
3053 any wrapper-side truncation / normalization surfaces \
3054 here rather than at a downstream diagnostic shape drift"
3055 );
3056 }
3057 }
3058
3059 #[test]
3060 fn classify_form_wrong_head_routes_through_cabeca_errada_ctor() {
3061 // Fail-before-pass-after routing pin: [`classify`]'s wrong-head
3062 // fallthrough site MUST construct its `Err(DialetoError::…)`
3063 // through the substrate-primitive [`DialetoError::cabeca_errada`]
3064 // ctor rather than through an open-coded struct-literal. Pre-
3065 // lift the wire-up hand-rolled a three-line
3066 // `Self::CabecaErrada { encontrado: other.to_string() }` block
3067 // with no compile-time link back to the substrate primitive; a
3068 // future accidental rebrand of the ctor body (an added
3069 // `.trim()` on `encontrado`, a per-arm constant prefix like
3070 // `"unknown-head:"`, a widening of the field into a
3071 // `(String, usize)` tuple carrying a caret offset) would then
3072 // silently split the two paths — the ctor consumers pick up
3073 // the new shape, the open-coded wire-up does not. Pinning
3074 // byte-equality between the observed `Err` and the ctor-
3075 // constructed `Err` refuses that split at caixa-core build
3076 // time rather than surfacing far from the wire-up commit as a
3077 // downstream diagnostic-consumer split.
3078 for head in ["defflake", "deffoobar", "defcaixaz", "let", "defmoldez"] {
3079 let src = format!("({head} :nome \"x\")");
3080 let observed = classify(&src);
3081 let via_ctor = Err(DialetoError::cabeca_errada(head));
3082 assert_eq!(
3083 observed, via_ctor,
3084 "classify({src:?}) must return the same Err shape as \
3085 DialetoError::cabeca_errada({head:?}) — a drift here \
3086 means the wire-up de-lifted its wrong-head fallthrough \
3087 arm off the substrate primitive"
3088 );
3089 }
3090 }
3091
3092 #[test]
3093 fn leitura_ctor_matches_tuple_literal_wrap_on_str_binding() {
3094 // Fail-before-pass-after byte-identity pin: the lifted
3095 // [`DialetoError::leitura`] ctor MUST land on the exact same
3096 // tuple-newtype wrap the pre-lift open-coded wire-up block wrote by
3097 // hand — `DialetoError::Leitura(<into-String-expr>)`. A future
3098 // accidental divergence (an added `.trim()` on the reader reason,
3099 // a per-arm constant prefix like `"tatara-lisp:"`, a widening of
3100 // the tuple carrying a caret offset, a rebrand of the payload
3101 // carrying a distinct byte-shape) trips this pin at caixa-core
3102 // build time rather than surfacing far from the ctor declaration
3103 // as a downstream [`classify`] tatara-lisp-reader consumer
3104 // emitting one diagnostic shape while a hand-written test peer
3105 // opens another. Peer of the sibling
3106 // `cabeca_errada_ctor_matches_struct_literal_wrap` pin above on
3107 // the same [`DialetoError`] envelope's wrong-head axis, and of
3108 // the peer `LimitsError::empty_byte_size` /
3109 // `LimitsError::empty_duration` (7a4b003 / 319216c) shape on the
3110 // sibling `(String)` single-slot tuple-newtype envelope
3111 // constructors.
3112 let reason: &str = "unclosed paren at 1:12";
3113 assert_eq!(
3114 DialetoError::leitura(reason),
3115 DialetoError::Leitura(reason.to_string()),
3116 "DialetoError::leitura must byte-equal the pre-lift open-coded \
3117 tuple-newtype wrap — a drift here means the ctor stopped \
3118 being a substrate primitive for the tatara-lisp-reader \
3119 fallthrough site"
3120 );
3121 }
3122
3123 #[test]
3124 fn leitura_ctor_matches_tuple_literal_wrap_on_string_binding() {
3125 // Fail-before-pass-after byte-identity pin on the `String` wire-up
3126 // shape: the lifted [`DialetoError::leitura`] ctor MUST land on
3127 // the same tuple-newtype wrap when the caller passes an owned
3128 // `String` (the actual [`classify`] wire-up shape — `e.to_string()`
3129 // on a [`tatara_lisp::Error`]-carrying binding). Pins that the
3130 // `impl Into<String>` param covers the owned-`String` path with no
3131 // silent double-allocation or intermediate `&str` reslicing. Peer
3132 // of the sibling `_on_str_binding` pin above — together they close
3133 // the `impl Into<String>` bound's two authored wire-up shapes on
3134 // the ctor's substrate primitive.
3135 let reason: String = String::from("read: unexpected EOF at 3:1");
3136 let via_ctor = DialetoError::leitura(reason.clone());
3137 let via_literal = DialetoError::Leitura(reason.clone());
3138 assert_eq!(
3139 via_ctor, via_literal,
3140 "DialetoError::leitura must byte-equal the pre-lift open-coded \
3141 tuple-newtype wrap on the same owned-String fixture — a drift \
3142 here would let the ctor silently reshape the reader reason \
3143 before it reached the Leitura envelope"
3144 );
3145 let DialetoError::Leitura(routed) = via_ctor else {
3146 panic!(
3147 "DialetoError::leitura must construct the Leitura arm — \
3148 got a different variant on input {reason:?}"
3149 );
3150 };
3151 assert_eq!(
3152 routed, reason,
3153 "DialetoError::leitura must route the input {reason:?} \
3154 verbatim into the tuple-newtype payload — any wrapper-side \
3155 truncation / normalization surfaces here rather than at a \
3156 downstream diagnostic shape drift"
3157 );
3158 }
3159
3160 #[test]
3161 fn leitura_routes_reason_verbatim_across_boundary_inputs() {
3162 // Fail-before-pass-after boundary-sweep pin: the lifted
3163 // [`DialetoError::leitura`] ctor MUST route its
3164 // `reason: impl Into<String>` argument verbatim into the
3165 // [`DialetoError::Leitura`] tuple-newtype `String` payload for
3166 // every boundary-covering input — empty string, a canonical
3167 // tatara-lisp reader error, a non-ASCII reason, a
3168 // whitespace-carrying reason, a Unicode-full-width reason. Any
3169 // wrapper-side truncation, silent `.trim()`, accidental
3170 // `.to_ascii_lowercase()` normalization, or `.into()` divergence
3171 // on the ctor body surfaces here as a byte-mismatch against the
3172 // input rather than at a downstream [`DialetoError::to_string()`]
3173 // diagnostic-shape drift at a tatara-lisp-reader fallthrough
3174 // consumer far from the ctor declaration. Peer of the sibling
3175 // `cabeca_errada_routes_encontrado_verbatim_across_boundary_inputs`
3176 // pin above on the same [`DialetoError`] envelope's wrong-head
3177 // axis.
3178 for reason in [
3179 "",
3180 "unclosed paren at 1:12",
3181 "unexpected token ')'",
3182 "read: eof",
3183 " leading whitespace",
3184 "trailing whitespace ",
3185 "μnicode reason",
3186 "\u{00A0}NBSP-prefixed reason",
3187 "\u{3000}ideographic-space reason",
3188 "reason\u{2028}with-line-separator",
3189 ] {
3190 let via_ctor = DialetoError::leitura(reason);
3191 let via_literal = DialetoError::Leitura(reason.to_string());
3192 assert_eq!(
3193 via_ctor, via_literal,
3194 "DialetoError::leitura({reason:?}) must byte-equal the \
3195 open-coded tuple-newtype wrap on the same input — a \
3196 drift here would let the ctor silently normalize / \
3197 truncate the reader reason before it reached the \
3198 Leitura envelope"
3199 );
3200 let DialetoError::Leitura(routed) = via_ctor else {
3201 panic!(
3202 "DialetoError::leitura must construct the Leitura \
3203 arm — got a different variant on input {reason:?}"
3204 );
3205 };
3206 assert_eq!(
3207 routed, reason,
3208 "DialetoError::leitura must route the input {reason:?} \
3209 verbatim into the tuple-newtype payload — any \
3210 wrapper-side truncation / normalization surfaces here \
3211 rather than at a downstream diagnostic shape drift"
3212 );
3213 }
3214 }
3215
3216 #[test]
3217 fn classify_reader_error_routes_through_leitura_ctor() {
3218 // Fail-before-pass-after routing pin: [`classify`]'s
3219 // tatara-lisp-reader map-err site MUST construct its
3220 // `Err(DialetoError::…)` through the substrate-primitive
3221 // [`DialetoError::leitura`] ctor rather than through an
3222 // open-coded tuple-newtype wrap. Pre-lift the wire-up hand-rolled
3223 // a `Self::Leitura(e.to_string())` block with no compile-time
3224 // link back to the substrate primitive; a future accidental
3225 // rebrand of the ctor body (an added `.trim()` on the reader
3226 // reason, a per-arm constant prefix like `"tatara-lisp:"`, a
3227 // widening of the payload into a `(String, usize)` tuple
3228 // carrying a caret offset) would then silently split the two
3229 // paths — the ctor consumers pick up the new shape, the
3230 // open-coded wire-up does not. Pinning byte-equality between
3231 // the observed `Err` and the ctor-constructed `Err` refuses
3232 // that split at caixa-core build time rather than surfacing far
3233 // from the wire-up commit as a downstream diagnostic-consumer
3234 // split. Peer of the sibling
3235 // `classify_form_wrong_head_routes_through_cabeca_errada_ctor`
3236 // pin above on the same [`DialetoError`] envelope's wrong-head
3237 // fallthrough axis.
3238 //
3239 // The malformed sources below each name a distinct
3240 // tatara-lisp-reader failure shape (unclosed paren, stray close
3241 // paren, unterminated string), so together they sweep the
3242 // reader's rejection surface rather than pinning against one
3243 // specific error message the reader upstream is free to reword.
3244 for src in [
3245 "(defcaixa :nome \"x\"",
3246 "defcaixa :nome \"x\")",
3247 "(defcaixa :nome \"unterminated",
3248 ] {
3249 let observed = classify(src);
3250 let Err(DialetoError::Leitura(reason)) = observed.clone() else {
3251 panic!(
3252 "classify({src:?}) must return the Leitura arm — got \
3253 {observed:?}"
3254 );
3255 };
3256 let via_ctor: Result<CaixaDialeto, DialetoError> =
3257 Err(DialetoError::leitura(reason.clone()));
3258 assert_eq!(
3259 observed, via_ctor,
3260 "classify({src:?}) must return the same Err shape as \
3261 DialetoError::leitura({reason:?}) — a drift here means \
3262 the wire-up de-lifted its tatara-lisp-reader fallthrough \
3263 arm off the substrate primitive"
3264 );
3265 }
3266 }
3267
3268 #[test]
3269 fn caixa_dialeto_try_from_str_routes_through_from_wire_accessor() {
3270 // Fail-before-pass-after byte-parity pin on the lifted
3271 // `impl TryFrom<&str> for CaixaDialeto`: for every arm in
3272 // [`CaixaDialeto::ALL`], the `.try_into()` / `TryFrom::try_from`
3273 // path must resolve to the same variant the sibling
3274 // [`CaixaDialeto::from_wire`] resolver returns on the same
3275 // [`CaixaDialeto::as_str`] wire byte-string input. Pins the
3276 // three-path convergence discipline the [`CaixaDialeto`] closed-
3277 // set typed enum now carries on the `str → Self` reverse-
3278 // projection axis: `<CaixaDialeto as TryFrom<&str>>::try_from(s)`
3279 // (the newly lifted trait-idiomatic reverse projection),
3280 // `CaixaDialeto::from_wire(s)` (the substrate-primitive method-
3281 // named `Option<Self>` accessor the trait impl delegates through),
3282 // and the round-trip identity `variant.as_str() → variant`
3283 // (the four-arm closed accept-set shared between the emitter and
3284 // both reverse-projection consumers) must resolve to the same
3285 // typed [`CaixaDialeto`] discriminator on every arm.
3286 //
3287 // A future silent detour that routes the impl through a
3288 // divergent projection (a per-arm inline
3289 // `match s { "Pacote" => …, … }` re-inlining that opens a
3290 // compile-time link to the un-lifted arm-literal, a swap onto
3291 // the second-axis [`CaixaDialeto::palavra_canonica`] /
3292 // [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`]
3293 // accessors that carry distinct byte-shapes per axis, an accept-
3294 // set widening that silently accepts one axis's byte-shapes as
3295 // parseable on the other axis) trips at caixa-core test time
3296 // under `assert_eq!` rather than at a downstream
3297 // `TryFrom<&str>`-bound consumer's silent split. Peer of the
3298 // sibling
3299 // [`crate::kind::tests::caixa_kind_try_from_str_routes_through_from_wire_accessor`]
3300 // (3c83606) on the top-level [`crate::CaixaKind`] closed-set
3301 // discriminator's reverse-projection axis — extends the trait-
3302 // idiomatic reverse-projection axis onto the seventh closed-set
3303 // fieldless typed enum on the caixa surface (the second one to
3304 // carry the paired `TryFrom<&str>` impl).
3305 for &variant in CaixaDialeto::ALL {
3306 let wire = variant.as_str();
3307 let via_try_from: CaixaDialeto = <CaixaDialeto as TryFrom<&str>>::try_from(wire)
3308 .unwrap_or_else(|()| {
3309 panic!(
3310 "CaixaDialeto::try_from({wire:?}) must accept every \
3311 CaixaDialeto::as_str output — got Err(()) for the \
3312 wire byte-string of {variant:?}"
3313 )
3314 });
3315 let via_from_wire: CaixaDialeto = CaixaDialeto::from_wire(wire).unwrap_or_else(|| {
3316 panic!(
3317 "CaixaDialeto::from_wire({wire:?}) must accept every \
3318 CaixaDialeto::as_str output — got None for the wire \
3319 byte-string of {variant:?}"
3320 )
3321 });
3322 assert_eq!(
3323 via_try_from, variant,
3324 "CaixaDialeto::try_from(CaixaDialeto::{variant:?}.as_str()) \
3325 must return CaixaDialeto::{variant:?} — the trait-idiomatic \
3326 reverse projection must land on the same arm the method-named \
3327 from_wire resolver does",
3328 );
3329 assert_eq!(
3330 via_try_from, via_from_wire,
3331 "CaixaDialeto::try_from({wire:?}) ({via_try_from:?}) must \
3332 byte-equal CaixaDialeto::from_wire({wire:?}) ({via_from_wire:?}) \
3333 on the same input — divergence signals a silent detour off the \
3334 shared substrate-primitive resolver",
3335 );
3336 assert_eq!(
3337 <CaixaDialeto as TryFrom<&str>>::try_from(wire).ok(),
3338 CaixaDialeto::from_wire(wire),
3339 "the Result::ok() projection of TryFrom<&str> must byte-equal \
3340 the sibling from_wire Option<Self> output on {wire:?} — the \
3341 two accessors must share the same accept-set and typed \
3342 outcome per arm",
3343 );
3344 }
3345 }
3346
3347 #[test]
3348 fn caixa_dialeto_try_from_str_rejects_unknown_byte_strings() {
3349 // Rejection witness on the trait-idiomatic reverse-projection
3350 // axis: any string outside the four-arm [`CaixaDialeto::as_str`]
3351 // output set must resolve to `Err(())` through the lifted
3352 // [`impl TryFrom<&str> for CaixaDialeto`]. A future accidental
3353 // widening of the accept-set (a case-insensitive match that
3354 // accepts `"pacote"` on the wire axis, a hand-rolled Levenshtein-
3355 // forgiving arm-lookup that admits `"Pacotee"` typos, a silent
3356 // acceptance of the sibling [`CaixaDialeto::palavra_canonica`]
3357 // `"defcaixa"` / `"defmolde"` byte-shapes on this axis, a swap
3358 // onto the [`CaixaDialeto::consumidor`] `"pleme-doc-gen"` /
3359 // `"caixa-core / feira"` / `"nobody known"` byte-shapes) would
3360 // silently drift the trait-idiomatic parser's accept-set from
3361 // the sibling [`CaixaDialeto::from_wire`] resolver's — a
3362 // downstream `TryFrom<&str>`-bound consumer binding a malformed
3363 // byte-string through this impl would then bind a plausibly-
3364 // wrong typed arm the caller does not route through any fallback,
3365 // silently misclassifying the reloaded row.
3366 //
3367 // Sweeps the same rejection set the sibling
3368 // [`caixa_dialeto_from_wire_rejects_unknown_byte_strings`] pin
3369 // walks (the shared `from_wire` resolver both accessors delegate
3370 // through) so the trait-idiomatic axis and the method-named axis
3371 // stay locked to the same accept-set by construction. Peer of the
3372 // sibling
3373 // [`crate::kind::tests::caixa_kind_try_from_str_rejects_unknown_byte_strings`]
3374 // (3c83606) on the top-level [`crate::CaixaKind`] closed-set
3375 // discriminator's trait-idiomatic reverse-projection axis.
3376 for bad in [
3377 "",
3378 " ",
3379 "pacote",
3380 "PACOTE",
3381 "molde",
3382 "MoldePositional",
3383 "desconhecido",
3384 "Unknown",
3385 "defcaixa",
3386 "defmolde",
3387 "?",
3388 "caixa-core / feira",
3389 "pleme-doc-gen",
3390 "nobody known",
3391 "Pacote ",
3392 " Pacote",
3393 ] {
3394 assert_eq!(
3395 <CaixaDialeto as TryFrom<&str>>::try_from(bad),
3396 Err(()),
3397 "CaixaDialeto::try_from({bad:?}) must return Err(()) — the \
3398 trait-idiomatic parser's accept-set is exactly the four \
3399 CaixaDialeto::as_str outputs; a widening would silently \
3400 split the trait-idiomatic reverse-projection axis from the \
3401 sibling from_wire resolver's arm-set"
3402 );
3403 }
3404 }
3405
3406 #[test]
3407 fn caixa_dialeto_from_str_routes_through_try_from_str_impl() {
3408 // Fail-before-pass-after byte-parity pin on the newly lifted
3409 // `impl std::str::FromStr for CaixaDialeto` — asserts the
3410 // standard-library `.parse()` parse-axis entry point and the
3411 // paired [`super::CaixaDialeto::try_from`] `TryFrom<&str>` impl
3412 // (which in turn routes through the substrate-primitive
3413 // [`super::CaixaDialeto::from_wire`] `Option<Self>` accessor)
3414 // resolve to the same four-arm accept-set across every arm the
3415 // exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
3416 // Extends the substrate-wide `FromStr` parse-axis campaign —
3417 // opened on [`crate::dep::DepList`] via 6167092 as first-
3418 // mover, extended onto the structurally most fundamental
3419 // closed-set typed enum via [`crate::CaixaKind`] (9867432),
3420 // then onto the first M3-mesh-primitive-defining slot enum
3421 // via [`crate::aplicacao::PlacementStrategy`] (62ef49a) —
3422 // onto the dialect-classification axis every [`crate::Caixa`]
3423 // carries through its parsed manifest form. The peer
3424 // method-named `from_wire` accessor and the paired
3425 // `TryFrom<&str>` trait impl fix the four-arm PascalCase
3426 // accept-set; this pin locks the `FromStr::from_str` trait
3427 // entry point onto the same set so any future divergence (a
3428 // stray per-arm `match s` re-inlining that opens a compile-
3429 // time link to an un-lifted arm-literal, a swap onto a hand-
3430 // rolled parser that widens the accept-set past the four
3431 // lifted [`crate::render::CAIXA_DIALETO_WIRE_*`] consts) trips
3432 // at caixa-core test time.
3433 use std::str::FromStr;
3434 for &variant in CaixaDialeto::ALL {
3435 let wire = variant.as_str();
3436 assert_eq!(
3437 <CaixaDialeto as FromStr>::from_str(wire),
3438 Ok(variant),
3439 "FromStr impl on CaixaDialeto must round-trip \
3440 CaixaDialeto::{variant:?}.as_str() = {wire:?} back to \
3441 Ok(CaixaDialeto::{variant:?}) — divergence from \
3442 CaixaDialeto::try_from signals a silent detour off the \
3443 paired reverse-projection trait impl"
3444 );
3445 assert_eq!(
3446 <CaixaDialeto as FromStr>::from_str(wire).ok(),
3447 CaixaDialeto::from_wire(wire),
3448 "FromStr ok()-projection on {wire:?} must byte-equal \
3449 CaixaDialeto::from_wire on the same input — divergence \
3450 signals the two reverse-projection trait paths have \
3451 drifted off the substrate-primitive accessor"
3452 );
3453 // `.parse::<CaixaDialeto>()` short-form witness — the
3454 // stdlib consumer surface that reaches the enum through
3455 // the `T: FromStr` bound, not through `TryFrom<&str>`.
3456 let via_parse: Result<CaixaDialeto, ()> = wire.parse();
3457 assert_eq!(
3458 via_parse,
3459 Ok(variant),
3460 "`{wire:?}`.parse::<CaixaDialeto>() must resolve to \
3461 Ok(CaixaDialeto::{variant:?}) — divergence signals \
3462 the stdlib `.parse()` short-form has drifted from the \
3463 lifted `FromStr::from_str` impl"
3464 );
3465 }
3466 }
3467
3468 #[test]
3469 fn caixa_dialeto_from_str_rejects_unknown_byte_strings() {
3470 // Rejection witness on the `impl FromStr for CaixaDialeto` —
3471 // sweeps candidate byte-strings outside the four-arm
3472 // PascalCase accept-set the sibling
3473 // [`super::CaixaDialeto::as_str`] emits and asserts every one
3474 // lands on `Err(())`, so a future accidental widening of the
3475 // trait impl's accept-set (a stray case-fold path, a silent
3476 // acceptance of the sibling [`CaixaDialeto::palavra_canonica`]
3477 // `"defcaixa"` / `"defmolde"` byte-shapes on this axis, a
3478 // swap onto the [`CaixaDialeto::consumidor`] /
3479 // [`CaixaDialeto::descricao`] axes' byte-shapes) trips at
3480 // caixa-core test time. Peer of the sibling
3481 // [`caixa_dialeto_try_from_str_rejects_unknown_byte_strings`]
3482 // rejection witness — the two pins together bracket both
3483 // reverse-projection trait impls against the same rejected
3484 // set. Peer of the sibling
3485 // [`crate::kind::tests::caixa_kind_from_str_rejects_unknown_byte_strings`]
3486 // (9867432) rejection witness on the top-level
3487 // [`crate::CaixaKind`] closed-set discriminator's trait-
3488 // idiomatic `FromStr` parse axis.
3489 use std::str::FromStr;
3490 let rejected: &[&str] = &[
3491 "",
3492 " ",
3493 "pacote",
3494 "PACOTE",
3495 "molde",
3496 "MoldePositional",
3497 "desconhecido",
3498 "Unknown",
3499 "defcaixa",
3500 "defmolde",
3501 "?",
3502 "caixa-core / feira",
3503 "pleme-doc-gen",
3504 "nobody known",
3505 "Pacote ",
3506 " Pacote",
3507 "Pacote\n",
3508 "\"Pacote\"",
3509 ];
3510 for &input in rejected {
3511 assert_eq!(
3512 <CaixaDialeto as FromStr>::from_str(input),
3513 Err(()),
3514 "FromStr impl on CaixaDialeto must reject unknown \
3515 byte-string {input:?} — divergence signals a silent \
3516 accept-set widening past the four lifted \
3517 crate::render::CAIXA_DIALETO_WIRE_* wire constants"
3518 );
3519 assert_eq!(
3520 <CaixaDialeto as FromStr>::from_str(input).ok(),
3521 CaixaDialeto::from_wire(input),
3522 "FromStr ok()-projection on {input:?} must byte-equal \
3523 CaixaDialeto::from_wire on the same input — \
3524 divergence signals the FromStr trait path has drifted \
3525 off the substrate-primitive accessor"
3526 );
3527 let via_parse: Result<CaixaDialeto, ()> = input.parse();
3528 assert_eq!(
3529 via_parse,
3530 Err(()),
3531 "`{input:?}`.parse::<CaixaDialeto>() must reject the \
3532 unknown byte-string — divergence signals the stdlib \
3533 `.parse()` short-form has drifted from the lifted \
3534 `FromStr::from_str` impl"
3535 );
3536 }
3537 }
3538
3539 #[test]
3540 fn caixa_dialeto_from_into_static_str_routes_through_as_str_accessor() {
3541 // Fail-before-pass-after byte-parity pin on the newly lifted
3542 // `impl From<CaixaDialeto> for &'static str` — asserts the
3543 // standard-library trait impl and the substrate-primitive
3544 // [`CaixaDialeto::as_str`] `pub const fn` accessor resolve to
3545 // the same four-arm emit-set across every arm the exhaustive
3546 // [`CaixaDialeto::ALL`] slice enumerates. Any future silent
3547 // detour that routes the trait impl through a divergent
3548 // projection (a per-arm inline `match dialeto { Pacote =>
3549 // "Pacote", … }` re-inlining that opens a compile-time link to
3550 // the un-lifted arm-literal, an accidental swap onto the second-
3551 // axis [`CaixaDialeto::palavra_canonica`] /
3552 // [`CaixaDialeto::consumidor`] / [`CaixaDialeto::descricao`]
3553 // accessors that carry distinct byte-shapes per axis) trips at
3554 // caixa-core test time under `assert_eq!` rather than at a
3555 // downstream `impl Into<&'static str>`-bound consumer's silent
3556 // split. Sweeps every one of the four arms [`CaixaDialeto::ALL`]
3557 // carries so no arm's projection is covered only by the sibling
3558 // method-named `as_str` / [`std::fmt::Display`] / [`AsRef<str>`]
3559 // paths. Materializes the `<&'static str as
3560 // From<CaixaDialeto>>::from` output in a `const`-shape binding
3561 // to make the `'static` lifetime promise a build-time invariant
3562 // — a future accidental downgrade of any of the four arms'
3563 // returned literals to a non-`&'static str` (a `String::leak()`-
3564 // produced return, a `Box::leak`-cast, an intermediate lifetime-
3565 // erasing helper) trips at caixa-core build time rather than at
3566 // a downstream `'static`-bound consumer. Peer of the sibling
3567 // [`crate::supervisor::tests::restart_strategy_from_into_static_str_routes_through_as_str_accessor`]
3568 // (523157d) /
3569 // [`crate::supervisor::tests::restart_policy_from_into_static_str_routes_through_as_str_accessor`]
3570 // (9fb37d0) /
3571 // [`crate::kind::tests::caixa_kind_from_into_static_str_routes_through_as_str_accessor`]
3572 // (edb827b) pins on the sibling closed-set typed-enum forward-
3573 // projection axes — extends the trait-idiomatic forward-
3574 // projection axis onto the fourth closed-set fieldless typed
3575 // enum on the caixa surface (the dialect-classification axis,
3576 // second-of-two closed-set typed enums in caixa-core outside
3577 // the OTP-shape M2 slot).
3578 const PACOTE: &str = CaixaDialeto::Pacote.as_str();
3579 const MOLDE: &str = CaixaDialeto::Molde.as_str();
3580 const MOLDE_POSICIONAL: &str = CaixaDialeto::MoldePosicional.as_str();
3581 const DESCONHECIDO: &str = CaixaDialeto::Desconhecido.as_str();
3582 for &variant in CaixaDialeto::ALL {
3583 let via_trait: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
3584 let via_method: &'static str = variant.as_str();
3585 assert_eq!(
3586 via_trait, via_method,
3587 "From<CaixaDialeto> for &'static str impl must round-trip \
3588 CaixaDialeto::{variant:?} to the same `PascalCase` byte-string \
3589 CaixaDialeto::as_str returns — divergence signals a silent \
3590 detour off the substrate-primitive accessor"
3591 );
3592 let via_into: &'static str = variant.into();
3593 assert_eq!(
3594 via_into, via_method,
3595 "Into<&'static str>::into on CaixaDialeto::{variant:?} must \
3596 byte-equal CaixaDialeto::as_str on the same input — the \
3597 blanket-derived Into shape must resolve to the same as_str \
3598 dispatch as the explicit From impl"
3599 );
3600 }
3601 assert_eq!(
3602 [PACOTE, MOLDE, MOLDE_POSICIONAL, DESCONHECIDO],
3603 ["Pacote", "Molde", "MoldePosicional", "Desconhecido"],
3604 "const-context CaixaDialeto::as_str must resolve to the four \
3605 `PascalCase` variant-name byte-strings — a future accidental \
3606 downgrade of any arm to a non-const or non-static byte-string \
3607 breaks the `&'static str`-lifetime promise the paired \
3608 From<CaixaDialeto> for &'static str impl carries by \
3609 construction"
3610 );
3611 }
3612
3613 #[test]
3614 fn caixa_dialeto_from_into_static_str_and_as_str_partition_the_emit_set() {
3615 // Cross-axis partition pin: the paired trait-idiomatic
3616 // `From<CaixaDialeto> for &'static str` forward projection and
3617 // the method-named [`CaixaDialeto::as_str`] forward projection
3618 // must resolve identically on *every* arm, not just the ones
3619 // named in the primary byte-parity pin above. Sweeps every
3620 // [`CaixaDialeto::ALL`] arm and asserts the trait's `From::from`
3621 // output byte-equals the method-named accessor's return-value on
3622 // each, locking the two forward-projection paths together by
3623 // construction so any future detour (a stray `From` special-case
3624 // that lands on a divergent per-arm literal outside the paired
3625 // `as_str` dispatch, a hypothetical rebrand touching one axis
3626 // without the other) trips at caixa-core test time. Peer of the
3627 // sibling forward-projection partition pins
3628 // [`crate::supervisor::tests::restart_strategy_from_into_static_str_and_as_str_partition_the_emit_set`]
3629 // (523157d) /
3630 // [`crate::supervisor::tests::restart_policy_from_into_static_str_and_as_str_partition_the_emit_set`]
3631 // (9fb37d0) /
3632 // [`crate::kind::tests::caixa_kind_from_into_static_str_and_as_str_partition_the_emit_set`]
3633 // (edb827b) — extends the round-trip discipline onto the fourth
3634 // closed-set typed enum on the caixa surface, closing the two-way
3635 // `Self ↔ &'static str` round-trip on the trait-idiomatic pair
3636 // (`From<Self> for &'static str` + `TryFrom<&str> for Self`) as
3637 // well as the pre-existing method-named pair (`as_str` +
3638 // `from_wire`).
3639 for &variant in CaixaDialeto::ALL {
3640 let via_trait: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
3641 let via_method: &'static str = variant.as_str();
3642 assert_eq!(
3643 via_trait, via_method,
3644 "From<CaixaDialeto> for &'static str and \
3645 CaixaDialeto::as_str must resolve identically on \
3646 CaixaDialeto::{variant:?} — divergence signals the \
3647 two forward-projection paths have drifted onto different \
3648 emit-sets"
3649 );
3650 }
3651 // Round-trip witness: every arm's forward `From` output re-parses
3652 // through the paired trait-idiomatic reverse `TryFrom<&str>` back
3653 // to the original variant. Closes the two-way `CaixaDialeto ↔
3654 // &'static str` round-trip on the trait-idiomatic axis pair
3655 // directly (no wire-vocab intermediate the peer [`CaixaKind`]
3656 // axis pair requires — the emit-side [`CaixaDialeto::as_str`]
3657 // and the parse-side [`CaixaDialeto::from_wire`] share the same
3658 // `PascalCase` byte-string vocabulary by construction), mirroring
3659 // the pre-existing method-named `as_str` + `from_wire` round-trip
3660 // on the substrate-primitive axis pair.
3661 for &variant in CaixaDialeto::ALL {
3662 let emitted: &'static str = variant.into();
3663 let re_parsed: Result<CaixaDialeto, ()> =
3664 <CaixaDialeto as TryFrom<&str>>::try_from(emitted);
3665 assert_eq!(
3666 re_parsed,
3667 Ok(variant),
3668 "trait-idiomatic axis pair must round-trip \
3669 CaixaDialeto::{variant:?} through `.into::<&'static \
3670 str>()` and back through `TryFrom<&str>` — a break signals \
3671 the forward-emit and reverse-parse axes have drifted onto \
3672 different vocabularies"
3673 );
3674 }
3675 }
3676
3677 #[test]
3678 fn caixa_dialeto_is_molde_family_routes_through_is_variant_derived_predicates() {
3679 // Byte-parity pin on the post-lift [`CaixaDialeto::is_molde_family`]
3680 // convergence: for every arm in [`CaixaDialeto::ALL`], the typed
3681 // predicate must byte-equal the direct
3682 // `self.is_molde() || self.is_molde_posicional()` composition of
3683 // the two derived per-arm predicates. Pre-lift the predicate
3684 // hand-rolled `matches!(self, Self::Molde | Self::MoldePosicional)`
3685 // with no compile-time link back to the closed-set typed dispatch;
3686 // post-lift it routes through the derived predicates so a future
3687 // arm rename or `#[is_variant(name = "…")]` override lands at
3688 // exactly one dispatch on the substrate primitive. Pinning the
3689 // byte-equality here refuses a future accidental split between
3690 // the composed predicate and the paired derived predicates
3691 // (a hand-rolled shadow `impl` that overrides one path but not
3692 // the other, an accidental rebrand of `is_molde_family`'s body
3693 // back to the pre-lift `matches!` form) at caixa-core build time.
3694 for &d in CaixaDialeto::ALL {
3695 let via_derived = d.is_molde() || d.is_molde_posicional();
3696 let via_is_molde_family = d.is_molde_family();
3697 assert_eq!(
3698 via_is_molde_family, via_derived,
3699 "CaixaDialeto::{d:?}.is_molde_family() ({via_is_molde_family}) \
3700 must byte-equal the composed derived predicates \
3701 is_molde() || is_molde_posicional() ({via_derived}) — a \
3702 split between the composed predicate and its derived \
3703 building blocks would let a future arm rename land at one \
3704 path and drift at the other, which is exactly the drift \
3705 the IsVariant lift refuses"
3706 );
3707 }
3708 }
3709
3710 #[test]
3711 fn caixa_dialeto_from_borrowed_into_static_str_routes_through_as_str_accessor() {
3712 // Fail-before-pass-after byte-parity pin on the newly lifted
3713 // `impl From<&CaixaDialeto> for &'static str` — asserts the
3714 // borrowed-input standard-library trait impl and the substrate-
3715 // primitive [`CaixaDialeto::as_str`] `pub const fn` accessor
3716 // resolve to the same four-arm emit-set across every arm the
3717 // exhaustive [`CaixaDialeto::ALL`] slice enumerates. Rust's
3718 // `From` trait does not auto-derive the borrowed-input sibling
3719 // from a paired owned-input impl (no `impl<T, U> From<&T> for U
3720 // where T: Copy, U: From<T>` blanket in `core`), so the
3721 // borrowed-input axis is a distinct trait-idiomatic surface that
3722 // a `.iter().map(Into::into)` shape over [`CaixaDialeto::ALL`]
3723 // (whose iterator yields `&CaixaDialeto`, not `CaixaDialeto`)
3724 // reaches through this impl and no other — the paired owned-
3725 // input [`From<CaixaDialeto>`] impl requires an explicit
3726 // `.copied()` / dereference before the trait fires.
3727 // Materializes the `<&'static str as From<&CaixaDialeto>>::from`
3728 // output in a `const`-shape binding to make the `'static`
3729 // lifetime promise a build-time invariant — a future accidental
3730 // downgrade of any of the four arms' returned literals to a
3731 // non-`&'static str` trips at caixa-core build time rather than
3732 // at a downstream `'static`-bound consumer. Peer of the sibling
3733 // [`crate::dep::tests::dep_list_from_borrowed_into_static_str_routes_through_as_str_accessor`]
3734 // (64aa742) /
3735 // [`crate::kind::tests::caixa_kind_from_borrowed_into_static_str_routes_through_as_str_accessor`]
3736 // (5ab993a) pins on the sibling closed-set typed-enum borrowed-
3737 // input forward-projection axes — extends the borrowed-input
3738 // axis discipline onto the third peer on the substrate-wide
3739 // campaign, the dialect-classification axis.
3740 const PACOTE: &str = CaixaDialeto::Pacote.as_str();
3741 const MOLDE: &str = CaixaDialeto::Molde.as_str();
3742 const MOLDE_POSICIONAL: &str = CaixaDialeto::MoldePosicional.as_str();
3743 const DESCONHECIDO: &str = CaixaDialeto::Desconhecido.as_str();
3744 for variant in CaixaDialeto::ALL {
3745 let via_trait: &'static str = <&'static str as From<&CaixaDialeto>>::from(variant);
3746 let via_method: &'static str = variant.as_str();
3747 assert_eq!(
3748 via_trait, via_method,
3749 "From<&CaixaDialeto> for &'static str impl must round-trip \
3750 &CaixaDialeto::{variant:?} to the same `PascalCase` byte-\
3751 string CaixaDialeto::as_str returns — divergence signals a \
3752 silent detour off the substrate-primitive accessor"
3753 );
3754 let via_into: &'static str = variant.into();
3755 assert_eq!(
3756 via_into, via_method,
3757 "Into<&'static str>::into on &CaixaDialeto::{variant:?} must \
3758 byte-equal CaixaDialeto::as_str on the same input — the \
3759 blanket-derived Into shape must resolve to the same as_str \
3760 dispatch as the explicit From impl"
3761 );
3762 }
3763 assert_eq!(
3764 [PACOTE, MOLDE, MOLDE_POSICIONAL, DESCONHECIDO],
3765 ["Pacote", "Molde", "MoldePosicional", "Desconhecido"],
3766 "const-context CaixaDialeto::as_str must resolve to the four \
3767 `PascalCase` variant-name byte-strings — the borrowed-input \
3768 From<&CaixaDialeto> for &'static str impl inherits its \
3769 `'static` lifetime promise from the same accessor the owned-\
3770 input sibling routes through"
3771 );
3772 }
3773
3774 #[test]
3775 fn caixa_dialeto_from_owned_and_borrowed_into_static_str_agree_on_every_arm() {
3776 // Cross-axis partition pin: the paired trait-idiomatic
3777 // owned-input `From<CaixaDialeto> for &'static str` and
3778 // borrowed-input `From<&CaixaDialeto> for &'static str` (this
3779 // lift) forward projections must resolve identically on every
3780 // arm, locking the two input-shape paths together so any future
3781 // detour trips at caixa-core test time. Then a witness that a
3782 // `.iter().map(Into::into)` pipe over [`CaixaDialeto::ALL`]
3783 // (whose iterator yields `&CaixaDialeto`) materializes the four-
3784 // arm accept-set through the borrowed-input axis alone — the
3785 // exact shape a future M4 admission-webhook rejection body
3786 // composer, a future substrate-wide per-arm diagnostic column,
3787 // or a `HashMap::<&'static str, CaixaDialeto>::from_iter(
3788 // CaixaDialeto::ALL.iter().map(|d| (d.into(), *d)))`-style
3789 // per-dialect lookup reaches through — closing the two-way
3790 // owned/borrowed input-shape symmetry on the forward-projection
3791 // trait-idiomatic axis. Peer of the sibling
3792 // [`crate::dep::tests::dep_list_from_owned_and_borrowed_into_static_str_agree_on_every_arm`]
3793 // (64aa742) /
3794 // [`crate::kind::tests::caixa_kind_from_owned_and_borrowed_into_static_str_agree_on_every_arm`]
3795 // (5ab993a) partition pins — extends the borrowed-input axis
3796 // discipline onto the third peer on the substrate-wide campaign.
3797 for &variant in CaixaDialeto::ALL {
3798 let owned: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
3799 let borrowed: &'static str = <&'static str as From<&CaixaDialeto>>::from(&variant);
3800 assert_eq!(
3801 owned, borrowed,
3802 "From<CaixaDialeto> and From<&CaixaDialeto> for &'static str \
3803 must resolve identically on CaixaDialeto::{variant:?} — \
3804 divergence signals the owned-input and borrowed-input \
3805 forward-projection paths have drifted onto different \
3806 emit-sets"
3807 );
3808 }
3809 let via_iter: Vec<&'static str> = CaixaDialeto::ALL.iter().map(Into::into).collect();
3810 let via_method: Vec<&'static str> = CaixaDialeto::ALL.iter().map(|d| d.as_str()).collect();
3811 assert_eq!(
3812 via_iter, via_method,
3813 "`.iter().map(Into::into)` over CaixaDialeto::ALL must byte-\
3814 equal `.iter().map(|d| d.as_str())` on every arm — the \
3815 borrowed-input `From<&CaixaDialeto> for &'static str` axis \
3816 is what makes the `.iter().map(Into::into)` shape route \
3817 through the substrate-primitive `CaixaDialeto::as_str` \
3818 accessor rather than through a per-call-site `.copied()` / \
3819 dereference detour"
3820 );
3821 // Direct round-trip witness on the borrowed-input axis: every
3822 // arm's borrowed `From` output re-parses through the paired
3823 // trait-idiomatic reverse `TryFrom<&str>` back to the original
3824 // variant. Unlike the peer [`crate::CaixaKind`] axis pair
3825 // (whose forward `From<Self> for &'static str` emits the
3826 // lowercase Portuguese `as_str` diagnostic vocabulary while
3827 // the reverse `TryFrom<&str>` parses the `PascalCase`
3828 // `wire_name` author-surface vocabulary, forcing the round-trip
3829 // through an intermediate wire-vocab hop), [`CaixaDialeto`]'s
3830 // [`CaixaDialeto::as_str`] emit and [`CaixaDialeto::from_wire`]
3831 // parse share the same `PascalCase` vocabulary by construction,
3832 // so the borrowed-input forward axis and the reverse axis
3833 // compose directly.
3834 for &variant in CaixaDialeto::ALL {
3835 let borrowed: &'static str = <&'static str as From<&CaixaDialeto>>::from(&variant);
3836 let re_parsed: Result<CaixaDialeto, ()> =
3837 <CaixaDialeto as TryFrom<&str>>::try_from(borrowed);
3838 assert_eq!(
3839 re_parsed,
3840 Ok(variant),
3841 "trait-idiomatic borrowed-input round-trip must project \
3842 &CaixaDialeto::{variant:?} through \
3843 `<&'static str>::from(&variant)` and back through \
3844 `TryFrom<&str>` — a break signals the borrowed-input \
3845 forward-emit axis and the reverse-parse axis have \
3846 drifted onto different vocabularies"
3847 );
3848 }
3849 }
3850
3851 #[test]
3852 fn caixa_dialeto_from_into_owned_string_routes_through_as_str_accessor() {
3853 // Fail-before-pass-after byte-parity pin on the newly lifted
3854 // `impl From<CaixaDialeto> for String` — asserts the owned-`String`
3855 // -returning standard-library trait impl and the substrate-
3856 // primitive [`CaixaDialeto::as_str`] `pub const fn` accessor
3857 // resolve to the same four-arm emit-set across every arm the
3858 // exhaustive [`CaixaDialeto::ALL`] slice enumerates. Rust's
3859 // standard library does not carry a blanket
3860 // `impl<T: AsRef<str>> From<T> for String` (nor an
3861 // `impl<T: fmt::Display> From<T> for String`), so the
3862 // owned-`String` forward-projection axis is a distinct trait-
3863 // idiomatic surface that a `let key: String = dialeto.into();`-
3864 // shaped call site reaches through this impl and no other — the
3865 // paired sibling `From<CaixaDialeto> for &'static str` impl
3866 // forces every owned-`String` call site through an explicit
3867 // `.to_owned()` / `String::from` restatement. Peer of the
3868 // first-mover
3869 // [`crate::supervisor::tests::restart_strategy_from_into_owned_string_routes_through_as_str_accessor`]
3870 // (7baa18a), the second-peer
3871 // [`crate::supervisor::tests::restart_policy_from_into_owned_string_routes_through_as_str_accessor`]
3872 // (7851725), and the third-peer
3873 // [`crate::kind::tests::caixa_kind_from_into_owned_string_routes_through_as_str_accessor`]
3874 // (231a18c) — extends the trait-idiomatic owned-`String`
3875 // forward-projection axis onto the fourth closed-set fieldless
3876 // typed enum on the caixa surface (the dialect-classification
3877 // axis, second peer outside the M2 OTP-shape sibling axis).
3878 for &variant in CaixaDialeto::ALL {
3879 let via_trait: String = <String as From<CaixaDialeto>>::from(variant);
3880 let via_method: &'static str = variant.as_str();
3881 assert_eq!(
3882 via_trait.as_str(),
3883 via_method,
3884 "From<CaixaDialeto> for String impl must round-trip \
3885 CaixaDialeto::{variant:?} to the same `PascalCase` \
3886 arm-string CaixaDialeto::as_str returns — divergence \
3887 signals a silent detour off the substrate-primitive \
3888 accessor"
3889 );
3890 let via_into: String = variant.into();
3891 assert_eq!(
3892 via_into.as_str(),
3893 via_method,
3894 "Into<String>::into on CaixaDialeto::{variant:?} must \
3895 byte-equal CaixaDialeto::as_str on the same input — the \
3896 blanket-derived Into shape must resolve to the same \
3897 as_str dispatch as the explicit From impl"
3898 );
3899 }
3900 }
3901
3902 #[test]
3903 fn caixa_dialeto_from_into_owned_string_and_static_str_agree_on_every_arm() {
3904 // Cross-axis partition pin: the paired trait-idiomatic
3905 // owned-`String` `From<CaixaDialeto> for String` (this lift) and
3906 // owned-`&'static str` `From<CaixaDialeto> for &'static str`
3907 // (c189a6f) forward projections must resolve identically on
3908 // every arm, locking the two return-type-shape paths together
3909 // so any future detour trips at caixa-core test time. Also
3910 // byte-parity witness against the sibling
3911 // [`ToString::to_string`] surface routed through
3912 // [`std::fmt::Display`] — the three owned-heap-string paths
3913 // (`.into::<String>()`, `String::from`, `.to_string()`) must
3914 // resolve identically on every arm so a future consumer that
3915 // picks any of the three lands on the same four-arm
3916 // `PascalCase` accept-set. Then a `.iter().copied()
3917 // .map(String::from)` pipe witness over [`CaixaDialeto::ALL`]
3918 // that materializes the four-arm accept-set through the
3919 // owned-`String` axis alone — the exact shape a future M4
3920 // admission-webhook rejection body composer or a
3921 // `HashMap::<String, CaixaDialeto>::from_iter(
3922 // CaixaDialeto::ALL.iter().copied().map(|d| (d.into(), d)))`-
3923 // style owned-key per-dialect lookup reaches through — closing
3924 // the owned-`String` forward-projection axis's iterator-pipe
3925 // shape. Then a direct round-trip witness through the paired
3926 // trait-idiomatic reverse [`TryFrom<&str>`] axis on the
3927 // owned-`String`'s [`String::as_str`] borrow that closes the
3928 // two-way `Self → String → Self` round-trip on the trait-
3929 // idiomatic owned-`String` forward + reverse axis pair.
3930 //
3931 // Unlike the peer [`crate::CaixaKind`] axis pair (whose forward
3932 // `From` emit lands on the lowercase Portuguese `as_str`
3933 // diagnostic vocabulary while the reverse `TryFrom<&str>` parses
3934 // the `PascalCase` `wire_name` author-surface vocabulary,
3935 // forcing the round-trip through an intermediate
3936 // [`crate::CaixaKind::wire_name`] hop), [`CaixaDialeto`]'s
3937 // [`CaixaDialeto::as_str`] emit and [`CaixaDialeto::from_wire`]
3938 // parse share the same `PascalCase` vocabulary by construction
3939 // (there is no wire/diagnostic axis split on this enum), so
3940 // the owned-`String` forward axis and the reverse axis compose
3941 // directly — matching the peer
3942 // [`crate::supervisor::RestartStrategy`] /
3943 // [`crate::supervisor::RestartPolicy`] owned-`String` axis
3944 // pairs (whose forward emit and reverse parse also share one
3945 // `PascalCase` vocabulary by construction).
3946 for &variant in CaixaDialeto::ALL {
3947 let owned_string: String = <String as From<CaixaDialeto>>::from(variant);
3948 let owned_static: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
3949 assert_eq!(
3950 owned_string.as_str(),
3951 owned_static,
3952 "From<CaixaDialeto> for String and From<CaixaDialeto> for \
3953 &'static str must resolve identically on \
3954 CaixaDialeto::{variant:?} — divergence signals the \
3955 owned-`String` and owned-`&'static str` forward-\
3956 projection return-type-shape paths have drifted onto \
3957 different emit-sets"
3958 );
3959 let via_to_string: String = variant.to_string();
3960 assert_eq!(
3961 owned_string, via_to_string,
3962 "From<CaixaDialeto> for String must byte-equal \
3963 CaixaDialeto::to_string on CaixaDialeto::{variant:?} — \
3964 divergence signals the trait-idiomatic owned-`String` \
3965 forward-projection axis and the ToString-through-\
3966 Display axis have drifted onto different emit-sets"
3967 );
3968 }
3969 let via_iter: Vec<String> = CaixaDialeto::ALL
3970 .iter()
3971 .copied()
3972 .map(String::from)
3973 .collect();
3974 let via_method: Vec<String> = CaixaDialeto::ALL
3975 .iter()
3976 .map(|d| d.as_str().to_owned())
3977 .collect();
3978 assert_eq!(
3979 via_iter, via_method,
3980 "`.iter().copied().map(String::from)` over CaixaDialeto::ALL \
3981 must byte-equal `.iter().map(|d| d.as_str().to_owned())` on \
3982 every arm — the owned-`String` `From<CaixaDialeto> for \
3983 String` axis is what makes the `String::from` composition \
3984 route through the substrate-primitive `CaixaDialeto::as_str` \
3985 accessor rather than through a per-call-site `.to_owned()` / \
3986 `String::from(dialeto.as_str())` detour"
3987 );
3988 for &variant in CaixaDialeto::ALL {
3989 let emitted: String = variant.into();
3990 let re_parsed: Result<CaixaDialeto, ()> =
3991 <CaixaDialeto as TryFrom<&str>>::try_from(emitted.as_str());
3992 assert_eq!(
3993 re_parsed,
3994 Ok(variant),
3995 "trait-idiomatic owned-`String` forward-projection + \
3996 reverse-projection axis pair must round-trip \
3997 CaixaDialeto::{variant:?} through `.into::<String>()` \
3998 and back through `TryFrom<&str>` on the owned-`String`'s \
3999 String::as_str borrow — a break signals the owned-\
4000 `String` forward-emit and reverse-parse axes have \
4001 drifted onto different vocabularies (unlike the peer \
4002 CaixaKind axis pair, CaixaDialeto's forward emit and \
4003 reverse parse share one PascalCase vocabulary by \
4004 construction, so the round-trip composes directly)"
4005 );
4006 }
4007 }
4008
4009 #[test]
4010 fn caixa_dialeto_from_into_borrowed_owned_string_routes_through_as_str_accessor() {
4011 // Fail-before-pass-after byte-parity pin on the newly lifted
4012 // `impl From<&CaixaDialeto> for String` — asserts the borrowed-
4013 // input owned-`String`-returning standard-library trait impl and
4014 // the substrate-primitive [`super::CaixaDialeto::as_str`]
4015 // `pub const fn` accessor resolve to the same four-arm emit-set
4016 // across every arm the exhaustive [`super::CaixaDialeto::ALL`]
4017 // slice enumerates. Rust's standard library does not carry a
4018 // blanket `impl<T: AsRef<str>> From<&T> for String` (nor an
4019 // `impl<T: fmt::Display> From<&T> for String`), so the
4020 // borrowed-input owned-`String` forward-projection axis is a
4021 // distinct trait-idiomatic surface that a
4022 // `let key: String = (&dialeto).into();`-shaped call site
4023 // reaches through this impl and no other — the paired sibling
4024 // `From<CaixaDialeto> for String` impl forces every borrowed-
4025 // input call site through an explicit `Copy` deref
4026 // (`String::from(*dialeto)`) or an `.as_str().to_owned()` /
4027 // `.to_string()` detour. Peer of the first-mover
4028 // [`crate::supervisor::tests::restart_strategy_from_into_borrowed_owned_string_routes_through_as_str_accessor`]
4029 // (579385f), the second-peer
4030 // [`crate::supervisor::tests::restart_policy_from_into_borrowed_owned_string_routes_through_as_str_accessor`]
4031 // (8465740), the third-peer
4032 // [`crate::dep::tests::dep_list_from_into_borrowed_owned_string_routes_through_as_str_accessor`]
4033 // (e0cb617), and the fourth-peer
4034 // [`crate::kind::tests::caixa_kind_from_into_borrowed_owned_string_routes_through_as_str_accessor`]
4035 // (e76436d) — extends the trait-idiomatic borrowed-input owned-
4036 // `String` forward-projection axis onto the fourth closed-set
4037 // fieldless typed enum on the caixa surface (the dialect-
4038 // classification axis, second peer outside the M2 OTP-shape
4039 // sibling axis to reach the 2×2-completion corner).
4040 for &variant in CaixaDialeto::ALL {
4041 let via_trait: String = <String as From<&CaixaDialeto>>::from(&variant);
4042 let via_method: &'static str = variant.as_str();
4043 assert_eq!(
4044 via_trait.as_str(),
4045 via_method,
4046 "From<&CaixaDialeto> for String impl must round-trip \
4047 &CaixaDialeto::{variant:?} to the same `PascalCase` \
4048 arm-string CaixaDialeto::as_str returns — divergence \
4049 signals a silent detour off the substrate-primitive \
4050 accessor"
4051 );
4052 let via_into: String = (&variant).into();
4053 assert_eq!(
4054 via_into.as_str(),
4055 via_method,
4056 "Into<String>::into on &CaixaDialeto::{variant:?} must \
4057 byte-equal CaixaDialeto::as_str on the same input — \
4058 the blanket-derived Into shape must resolve to the \
4059 same as_str dispatch as the explicit From impl"
4060 );
4061 }
4062 }
4063
4064 #[test]
4065 fn caixa_dialeto_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm() {
4066 // Cross-axis partition pin: the newly lifted trait-idiomatic
4067 // borrowed-input owned-`String` `From<&CaixaDialeto> for String`
4068 // (this lift), the paired owned-input owned-`String`
4069 // `From<CaixaDialeto> for String` (88942cd), the paired
4070 // borrowed-input owned-`&'static str`
4071 // `From<&CaixaDialeto> for &'static str` (807b0b5), and the
4072 // paired owned-input owned-`&'static str`
4073 // `From<CaixaDialeto> for &'static str` (c189a6f) — every corner
4074 // of the `{Self, &Self} × {&'static str, String}` 2×2 trait-
4075 // idiomatic projection family — must resolve identically on
4076 // every arm, locking the four return-shape × input-shape paths
4077 // together so any future detour trips at caixa-core test time.
4078 // Also byte-parity witness against the sibling
4079 // [`ToString::to_string`] surface routed through
4080 // [`std::fmt::Display`] and a direct round-trip witness through
4081 // the paired trait-idiomatic reverse [`TryFrom<&str>`] axis on
4082 // the owned-`String`'s [`String::as_str`] borrow that closes
4083 // the two-way `&Self → String → Self` round-trip on the trait-
4084 // idiomatic borrowed-input owned-`String` forward + reverse
4085 // axis pair. Peer of the first-mover
4086 // [`crate::supervisor::tests::restart_strategy_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm`]
4087 // (579385f), the second-peer
4088 // [`crate::supervisor::tests::restart_policy_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm`]
4089 // (8465740), the third-peer
4090 // [`crate::dep::tests::dep_list_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm`]
4091 // (e0cb617), and the fourth-peer
4092 // [`crate::kind::tests::caixa_kind_from_into_borrowed_owned_string_agrees_with_paired_axes_on_every_arm`]
4093 // (e76436d) — closes the whole `{Self, &Self} × {&'static str,
4094 // String}` 2×2 projection corner on the fifth substrate-wide
4095 // closed-set fieldless typed enum peer (the dialect-
4096 // classification axis, second peer outside the M2 OTP-shape
4097 // sibling pair).
4098 //
4099 // Unlike the peer [`crate::CaixaKind`] axis pair (whose forward
4100 // `From` emit lands on the lowercase Portuguese `as_str`
4101 // diagnostic vocabulary while the reverse `TryFrom<&str>`
4102 // parses the `PascalCase` `wire_name` author-surface vocabulary,
4103 // forcing the round-trip through an intermediate
4104 // [`crate::CaixaKind::wire_name`] hop), [`super::CaixaDialeto`]'s
4105 // [`super::CaixaDialeto::as_str`] emit and
4106 // [`super::CaixaDialeto::from_wire`] parse share the same
4107 // `PascalCase` vocabulary by construction (there is no
4108 // wire/diagnostic axis split on this enum), so the borrowed-
4109 // input owned-`String` forward axis and the reverse axis compose
4110 // directly — matching the peer
4111 // [`crate::supervisor::RestartStrategy`] /
4112 // [`crate::supervisor::RestartPolicy`] / [`crate::dep::DepList`]
4113 // borrowed-input owned-`String` axis pairs.
4114 for &dialeto in CaixaDialeto::ALL {
4115 let borrowed_string: String = <String as From<&CaixaDialeto>>::from(&dialeto);
4116 let owned_string: String = <String as From<CaixaDialeto>>::from(dialeto);
4117 let borrowed_static: &'static str =
4118 <&'static str as From<&CaixaDialeto>>::from(&dialeto);
4119 let owned_static: &'static str = <&'static str as From<CaixaDialeto>>::from(dialeto);
4120 assert_eq!(
4121 borrowed_string, owned_string,
4122 "From<&CaixaDialeto> for String and From<CaixaDialeto> \
4123 for String must resolve identically on \
4124 CaixaDialeto::{dialeto:?} — divergence signals the \
4125 borrowed-input and owned-input owned-`String` forward-\
4126 projection input-shape paths have drifted onto \
4127 different emit-sets"
4128 );
4129 assert_eq!(
4130 borrowed_string.as_str(),
4131 borrowed_static,
4132 "From<&CaixaDialeto> for String and From<&CaixaDialeto> \
4133 for &'static str must resolve identically on \
4134 CaixaDialeto::{dialeto:?} — divergence signals the \
4135 borrowed-input `&'static str` and owned-`String` \
4136 return-shape paths have drifted onto different \
4137 emit-sets"
4138 );
4139 assert_eq!(
4140 borrowed_string.as_str(),
4141 owned_static,
4142 "From<&CaixaDialeto> for String and From<CaixaDialeto> \
4143 for &'static str must resolve identically on \
4144 CaixaDialeto::{dialeto:?} — divergence signals a break \
4145 in the diagonal corner of the {{Self, &Self}} × \
4146 {{&'static str, String}} 2×2 trait-idiomatic \
4147 projection family"
4148 );
4149 let via_to_string: String = dialeto.to_string();
4150 assert_eq!(
4151 borrowed_string, via_to_string,
4152 "From<&CaixaDialeto> for String must byte-equal \
4153 CaixaDialeto::to_string on CaixaDialeto::{dialeto:?} — \
4154 divergence signals the trait-idiomatic borrowed-input \
4155 owned-`String` forward-projection axis and the \
4156 ToString-through-Display axis have drifted onto \
4157 different emit-sets"
4158 );
4159 }
4160 let via_iter: Vec<String> = CaixaDialeto::ALL.iter().map(String::from).collect();
4161 let via_method: Vec<String> = CaixaDialeto::ALL
4162 .iter()
4163 .map(|d| d.as_str().to_owned())
4164 .collect();
4165 assert_eq!(
4166 via_iter, via_method,
4167 "`.iter().map(String::from)` over CaixaDialeto::ALL — a \
4168 call site whose iteration axis holds `&CaixaDialeto` by \
4169 construction — must byte-equal `.iter().map(|d| \
4170 d.as_str().to_owned())` on every arm — the borrowed-input \
4171 owned-`String` `From<&CaixaDialeto> for String` axis is \
4172 what makes the `String::from` composition route through \
4173 the substrate-primitive `CaixaDialeto::as_str` accessor \
4174 without a spurious `Copy` deref (which would only be \
4175 reachable through the owned-input `From<CaixaDialeto> for \
4176 String` axis by first calling `.copied()` on the iterator)"
4177 );
4178 for &variant in CaixaDialeto::ALL {
4179 let emitted: String = (&variant).into();
4180 let re_parsed: Result<CaixaDialeto, ()> =
4181 <CaixaDialeto as TryFrom<&str>>::try_from(emitted.as_str());
4182 assert_eq!(
4183 re_parsed,
4184 Ok(variant),
4185 "trait-idiomatic borrowed-input owned-`String` \
4186 forward-projection + reverse-projection axis pair \
4187 must round-trip &CaixaDialeto::{variant:?} through \
4188 `.into::<String>()` on the borrowed-input surface and \
4189 back through `TryFrom<&str>` on the owned-`String`'s \
4190 String::as_str borrow — a break signals the \
4191 borrowed-input owned-`String` forward-emit and \
4192 reverse-parse axes have drifted onto different \
4193 vocabularies (unlike the peer CaixaKind axis pair, \
4194 CaixaDialeto's forward emit and reverse parse share \
4195 one PascalCase vocabulary by construction, so the \
4196 round-trip composes directly)"
4197 );
4198 }
4199 }
4200
4201 #[test]
4202 fn caixa_dialeto_from_into_static_cow_str_routes_through_as_str_accessor() {
4203 // Fail-before-pass-after byte-parity pin on the newly lifted
4204 // `impl From<CaixaDialeto> for std::borrow::Cow<'static, str>`
4205 // — asserts the standard-library trait impl and the
4206 // substrate-primitive [`super::CaixaDialeto::as_str`]
4207 // `pub const fn` accessor resolve to the same four-arm
4208 // emit-set across every arm the exhaustive
4209 // [`super::CaixaDialeto::ALL`] slice enumerates. Rust's
4210 // standard library does not carry a blanket
4211 // `impl<T: AsRef<str>> From<T> for std::borrow::Cow<'static,
4212 // str>` (nor an `impl<T: fmt::Display> From<T> for
4213 // std::borrow::Cow<'static, str>`), so the
4214 // [`std::borrow::Cow<'static, str>`] forward-projection axis
4215 // is a distinct trait-idiomatic surface that a
4216 // `let key: std::borrow::Cow<'static, str> = dialeto.into();`-
4217 // shaped call site reaches through this impl and no other —
4218 // the paired sibling `From<CaixaDialeto> for &'static str`
4219 // and `From<CaixaDialeto> for String` impls force every
4220 // [`std::borrow::Cow<'static, str>`]-parameterized call site
4221 // through a `std::borrow::Cow::Borrowed(dialeto.as_str())` /
4222 // `std::borrow::Cow::Owned(dialeto.to_string())` /
4223 // `String::from(dialeto).into()` composition whose type
4224 // bounds have no compile-time link back to the substrate
4225 // primitive.
4226 //
4227 // Also asserts the projection lands on the zero-alloc
4228 // [`std::borrow::Cow::Borrowed`] arm (not the
4229 // [`std::borrow::Cow::Owned`] arm) — the substrate-primitive
4230 // [`super::CaixaDialeto::as_str`] accessor's `&'static str`
4231 // return lifetime by construction makes the borrowed arm the
4232 // type-correct projection with no runtime allocation. Any
4233 // future silent detour that routes the impl through the
4234 // owned arm (an accidental
4235 // `std::borrow::Cow::Owned(dialeto.to_string())` rewrite that
4236 // would allocate on every call site where the `&'static str`
4237 // return of [`super::CaixaDialeto::as_str`] makes the
4238 // zero-alloc borrowed projection type-correct) trips at
4239 // caixa-core test time under the
4240 // [`std::borrow::Cow::Borrowed`] discriminator witness rather
4241 // than at a downstream
4242 // [`std::borrow::Cow<'static, str>`]-bound consumer's silent
4243 // allocation.
4244 //
4245 // Second peer on the outside-M3 caixa-core tier of the
4246 // substrate-wide trait-idiomatic
4247 // [`std::borrow::Cow<'static, str>`] forward-projection
4248 // family — extends the axis off the two-list dep-graph
4249 // [`crate::dep::DepList`] pair (6858bac / 702cdf4) that
4250 // opened + closed the tier onto the dialect-classification
4251 // [`super::CaixaDialeto`] enum (the sole remaining
4252 // internal-classification peer on the caixa-core surface).
4253 // Every future closed-set fieldless typed enum peer on the
4254 // substrate is a future target of the campaign.
4255 for &variant in CaixaDialeto::ALL {
4256 let via_trait: std::borrow::Cow<'static, str> =
4257 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
4258 let via_method: &'static str = variant.as_str();
4259 assert_eq!(
4260 via_trait.as_ref(),
4261 via_method,
4262 "From<CaixaDialeto> for Cow<'static, str> impl must \
4263 round-trip CaixaDialeto::{variant:?} to the same \
4264 PascalCase byte-string CaixaDialeto::as_str returns \
4265 — divergence signals a silent detour off the \
4266 substrate-primitive accessor"
4267 );
4268 assert!(
4269 matches!(via_trait, std::borrow::Cow::Borrowed(_)),
4270 "From<CaixaDialeto> for Cow<'static, str> impl must \
4271 land on the zero-alloc Cow::Borrowed arm on \
4272 CaixaDialeto::{variant:?} — a Cow::Owned outcome \
4273 signals the projection has silently allocated where \
4274 the substrate-primitive CaixaDialeto::as_str \
4275 `&'static str` return makes the borrowed arm the \
4276 type-correct projection"
4277 );
4278 let via_into: std::borrow::Cow<'static, str> = variant.into();
4279 assert_eq!(
4280 via_into.as_ref(),
4281 via_method,
4282 "Into<Cow<'static, str>>::into on \
4283 CaixaDialeto::{variant:?} must byte-equal \
4284 CaixaDialeto::as_str on the same input — the \
4285 blanket-derived Into shape must resolve to the same \
4286 as_str dispatch as the explicit From impl"
4287 );
4288 assert!(
4289 matches!(via_into, std::borrow::Cow::Borrowed(_)),
4290 "Into<Cow<'static, str>>::into on \
4291 CaixaDialeto::{variant:?} must land on the zero-alloc \
4292 Cow::Borrowed arm — the blanket-derived Into shape \
4293 must resolve to the same Cow::Borrowed dispatch as \
4294 the explicit From impl"
4295 );
4296 }
4297 }
4298
4299 #[test]
4300 fn caixa_dialeto_from_into_static_cow_str_agrees_with_paired_axes_on_every_arm() {
4301 // Cross-axis partition pin: the newly lifted trait-idiomatic
4302 // `From<CaixaDialeto> for std::borrow::Cow<'static, str>`
4303 // (this lift), the paired owned-input
4304 // `From<CaixaDialeto> for &'static str`, and the paired
4305 // owned-input `From<CaixaDialeto> for String` forward
4306 // projections must resolve identically on every arm, locking
4307 // the three return-shape paths together by construction so
4308 // any future detour trips at caixa-core test time. Also
4309 // byte-parity witness against the sibling
4310 // [`ToString::to_string`] surface routed through
4311 // [`std::fmt::Display`] — every owned-heap-string path (the
4312 // [`std::borrow::Cow::Owned`] promotion of this axis's
4313 // `.into_owned()`, `From<CaixaDialeto> for String`, and
4314 // `.to_string()`) resolves to the same PascalCase byte-string
4315 // per arm.
4316 //
4317 // Then a `.iter().copied().map(std::borrow::Cow::from)` pipe
4318 // witness over [`super::CaixaDialeto::ALL`] that materializes
4319 // the four-arm accept-set through the
4320 // [`std::borrow::Cow<'static, str>`] axis alone — the exact
4321 // shape a future `axum::response::IntoResponse` per-arm
4322 // rejection-body composer, a future M4
4323 // `mesh.pleme.io/v1alpha1/Manifesto` CR materializer's
4324 // admission-webhook per-arm rejection-reason emitter whose
4325 // typing rules out the sibling [`AsRef<str>`] borrowed
4326 // return, or a future substrate-wide per-arm diagnostic
4327 // surface that binds through a
4328 // [`std::borrow::Cow<'static, str>`] boundary reaches through
4329 // — closing the composable-projection axis on the dialect-
4330 // classification closed-set fieldless typed enum peer. The
4331 // pipe witness also pins the zero-alloc discipline: every
4332 // element in the collected vector satisfies the
4333 // [`std::borrow::Cow::Borrowed`] arm predicate, so a future
4334 // accidental silent-allocation regression on the pipe's
4335 // iteration axis is a caixa-core-test-time failure.
4336 //
4337 // Then a direct round-trip witness through
4338 // [`TryFrom<&str>`] on the projection's
4339 // [`std::borrow::Cow::as_ref`] borrow — unlike the peer
4340 // [`crate::CaixaKind`] axis pair (whose forward emit lands
4341 // on the lowercase Portuguese diagnostic vocabulary while
4342 // the reverse parse lands on the `PascalCase` wire
4343 // vocabulary, forcing the round-trip through an intermediate
4344 // [`crate::CaixaKind::wire_name`] hop),
4345 // [`super::CaixaDialeto`]'s forward emit and reverse parse
4346 // share one `PascalCase` vocabulary by construction, so the
4347 // [`std::borrow::Cow<'static, str>`] projection composes
4348 // directly with the trait-idiomatic reverse [`TryFrom<&str>`]
4349 // axis without the wire-vocab intermediate hop.
4350 for &variant in CaixaDialeto::ALL {
4351 let via_cow: std::borrow::Cow<'static, str> =
4352 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
4353 let via_static: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
4354 let via_string: String = <String as From<CaixaDialeto>>::from(variant);
4355 assert_eq!(
4356 via_cow.as_ref(),
4357 via_static,
4358 "From<CaixaDialeto> for Cow<'static, str> and \
4359 From<CaixaDialeto> for &'static str must resolve \
4360 identically on CaixaDialeto::{variant:?} — \
4361 divergence signals the Cow<'static, str> and \
4362 &'static str return-shape paths have drifted onto \
4363 different emit-sets"
4364 );
4365 assert_eq!(
4366 via_cow.as_ref(),
4367 via_string.as_str(),
4368 "From<CaixaDialeto> for Cow<'static, str> and \
4369 From<CaixaDialeto> for String must resolve \
4370 identically on CaixaDialeto::{variant:?} — \
4371 divergence signals the Cow<'static, str> and String \
4372 return-shape paths have drifted onto different \
4373 emit-sets"
4374 );
4375 let via_to_string: String = variant.to_string();
4376 assert_eq!(
4377 via_cow.as_ref(),
4378 via_to_string.as_str(),
4379 "From<CaixaDialeto> for Cow<'static, str> must \
4380 byte-equal CaixaDialeto::to_string on \
4381 CaixaDialeto::{variant:?} — divergence signals the \
4382 trait-idiomatic Cow<'static, str> forward-projection \
4383 axis and the ToString-through-Display axis have \
4384 drifted onto different emit-sets"
4385 );
4386 }
4387 let via_iter: Vec<std::borrow::Cow<'static, str>> = CaixaDialeto::ALL
4388 .iter()
4389 .copied()
4390 .map(std::borrow::Cow::from)
4391 .collect();
4392 let via_method: Vec<std::borrow::Cow<'static, str>> = CaixaDialeto::ALL
4393 .iter()
4394 .map(|d| std::borrow::Cow::Borrowed(d.as_str()))
4395 .collect();
4396 assert_eq!(
4397 via_iter, via_method,
4398 "`.iter().copied().map(Cow::from)` over \
4399 CaixaDialeto::ALL must byte-equal `.iter().map(|d| \
4400 Cow::Borrowed(d.as_str()))` on every arm — the \
4401 trait-idiomatic `From<CaixaDialeto> for Cow<'static, \
4402 str>` axis is what makes the `Cow::from` composition \
4403 route through the substrate-primitive \
4404 CaixaDialeto::as_str accessor rather than a per-call-\
4405 site open-code"
4406 );
4407 for cow in &via_iter {
4408 assert!(
4409 matches!(cow, std::borrow::Cow::Borrowed(_)),
4410 "`.iter().copied().map(Cow::from)` over \
4411 CaixaDialeto::ALL must land on the zero-alloc \
4412 Cow::Borrowed arm on every element — a Cow::Owned \
4413 outcome signals the pipe has silently allocated \
4414 where the substrate-primitive \
4415 CaixaDialeto::as_str `&'static str` return makes \
4416 the borrowed arm the type-correct projection"
4417 );
4418 }
4419 for &variant in CaixaDialeto::ALL {
4420 let via_cow: std::borrow::Cow<'static, str> =
4421 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
4422 let re_parsed: Result<CaixaDialeto, ()> =
4423 <CaixaDialeto as TryFrom<&str>>::try_from(via_cow.as_ref());
4424 assert_eq!(
4425 re_parsed,
4426 Ok(variant),
4427 "trait-idiomatic Cow<'static, str> forward-projection \
4428 + reverse-projection axis pair must round-trip \
4429 CaixaDialeto::{variant:?} through `.into::<Cow<\
4430 'static, str>>()` on the owned-input surface and \
4431 back through `TryFrom<&str>` on the projection's \
4432 Cow::as_ref borrow — a break signals the \
4433 Cow<'static, str> forward-emit and reverse-parse \
4434 axes have drifted onto different vocabularies \
4435 (unlike the peer CaixaKind axis pair, CaixaDialeto's \
4436 forward emit and reverse parse share one PascalCase \
4437 vocabulary by construction, so the round-trip \
4438 composes directly)"
4439 );
4440 }
4441 }
4442
4443 #[test]
4444 fn caixa_dialeto_from_borrowed_into_static_cow_str_routes_through_as_str_accessor() {
4445 // Fail-before-pass-after byte-parity pin on the newly lifted
4446 // `impl From<&CaixaDialeto> for std::borrow::Cow<'static,
4447 // str>` — asserts the borrowed-input standard-library trait
4448 // impl and the substrate-primitive
4449 // [`super::CaixaDialeto::as_str`] `pub const fn` accessor
4450 // resolve to the same four-arm PascalCase emit-set across
4451 // every arm the exhaustive [`super::CaixaDialeto::ALL`] slice
4452 // enumerates. Rust's standard library does not carry a blanket
4453 // `impl<T: AsRef<str>> From<&T> for Cow<'static, str>` (nor a
4454 // `Copy`-based `impl<T: Copy, U: From<T>> From<&T> for U`), so
4455 // the borrowed-input `Cow<'static, str>` forward-projection
4456 // axis is a distinct trait-idiomatic surface that a
4457 // `let key: Cow<'static, str> = (&dialeto).into();`-shaped
4458 // call site or a `CaixaDialeto::ALL.iter().map(Cow::from)`-
4459 // shaped pipe reaches through this impl and no other — the
4460 // paired owned-input `From<CaixaDialeto> for Cow<'static, str>`
4461 // impl (8322511) forces every borrowed-input call site
4462 // through an explicit `Copy` deref (`Cow::from(*dialeto)`) or
4463 // a `Cow::Borrowed(dialeto.as_str())` open-code whose type
4464 // bounds have no compile-time link back to the substrate
4465 // primitive.
4466 //
4467 // Also asserts the projection lands on the zero-alloc
4468 // [`std::borrow::Cow::Borrowed`] arm (not the
4469 // [`std::borrow::Cow::Owned`] arm) — the substrate-primitive
4470 // [`super::CaixaDialeto::as_str`] accessor's `&'static str`
4471 // return lifetime by construction makes the borrowed arm the
4472 // type-correct projection with no runtime allocation on the
4473 // borrowed-input surface just as on the paired owned-input
4474 // surface.
4475 //
4476 // Closes the `{Self, &Self}` input-shape corner on the
4477 // outside-M3 caixa-core dialect-classification
4478 // [`Cow<'static, str>`] axis on the second outside-M3
4479 // caixa-core closed-set fieldless typed enum peer on the
4480 // caixa surface, exactly as 702cdf4 closed it on the first
4481 // outside-M3 caixa-core peer ([`crate::dep::DepList`]) one
4482 // commit after the owning half (6858bac) landed, as afdf0f4
4483 // closed it on the second M3-mesh-primitive peer
4484 // ([`crate::aplicacao::PlacementStrategy`]) one commit after
4485 // the owning half (eee504d) landed, as 25690ef closed it on
4486 // the first M3-mesh-primitive peer
4487 // ([`crate::aplicacao::WitShape`]) one commit after the
4488 // owning half (8634dec) landed, as d45c409 closed it on the
4489 // top-level [`crate::CaixaKind`] one commit after the owning
4490 // half (99c1735) landed, and as 9b3e4b3 / ee577fd closed it
4491 // on the M2 OTP-shape [`crate::supervisor::RestartStrategy`]
4492 // / [`crate::supervisor::RestartPolicy`] sibling peers one
4493 // commit after (7dd28b3 / 0612398) landed.
4494 for &variant in CaixaDialeto::ALL {
4495 let via_trait: std::borrow::Cow<'static, str> =
4496 <std::borrow::Cow<'static, str> as From<&CaixaDialeto>>::from(&variant);
4497 let via_method: &'static str = variant.as_str();
4498 assert_eq!(
4499 via_trait.as_ref(),
4500 via_method,
4501 "From<&CaixaDialeto> for Cow<'static, str> impl must \
4502 round-trip &CaixaDialeto::{variant:?} to the same \
4503 PascalCase byte-string CaixaDialeto::as_str returns \
4504 — divergence signals a silent detour off the \
4505 substrate-primitive accessor"
4506 );
4507 assert!(
4508 matches!(via_trait, std::borrow::Cow::Borrowed(_)),
4509 "From<&CaixaDialeto> for Cow<'static, str> impl must \
4510 land on the zero-alloc Cow::Borrowed arm on \
4511 &CaixaDialeto::{variant:?} — a Cow::Owned outcome \
4512 signals the projection has silently allocated where \
4513 the substrate-primitive CaixaDialeto::as_str \
4514 `&'static str` return makes the borrowed arm the \
4515 type-correct projection"
4516 );
4517 let via_into: std::borrow::Cow<'static, str> = (&variant).into();
4518 assert_eq!(
4519 via_into.as_ref(),
4520 via_method,
4521 "Into<Cow<'static, str>>::into on \
4522 &CaixaDialeto::{variant:?} must byte-equal \
4523 CaixaDialeto::as_str on the same input — the \
4524 blanket-derived Into shape on the borrowed-input \
4525 surface must resolve to the same as_str dispatch as \
4526 the explicit From impl"
4527 );
4528 assert!(
4529 matches!(via_into, std::borrow::Cow::Borrowed(_)),
4530 "Into<Cow<'static, str>>::into on \
4531 &CaixaDialeto::{variant:?} must land on the \
4532 zero-alloc Cow::Borrowed arm — the blanket-derived \
4533 Into shape on the borrowed-input surface must \
4534 resolve to the same Cow::Borrowed dispatch as the \
4535 explicit From impl"
4536 );
4537 }
4538 }
4539
4540 #[test]
4541 #[allow(
4542 clippy::too_many_lines,
4543 reason = "cross-axis partition pin folds four return-shape paths \
4544 (borrowed-input Cow<'static, str>, owned-input Cow<'static, str>, \
4545 borrowed-input &'static str, borrowed-input String) plus the \
4546 ToString-through-Display witness plus a `.iter().map(Cow::from)` \
4547 pipe witness with zero-alloc discriminator plus a direct \
4548 round-trip witness through TryFrom<&str> over four typed \
4549 variants; the linear per-axis repetition is exactly what the \
4550 fold is pinning — a helper would hide the shape it locks"
4551 )]
4552 fn caixa_dialeto_from_borrowed_into_static_cow_str_agrees_with_paired_axes_on_every_arm() {
4553 // Cross-axis partition pin: the newly lifted trait-idiomatic
4554 // borrowed-input `From<&CaixaDialeto> for
4555 // std::borrow::Cow<'static, str>` (this lift), the paired
4556 // owned-input `From<CaixaDialeto> for
4557 // std::borrow::Cow<'static, str>`, the paired borrowed-input
4558 // `From<&CaixaDialeto> for &'static str`, and the paired
4559 // borrowed-input `From<&CaixaDialeto> for String` forward
4560 // projections must resolve identically on every arm, locking
4561 // the four return-shape paths together by construction so any
4562 // future detour trips at caixa-core test time. Also
4563 // byte-parity witness against the sibling
4564 // [`ToString::to_string`] surface routed through
4565 // [`std::fmt::Display`].
4566 //
4567 // Then a `.iter().map(std::borrow::Cow::from)` pipe witness
4568 // over [`super::CaixaDialeto::ALL`] — whose iterator yields
4569 // `&CaixaDialeto` by construction, so the borrowed-input
4570 // [`std::borrow::Cow<'static, str>`] axis is what routes the
4571 // pipe through the substrate-primitive
4572 // [`super::CaixaDialeto::as_str`] accessor with the zero-alloc
4573 // [`std::borrow::Cow::Borrowed`] arm and without a spurious
4574 // [`Copy`] deref. Every collected element satisfies the
4575 // [`std::borrow::Cow::Borrowed`]-arm predicate so a future
4576 // accidental silent-allocation regression on the pipe's
4577 // iteration axis is a caixa-core-test-time failure.
4578 //
4579 // Then a direct round-trip witness through [`TryFrom<&str>`]
4580 // on the projection's [`std::borrow::Cow::as_ref`] borrow —
4581 // unlike the peer [`crate::CaixaKind`] axis pair (whose
4582 // forward emit lands on the lowercase Portuguese diagnostic
4583 // vocabulary while the reverse parse lands on the
4584 // `PascalCase` wire vocabulary, forcing the round-trip
4585 // through an intermediate [`crate::CaixaKind::wire_name`]
4586 // hop), [`super::CaixaDialeto`]'s forward emit and reverse
4587 // parse share one `PascalCase` vocabulary by construction, so
4588 // the borrowed-input [`std::borrow::Cow<'static, str>`]
4589 // projection composes directly with the trait-idiomatic
4590 // reverse [`TryFrom<&str>`] axis without the wire-vocab
4591 // intermediate hop.
4592 for &variant in CaixaDialeto::ALL {
4593 let via_borrowed_cow: std::borrow::Cow<'static, str> =
4594 <std::borrow::Cow<'static, str> as From<&CaixaDialeto>>::from(&variant);
4595 let via_owned_cow: std::borrow::Cow<'static, str> =
4596 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
4597 let via_borrowed_static: &'static str =
4598 <&'static str as From<&CaixaDialeto>>::from(&variant);
4599 let via_borrowed_string: String = <String as From<&CaixaDialeto>>::from(&variant);
4600 assert_eq!(
4601 via_borrowed_cow.as_ref(),
4602 via_owned_cow.as_ref(),
4603 "From<&CaixaDialeto> for Cow<'static, str> and \
4604 From<CaixaDialeto> for Cow<'static, str> must \
4605 resolve identically on CaixaDialeto::{variant:?} — \
4606 divergence signals the borrowed-input and \
4607 owned-input Cow<'static, str> return-shape paths \
4608 have drifted onto different emit-sets"
4609 );
4610 assert_eq!(
4611 via_borrowed_cow.as_ref(),
4612 via_borrowed_static,
4613 "From<&CaixaDialeto> for Cow<'static, str> and \
4614 From<&CaixaDialeto> for &'static str must resolve \
4615 identically on CaixaDialeto::{variant:?} — \
4616 divergence signals the borrowed-input Cow<'static, \
4617 str> and borrowed-input &'static str return-shape \
4618 paths have drifted onto different emit-sets"
4619 );
4620 assert_eq!(
4621 via_borrowed_cow.as_ref(),
4622 via_borrowed_string.as_str(),
4623 "From<&CaixaDialeto> for Cow<'static, str> and \
4624 From<&CaixaDialeto> for String must resolve \
4625 identically on CaixaDialeto::{variant:?} — \
4626 divergence signals the borrowed-input Cow<'static, \
4627 str> and borrowed-input String return-shape paths \
4628 have drifted onto different emit-sets"
4629 );
4630 let via_to_string: String = variant.to_string();
4631 assert_eq!(
4632 via_borrowed_cow.as_ref(),
4633 via_to_string.as_str(),
4634 "From<&CaixaDialeto> for Cow<'static, str> must \
4635 byte-equal CaixaDialeto::to_string on \
4636 CaixaDialeto::{variant:?} — divergence signals the \
4637 borrowed-input Cow<'static, str> forward-projection \
4638 axis and the ToString-through-Display axis have \
4639 drifted onto different emit-sets"
4640 );
4641 }
4642 let via_iter: Vec<std::borrow::Cow<'static, str>> = CaixaDialeto::ALL
4643 .iter()
4644 .map(std::borrow::Cow::from)
4645 .collect();
4646 let via_method: Vec<std::borrow::Cow<'static, str>> = CaixaDialeto::ALL
4647 .iter()
4648 .map(|d| std::borrow::Cow::Borrowed(d.as_str()))
4649 .collect();
4650 assert_eq!(
4651 via_iter, via_method,
4652 "`.iter().map(Cow::from)` over CaixaDialeto::ALL must \
4653 byte-equal `.iter().map(|d| Cow::Borrowed(d.as_str()))` \
4654 on every arm — the trait-idiomatic `From<&CaixaDialeto> \
4655 for Cow<'static, str>` axis is what makes the \
4656 `Cow::from` composition on the borrowed-iteration axis \
4657 route through the substrate-primitive \
4658 CaixaDialeto::as_str accessor without a spurious Copy \
4659 deref"
4660 );
4661 for cow in &via_iter {
4662 assert!(
4663 matches!(cow, std::borrow::Cow::Borrowed(_)),
4664 "`.iter().map(Cow::from)` over CaixaDialeto::ALL \
4665 must land on the zero-alloc Cow::Borrowed arm on \
4666 every element — a Cow::Owned outcome signals the \
4667 borrowed-iteration pipe has silently allocated \
4668 where the substrate-primitive CaixaDialeto::as_str \
4669 `&'static str` return makes the borrowed arm the \
4670 type-correct projection"
4671 );
4672 }
4673 for &variant in CaixaDialeto::ALL {
4674 let via_cow: std::borrow::Cow<'static, str> =
4675 <std::borrow::Cow<'static, str> as From<&CaixaDialeto>>::from(&variant);
4676 let re_parsed: Result<CaixaDialeto, ()> =
4677 <CaixaDialeto as TryFrom<&str>>::try_from(via_cow.as_ref());
4678 assert_eq!(
4679 re_parsed,
4680 Ok(variant),
4681 "trait-idiomatic borrowed-input Cow<'static, str> \
4682 forward-projection + reverse-projection axis pair \
4683 must round-trip &CaixaDialeto::{variant:?} through \
4684 `.into::<Cow<'static, str>>()` on the borrowed-input \
4685 surface and back through `TryFrom<&str>` on the \
4686 projection's Cow::as_ref borrow — a break signals \
4687 the borrowed-input Cow<'static, str> forward-emit \
4688 and reverse-parse axes have drifted onto different \
4689 vocabularies (unlike the peer CaixaKind axis pair, \
4690 CaixaDialeto's forward emit and reverse parse share \
4691 one PascalCase vocabulary by construction, so the \
4692 round-trip composes directly)"
4693 );
4694 }
4695 }
4696
4697 #[test]
4698 fn caixa_dialeto_from_into_box_str_routes_through_as_str_accessor() {
4699 // Fail-before-pass-after byte-parity pin on the newly lifted
4700 // `impl From<CaixaDialeto> for Box<str>` — asserts the owned-
4701 // input standard-library trait impl and the substrate-primitive
4702 // [`super::CaixaDialeto::as_str`] `pub const fn` accessor
4703 // resolve to the same four-arm PascalCase emit-set across every
4704 // arm the exhaustive [`super::CaixaDialeto::ALL`] slice
4705 // enumerates. Extends the caixa-core-internal tier of the
4706 // substrate-wide [`Box<str>`] forward-projection campaign onto
4707 // the third caixa-core-internal peer, after the render-side
4708 // path-shape-diagnostic
4709 // [`super::super::render::PathShapeViolation`] pair (0d87a72,
4710 // both corners in one axis) opened the tier and the outside-M3
4711 // caixa-core two-list dep-graph [`super::super::dep::DepList`]
4712 // pair (4aada99, both corners in one axis) extended it. Rust's
4713 // standard library carries `impl From<&str> for Box<str>` and
4714 // `impl From<String> for Box<str>` but no blanket
4715 // `impl<T: AsRef<str>> From<T> for Box<str>`, so this axis is a
4716 // distinct trait-idiomatic surface that a
4717 // `let key: Box<str> = dialeto.into();`-shaped call site reaches
4718 // through this impl and no other — a paired
4719 // `Box::from(dialeto.as_str())` open-code has no compile-time
4720 // link back to the substrate primitive.
4721 for &variant in CaixaDialeto::ALL {
4722 let via_trait: Box<str> = <Box<str> as From<CaixaDialeto>>::from(variant);
4723 let via_method: &'static str = variant.as_str();
4724 assert_eq!(
4725 via_trait.as_ref(),
4726 via_method,
4727 "From<CaixaDialeto> for Box<str> impl must round-trip \
4728 CaixaDialeto::{variant:?} to the same PascalCase \
4729 byte-string CaixaDialeto::as_str returns — divergence \
4730 signals a silent detour off the substrate-primitive \
4731 accessor"
4732 );
4733 let via_into: Box<str> = variant.into();
4734 assert_eq!(
4735 via_into.as_ref(),
4736 via_method,
4737 "Into<Box<str>>::into on CaixaDialeto::{variant:?} must \
4738 byte-equal CaixaDialeto::as_str on the same input — \
4739 the blanket-derived Into shape must resolve to the \
4740 same as_str dispatch as the explicit From impl"
4741 );
4742 }
4743 }
4744
4745 #[test]
4746 fn caixa_dialeto_from_borrowed_into_box_str_routes_through_as_str_accessor() {
4747 // Fail-before-pass-after byte-parity pin on the newly lifted
4748 // `impl From<&CaixaDialeto> for Box<str>` — asserts the
4749 // borrowed-input standard-library trait impl and the substrate-
4750 // primitive [`super::CaixaDialeto::as_str`] `pub const fn`
4751 // accessor resolve to the same four-arm PascalCase emit-set
4752 // across every arm the exhaustive [`super::CaixaDialeto::ALL`]
4753 // slice enumerates. Rust's standard library carries
4754 // `impl From<&str> for Box<str>` and `impl From<String> for
4755 // Box<str>` but no blanket
4756 // `impl<T: AsRef<str>> From<&T> for Box<str>` (nor a `Copy`-
4757 // based `impl<T: Copy, U: From<T>> From<&T> for U`), so the
4758 // borrowed-input [`Box<str>`] forward-projection axis is a
4759 // distinct trait-idiomatic surface that a
4760 // `CaixaDialeto::ALL.iter().map(Box::<str>::from)`-shaped pipe
4761 // (whose iterator over `&'static [CaixaDialeto]` yields
4762 // `&CaixaDialeto` by construction) or a
4763 // `let key: Box<str> = (&dialeto).into();`-shaped call site
4764 // reaches through this impl and no other — the paired owned-
4765 // input `From<CaixaDialeto> for Box<str>` impl alone would
4766 // force every borrowed-input call site through an explicit
4767 // `Copy` deref (`Box::<str>::from(*dialeto)`) or a
4768 // `Box::<str>::from(dialeto.as_str())` open-code whose type
4769 // bounds have no compile-time link back to the substrate
4770 // primitive.
4771 //
4772 // Closes the `{Self, &Self}` input-shape corner on the third
4773 // caixa-core-internal closed-set fieldless typed enum peer of
4774 // the substrate-wide [`Box<str>`] forward-projection campaign,
4775 // matching the trajectory the paired render-side path-shape-
4776 // diagnostic [`super::super::render::PathShapeViolation`] pair
4777 // (0d87a72, both corners in one axis) and the paired outside-M3
4778 // caixa-core two-list dep-graph [`super::super::dep::DepList`]
4779 // pair (4aada99, both corners in one axis) walked before it.
4780 for &variant in CaixaDialeto::ALL {
4781 let via_trait: Box<str> = <Box<str> as From<&CaixaDialeto>>::from(&variant);
4782 let via_method: &'static str = variant.as_str();
4783 assert_eq!(
4784 via_trait.as_ref(),
4785 via_method,
4786 "From<&CaixaDialeto> for Box<str> impl must round-trip \
4787 &CaixaDialeto::{variant:?} to the same PascalCase \
4788 byte-string CaixaDialeto::as_str returns — divergence \
4789 signals a silent detour off the substrate-primitive \
4790 accessor"
4791 );
4792 let via_into: Box<str> = (&variant).into();
4793 assert_eq!(
4794 via_into.as_ref(),
4795 via_method,
4796 "Into<Box<str>>::into on &CaixaDialeto::{variant:?} \
4797 must byte-equal CaixaDialeto::as_str on the same \
4798 input — the blanket-derived Into shape on the \
4799 borrowed-input surface must resolve to the same \
4800 as_str dispatch as the explicit From impl"
4801 );
4802 }
4803
4804 // Pipe witness — the distinguishing shape that forces the
4805 // borrowed-input axis to be independent of the owned-input
4806 // peer. `CaixaDialeto::ALL.iter()` yields `&CaixaDialeto` by
4807 // construction, so `.map(Box::<str>::from)` resolves through
4808 // the borrowed-input `From<&CaixaDialeto> for Box<str>` impl
4809 // and no other — without this axis, the same pipe would force
4810 // an explicit `.copied()` restatement whose type bounds bypass
4811 // the substrate primitive.
4812 let via_pipe: Vec<Box<str>> = CaixaDialeto::ALL.iter().map(Box::<str>::from).collect();
4813 let via_accessor: Vec<&'static str> =
4814 CaixaDialeto::ALL.iter().map(|d| d.as_str()).collect();
4815 assert_eq!(
4816 via_pipe.len(),
4817 via_accessor.len(),
4818 "CaixaDialeto::ALL.iter().map(Box::<str>::from) pipe must \
4819 preserve arity against the paired CaixaDialeto::as_str \
4820 accessor — a length divergence signals the borrowed-input \
4821 axis has silently rejected an arm"
4822 );
4823 for (pipe_arm, accessor_arm) in via_pipe.iter().zip(via_accessor.iter()) {
4824 assert_eq!(
4825 pipe_arm.as_ref(),
4826 *accessor_arm,
4827 "CaixaDialeto::ALL.iter().map(Box::<str>::from) pipe \
4828 must byte-equal the paired \
4829 CaixaDialeto::ALL.iter().map(|d| d.as_str()) pipe on \
4830 every arm — divergence signals the borrowed-input \
4831 `From<&CaixaDialeto> for Box<str>` axis has silently \
4832 detoured off the substrate-primitive accessor"
4833 );
4834 }
4835 }
4836
4837 #[test]
4838 fn caixa_dialeto_from_into_arc_str_routes_through_as_str_accessor() {
4839 // Fail-before-pass-after byte-parity pin on the newly lifted
4840 // `impl From<CaixaDialeto> for std::sync::Arc<str>` — asserts the
4841 // owned-input standard-library trait impl and the substrate-
4842 // primitive [`super::CaixaDialeto::as_str`] `pub const fn` accessor
4843 // resolve to the same four-arm PascalCase emit-set across every
4844 // arm the exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
4845 // Extends the caixa-core-internal tier of the substrate-wide
4846 // [`std::sync::Arc<str>`] forward-projection campaign onto the
4847 // third caixa-core-internal peer, after the structurally most
4848 // fundamental [`super::super::CaixaKind`] pair (c17be64, both
4849 // corners in one axis) opened the tier and the outside-M3 two-list
4850 // dep-graph [`super::super::dep::DepList`] pair (d8a4652, both
4851 // corners in one axis) extended it. Rust's standard library
4852 // carries `impl From<&str> for std::sync::Arc<str>` and
4853 // `impl From<String> for std::sync::Arc<str>` but no blanket
4854 // `impl<T: AsRef<str>> From<T> for std::sync::Arc<str>` (nor an
4855 // `impl<T: fmt::Display> From<T> for std::sync::Arc<str>`), so
4856 // this axis is a distinct trait-idiomatic surface that a
4857 // `let key: std::sync::Arc<str> = dialeto.into();`-shaped call
4858 // site reaches through this impl and no other — a paired
4859 // `std::sync::Arc::<str>::from(dialeto.as_str())` open-code has no
4860 // compile-time link back to the substrate primitive, and a two-
4861 // step `std::sync::Arc::<str>::from(String::from(dialeto))`
4862 // composition through the owned-`String` axis allocates twice
4863 // where the single-step trait impl allocates once.
4864 //
4865 // Cross-axis byte-parity witness against the sibling owned-input
4866 // `{&'static str, String, Cow<'static, str>, Box<str>}` return-
4867 // shape axes — locking the five return-shape paths on the owned-
4868 // input surface together by construction so any future detour off
4869 // the substrate-primitive [`super::CaixaDialeto::as_str`] accessor
4870 // trips at caixa-core test time.
4871 for &variant in CaixaDialeto::ALL {
4872 let via_trait: std::sync::Arc<str> =
4873 <std::sync::Arc<str> as From<CaixaDialeto>>::from(variant);
4874 let via_method: &'static str = variant.as_str();
4875 assert_eq!(
4876 via_trait.as_ref(),
4877 via_method,
4878 "From<CaixaDialeto> for std::sync::Arc<str> impl must \
4879 round-trip CaixaDialeto::{variant:?} to the same \
4880 PascalCase byte-string CaixaDialeto::as_str returns — \
4881 divergence signals a silent detour off the substrate-\
4882 primitive accessor"
4883 );
4884 let via_into: std::sync::Arc<str> = variant.into();
4885 assert_eq!(
4886 via_into.as_ref(),
4887 via_method,
4888 "Into<std::sync::Arc<str>>::into on CaixaDialeto::\
4889 {variant:?} must byte-equal CaixaDialeto::as_str on the \
4890 same input — the blanket-derived Into shape must resolve \
4891 to the same as_str dispatch as the explicit From impl"
4892 );
4893 let owned_static: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
4894 assert_eq!(
4895 via_trait.as_ref(),
4896 owned_static,
4897 "From<CaixaDialeto> for std::sync::Arc<str> and \
4898 From<CaixaDialeto> for &'static str must resolve \
4899 identically on CaixaDialeto::{variant:?} — divergence \
4900 signals the owned-input std::sync::Arc<str> and \
4901 &'static str return-shape paths have drifted onto \
4902 different emit-sets"
4903 );
4904 let owned_string: String = <String as From<CaixaDialeto>>::from(variant);
4905 assert_eq!(
4906 via_trait.as_ref(),
4907 owned_string.as_str(),
4908 "From<CaixaDialeto> for std::sync::Arc<str> and \
4909 From<CaixaDialeto> for String must resolve identically \
4910 on CaixaDialeto::{variant:?} — divergence signals the \
4911 owned-input std::sync::Arc<str> and owned-`String` \
4912 return-shape paths have drifted onto different emit-sets"
4913 );
4914 let owned_cow: std::borrow::Cow<'static, str> =
4915 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
4916 assert_eq!(
4917 via_trait.as_ref(),
4918 owned_cow.as_ref(),
4919 "From<CaixaDialeto> for std::sync::Arc<str> and \
4920 From<CaixaDialeto> for Cow<'static, str> must resolve \
4921 identically on CaixaDialeto::{variant:?} — divergence \
4922 signals the owned-input std::sync::Arc<str> and \
4923 Cow<'static, str> return-shape paths have drifted onto \
4924 different emit-sets"
4925 );
4926 let owned_box: Box<str> = <Box<str> as From<CaixaDialeto>>::from(variant);
4927 assert_eq!(
4928 via_trait.as_ref(),
4929 owned_box.as_ref(),
4930 "From<CaixaDialeto> for std::sync::Arc<str> and \
4931 From<CaixaDialeto> for Box<str> must resolve identically \
4932 on CaixaDialeto::{variant:?} — divergence signals the \
4933 owned-input std::sync::Arc<str> and Box<str> return-\
4934 shape paths have drifted onto different emit-sets"
4935 );
4936 }
4937 }
4938
4939 #[test]
4940 #[allow(
4941 clippy::too_many_lines,
4942 reason = "cross-axis partition pin folds four borrowed-input \
4943 return-shape paths (&'static str, String, Cow<'static, \
4944 str>, Box<str>) plus the paired owned-input Arc<str> \
4945 witness and the .iter().map(std::sync::Arc::<str>::from) \
4946 pipe witness into one exhaustive round-trip over \
4947 CaixaDialeto::ALL — the accepted line-count cost of \
4948 keying the whole borrowed-input Arc<str> corner to the \
4949 substrate-primitive as_str accessor at the same test-site"
4950 )]
4951 fn caixa_dialeto_from_borrowed_into_arc_str_routes_through_as_str_accessor() {
4952 // Fail-before-pass-after byte-parity pin on the newly lifted
4953 // `impl From<&CaixaDialeto> for std::sync::Arc<str>` — asserts the
4954 // borrowed-input standard-library trait impl and the substrate-
4955 // primitive [`super::CaixaDialeto::as_str`] `pub const fn` accessor
4956 // resolve to the same four-arm PascalCase emit-set across every
4957 // arm the exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
4958 // Rust's standard library does not carry a blanket
4959 // `impl<T: AsRef<str>> From<&T> for std::sync::Arc<str>` (nor a
4960 // `Copy`-based `impl<T: Copy, U: From<T>> From<&T> for U`), so
4961 // the borrowed-input `std::sync::Arc<str>` forward-projection axis
4962 // is a distinct trait-idiomatic surface that a
4963 // `let key: std::sync::Arc<str> = (&dialeto).into();`-shaped call
4964 // site or a
4965 // `CaixaDialeto::ALL.iter().map(std::sync::Arc::<str>::from)`-shaped
4966 // pipe reaches through this impl and no other — the paired owned-
4967 // input `From<CaixaDialeto> for std::sync::Arc<str>` impl alone
4968 // forces every borrowed-input call site through a spurious `Copy`
4969 // deref (`std::sync::Arc::<str>::from((*dialeto).as_str())`) or a
4970 // `.copied()` restatement whose type bounds have no compile-time
4971 // link back to the substrate primitive.
4972 //
4973 // Closes the `{Self, &Self}` input-shape corner on the caixa-
4974 // core-internal tier of the substrate-wide trait-idiomatic
4975 // [`std::sync::Arc<str>`] forward-projection campaign for the
4976 // third caixa-core-internal enum peer, matching the
4977 // `{Self, &Self} × {&'static str, String, Cow<'static, str>,
4978 // Box<str>}` 2×4 forward-projection matrix the peer projection
4979 // surfaces already close on this same enum.
4980 //
4981 // Cross-axis partition pin against the paired owned-input
4982 // [`From<CaixaDialeto> for std::sync::Arc<str>`] and the sibling
4983 // borrowed-input `{&'static str, String, Cow<'static, str>,
4984 // Box<str>}` return-shape axes — locking the five return-shape ×
4985 // input-shape paths on the borrowed-input surface together by
4986 // construction so any future detour off the substrate-primitive
4987 // accessor trips at caixa-core test time. Then a
4988 // `.iter().map(std::sync::Arc::<str>::from)` pipe witness over
4989 // [`super::CaixaDialeto::ALL`] — whose iterator yields
4990 // `&CaixaDialeto` by construction, so the borrowed-input
4991 // [`std::sync::Arc<str>`] axis is what routes the pipe through the
4992 // substrate-primitive [`super::CaixaDialeto::as_str`] accessor
4993 // without a spurious [`Copy`] deref (which would only be reachable
4994 // through the owned-input
4995 // [`From<CaixaDialeto> for std::sync::Arc<str>`] axis by first
4996 // calling `.copied()` on the iterator).
4997 for &variant in CaixaDialeto::ALL {
4998 let via_trait: std::sync::Arc<str> =
4999 <std::sync::Arc<str> as From<&CaixaDialeto>>::from(&variant);
5000 let via_method: &'static str = variant.as_str();
5001 assert_eq!(
5002 via_trait.as_ref(),
5003 via_method,
5004 "From<&CaixaDialeto> for std::sync::Arc<str> impl must \
5005 round-trip &CaixaDialeto::{variant:?} to the same \
5006 PascalCase byte-string CaixaDialeto::as_str returns — \
5007 divergence signals a silent detour off the substrate-\
5008 primitive accessor"
5009 );
5010 let via_into: std::sync::Arc<str> = (&variant).into();
5011 assert_eq!(
5012 via_into.as_ref(),
5013 via_method,
5014 "Into<std::sync::Arc<str>>::into on &CaixaDialeto::\
5015 {variant:?} must byte-equal CaixaDialeto::as_str on the \
5016 same input — the blanket-derived Into shape on the \
5017 borrowed-input surface must resolve to the same as_str \
5018 dispatch as the explicit From impl"
5019 );
5020 let owned_arc: std::sync::Arc<str> =
5021 <std::sync::Arc<str> as From<CaixaDialeto>>::from(variant);
5022 assert_eq!(
5023 via_trait, owned_arc,
5024 "From<&CaixaDialeto> for std::sync::Arc<str> and \
5025 From<CaixaDialeto> for std::sync::Arc<str> must resolve \
5026 identically on CaixaDialeto::{variant:?} — divergence \
5027 signals the borrowed-input and owned-input \
5028 std::sync::Arc<str> forward-projection input-shape paths \
5029 have drifted onto different emit-sets"
5030 );
5031 let borrowed_static: &'static str =
5032 <&'static str as From<&CaixaDialeto>>::from(&variant);
5033 assert_eq!(
5034 via_trait.as_ref(),
5035 borrowed_static,
5036 "From<&CaixaDialeto> for std::sync::Arc<str> and \
5037 From<&CaixaDialeto> for &'static str must resolve \
5038 identically on CaixaDialeto::{variant:?} — divergence \
5039 signals the borrowed-input std::sync::Arc<str> and \
5040 &'static str return-shape paths have drifted onto \
5041 different emit-sets"
5042 );
5043 let borrowed_string: String = <String as From<&CaixaDialeto>>::from(&variant);
5044 assert_eq!(
5045 via_trait.as_ref(),
5046 borrowed_string.as_str(),
5047 "From<&CaixaDialeto> for std::sync::Arc<str> and \
5048 From<&CaixaDialeto> for String must resolve identically \
5049 on CaixaDialeto::{variant:?} — divergence signals the \
5050 borrowed-input std::sync::Arc<str> and owned-`String` \
5051 return-shape paths have drifted onto different emit-sets"
5052 );
5053 let borrowed_cow: std::borrow::Cow<'static, str> =
5054 <std::borrow::Cow<'static, str> as From<&CaixaDialeto>>::from(&variant);
5055 assert_eq!(
5056 via_trait.as_ref(),
5057 borrowed_cow.as_ref(),
5058 "From<&CaixaDialeto> for std::sync::Arc<str> and \
5059 From<&CaixaDialeto> for Cow<'static, str> must resolve \
5060 identically on CaixaDialeto::{variant:?} — divergence \
5061 signals the borrowed-input std::sync::Arc<str> and \
5062 Cow<'static, str> return-shape paths have drifted onto \
5063 different emit-sets"
5064 );
5065 let borrowed_box: Box<str> = <Box<str> as From<&CaixaDialeto>>::from(&variant);
5066 assert_eq!(
5067 via_trait.as_ref(),
5068 borrowed_box.as_ref(),
5069 "From<&CaixaDialeto> for std::sync::Arc<str> and \
5070 From<&CaixaDialeto> for Box<str> must resolve \
5071 identically on CaixaDialeto::{variant:?} — divergence \
5072 signals the borrowed-input std::sync::Arc<str> and \
5073 Box<str> return-shape paths have drifted onto different \
5074 emit-sets"
5075 );
5076 }
5077 let via_iter: Vec<std::sync::Arc<str>> = CaixaDialeto::ALL
5078 .iter()
5079 .map(std::sync::Arc::<str>::from)
5080 .collect();
5081 let via_method: Vec<std::sync::Arc<str>> = CaixaDialeto::ALL
5082 .iter()
5083 .map(|d| std::sync::Arc::<str>::from(d.as_str()))
5084 .collect();
5085 assert_eq!(
5086 via_iter, via_method,
5087 "`.iter().map(std::sync::Arc::<str>::from)` over \
5088 CaixaDialeto::ALL — a call site whose iteration axis holds \
5089 `&CaixaDialeto` by construction — must byte-equal \
5090 `.iter().map(|d| std::sync::Arc::<str>::from(d.as_str()))` \
5091 on every arm — the borrowed-input std::sync::Arc<str> \
5092 `From<&CaixaDialeto> for std::sync::Arc<str>` axis is what \
5093 makes the `std::sync::Arc::<str>::from` composition route \
5094 through the substrate-primitive `CaixaDialeto::as_str` \
5095 accessor without a spurious `Copy` deref (which would only \
5096 be reachable through the owned-input \
5097 `From<CaixaDialeto> for std::sync::Arc<str>` axis by first \
5098 calling `.copied()` on the iterator)"
5099 );
5100 }
5101
5102 #[test]
5103 fn caixa_dialeto_from_into_rc_str_routes_through_as_str_accessor() {
5104 // Fail-before-pass-after byte-parity pin on the newly lifted
5105 // `impl From<CaixaDialeto> for std::rc::Rc<str>` — asserts the
5106 // owned-input standard-library trait impl and the substrate-
5107 // primitive [`super::CaixaDialeto::as_str`] `pub const fn` accessor
5108 // resolve to the same four-arm PascalCase emit-set across every
5109 // arm the exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
5110 // Extends the caixa-core-internal tier of the substrate-wide
5111 // [`std::rc::Rc<str>`] forward-projection campaign onto the second
5112 // caixa-core-internal peer, after the structurally most
5113 // fundamental [`super::super::CaixaKind`] pair (4fdfa37, both
5114 // corners in one axis) opened the campaign. Rust's standard
5115 // library carries `impl From<&str> for std::rc::Rc<str>` and
5116 // `impl From<String> for std::rc::Rc<str>` but no blanket
5117 // `impl<T: AsRef<str>> From<T> for std::rc::Rc<str>` (nor an
5118 // `impl<T: fmt::Display> From<T> for std::rc::Rc<str>`), and — the
5119 // `std::sync::Arc<str>` and `std::rc::Rc<str>` trait tables are
5120 // disjoint — so this axis is a distinct trait-idiomatic surface
5121 // that a `let key: std::rc::Rc<str> = dialeto.into();`-shaped
5122 // call site reaches through this impl and no other.
5123 //
5124 // Cross-axis byte-parity witness against the sibling owned-input
5125 // `{&'static str, String, Cow<'static, str>, Box<str>,
5126 // std::sync::Arc<str>}` return-shape axes — locking the six
5127 // return-shape paths on the owned-input surface together by
5128 // construction so any future detour off the substrate-primitive
5129 // [`super::CaixaDialeto::as_str`] accessor trips at caixa-core
5130 // test time.
5131 for &variant in CaixaDialeto::ALL {
5132 let via_trait: std::rc::Rc<str> =
5133 <std::rc::Rc<str> as From<CaixaDialeto>>::from(variant);
5134 let via_method: &'static str = variant.as_str();
5135 assert_eq!(
5136 via_trait.as_ref(),
5137 via_method,
5138 "From<CaixaDialeto> for std::rc::Rc<str> impl must \
5139 round-trip CaixaDialeto::{variant:?} to the same \
5140 PascalCase byte-string CaixaDialeto::as_str returns — \
5141 divergence signals a silent detour off the substrate-\
5142 primitive accessor"
5143 );
5144 let via_into: std::rc::Rc<str> = variant.into();
5145 assert_eq!(
5146 via_into.as_ref(),
5147 via_method,
5148 "Into<std::rc::Rc<str>>::into on CaixaDialeto::\
5149 {variant:?} must byte-equal CaixaDialeto::as_str on the \
5150 same input — the blanket-derived Into shape must resolve \
5151 to the same as_str dispatch as the explicit From impl"
5152 );
5153 let owned_static: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
5154 assert_eq!(
5155 via_trait.as_ref(),
5156 owned_static,
5157 "From<CaixaDialeto> for std::rc::Rc<str> and \
5158 From<CaixaDialeto> for &'static str must resolve \
5159 identically on CaixaDialeto::{variant:?} — divergence \
5160 signals the owned-input std::rc::Rc<str> and \
5161 &'static str return-shape paths have drifted onto \
5162 different emit-sets"
5163 );
5164 let owned_string: String = <String as From<CaixaDialeto>>::from(variant);
5165 assert_eq!(
5166 via_trait.as_ref(),
5167 owned_string.as_str(),
5168 "From<CaixaDialeto> for std::rc::Rc<str> and \
5169 From<CaixaDialeto> for String must resolve identically \
5170 on CaixaDialeto::{variant:?} — divergence signals the \
5171 owned-input std::rc::Rc<str> and owned-`String` \
5172 return-shape paths have drifted onto different emit-sets"
5173 );
5174 let owned_cow: std::borrow::Cow<'static, str> =
5175 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
5176 assert_eq!(
5177 via_trait.as_ref(),
5178 owned_cow.as_ref(),
5179 "From<CaixaDialeto> for std::rc::Rc<str> and \
5180 From<CaixaDialeto> for Cow<'static, str> must resolve \
5181 identically on CaixaDialeto::{variant:?} — divergence \
5182 signals the owned-input std::rc::Rc<str> and \
5183 Cow<'static, str> return-shape paths have drifted onto \
5184 different emit-sets"
5185 );
5186 let owned_box: Box<str> = <Box<str> as From<CaixaDialeto>>::from(variant);
5187 assert_eq!(
5188 via_trait.as_ref(),
5189 owned_box.as_ref(),
5190 "From<CaixaDialeto> for std::rc::Rc<str> and \
5191 From<CaixaDialeto> for Box<str> must resolve identically \
5192 on CaixaDialeto::{variant:?} — divergence signals the \
5193 owned-input std::rc::Rc<str> and Box<str> return-\
5194 shape paths have drifted onto different emit-sets"
5195 );
5196 let owned_arc: std::sync::Arc<str> =
5197 <std::sync::Arc<str> as From<CaixaDialeto>>::from(variant);
5198 assert_eq!(
5199 via_trait.as_ref(),
5200 owned_arc.as_ref(),
5201 "From<CaixaDialeto> for std::rc::Rc<str> and \
5202 From<CaixaDialeto> for std::sync::Arc<str> must resolve \
5203 identically on CaixaDialeto::{variant:?} — divergence \
5204 signals the owned-input std::rc::Rc<str> and \
5205 std::sync::Arc<str> return-shape paths have drifted \
5206 onto different emit-sets"
5207 );
5208 }
5209 }
5210
5211 #[test]
5212 #[allow(
5213 clippy::too_many_lines,
5214 reason = "cross-axis partition pin folds five borrowed-input \
5215 return-shape paths (&'static str, String, Cow<'static, \
5216 str>, Box<str>, std::sync::Arc<str>) plus the paired \
5217 owned-input Rc<str> witness and the \
5218 .iter().map(std::rc::Rc::<str>::from) pipe witness into \
5219 one exhaustive round-trip over CaixaDialeto::ALL — the \
5220 accepted line-count cost of keying the whole borrowed-\
5221 input Rc<str> corner to the substrate-primitive as_str \
5222 accessor at the same test-site"
5223 )]
5224 fn caixa_dialeto_from_borrowed_into_rc_str_routes_through_as_str_accessor() {
5225 // Fail-before-pass-after byte-parity pin on the newly lifted
5226 // `impl From<&CaixaDialeto> for std::rc::Rc<str>` — asserts the
5227 // borrowed-input standard-library trait impl and the substrate-
5228 // primitive [`super::CaixaDialeto::as_str`] `pub const fn` accessor
5229 // resolve to the same four-arm PascalCase emit-set across every
5230 // arm the exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
5231 // Rust's standard library does not carry a blanket
5232 // `impl<T: AsRef<str>> From<&T> for std::rc::Rc<str>` (nor a
5233 // `Copy`-based `impl<T: Copy, U: From<T>> From<&T> for U`), so
5234 // the borrowed-input `std::rc::Rc<str>` forward-projection axis is
5235 // a distinct trait-idiomatic surface that a
5236 // `let key: std::rc::Rc<str> = (&dialeto).into();`-shaped call
5237 // site or a
5238 // `CaixaDialeto::ALL.iter().map(std::rc::Rc::<str>::from)`-shaped
5239 // pipe reaches through this impl and no other.
5240 //
5241 // Cross-axis partition pin against the paired owned-input
5242 // [`From<CaixaDialeto> for std::rc::Rc<str>`] and the sibling
5243 // borrowed-input `{&'static str, String, Cow<'static, str>,
5244 // Box<str>, std::sync::Arc<str>}` return-shape axes — locking the
5245 // six return-shape × input-shape paths on the borrowed-input
5246 // surface together by construction so any future detour off the
5247 // substrate-primitive accessor trips at caixa-core test time.
5248 // Then a `.iter().map(std::rc::Rc::<str>::from)` pipe witness
5249 // over [`super::CaixaDialeto::ALL`] — whose iterator yields
5250 // `&CaixaDialeto` by construction, so the borrowed-input
5251 // [`std::rc::Rc<str>`] axis is what routes the pipe through the
5252 // substrate-primitive [`super::CaixaDialeto::as_str`] accessor
5253 // without a spurious [`Copy`] deref.
5254 for &variant in CaixaDialeto::ALL {
5255 let via_trait: std::rc::Rc<str> =
5256 <std::rc::Rc<str> as From<&CaixaDialeto>>::from(&variant);
5257 let via_method: &'static str = variant.as_str();
5258 assert_eq!(
5259 via_trait.as_ref(),
5260 via_method,
5261 "From<&CaixaDialeto> for std::rc::Rc<str> impl must \
5262 round-trip &CaixaDialeto::{variant:?} to the same \
5263 PascalCase byte-string CaixaDialeto::as_str returns — \
5264 divergence signals a silent detour off the substrate-\
5265 primitive accessor"
5266 );
5267 let via_into: std::rc::Rc<str> = (&variant).into();
5268 assert_eq!(
5269 via_into.as_ref(),
5270 via_method,
5271 "Into<std::rc::Rc<str>>::into on &CaixaDialeto::\
5272 {variant:?} must byte-equal CaixaDialeto::as_str on the \
5273 same input — the blanket-derived Into shape on the \
5274 borrowed-input surface must resolve to the same as_str \
5275 dispatch as the explicit From impl"
5276 );
5277 let owned_rc: std::rc::Rc<str> =
5278 <std::rc::Rc<str> as From<CaixaDialeto>>::from(variant);
5279 assert_eq!(
5280 via_trait, owned_rc,
5281 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5282 From<CaixaDialeto> for std::rc::Rc<str> must resolve \
5283 identically on CaixaDialeto::{variant:?} — divergence \
5284 signals the borrowed-input and owned-input \
5285 std::rc::Rc<str> forward-projection input-shape paths \
5286 have drifted onto different emit-sets"
5287 );
5288 let borrowed_static: &'static str =
5289 <&'static str as From<&CaixaDialeto>>::from(&variant);
5290 assert_eq!(
5291 via_trait.as_ref(),
5292 borrowed_static,
5293 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5294 From<&CaixaDialeto> for &'static str must resolve \
5295 identically on CaixaDialeto::{variant:?} — divergence \
5296 signals the borrowed-input std::rc::Rc<str> and \
5297 &'static str return-shape paths have drifted onto \
5298 different emit-sets"
5299 );
5300 let borrowed_string: String = <String as From<&CaixaDialeto>>::from(&variant);
5301 assert_eq!(
5302 via_trait.as_ref(),
5303 borrowed_string.as_str(),
5304 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5305 From<&CaixaDialeto> for String must resolve identically \
5306 on CaixaDialeto::{variant:?} — divergence signals the \
5307 borrowed-input std::rc::Rc<str> and owned-`String` \
5308 return-shape paths have drifted onto different emit-sets"
5309 );
5310 let borrowed_cow: std::borrow::Cow<'static, str> =
5311 <std::borrow::Cow<'static, str> as From<&CaixaDialeto>>::from(&variant);
5312 assert_eq!(
5313 via_trait.as_ref(),
5314 borrowed_cow.as_ref(),
5315 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5316 From<&CaixaDialeto> for Cow<'static, str> must resolve \
5317 identically on CaixaDialeto::{variant:?} — divergence \
5318 signals the borrowed-input std::rc::Rc<str> and \
5319 Cow<'static, str> return-shape paths have drifted onto \
5320 different emit-sets"
5321 );
5322 let borrowed_box: Box<str> = <Box<str> as From<&CaixaDialeto>>::from(&variant);
5323 assert_eq!(
5324 via_trait.as_ref(),
5325 borrowed_box.as_ref(),
5326 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5327 From<&CaixaDialeto> for Box<str> must resolve \
5328 identically on CaixaDialeto::{variant:?} — divergence \
5329 signals the borrowed-input std::rc::Rc<str> and \
5330 Box<str> return-shape paths have drifted onto different \
5331 emit-sets"
5332 );
5333 let borrowed_arc: std::sync::Arc<str> =
5334 <std::sync::Arc<str> as From<&CaixaDialeto>>::from(&variant);
5335 assert_eq!(
5336 via_trait.as_ref(),
5337 borrowed_arc.as_ref(),
5338 "From<&CaixaDialeto> for std::rc::Rc<str> and \
5339 From<&CaixaDialeto> for std::sync::Arc<str> must \
5340 resolve identically on CaixaDialeto::{variant:?} — \
5341 divergence signals the borrowed-input std::rc::Rc<str> \
5342 and std::sync::Arc<str> return-shape paths have drifted \
5343 onto different emit-sets"
5344 );
5345 }
5346 let via_iter: Vec<std::rc::Rc<str>> = CaixaDialeto::ALL
5347 .iter()
5348 .map(std::rc::Rc::<str>::from)
5349 .collect();
5350 let via_method: Vec<std::rc::Rc<str>> = CaixaDialeto::ALL
5351 .iter()
5352 .map(|d| std::rc::Rc::<str>::from(d.as_str()))
5353 .collect();
5354 assert_eq!(
5355 via_iter, via_method,
5356 "`.iter().map(std::rc::Rc::<str>::from)` over \
5357 CaixaDialeto::ALL — a call site whose iteration axis holds \
5358 `&CaixaDialeto` by construction — must byte-equal \
5359 `.iter().map(|d| std::rc::Rc::<str>::from(d.as_str()))` \
5360 on every arm — the borrowed-input std::rc::Rc<str> \
5361 `From<&CaixaDialeto> for std::rc::Rc<str>` axis is what \
5362 makes the `std::rc::Rc::<str>::from` composition route \
5363 through the substrate-primitive `CaixaDialeto::as_str` \
5364 accessor without a spurious `Copy` deref (which would only \
5365 be reachable through the owned-input \
5366 `From<CaixaDialeto> for std::rc::Rc<str>` axis by first \
5367 calling `.copied()` on the iterator)"
5368 );
5369 }
5370
5371 #[test]
5372 #[allow(
5373 clippy::too_many_lines,
5374 reason = "cross-axis partition pin folds the substrate-primitive \
5375 as_str accessor's `.as_bytes()` byte-tail plus the \
5376 paired str-view (AsRef<str>, Display, as_str) and \
5377 reverse-projection ({&'static str, String, \
5378 Cow<'static, str>, Box<str>, std::sync::Arc<str>, \
5379 std::rc::Rc<str>}) return-shape axes' `.as_bytes()` \
5380 byte-tails plus a <T: AsRef<[u8]>>-bound-consumer \
5381 witness plus a blake3::Hasher::update-shape byte-\
5382 input surface witness into one exhaustive round-trip \
5383 over CaixaDialeto::ALL — the accepted line-count cost \
5384 of opening the byte-view axis keyed to the substrate-\
5385 primitive as_str accessor at the same test-site"
5386 )]
5387 #[allow(
5388 clippy::needless_borrows_for_generic_args,
5389 reason = "the borrowed-input surface (&variant) is exercised \
5390 deliberately: the `<T: AsRef<[u8]>>`-bound consumer \
5391 and the `blake3::Hasher::update`-shape byte-input \
5392 surface both accept either owned or borrowed input \
5393 through the standard-library blanket \
5394 `impl<T: ?Sized + AsRef<[u8]>> AsRef<[u8]> for &T`, \
5395 and this pin round-trips both input shapes to lock \
5396 the borrowed-input path load-bearing against a \
5397 future silent regression"
5398 )]
5399 fn caixa_dialeto_as_ref_bytes_routes_through_as_str_accessor() {
5400 // `<T: AsRef<[u8]>>`-bound-consumer witness helper: a generic
5401 // byte-input function accepts a [`super::CaixaDialeto`]
5402 // directly through the trait bound, without the caller open-
5403 // coding the two-hop `dialeto.as_str().as_bytes()`
5404 // composition. Lifted to the top of the function per
5405 // `clippy::items_after_statements`.
5406 fn generic_bytes_sink<T: AsRef<[u8]>>(t: T) -> Vec<u8> {
5407 t.as_ref().to_vec()
5408 }
5409 // `blake3::Hasher::update`-shape byte-input surface mock:
5410 // mirrors `blake3::Hasher::update` / `ring::digest::Context::
5411 // update` / `sha2::Sha256::update`'s `impl AsRef<[u8]>`-bound
5412 // `update` signature so a per-caixa BLAKE3 content-address
5413 // closure that composes `hasher.update(dialeto)` on the
5414 // [`crate::Lacre`] closure builder reaches the substrate-
5415 // primitive `as_str` accessor through the
5416 // [`super::CaixaDialeto`] `AsRef<[u8]>` axis and no other.
5417 // Lifted to the top of the function per
5418 // `clippy::items_after_statements`.
5419 struct MockHasher(Vec<u8>);
5420 impl MockHasher {
5421 fn new() -> Self {
5422 Self(Vec::new())
5423 }
5424 fn update(&mut self, bytes: impl AsRef<[u8]>) -> &mut Self {
5425 self.0.extend_from_slice(bytes.as_ref());
5426 self
5427 }
5428 fn finalize(self) -> Vec<u8> {
5429 self.0
5430 }
5431 }
5432
5433 // Fail-before-pass-after byte-parity pin on the newly lifted
5434 // `impl AsRef<[u8]> for CaixaDialeto` — asserts the trait-
5435 // idiomatic byte-view standard-library impl and the substrate-
5436 // primitive [`super::CaixaDialeto::as_str`] `pub const fn`
5437 // accessor's `.as_bytes()` byte-tail resolve to the same
5438 // four-arm PascalCase-byte-string emit-set across every arm
5439 // the exhaustive [`super::CaixaDialeto::ALL`] slice enumerates.
5440 // Extends the substrate-wide trait-idiomatic byte-view axis
5441 // onto the second closed-set fieldless typed enum on the
5442 // caixa-core-internal tier — matching the trajectory the
5443 // sibling [`super::CaixaKind`] first-mover
5444 // [`AsRef<[u8]>`] impl (69d8d86) walked before it.
5445 for &variant in CaixaDialeto::ALL {
5446 let via_trait: &[u8] = <CaixaDialeto as AsRef<[u8]>>::as_ref(&variant);
5447 let via_method_bytes: &[u8] = variant.as_str().as_bytes();
5448 assert_eq!(
5449 via_trait, via_method_bytes,
5450 "AsRef<[u8]> for CaixaDialeto impl must byte-equal \
5451 CaixaDialeto::as_str().as_bytes() on CaixaDialeto::\
5452 {variant:?} — divergence signals a silent detour off \
5453 the substrate-primitive accessor"
5454 );
5455 // Cross-axis witness against the paired str-view axes'
5456 // `.as_bytes()` byte-tails: [`AsRef<str>`] /
5457 // [`std::fmt::Display`] / [`super::CaixaDialeto::as_str`]
5458 // all resolve to the same lifted `CAIXA_DIALETO_WIRE_*`
5459 // const roster, and the byte-view axis must byte-equal
5460 // each of their `.as_bytes()` byte-tails by construction
5461 // — locking the str-view and byte-view axes together at
5462 // the substrate-primitive accessor.
5463 let str_view_ref: &str = <CaixaDialeto as AsRef<str>>::as_ref(&variant);
5464 assert_eq!(
5465 via_trait,
5466 str_view_ref.as_bytes(),
5467 "AsRef<[u8]> for CaixaDialeto and AsRef<str> for \
5468 CaixaDialeto must resolve to byte-equal byte-tails \
5469 on CaixaDialeto::{variant:?} — divergence signals \
5470 the byte-view and str-view axes have drifted off the \
5471 same substrate-primitive as_str accessor"
5472 );
5473 let display_bytes = variant.to_string();
5474 assert_eq!(
5475 via_trait,
5476 display_bytes.as_bytes(),
5477 "AsRef<[u8]> for CaixaDialeto and \
5478 <CaixaDialeto as std::fmt::Display>::to_string must \
5479 resolve to byte-equal byte-tails on CaixaDialeto::\
5480 {variant:?} — divergence signals the byte-view axis \
5481 and the Display formatter axis have drifted off the \
5482 same substrate-primitive as_str accessor"
5483 );
5484 // Cross-axis witness against the paired reverse-
5485 // projection axes' `.as_bytes()` byte-tails: every one of
5486 // `{&'static str, String, Cow<'static, str>, Box<str>,
5487 // std::sync::Arc<str>, std::rc::Rc<str>}` allocates (or
5488 // borrows) the same PascalCase byte-string the substrate-
5489 // primitive accessor emits, so the byte-view axis must
5490 // byte-equal each of their `.as_bytes()` byte-tails by
5491 // construction.
5492 let owned_static: &'static str = <&'static str as From<CaixaDialeto>>::from(variant);
5493 assert_eq!(
5494 via_trait,
5495 owned_static.as_bytes(),
5496 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5497 for &'static str must resolve to byte-equal byte-\
5498 tails on CaixaDialeto::{variant:?}"
5499 );
5500 let owned_string: String = <String as From<CaixaDialeto>>::from(variant);
5501 assert_eq!(
5502 via_trait,
5503 owned_string.as_bytes(),
5504 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5505 for String must resolve to byte-equal byte-tails on \
5506 CaixaDialeto::{variant:?}"
5507 );
5508 let owned_cow: std::borrow::Cow<'static, str> =
5509 <std::borrow::Cow<'static, str> as From<CaixaDialeto>>::from(variant);
5510 assert_eq!(
5511 via_trait,
5512 owned_cow.as_bytes(),
5513 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5514 for Cow<'static, str> must resolve to byte-equal \
5515 byte-tails on CaixaDialeto::{variant:?}"
5516 );
5517 let owned_box: Box<str> = <Box<str> as From<CaixaDialeto>>::from(variant);
5518 assert_eq!(
5519 via_trait,
5520 owned_box.as_bytes(),
5521 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5522 for Box<str> must resolve to byte-equal byte-tails \
5523 on CaixaDialeto::{variant:?}"
5524 );
5525 let owned_arc: std::sync::Arc<str> =
5526 <std::sync::Arc<str> as From<CaixaDialeto>>::from(variant);
5527 assert_eq!(
5528 via_trait,
5529 owned_arc.as_bytes(),
5530 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5531 for std::sync::Arc<str> must resolve to byte-equal \
5532 byte-tails on CaixaDialeto::{variant:?}"
5533 );
5534 let owned_rc_str: std::rc::Rc<str> =
5535 <std::rc::Rc<str> as From<CaixaDialeto>>::from(variant);
5536 assert_eq!(
5537 via_trait,
5538 owned_rc_str.as_bytes(),
5539 "AsRef<[u8]> for CaixaDialeto and From<CaixaDialeto> \
5540 for std::rc::Rc<str> must resolve to byte-equal \
5541 byte-tails on CaixaDialeto::{variant:?}"
5542 );
5543 }
5544 // `<T: AsRef<[u8]>>`-bound-consumer witness: the generic byte-
5545 // input function `generic_bytes_sink` (lifted above per
5546 // `clippy::items_after_statements`) accepts a
5547 // [`super::CaixaDialeto`] directly through the trait bound,
5548 // without the caller open-coding the two-hop
5549 // `dialeto.as_str().as_bytes()` composition. This is the
5550 // shape that reaches the caixa-lacre BLAKE3 content-address
5551 // closure's `blake3::Hasher::update(impl AsRef<[u8]>)` byte-
5552 // input surface through this impl and no other. Exercised on
5553 // both owned and borrowed input surfaces via the standard-
5554 // library blanket `impl<T: ?Sized + AsRef<[u8]>>
5555 // AsRef<[u8]> for &T`.
5556 for &variant in CaixaDialeto::ALL {
5557 let via_generic = generic_bytes_sink(variant);
5558 let via_borrowed_generic = generic_bytes_sink(&variant);
5559 let via_method_bytes = variant.as_str().as_bytes().to_vec();
5560 assert_eq!(
5561 via_generic, via_method_bytes,
5562 "generic `<T: AsRef<[u8]>>`-bound consumer on \
5563 CaixaDialeto::{variant:?} must yield the same byte-\
5564 tail CaixaDialeto::as_str().as_bytes() returns — \
5565 divergence signals the byte-view axis fails to \
5566 bridge a generic byte-input trait bound to the \
5567 substrate-primitive accessor"
5568 );
5569 assert_eq!(
5570 via_borrowed_generic, via_method_bytes,
5571 "generic `<T: AsRef<[u8]>>`-bound consumer on \
5572 &CaixaDialeto::{variant:?} must yield the same byte-\
5573 tail CaixaDialeto::as_str().as_bytes() returns — the \
5574 borrowed-input surface must resolve to the same \
5575 as_str dispatch"
5576 );
5577 }
5578 // `blake3::Hasher::update`-shape byte-input surface witness
5579 // on the caixa-lacre compounding target: the `MockHasher`
5580 // (lifted above per `clippy::items_after_statements`) mirrors
5581 // `blake3::Hasher::update` / `ring::digest::Context::update` /
5582 // `sha2::Sha256::update`'s `impl AsRef<[u8]>`-bound update
5583 // signature and accepts a [`super::CaixaDialeto`] directly,
5584 // routing its byte-tail through the substrate-primitive
5585 // `as_str` accessor — the shape a future per-caixa BLAKE3
5586 // content-address closure composes to fold a `:dialect`
5587 // classification byte-tag into the [`crate::Lacre`] closure
5588 // body.
5589 for &variant in CaixaDialeto::ALL {
5590 let mut owned_hasher = MockHasher::new();
5591 owned_hasher.update(variant);
5592 let owned_folded = owned_hasher.finalize();
5593 assert_eq!(
5594 owned_folded,
5595 variant.as_str().as_bytes(),
5596 "`hasher.update(dialeto)`-shape composition on \
5597 CaixaDialeto::{variant:?} must fold the same byte-\
5598 tail CaixaDialeto::as_str().as_bytes() returns — the \
5599 shape a future per-caixa BLAKE3 content-address \
5600 closure composes to fold a `:dialect` classification \
5601 byte-tag into the Lacre closure body"
5602 );
5603 let mut borrowed_hasher = MockHasher::new();
5604 borrowed_hasher.update(&variant);
5605 let borrowed_folded = borrowed_hasher.finalize();
5606 assert_eq!(
5607 borrowed_folded,
5608 variant.as_str().as_bytes(),
5609 "`hasher.update(&dialeto)`-shape composition on \
5610 &CaixaDialeto::{variant:?} must fold the same byte-\
5611 tail CaixaDialeto::as_str().as_bytes() returns — the \
5612 borrowed-input surface must resolve to the same \
5613 as_str dispatch"
5614 );
5615 }
5616 }
5617}