---
title: "mova-whale-drafts — Mova code model"
description: "Mova code model of tools/whale/src/drafts.rs: components with their labels, obernants and the model text."
url: "https://groupants.elamur.ai/free/en/mova/tools/whale/src/drafts.rs.groupant/"
---
Elamur: [Mova](https://md.mova.elamur.ai/free/en/) · [Dictionary](https://md.dictionary.elamur.ai/free/en/) · [Research](https://md.research.elamur.ai/free/en/) · **Groupants**

This page as HTML: <https://groupants.elamur.ai/free/en/mova/tools/whale/src/drafts.rs.groupant/>

# mova-whale-drafts

The groupant beside tools/whale/src/drafts.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

- **kind:** groupant
- **status:** partial source bound model
- **source:** [`tools/whale/src/drafts.rs`](https://github.com/ElamurAI/mova-free/blob/main/tools/whale/src/drafts.rs)
- **repository folder:** [`tools/whale/src/drafts.rs.groupant`](https://github.com/ElamurAI/mova-free/tree/main/tools/whale/src/drafts.rs.groupant)

> **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 | [Forward approximant](#forward-approximant) |
| **Ast** | partial | `syntax.json` |
| **Composition** | partial | [Composition](#composition) |
| **Cost** | partial | [Cost](#cost) |
| **Descriptant** | present | [Descriptant](#descriptant) |
| **Invariant** | partial | [Invariant](#invariant) |
| **Tests** | finite evidence | `tests.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.

| relation | type | label | where |
|---|---|---|---|
| Behavior complement | behavior complement | partial source derived model | [Behavior complement](#behavior-complement) |
| Reverse reconstruction | reverse reconstruction | partial source derived model | [Reverse reconstruction](#reverse-reconstruction) |

## Model text


### Descriptant

The yardstick for the Owls' drafts and an offline recomposer. `audit` classifies every written sentence and every description of recorded rounds (`<root>/papers/<paper>/round-*/draft.json`) into six defect classes: `garbled` (a line-end hyphen break, a phrase repeated after itself, a sentence Mova's parse does not cover), `clipped` (the grammar gate's fragment marks, a bare noun phrase fronted by a comma before a clause of its own, a «how/that» clause ending on a bare verb), `gloss_repeated`, `gloss_conflicting` (two definitions of a non-acronym with no content word in common), `gloss_non_term` (an adjective, adverb or word fragment explained) and `near_duplicate` (content similarity >= 0.6). `recompose` writes each recorded learner configuration's paper again with the current writer from the paper text and a snapshot of the knowledge (store, then pod), in the round layout, so the same audit measures before and after on the same papers. Source: `tools/whale/src/drafts.rs`. CLI: `mova-whale drafts-audit OUT ROOT...`, `mova-whale drafts-recompose OUT [--map LIVE=SNAPSHOT]... LEARN_CONFIG...`.

### Forward approximant

audit(roots): per paper, round directories in name order (interrupted rounds left out, unreadable ones passed over); per round the draft is classified once per distinct draft text (hash); sentence verdicts cached by text, term verdicts by (term, context). Counts per class over all rounds and over each paper's latest round (per 1000 restated sentences, glosses per 1000 explanations), papers affected, reasons for garbled/clipped, examples (8, `WHALE_AUDIT_EXAMPLES`), per-paper counts of the latest rounds. recompose(configs, map, out): latest configuration per paper id; text hash must equal the pinned one; Known::of(reading, paper, store items + pod items); Guard over the repaired text and the answers; compose; gates::check; description.txt, draft.json, gates.json under round-recomposed.

### Invariant

Read-only on its inputs (recompose writes only under OUT and opens the snapshot's stores); deterministic (BTreeMap/BTreeSet, sorted directory walks): two runs write byte-identical reports. The audit classes are heuristics independent of the writer's own gates (a sentence the writer admitted can be counted), so it can show red on admitted text.

### Cost

One parse per distinct restated sentence (cache) plus one per explanation context; 896 live rounds (2026-11-06): about 80 s. recompose: one reading per paper (1-3 s) plus compose; 220 papers about 3.5-5 min.

### Composition

Parent: whale-workers. Uses compose (Known, compose, WRITER), gates (Guard, check, similarity), reader (read_with, repair, content), clause (grammatical), knowledge (Store, norm_term), pod (Pod), learn (LearnConfig, read without validation: recorded configurations name terminal profiles that may have moved). Called by main.rs.

### Behavior complement

Not done: judging meaning (a spliced sentence of two columns whose words all parse, «Others' perspectives evaluate multiple methods …», is not caught; a clipped clause whose last word Mova tags as a noun is caught only when it opens with a bare noun phrase), checking facts in glosses, comparing a draft with its paper, writing into live state, choosing what to fix. `garbled` counts at most one reason per sentence. Evidence status: source-derived model with finite checks, not a proof.

### Reverse reconstruction

Each counted defect names its paper, round, item index, text and reason in the examples; per-paper counts locate the rest. The report does not determine the drafts (many drafts give the same counts).

### tests.md


drafts::tests (2026-11-06): hyphen breaks found in five spliced sentences, none in five compounds/prefixes/acronyms/suspended hyphens (negative control); repeated runs found, «that that» / «had had» not; glossed terms read; defects_are_classified (model): «Political issues, little is known about how ordinary people on social media frame.» is clipped, «immigration-the» garbled, «their work their work» garbled, two clean sentences have no defect (negative control); «Computational» in «computational analyses» and «ing» are no terms, «treebank» and «RoBERTa» are. Two audit runs over the same roots byte-identical (2026-11-06, live rounds and recomposed roots).

## History


#### 2026-11-06 · document

##### Epoch 2026-11-06 (created)

Baseline on the 220 papers of the Owl batches recomposed from a knowledge snapshot (writer-2026-11-04d): clipped 205, garbled 524, gloss_repeated 1,438, gloss_conflicting 267, gloss_non_term 1,105, near_duplicate 974; two runs identical.

## Provenance

- **source SHA-256:** `1f7170e06ce8be82…`
- **repository commit:** `c24d02b4c83b`
