Elamur Groupants⌕
☰

mova-nautilus-work

The groupant beside tools/nautilus/src/work.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

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

model

mova-nautilus-work

Descriptant

The bounded standing loop: Job trait (next, native, validate), Loop::step (stop/resume, pick, native or ask, validate into a review-only proposal, journal), pacing, limit stop, run with STOP, resume, summary; DictJob over layer tens. Source: tools/nautilus/src/work.rs.

Forward approximant

step: refuse a state inside frozen paths -> stopped until resumed -> closed keys from journal -> job.next -> native Done -> journal native | Unsure -> pacing -> teacher::submit -> held on error | limit -> stopped | answer -> job.validate -> proposals/<id>.txt + proposed | rejected.

Invariant

Every closed item is journaled once; a stop holds until a later resumed line; admitted stays 0.

Cost

One job.next scan plus at most one question per step.

Composition

Parent: nautilus. Parent: nautilus. Used by mova-turtle with LessonJob. State: work.jsonl, proposals/, work.lock.

behavior_complement

Never writes sources, courses or assessment files; never admits; never reads held-out items (job responsibility); never asks two questions in one step or before min_gap_secs. Evidence status: source-derived model with finite checks, not a proof.

reverse_reconstruction

work.jsonl recovers every item's outcome, reason, question id and answer hash; proposals hold the validated text. No unique inverse is claimed.

Epoch 2026-11-04

First model, written with the source; no prospective prediction is claimed beyond the checks.

Epoch 2026-11-04 (pool)

Loop.ledger (a job's shared ledger.jsonl) and member: seen = journal closes plus ledger closes and reservations (an unreserved line reopens a reservation the terminal never took); a question is reserved in the ledger before it is asked, its hash checked against the ledger (asked by any member: held), a limit holds the item in the ledger at once; Job::open counts open items; Job::describe goes into proposed lines; DictJob takes part of parts. Red control: ledger ignored (the moved job asks again).

Epoch 2026-11-04 (pool)

Loop.ledger (a job's shared ledger.jsonl) and member: seen = journal closes plus ledger closes and reservations (an unreserved line reopens a reservation the terminal never took); a question is reserved in the ledger before it is asked, its hash checked against the ledger (asked by any member: held), a limit holds the item in the ledger at once; Job::open counts open items; Job::describe goes into proposed lines; DictJob takes part of parts. Red control: ledger ignored (the moved job asks again).

Epoch 2026-11-04 (senses)

Job::native_proposal and Job::learn (defaults: none); the loop writes <id>.native.txt, names it in the closing event and lets the job learn (the sense store); an unsent hold (no session) is journaled without closing once and retried when the terminal is ready (ledger: unreserved + unsent), a second closes; seen() treats older holds by their reason. DictJob: items of batch asked words keyed <layer>:<word>+…, numeric keys of earlier tens still close their rows; draft_task/draft_validate with picks, same, new:, restatements and absent lines; summary counts native proposals. Red controls: unsent retry removed; junk length removed.

tests

Checks

Command: cargo test --manifest-path tools/nautilus/Cargo.toml --offline --locked with MOVA_OCTOPUS_TEST_MODEL=$MOVA_DATA/download/0/0.4/en.bin (15 unit + 2 English tests; two identical runs on 2026-11-04).

Negative controls 2026-11-04 (each red, restored): no operator-word check; no terminal-id check; a limit not stopping the loop; stats drafting instead of reading. These are finite fixtures; no teacher or model was called; not a proof.

Pool epoch (2026-11-04): cargo test --release with the 0.4 en.bin, 26 unit + 2 English tests, two identical runs; red controls in the pool, improve and sources tests (each red, restored). Finite fixtures, not a proof.

2026-11-04 (senses): cargo test --release (0.4 en.bin), tools/nautilus 37 unit + 2 English tests, two identical runs; tools/turtle 9 + 2 pass. 2026-11-04 (senses): dictionary_job_plans_natively_and_asks_in_batches, earlier_tens_stay_done, the_store_fixes_a_sense_once_for_every_layer, an_unsent_question_is_retried_once (red control: a crash is held at once). Red: unsent retry removed, junk length removed, restatement gate removed.

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