Elamur Groupants⌕
☰

prag-feats

The groupant beside prag/src/feats.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

componentlabelwhere
approximantpartial source modelforward
astpartialsyntax.json
compositionpartial source modelcomposition
costpartial source modelcost
descriptantpartial source modelepoch-memory
invariantpartial source modelinvariant
testspartial source modelchecks

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.

idtypelabelwhere
prag-feats-behavior-complementbehavior_complementpartial source modelbehavior-complement
prag-feats-reverse-reconstructionreverse_reconstructionpartial source modelreverse-reconstruction
prag-feats-couplingconstraint_relationpartial source modelcoupling
prag-feats-observation-fiberinformation_losspartial source modelobservation-fiber

Parts

Model text

model

prag-feats

Build 32 pragmatic feature slots from quote-selected utterances, normalized UD observations, cues and paragraph metadata; source-qualified previous-act indices and training dictionaries.

Source snapshot: 2a1a0bd6e43dd16f7284e993f30d0f4971c447c9e2080616033d19ac8693611f. All relations concern this snapshot on the stated admissible domain. Models are source-derived partial relations; finite fixtures are evidence, not general proofs. Complement is a conservative inner constraint model. Reverse reconstruction preserves all compatible antecedents conceptually; no enumerating solver is implemented.

forward

For item i, extract resets quote state unless adjacent input has equal source/doc/paragraph and ordinal +1, excluding Tatoeba. quote_spans feeds row; row invokes the real annotator through row_with, producing 32 slots in SLOTS order with prev=start. prev_of independently builds source/doc/ordinal predecessors. Dict builds per-slot first-observation IDs with previous-act vocabulary seeded before rows.

behavior-complement

Universe: valid item sequences, supplied annotation observations, valid cue tables and dictionaries paired with candidate rows/indices/IDs. Absent behavior includes a row with a different slot count, prev initialized to an act, a Tatoeba predecessor, a predecessor from another source, or an encoded missing value other than UNSEEN. These are source-derived constraints (inner bound), not an exhaustive complement of live annotation.

reverse-reconstruction

Compatible antecedents retain every item text, quote state, annotation and cue configuration satisfying all observed coordinates and IDs. Normalization, buckets, omitted punctuation and discarded dictionary index prevent unique recovery. Equal rows may arise from distinct casing, text and annotations; IDs additionally require the exact dictionary.

invariant

32 slots; quote intervals are UTF-8 bounds when produced by quote_spans; dictionary order is training traversal order; source isolation is distinct from licensing. This feature module does not enforce train/evaluation separation.

cost

With B text bytes, W words, P cues, maximum phrase L, row costs O(B+WPL) plus annotation; annotation cost is external. Quote state scans allocate O(B); predecessor map expected O(N) time/space; dictionaries expected O(total string bytes) hashing and storage. No measured speedup or executable approximation error bound is claimed.

coupling

Quote carry resets at paragraph boundary while prev_of deliberately crosses paragraph boundaries. Rows leave prev=start; eval train_rows/predict_seq inject silver/predicted previous acts. eval run builds Dict only from training rows; model.rs consumes Dict, SLOTS and UNSEEN. Native seam covers downstream projection, not actual annotation.

observation-fiber

The observation (row, encoded IDs) cannot recover the full UD tree or original text; normalization WO and 'll both reach will. Predecessor indices also discard duplicate-key earlier records through last-wins insertion.

composition

Quote carry resets at paragraph boundary while prev_of deliberately crosses paragraph boundaries. Rows leave prev=start; eval train_rows/predict_seq inject silver/predicted previous acts. eval run builds Dict only from training rows; model.rs consumes Dict, SLOTS and UNSEEN. Native seam covers downstream projection, not actual annotation. Immediate child scopes share the state described above; overlapping scopes do not add costs independently.

checks

All six feats::wave13_models tests. Native public joins: quote_spans to row_with, row_with to Dict::build/encode/show and serialization/reindex; prev_of on supplied Items. Caller wiring inspected in eval.rs and model.rs; no live eval/parser. See the file-level evidence.md for exact log hashes and repeated run outcomes.

epoch-memory

2026-10-30 wave13: initial source-bound model. Prospective model preceded edits. Existing normalization and quote rules were retained; tests expose their information loss. Source identity witness justified qualifying predecessor keys by Src. Annotation is isolated behind a private closure used by the production row wrapper; fixtures do not call or certify tokenizer/parser. AST is a partial syntax projection, macro bodies opaque; semantic AST, live model/corpus and general proof remain absent.

admissible-bounds

Extraction assumes ordinal increment fits i64 and paragraph position increment fits usize; extreme inconsistent metadata is not hardened here. Dictionary slot/value accesses assume valid indices and fewer than u32::MAX distinct values per slot, with UNSEEN reserved. Private span slicing assumes ordered, nonoverlapping UTF-8 intervals produced by quote_spans. Hand-built UD fixtures need not be trees, but these checks do not validate malformed head graphs. These limits predate this change; the witnessed fix is limited to source identity.

evidence

Evidence, 2026-10-30

Six native tests in feats::wave13_models passed twice debug and twice release with equal normalized names/results. The compiled old-code source-collision witness failed its source-qualified predecessor assertion; five other tests passed. A compiled production mutant replaced utterance question detection by false; bucket_boundaries_and_terminal_priority and supplied_ud_projection_and_quote_selection rejected it by assertions. Exact original bytes were restored and all six tests passed again.

No live annotation, external model, corpus, teacher, GPU or held-out runs. Two syntax generations are byte-identical; macro bodies remain opaque.

External run artifact hashes (run label octopus-wave13-feats-2026-10-30):

Full-base external registry scaffold adds this leaf alongside the unchanged existing root. Structural groupants reports repeat byte-identically with no diagnostics; one intentionally absent scaffold parent sidecar is reported. Changed check reports only prag/src/feats.rs and no missing registration. No central registry or parent files were edited by this worker.

This page in Markdown → https://md.groupants.elamur.ai/free/en/mova/prag/src/feats.rs.groupant/