prag-schema-closed
The groupant beside prag/src/schema.rs in the Mova repository: what the code computes, what it never does, how to go back from its outputs, its invariants, cost and checks.
Facts
Implementation material. A Mova code model describes this code at one source revision: partial models, finite checks and their stated scope. It is not a reviewed general exposition, and its labels are shown as written, never raised.
Components
| component | label | where |
|---|---|---|
| approximant | partial source model | forward |
| ast | partial | ../syntax.json |
| composition | partial source model | composition |
| cost | partial source model | cost |
| descriptant | partial source model | epoch-memory |
| invariant | partial source model | invariant |
| tests | partial source model | checks |
Obernants
The typed relations around the forward model: the behaviour complement (what the code never does), the reverse reconstruction (every input compatible with an output) and specialised views.
| id | type | label | where |
|---|---|---|---|
prag-schema-closed-behavior-complement | behavior_complement | partial source model | behavior-complement |
prag-schema-closed-reverse-reconstruction | reverse_reconstruction | partial source model | reverse-reconstruction |
prag-schema-closed-coupling | constraint_relation | partial source model | coupling |
Model text
forward
For each enum E, fixed ordered table T_E maps variants to lowercase names; parse(s) is Some(T_E inverse(s)) iff s is exactly a table name, without trimming. idx equals table position; Display equals name. Serde derives use Rust variant spellings, with no lowercase rename.
behavior-complement
Over strings times Option(E), exclude Some(e) whenever s differs from e.name(), and None whenever s is a table name. For the serialization observation exclude lowercase TSV names as accepted JSON enum strings. Macro-generated methods execute in tests despite opaque macro syntax.
reverse-reconstruction
On accepted exact names the variant is uniquely recovered. The None output has every non-table string as a compatible input (empty, uppercase and padded names included); it has no unique inverse. idx is invertible only within the enum's finite index domain.
invariant
Case/padding intervention can turn exact parse success into None, while parse_labels trims first. JSON roundtrip uses the derived variant alphabet; it cannot be replaced by the TSV name alphabet.
coupling
Case/padding intervention can turn exact parse success into None, while parse_labels trims first. JSON roundtrip uses the derived variant alphabet; it cannot be replaced by the TSV name alphabet.
composition
The closed table, coordinate and codec fragments share exact enums and field order. Classifier indices require the corresponding classes list; schema is not directly used by infer.rs. Agree uses string tables and does not validate this schema. Native tests exercise schema operations; caller inspection is not an executed cross-file join.
cost
O(length(s)) bounded-name comparison, O(1) enum index/name and fixed table storage; serialization cost includes emitted bytes.
checks
Six wave13_models tests plus one prior schema test run twice per debug/release profile; evidence.md at the file root binds receipts. Literal independent tables cover 4608 categorical rows, 34 valid coordinate updates, 12 invalid boundaries, 127 first-error masks, five word counts and Unicode whitespace fibers. JSON coverage executes Form variants and default Labels; arbitrary serde error cases are untested.
epoch-memory
2026-10-30: prospective model recorded before edits. Old Boolean class 2 silently overwrote true with false; invalid_class_panics_before_mutation failed. The narrow guard preserves unit return and valid indices, consistently panicking before mutation. The prospective note estimated 36 valid classes; actual table sum is 34. The word-limit > to >= production mutant compiles and is rejected by rejection_order_and_word_boundary, then exact source is restored. No escaping/API redesign was introduced: noncanonical means remains an explicit transport limit. Syntax generation repeats exactly; macro bodies remain opaque, although methods are exercised natively. No live parser, teacher, corpus, network, GPU, training, filesystem-durability or full-system claim.
This page in Markdown โ https://md.groupants.elamur.ai/free/en/mova/prag/src/schema.rs.groupant/closed.groupant/