---
title: "mova-topic-corpus-web — Mova code model"
description: "Mova code model of tools/topic-corpus/src/web.rs: components with their labels, obernants and the model text."
url: "https://groupants.elamur.ai/free/en/mova/tools/topic-corpus/src/web.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/topic-corpus/src/web.rs.groupant/>

# mova-topic-corpus-web

The groupant beside tools/topic-corpus/src/web.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/topic-corpus/src/web.rs`](https://github.com/ElamurAI/mova-free/blob/main/tools/topic-corpus/src/web.rs)
- **source SHA-256:** `56860bbc7b636524…`
- **repository folder:** [`tools/topic-corpus/src/web.rs.groupant`](https://github.com/ElamurAI/mova-free/tree/main/tools/topic-corpus/src/web.rs.groupant)
- **repository commit:** `855da7bd4a7b`

> **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.

| id | 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

Stage 4: pages through Sea Spider only: plan (authors' homepages, claim pages, given URLs; no shadow hosts), queue file, English prompts of at most 16 URLs asked as caller whale, import of stored pages as web documents referencing Sea Spider's store, with the licence the page states and the site's terms link. Source: `tools/topic-corpus/src/web.rs`.

### Forward approximant

plan -> queue/prompts -> ask_animal per batch -> Reader::open(store).get(url) -> 2xx html/text only -> page_markdown (drop script/style/nav/header/footer/form/aside, headings, entities) -> page_licence (rel=license, CC link, rights meta, copyright line) -> register(kind web, origin Seaspider, source_kind seaspider).

### Invariant

Every page is internal and never public-admissible, whatever licence it states.

### Cost

Linear in page bytes; asking is one socket round trip per batch.

### Composition

Parent: `topic-corpus`.

### behavior_complement

Does not fetch anything itself, does not follow links, does not run JavaScript. Evidence status: source-derived model with finite checks, not a proof.

### reverse_reconstruction

The store keeps the raw body; the Markdown is a lossy projection of it. No unique inverse is claimed.

### tests.md


web::tests (HTML to Markdown, licence and terms detection, prompts in batches of 16, plan skips shadow hosts; import of a stored page as an internal document, parsed on request). Negative control: shadow() always false turns the plan test red.

cargo test --manifest-path tools/topic-corpus/Cargo.toml --offline with WORLD_EN_MODEL=$MOVA_DATA/download/0/0.4/en.bin (18 unit tests; fixture library, fake `papers` binary, fake terminal, local Sea Spider store; two identical runs on 2026-11-04). Without the model the model-dependent tests report a skip.

Negative controls 2026-11-04 (each red, then restored): public admission without the origin condition; assert_public without the Sea Spider/draft/note refusals; seeding without the learner lock; shadow-library filter off; public citing that ignores refusals; cache eviction ignoring the hot pin.

These are finite fixtures and live samples; not a proof.
