Elamur Groupants⌕
☰

mova-whale-compose

The groupant beside tools/whale/src/compose.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
approximantpartialForward approximant
astpartialsyntax.json
compositionpartialComposition
costpartialCost
descriptantpresentDescriptant
invariantpartialInvariant
testsfinite evidencetests.md

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
behavior_complementbehavior_complementpartial source derived modelbehavior_complement
reverse_reconstructionreverse_reconstructionpartial source derived modelreverse_reconstruction

Model text

Descriptant

The Whale's description written natively from its reading and retained knowledge: opening (title, size, parts, topics), per part a connecting lead with size and topics, restated clauses in source order, term explanations after first use, knowledge-assisted restatements, the numbers a part reports, a closing; every sentence with its basis; guard and near-duplicate refusal; even per-part share under the word budget; never padded. Source: tools/whale/src/compose.rs.

Forward approximant

Known::of(reading, paper, items): the paper's own acronym definitions as native items; term facts from any paper (paper expansion kept, terminal adds the rest); sentence/section reads_as facts of this paper. write_with: structure sentences (FRAME vocabulary + basis), per readable section lead, clauses (keep filter), explain() at first token match, readings for sentences without a written clause, section readings, numbers (decimals, %, >= 2 digits, not years; >= 2 of them); closing two sentences. push refuses empty, guard-refused (structure: «…» unquoted first), near-duplicate (Jaccard >= threshold over >= 4 content words) and case-insensitive repeats. compose: if over max, share = (max - fixed)/available per section, evenly spaced picks, then drop trailing source sentences until <= max.

Invariant

Words <= max; nothing added to reach min; every item has kind and basis (sources, knowledge ids or stated counts/titles); no terminal answer text (guard); deterministic (BTreeMap/BTreeSet, source order).

Cost

O(items^2) near-duplicate comparisons (about 300-450 items per paper) plus one guard check per candidate (O(tokens x occurrences)); two passes when over budget; milliseconds per paper next to the 1 s read (2026-11-04).

Composition

Parent: whale-workers; inputs reader::Reading, knowledge items (knowledge.rs), gates::Guard; output Draft consumed by gates::check and learn.rs.

behavior_complement

Not done: summarizing or abstracting a part, reordering by argument structure, claims/method/results classification, explaining a term the Whale has no fact for, any text from the terminal, padding. Prospective prediction 2026-11-04 (before measuring): native round 1 2,500-3,500 words on five open papers; measured 2,964-3,744. Evidence status: source-derived model with finite checks, not a proof.

reverse_reconstruction

draft.json keeps every item with kind, sources, knowledge ids and basis: each sentence of description.txt maps back to its source sentences or knowledge item; which clauses were left out for the budget follows from the reading and the share. No unique inverse of the text is claimed.

Epoch 2026-11-04 (writer version)

WRITER names the native reader/writer version; a batch retries a paper that stopped unpassed only under a different version, so it must change with every change that can change a description. FRAME gains «asks» for the question frame «The paper asks: …?».

Epoch 2026-11-04 (writer-2026-11-04d)

Glosses are keyed by normalized term and hold one sentence per fact relation, each bound to its own knowledge item (own items first, then the pod's); bare-category facts are never written; restated sentences pass the grammar gate before they are written.

tests.md

learn::tests (fixture paper, scripted terminal): round-2 description explains «QZW» from retained facts, never contains the answer, traceability 1.0, no answer overlap; two_runs_are_identical. Dry run (five CC BY 4.0 papers, no terminal, 2026-11-04): 2,964 / 3,285 / 3,744 / 3,101 / 3,440 words, gates fail only on words, two runs byte-identical. Negative control: answers pasted into the draft turn the learn test red (restored).

This page in Markdown → https://md.groupants.elamur.ai/free/en/mova/tools/whale/src/compose.rs.groupant/