macula-pragmatics
The groupant beside tools/macula/src/prag.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 | approximant |
| ast | partial | syntax.json |
| composition | partial | composition |
| cost | symbolic source derived | invariant |
| descriptant | present | descriptant |
| invariant | partial | invariant |
| tests | executed bounded checks | tests |
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 |
|---|---|---|---|
behavior_complement | behavior_complement | partial source derived model | behavior_complement |
reverse_reconstruction | reverse_reconstruction | partial source derived model | reverse_reconstruction |
rule_override | rule_override | partial source derived model | rule_override |
speech_fold | speech_fold | partial source derived model | speech_fold |
act_precedence | act_precedence | partial source derived model | act_precedence |
quote_machine | quote_machine | partial source derived model | quote_machine |
Parts
Model text
descriptant
Descriptant
Prospective epoch
2026-10-31 source review predicted: Rules=(known default plus with) minus without. Words projects rows. quote finds first qualifying frame/subtree. read selects form/act/polarity in rule order. read_sentence maps(rows,open_before,rules) to reading/speech/frame/open_after. words_only removes punctuation/renumbers; prag carries state by book. JPS quote boolean fold independent; compare joins verse observations. Resource model: n rows: kids O(n), subtree fixed point worst O(n² log n), repeated candidates can add n. String scans O(B), joins O(R log R)+sort, memory O(R+B). No filesystem timings. External prospective.md predates test additions and preserves APIs, effect order, hazards and interaction hypotheses.
Observed epoch
Bounded real helper checks in tests.md constrain these models; syntax is a partial lexical projection with no macro expansion, name resolution or proof. Production expressions unchanged; five inline test modules added. Compiled mutants are temporary and exactly restored. Existing malformed-input and nonfinite domains remain explicit, not silently repaired. Parent composes this scope with siblings without adding overlapping costs twice.
Finite fixtures, not exhaustive rules/malformed rows or filesystem compare.
approximant
Forward relation
Rules=(known default plus with) minus without. Words projects rows. quote finds first qualifying frame/subtree. read selects form/act/polarity in rule order. read_sentence maps(rows,open_before,rules) to reading/speech/frame/open_after. words_only removes punctuation/renumbers; prag carries state by book. JPS quote boolean fold independent; compare joins verse observations.
Domain: Nonempty10-column rows/head domains required. without overrides with. Frame may open next sentence. Negation and polarity distinct. Quote recognizer flat, lowercase-s possessive heuristic.
invariant
Invariant and cost
Invariant
Nonempty10-column rows/head domains required. without overrides with. Frame may open next sentence. Negation and polarity distinct. Quote recognizer flat, lowercase-s possessive heuristic.
Cost
n rows: kids O(n), subtree fixed point worst O(n² log n), repeated candidates can add n. String scans O(B), joins O(R log R)+sort, memory O(R+B). No filesystem timings.
Limits
Finite fixtures, not exhaustive rules/malformed rows or filesystem compare. No percentage surrogate is implemented: categorical parsing/effect observations lack an admitted numerical error metric. Any future profile must define its metric/domain and use only1/2/5/10 percent caps.
composition
Local composition
Rules=(known default plus with) minus without. Words projects rows. quote finds first qualifying frame/subtree. read selects form/act/polarity in rule order. read_sentence maps(rows,open_before,rules) to reading/speech/frame/open_after. words_only removes punctuation/renumbers; prag carries state by book. JPS quote boolean fold independent; compare joins verse observations.
Children select narrow source functions with their exact byte intervals. Remaining branches stay in the file model; fragments are not exhaustive partitions. Calls and state joins follow the forward relation, not folder order. Shared scans/helpers are counted once in whole-file costs. Complement of composition is not union of complements; reverse composition retains compatible intermediates and caller premises.
models
Typed source-bound relations
Subject: exact source SHA-256 in manifest. Domain and resource premises are in invariant.md. Each model is partial, source-derived, over a single helper invocation or the described finite trace. Complements are proposed inner exclusions under those premises; reverse relations retain all compatible antecedents, with no unique inverse claim. The oracle is the named checks in tests.md; unexecuted cases remain hypotheses. No numerical approximation certificate.
behavior_complement
Unknown library rule names cannot enable behavior. Disabled carry prevents continuation solely from prior open. Aaron's does not open quote; nothingness not negation. Supplied rows invoke no teacher.
reverse_reconstruction
Reading admits many rows/heads/histories. With carry disabled both old booleans compatible; Cont with carry/no close requires prior open. Quote may ignore old open. Final JPS state loses positions/nesting.
rule_override
Active=(RULES minus OFF plus known with) minus without; unknown ignored by library, rejected by CLI.
speech_fold
Quote precedes close/continuation/bare/narration. Empty quote returns frame/open=true even carry disabled; nonempty quote opens iff carry and last word included.
act_precedence
rhetorical,ask-first,propose,resolve,volitive/command,question,promise,assert order; form independently first-form. Equal act need not equal form.
quote_machine
Apostrophe before alphanumeric after space/start opens; before nonletter closes except lowercase s+space. Alphabetic chars set inside/outside, punctuation neither.
tests
Checks and evidence
Named source/helper checks: prag::tests::frame_and_quote, prag::tests::rules_off_show_red, prag::tests::narrator_closes_quote, prag::tests::jps_quotes, prag::tests::negation_and_acts.
Wave31 on2026-10-31:30 distinct exact tests passed twice debug and twice release, with equal sorted named outcomes. This node claims only its listed subset; empty subset means source review only. Six actual source-behavior mutants compiled, failed assertions, restored exact bytes/hash, and passed focused green reruns. No assertion-only mutants; existing swapped-input controls are separate. Receipt bundle: $MOVA_DATA/runs/octopus-wave31-corpus-2026-10-31 (native-commands.json, source-test-map.json, mutation-results.json, .status/.log). No live corpus, teacher, frozen assessment, download or production data used.
Finite fixtures, not exhaustive rules/malformed rows or filesystem compare.
This page in Markdown → https://md.groupants.elamur.ai/free/en/mova/tools/macula/src/prag.rs.groupant/