Preprints, DOIs and how to cite
Publications
Updated 21.09.2026
The results of this project are written up as two companion papers. Both are published as preprints on Zenodo with citable DOIs; the same replication package is attached to each record. Paper I was submitted to Cryptologia on 22.08.2026 and is under review; Paper II stays a Zenodo preprint. The arXiv mirror waits for a cs.CL endorsement.
The two papers
A Workshop Cipher
A generative model that reproduces the statics and the dynamics of the Voynich text at once: a Naibbe-class verbose cipher operated with workshop scribal habits. The mechanism, not a reading.
Thirty Names per Sign
The zodiac ring labels as two-letter sigla of closed per-sign name lists, plus a reproducible falsification pipeline that rejects seven published classes of degree-name sources.
How to cite
Averyanov, V. (2026). A Workshop Cipher: a Generative Model Reproducing the Statics and Dynamics of the Voynich Manuscript Text. Zenodo. https://doi.org/10.5281/zenodo.21761191
Averyanov, V. (2026). Thirty Names per Sign: the Zodiac Ring Labels of the Voynich Manuscript as Two-Letter Sigla, and a Falsification Pipeline for Degree-Name Cribs. Zenodo. https://doi.org/10.5281/zenodo.21761982
Results timeline - the public record
What was established and when it was placed on open record: this site (from 09.07.2026), Wayback Machine snapshots and Zenodo preprints with DOIs (02.08.2026). Full chronology and numbers - in the papers and the replication package.
Project start. All 213 Beinecke MS 408 scans, every available transliteration (EVA/v101/Currier), a common parser; published baseline statistics reproduced.
Nature of the text (tests #1-#7): language-like structure with anomalously low conditional entropy; working hypothesis - a syllabic verbose cipher. External anchor: the Occitan month marginalia.
Labels and the zodiac: the lexicon as a closed code table (#12); blind coding of the nymphs reproduced shift 23 against al-Biruni’s §457 degree-sex table (p=0.0088, blind round 2).
The text mechanism assembled (#17-#30): a Naibbe-class verbose cipher, the twin layer, sandhi, one shared workshop table across five hands. Ring labels = two-letter sigla (#31-#34). The Astrolabium planum 1488 catalogue mapped 360/360.
voynich.site published (RU/EN, later IT) - from this day on, results are placed on public record as they are obtained.
The negative programme: the classes of degree-name sources rejected by preregistered tests (#35-#47); internal key recovery shown impossible (#48); the self-citation hoax model shown distinguishable from the Voynich text (#49).
Word burstiness explained by a sectional coding dialect (#50-#52): the model reproduces burstiness without appealing to “meaning”.
Replication package assembled: every number in both papers reproducible by scripts; the labels dataset documented.
Sig-D (Parisel’s “directionality”) replicated and reinterpreted as the word’s slot grammar (#53).
Blind reversal quiz: counter-rotation of the inner rings of Pisces and dark Aries (foldout f70v) - a local feature, not a global structure.
“Hypotheses & checks” section: 14 reviews of external hypotheses in three languages, each with numbers and primary sources.
Replication package published on this site (voynich_replication_v1.zip). The “apothecary signs” (U13) and “bath numerals” (U14) branches closed with preregistered nulls.
Priority fixed on public record: Wayback Machine snapshots and both preprints on Zenodo with DOIs. The full generator passes Parisel’s v2 “four-signature criterion” (4/4 against Currier A, test #61).
The Publications page, per-page URLs and search infrastructure; submission to arXiv and Cryptologia in progress.
Paper I submitted to Cryptologia (manuscript 262190594) and under review; this site and Zenodo remain the open priority record.
Model canon: sandhi depth K=3. An external axis, glyph junction at word boundaries (Tlepkali), gave 0.086 for the model against 0.190 in the manuscript; at K=3 the model yields 0.191 with no cost on the guard windows (tests #143-#147).
Inter-word claims withdrawn. Three quantities (line openers #105, prefix direction #109, sh- before gallows #111) are reproduced by rival mechanisms 5 of 5 (#149, #150): they remain defects of the model but do not discriminate between mechanisms. In their place, a constraint on the class: the positional excess of a word form within the line (#155) is carried by none of 14 mechanisms. Eleven defects now; the paper texts aligned.
Cryptologia printed two papers on our class: Kinnison (a verbose cipher reproduces the profile, languages do not) and Delgado's letter. Kinnison's axes reproduced without his code (#156): the sign of the medial-minus-initial entropy flips with the transliteration (EVA symbols +0.22, EVA glyphs -0.09, v101 -0.24), so the axis measures the notation, not the text; his Naibbe numbers confirm our family of vocabulary defects.
Lux's three-transliteration audit reproduced byte for byte; our numbers run on her harness (#164): h2, the "empty corner" and the glyph junction hold under a change of transcriber (ZL3b/IT2a, all 36 policy cells) but move under a change of alphabet (v101 raises h2 by 0.40 bit). The R_int discriminator of #155 withdrawn; the #155 level holds.
Replication package v1.1 (333 files, 3.3 MB): following a report by Igor Golub, test_parisel4.py with its reports and pre-registration and the third-party modules under analysis/external were added; the assembler now follows imports transitively. New Zenodo versions: doi:10.5281/zenodo.22874156 (Paper I), doi:10.5281/zenodo.22874165 (Paper II).
Sixteen defects and the scale of a section. The stem-internal junction (Amador García, #180b) and the left q-sandhi (Mouton, #183) are carried by the K=3 sandhi canon - two independent supports for the canon change of 03.09. New defects: enriched words of herbal A and B (#166), fused XYXY repeat (#167), line-final am/aiin exchange (#181), heterogeneity and drift of text chunks (#184). A quire-length section dialect (220 lines) brings the Taylor exponent to target on 10 seeds of 10 and lifts heterogeneity to 41-61%, but failed its pre-registered acceptance (#185); the canon is unchanged.
Canon changed: a quire-length section dialect. A 220-line section (the manuscript’s median quire) instead of 40 closes the Taylor exponent (0.650 against 0.669, #186), lifts the chunk heterogeneity to half its target and brings the vocabulary-growth shape closer. The first acceptance (#185) failed on an axis measured on a scale with a false zero; the method rule was corrected and a fresh-seed re-acceptance passed. Rival mechanisms still fail the profile (#118, 65 corpora). Paper I numbers are at the previous canon.
Chunk heterogeneity - an axis in the model’s favour. A catalogue of 13 mechanisms at 5 seeds each (#187): the level of glyph-bigram difference between chunks is carried only by self-citation with mutation, which fails the profile; among profile-holders, only our canon of 28.09 (4 seeds of 5, 55% on average). Nobody carries the glyph character of the difference: the manuscript’s chunks differ more in glyph composition than in word forms (0.47 against 0.19 in the model); the scribal hand adds almost nothing.
Two candidate defects under preregistration (#188). Near-repeats of adjacent words (Sotiriadi’s measure): the model carries them on fresh seeds - the candidate is dropped. The order of identical forms within a line (Matsuda’s measure, his code unchanged): the model does not carry it - +0.0109 in the manuscript, about zero in the model; markov2 and coupled carry it but both fail the profile - the defect is ours, the sixteenth.
The Zenodo blind spot is cleared; a seventeenth defect (#189). Tizzani, Owens and 19 second-tier deposits reviewed: none overturns our conclusions, and Owens’s own measure independently confirms that our numbers are tied to the EVA alphabet (#164). His axis - the predictability gain from longer context - is not carried by the model: +0.30…+0.35 against +0.157 in the manuscript; six rival mechanisms carry it but fail the profile - the defect is ours.
An eighteenth defect (#190) and a common thread. The first glyphs of neighbouring words in a line agree three times more strongly in the manuscript than in the model; the model holds the place of agreement (onsets, not codas). The rival markov2 and coupled carry it - the same ones that carry #81 and #188: neighbouring words in the manuscript are linked more strongly than through one junction glyph. A lead for the next mechanism.
The canon changed a third time: neighbour priming (#191). The homophone is chosen with an eye to the first glyph and length of the previous word in the line. Preregistered acceptance: guard windows intact, no axis worse, all four target axes closer to the manuscript; defect #190 closed, seventeen open. The cost is a wider seed-to-seed spread of the twin guard.
An eighteenth defect (#192), a constraint on the class; a sixteenth mechanism. Candidates from Beyer’s preregistered battery were tested under our own preregistration: the model repeats a word 2-5 words later nearly five times as often as the manuscript, and none of 13 rival mechanisms falls in the manuscript’s window. Local vocabulary and dependence across line breaks got no verdict - our stand failed its own controls. The cost of priming on Beyer’s battery, over ten seeds, is one statistic. SachekDenis’s generator (“44 metrics, 3.7 %”) was reproduced bit for bit and added to the catalogue; like the other fifteen, it does not hold our profile.
Guessing a vocabulary “by meaning” - a stand without power (#193-#195). Following Vitaly’s idea, Latin meanings were fitted to the manuscript’s frequent words and blind judges rated how coherent the translations read. Three preregistered rounds; in the last, fitters worked on the whole text with counts and a calibration on Latin (Cassius Felix: 17.5 % of words right). Result on three conditions (manuscript, the same shuffled within lines, real Latin Gynaecia under word substitution): mean score 0.08 / 0.02 / 0.26 out of 3; even for real Latin the vocabulary was 19 % right, and its lead over the shuffle was 0.24 against a threshold of 0.5. The method does not separate text from noise, so it says nothing about the manuscript. Rule 1: no readings.
Edge-glyph coupling of adjacent words under Schwartz’s measure - the canon carries it (#198). M. D. Schwartz’s preprint (Harvard, 01.10.2026, marked “preliminary”) makes the dependence between a word’s last glyph and the next word’s first glyph the main unmet requirement for any writing mechanism: “no keyless generator yet proposed produces” it. The author did not publish code for the measure; we rebuilt it from the description and recovered his manuscript values (0.131 and 0.256 bits against 0.130 and 0.243). Preregistered check on five fresh seeds: the canon gives 90 % of the manuscript value, every seed in the window; without the neighbour-aware homophone choice, 2 %; the published Naibbe ciphertext, 1 %, as the author reports. The requirement is met by a keyed mechanism. Rule 1: no readings.
Breaking the key from inside: the model text is solved, the manuscript gives no signal (#197). Free key search collapsed into “syllable mush” (0 of 36 runs). The way out was the structure of the mechanism itself: each cipher table gives a letter exactly one sign of each kind, and the table a sign belongs to is revealed by the section dialect - signs of one table live in the same stretches of text (partition purity 0.996 without knowing the tables). Under this constraint the key of our model text is recovered from scratch: 94-95 % of words on three fresh seeds, a lead of +1.8 bits per letter over the shuffle; texts with no plaintext (the canon without letter order, Timm and Schinner’s generator) show no gain (at most +0.11). The manuscript against three shuffles of itself: +0.04, +0.05, +0.07 against a threshold of +0.5. Preregistered conclusion: the manuscript is not “our model exactly, over Latin”. This is no argument against a cipher in general or against another language: the manuscript has 1,854 word parts against the model’s 414, and the method’s power on it is not established. Rule 1: no readings.
The same attack made robust to the tail of rare forms: the manuscript again gives no signal (#199). A check after #197 found a weak spot: 15 % of the manuscript’s word-part occurrences lie outside the frequent cores of the tables, and the earlier procedure loses its power at just such a tail (model text with 20 % of words corrupted - 17 % correct instead of 95 %). One change fixes it: signs outside the cores are masked rather than solved. Under a new preregistration: on model text with 30 % of words corrupted (a heavier tail than the manuscript’s) the key is recovered - 59 and 63 % of words against a ceiling near 70 %, a lead of +0.82 and +0.88 bits per letter over the shuffle; texts with no plaintext show no gain (at most +0.08). The manuscript against three shuffles of itself: +0.03, +0.04, +0.06 against a threshold of +0.5. Conclusion: “our mechanism exactly, over Latin” fails even with the tail accounted for. Caveat: random corruption of a sign is only a model of the manuscript’s tail; this is no argument against a cipher in general, a different word structure or another language. Rule 1: no readings.
The manuscript under the letter model of a candidate language: ten languages, no signal from any (#200). Exploration after #199 showed that its “no” concerns Latin only: with a tail of rare forms like the manuscript’s, a Latin letter model does not see our model ciphertext built over another language, while a model of that language does. Hence a preregistration: for each language, first the stand’s power on two fresh seeds of model text (threshold 30 % of words recovered and a lead of +0.30 over a shuffle), then the manuscript against three of its own within-line shuffles (signal threshold +0.15). Ten languages: Armenian, Sahidic and Bohairic Coptic, Geez, Old French, Catalan, Italian, Old Occitan, Spanish, Middle High German; non-Latin scripts were reduced to the 23 letters of the tables by merging close sounds. Nine have power (42-63 % of words recovered, lead +0.43 to +1.17); Geez failed the power stand (23 % of words on the second seed), so the manuscript was not run under its model. The manuscript: Armenian +0.13 / +0.02 / +0.07; Sahidic +0.02 / +0.05 / +0.06; Bohairic −0.00 / −0.07 / +0.08; Old French +0.04 / +0.02 / +0.05; Catalan +0.05 / +0.06 / +0.09; Italian +0.02 / −0.02 / +0.05; Old Occitan +0.09 / +0.04 / +0.03; Spanish +0.04 / +0.13 / +0.10; German −0.04 / −0.06 / −0.07. No value reaches +0.15. Together with Latin (#199) that is ten languages for which the pairing “our mechanism exactly + this language” fails. What the test does not claim: it tests the exact form of the mechanism (six tables, 23 letters, one- or two-part words) and models the tail of rare forms by randomly corrupting 30 % of words; it is not evidence against a cipher in general, against another word structure, another dialect or another period of the language. Rule no. 1: no readings.
The soft space: neighbouring words of the manuscript also occur joined more often than chance - the nineteenth open defect (#201). test #201: the soft space. We measured how often two neighbouring words of the manuscript also occur in it written together as one word - beyond what a random reordering of the words within a line gives. In the manuscript 8.89 % of pairs do so against a chance level of 5.16 %: an excess of 3.73 percentage points. It is present in all five independent transliterations (including the readings of the 1940s and the 1970s), in both Currier "languages", for the three scribes with enough text, and at spaces the transcribers regard as certain. Examples: s aiin and saiin, ol chedy and olchedy. Our generator does not reproduce this at all (an excess of 0.06 points on ten fresh seeds), nor do eight other generators in which a word is one code unit. The effect is partly produced only by models in which the space is an ordinary sign in the stream of writing, and by those that copy real word pairs of the manuscript. Among 105 medical and herbal texts of the 13th-16th centuries the manuscript stands at the 91st-94th percentile: the same order of magnitude is found in 15th-century Spanish manuscripts where the scribe writes now "de la", now "dela". This is the nineteenth open defect of our model and a pointer to where it has to change: in the manuscript a space does not always fall on a code-unit boundary. What the test does not claim: it does not tell where the alternation comes from - a scribal habit, the design of the cipher, or the word division of the underlying text. Still no readings.
The model gets a soft space: defect #201 closed by a change of canon, the solver stays silent on the manuscript under the "comma is not a space" policy too (#202, #204). Tests #202 and #204: the model gets a soft space. After test #201 we looked for the exact place where our generator has to change so that neighbouring words also occur joined as often as in the manuscript. A uniform split of words gives the right amount but the wrong composition: in the manuscript the alternating pairs are independent words (both halves are words of the manuscript in their own right), whereas halves produced by a split at a random place are not. The candidate that passed the acceptance under pre-registered rules (ten fresh seeds, guard windows, the Parisel signatures, fourteen defect axes) is this: a word made of two code units is written as two words with probability 0.35 if both halves are forms from the key tables, with probability 0.10 if only the right half is, and is not split otherwise; with probability 0.02 a word is attached to the previous one; the choice of homophone by the neighbour is strengthened. None of the fourteen axes got worse and six moved closer to the manuscript: the autocorrelation of word length (0.051 → 0.098 against a target of 0.113), the link between a word's frequency and its surroundings, adjacent repeats, the agreement of word onsets - and the alternation of #201 itself: 2.97 points against 3.73 in the manuscript, on ten seeds out of ten. The composition of the pairs now matches the manuscript (a discrepancy of 0.8 points against 3.7 for the previous model and 2.3-3.0 for the control variants). This is the fourth change of the model under formal acceptance; defect #201 is closed, eighteen defects remain open. There is a price: for one between-word feature (after a word in ch- the final -y is rarer) the model already erred slightly in sign, and the error is now more visible (on 3 seeds of 10); the autocorrelation of word length came closer but is not yet within the manuscript's range. Test #204 checked the opposite explanation as well: is our solver silent on the manuscript because it cuts words where the space is not? On model text with a soft space it recovers the key with an accuracy of 0.76 (0.84-0.86 on the new model); on the manuscript under the policy "a comma is not a space" there is still no signal (a gain of 0.00-0.03 against a threshold of 0.15). What the tests do not claim: the soft space is a property of our model of writing, not a reading; where it comes from in the manuscript - a scribal habit, the design of the cipher, or the word division of the underlying text - is not distinguished. No readings.
The circle of line openings d → q → y: the nineteenth open defect and a constraint on the whole class of explanations (#207, #209). Test #207: the manuscript's lines have an "entry mode". If a line begins with the sign d, the next line of the same paragraph more often begins with q; after q with y; after y with d again. The share of such "forward around the circle" transitions is 63 % against 50 % for a random reordering of the paragraph's lines (z +5.8). The effect is the same in two independent transliterations and for scribes 1 and 2 separately. The observation was made by members of the voynich.ninja forum (DG97EEB, takrobat); we tested it under pre-registered rules. Our generator does not reproduce it, nor does any of 15 other mechanisms, including self-citation with memory of the line above: this is the nineteenth open defect of the model and a constraint on the whole class of known explanations. Could the circle arise from ordinary layout - line breaks? We re-broke each paragraph into lines with shifted breaks (90 % of them moved), and the circle vanished (z −0.7), while genuine word adjacencies remained; a control showed the procedure does catch such an effect. So it is a property of the manuscript's real lines. What the test does not claim: what the line "entry mode" means is unknown; still no readings.
An error in our own corpus found and fixed (#277); 22 open defects (new: #275, #272, #257); a lesson about Rugg's gibberish; door 2 - 12 more texts. The function reading the ZL transliteration dropped a word next to a transcription mark: 3,530 of 38,190 words (9.2 %), almost all of them first and last words of paragraphs. The working corpus is now 36,997 words; the check targets were recomputed and the generator re-run under pre-registered rules: the statistical windows hold, word-length autocorrelation (#81) is closed, #190 sits at the edge of its tolerance, the conclusion about the writing mechanism does not change; numbers in the first paper shift by a few percent, a corrected version will be posted on Zenodo. New defect #275: the first word of a line contains p 18 times more often and the last ends in m 14 times more often, against ×1.3 and ×1.1 in the generator (external battery thisisntjon/voynich, parity 15 of 15). A lesson for key solvers: Rugg's gibberish gives a stronger "decipherment signal" than a cipher with a known key, and neither block shuffling, nor random keys, nor a content measure separates it; the fair benchmark is gibberish of the same size with a key from the same solver, and against it the manuscript reads no more Latin than gibberish. Door 2: 12 more texts of the 13th-15th centuries by article lengths - no match. Still no readings.
The line edge follows scribal rules: the model reproduces them, defect #275 closed (#280-#282); 21 open defects. The edge of the manuscript's line follows scribal rules, and the model now reproduces them (#280-#282); there are now 21 open defects. We added five positional rules to the generator: the first word of a paragraph begins with a "gallows" sign (most often p); in the first line of a paragraph p and f stand in place of t and k; at the end of a line a word ending in -ar, -al, -an or -am is more likely; the sign m stands only at the end of a line (mid-line it becomes r or l); a line begins with d, y, s, t, p or f. The check followed pre-registered rules on ten fresh seeds: none of the model's checks got worse, and the line edge came close to the manuscript - p in the first word of a line ×12.6 against ×18.1 in the manuscript (was ×1.2), m in the last word ×13.0 against ×14.4 (was ×1.1). The same edits placed elsewhere in the line create no edge. Defect #275 is closed. The signs p, f and m behave like positional variants - layout, not separate letters of the cipher; this is a hypothesis, its meaning is untested. One more change: in 15 % of cases the scribe picks the spelling at a word junction from four variants instead of three (#280), which brought the agreement of neighbouring word onsets (#190) back within tolerance. Two related axes stay open: the word form at the end of a line (#222) moved almost four times closer but stays below the threshold; the circle of line openings d → q → y (#207) is not carried by the model. Still no readings.
Replication package
Every number in both papers is reproducible: 208 script and report files, normalized corpora, the labels dataset and claim registries - voynich_replication_v1.zip (3.3 MB) ↓. Sources and structure: Data & code.
Preprints are distributed under CC BY-NC-ND 4.0. No decipherment is claimed: the papers establish the text mechanism and the label structure, not a reading.