20  The Copernicus case

The repair of copernicus-prim, with measured numbers

20.1 The collection

copernicus-prim holds ten documents with 3,644 pages: the critical edition Nicolaus Copernicus Gesamtausgabe (GW-II, GW-IV, GW-V, GW-VI-1, GW-VI-2, GW-IX), Copernicus1873, Copernicus1990, Rheticus1540 and Rosen1937. The texts are Latin and German, with English and French passages, critical apparatus, commentary notes, record-end notes that stand pages after their markers, and astronomical tables.

The repair of this collection is the origin of the cure method. It reached its result, but by a procedure that the method now forbids: each unsatisfactory measurement started another run over the collection. The session took half a day. This chapter records what was measured and which rule each finding produced.

20.2 Result

State of 2026-09-25 (text_validity.json, check text-validity/1.10):

Verdict Pages
ok 3,508
warn 134
fail 1
unverifiable 1
total 3,644

Fail rate 0.03 %, collection verdict valid. The corpus holds 79,908 sentences: 43,044 German, 30,442 Latin, 3,471 English, 1,525 French, and 1,426 labelled Hungarian. The Hungarian sentences are Latin misread by the language detection; this defect is open.

The page XML comes from several engines, as recorded in the page metadata:

Engine Pages (ok / warn / fail)
qwen3.5:cloud 2,994 / 101 / 0
gemini-3.1-flash-lite-preview (earlier production) 317 / 26 / 0
qwen3.8:27b-mlx 127 / 5 / 1
kimi-k2.7-code:cloud 47 / 2 / 0
gemini-3.8-flash 22 / 0 / 0

20.3 Findings and the rules they produced

20.3.1 A tool that reports success while it loses a language

After an upgrade to Stanza 1.12.0 the model cache lacked the Latin proiel tokenizer and the French model. The page parser skipped the sentences of these languages and reported every page as processed, with 0 failures. The corpus fell to 46,515 sentences; GW-II, a Latin edition, had 0 Latin sentences. After the models were restored the corpus held 79,908 sentences, GW-II 6,938 Latin ones. Before the defect was found, the corpus had been rebuilt twice in full, without a test on a few documents.

Rule: the downstream update passes a language gate (a language with at least 100 sentences before the run must not lose more than 5 % of them), and a rebuild of the whole corpus is not a test.

20.3.2 Modification time is not a change

The normalizer writes a stamp into every page it inspects. The downstream stages compared modification times, so every page counted as changed, and the incremental update became a full one. The stages now compare the hash of the page text (text_sha256).

Rule: change detection is by content.

20.3.3 warn can hide a loss

The earlier version of Copernicus1873 page 100 (qwen3.5:cloud) held two of the three note paragraphs of the page: the 46-word paragraph “Für den »burggrabius castri« …” was missing, and the print markers * and ** were numbered 1 and 2. A lost note paragraph falls under FN-PARTIAL or TXT-GAP, which are warn-level codes; a collection can be valid while such losses remain. The current version (qwen3.8:27b-mlx) holds all three paragraphs.

Rule: the diagnosis lists warn pages by code, and codes that stand for lost text are remedied like failures.

20.3.4 An engine that invents a page

GW-IV page 25 is a blank scan: the Vision reading has 0 tokens. The earlier production version by gemini-3.1-flash-lite-preview contained a full page of invented English prose (“The study of the celestial mechanics of the solar system …”); its backups page_025.xml.v0 and .v1 keep the evidence. On GW-II page 236 the structured apparatus contains an entry 25 with a wrong reading, while the copy of the apparatus in the page footer is correct.

Rules: TXT-EXCESS is a severe code; a generation error goes into the fault dossier and the learning loop, not into a hand edit of the page.

20.3.5 A rule tested on the pages that need it

The GW-II normalizer rule for apparatus-only pages was run on the whole document as a dry run before it was applied: 174 pages would change, 3 were rejected (pages 337, 374, 376) because their note keys are letters, which the rule did not expect.

Rule: a normalizer is applied only after its specimen gate passes, and the application rejects every page on which the word sequence would change.

20.3.6 Engine calls on detector false positives

The footnote zone of the validity check comes from Vision geometry alone. Notes in the middle of a page, or set at body leading, produce FN-IN-BODY and BODY-IN-FN flags although the XML is right. Re-OCR of such pages spent engine time without a possible gain. The adjudication register now holds 35 facsimile decisions, 9 of them on GW-V (7 BODY-IN-FN, 2 FN-IN-BODY); each binds to the hash of the page XML and lapses when the page changes.

Rule: before a re-OCR of a zone flag, a facsimile check decides whether the flag is a validator false positive.

20.3.7 No stop criterion

Every step above was followed by another run over the collection or the corpus: the full Stanza rebuilds, full audits after each rule, re-OCR over all pages of a flag class. None of these runs had a page or time budget, and none ended with the decision “no improvement, report”.

Rule: one defect class per iteration, 3–5 specimen pages before any application, a page and time budget per iteration, and a report instead of another run when the metric does not improve (see the cure method).

20.4 The model review of the same session

The review of the models used in the cure found qwen3.5:cloud, the engine of most pages of this collection, retired by Ollama (HTTP 410). The cure’s default for a first print pass is qwen3.8:27b-mlx; the A/B of the overlay authors is recorded in Reference.