WORDWARD RUSSIAN VOCABULARY — MODIFIED DERIVATIVE
Research and editorial review date: 2026-10-25
Native-speaker review: PENDING

SOURCE AND LICENSE

The source spelling data is Alexander I. Lebedev's Russian dictionary, copyright
1997–2008, with the 2012 TRY-line modification credited to Laszlo Nemeth. The three
unchanged original files are ru_RU.aff, ru_RU.dic and README_ru_RU.txt, obtained from
LibreOffice/dictionaries at fixed commit:
67032ee957631908098a72edf48dc81cac27e369
https://github.com/LibreOffice/dictionaries/tree/67032ee957631908098a72edf48dc81cac27e369/ru_RU

source-manifest.json records each exact original URL, byte count and SHA256. The
builder rejects changed bytes before parsing. README_ru_RU.txt contains the exact
permissive copyright and redistribution conditions, including retaining notices,
clearly marking modifications, and no author endorsement. The full notice is also
reproduced in ../word-list-ru-license.txt. This is not the license of a neighbouring
thesaurus, grammar checker or other LibreOffice package. Do not relabel it as the
thesaurus's LGPL license or the project's generic MPL license.

MODIFICATIONS AND BUILD

scripts/build-russian-words.py is a standard-library-only, source-specific build.
The source has 146,269 entries and 25 suffix groups containing 1,581 rules. There
are no prefix, continuation, compound or required-affix directives. The builder
checks every flag, group count, rule count, UTF-8 encoding and supported condition
syntax. Rules check both the ending condition and the literal stripped suffix.
Source roots are expanded before applying the 3–7-cell limit because stripping
can shorten them. No suffix is recursively reapplied without a continuation rule.

Original case is checked before any case conversion: only complete lowercase
Russian native-letter roots are used. This excludes 3,446 capitalized, punctuated
or unsupported roots and retains 142,823 eligible roots. It does not blindly
lowercase a person's name into a playable word. Ordinary lower-case homonyms
(for example мир, вера, надежда, любовь) remain valid even when people also use
them as names. No hyphen, apostrophe, space or foreign letter is removed to invent
a new joined spelling.

The source expands to 157,144 distinct original 3–7-letter spellings. A separate
reviewed-additions-ru.json handles 18 current-word families: 106 reviewed forms,
94 forms absent from the historical source, or 93 new canonical identities. The
additional spelling умён restores the current ё display to the already accepted
canonical УМЕН. Most other additions repair gaps in ordinary newer vocabulary or
inflection (for example пазл, флешка, стейки and чаты). Each entry cites a current
Gramota dictionary/advice reference, records the finding in original English, and
enumerates every accepted form. No source dictionary definitions or examples are
copied. These are small editorial corrections, not a wholesale new dictionary.

The supplement uses the existing licensed K or I suffix paradigm with an attested
source analogue, except explicitly invariant nouns and the ё restoration. The
mass nouns фитнес and офлайн omit mechanically produced plurals. These assigned
paradigms are also checked by the independent engine. Its synthetic dictionary
check verifies morphology implementation, not the existence of a newly added
lemma: the current spelling references provide that separate evidence.

The reviewed-exclusions-ru.json manifest removes only the attested obsolete
spelling придти, preserving current прийти, приду, придёт and приди. The modern
orthographic evidence is https://orfo.ruslang.ru/comm/9 (Russian Academy of Sciences).
The original source and its independent expansion audit remain unchanged. This
is a narrow correction, not a claim that all historical entries were modernized.

Final accepted dictionary: 149,530 canonical forms:
3 cells 1,248; 4 cells 5,956; 5 cells 19,353; 6 cells 42,792; 7 cells 80,181.

NATIVE ALPHABET AND DISPLAY

Normalize NFC, then map only the 33 Russian lowercase letters to their uppercase
partners. Fold Ё to Е for board matching, keyboard acceptance and run identity.
This is an explicit game convention, not a claim that Ё is not a separate letter.
The selected solved spelling retains Ё. Й remains distinct from И; Ь and Ъ remain
distinct and occupy their own cells. No transliteration or blanket accent removal
is applied. Latin lookalikes, Ukrainian/other unsupported letters, punctuation,
and unrelated Unicode case expansions must remain invalid rather than disappear.
The builder's positive and negative normalization probes record this contract.

There are 7,707 canonical collision groups, all pairs in these frozen inputs,
including source е/ё alternatives and the added умён/умен pair. Every group is
listed in canonical-collisions.json. Selection allows only one display per
canonical identity, including meaning-distinguishing pairs such as все/всё.

The game choice is informed by, but is not required by, Gramota's account of
selective versus consistent use of Ё in Russian print:
https://gramota.ru/biblioteka/spravochniki/pravila-russkoy-orfografii-i-punktuatsii/upotreblenie-bukvy-e-v-tekstakh-raznogo-naznacheniya
It notes that dictionaries often sort Ё with Е and that Ё can prevent ambiguity.
The puzzle collapses those spellings for forgiving input; displaying the selected
spelling does not erase that real linguistic distinction.

ANSWER EDITORIAL POLICY

answers-ru.tsv is the authoritative answer selection, with uppercase display,
category, an English gloss and an editorial note for every entry. The 1,653 words
were explicitly chosen by meaning: familiar things, food, animals, home, people,
places, activities, basic qualities, time, numbers and common grammatical forms.
They were NOT selected by a frequency cutoff, generated by a spelling dictionary
or copied from a Wordle answer list. The source attests original spelling, while
the frozen manifest makes the actual intended answer meanings reviewable.

The answer counts are 157 / 301 / 443 / 436 / 316 for 3 / 4 / 5 / 6 / 7 cells.
There are 60 selected displays containing Ё. Repeated spellings/meanings share one
identity; the manifest can retain more than one ordinary gloss. Common inflections
are accepted as guesses. The answer list is mainly ordinary base forms, with an
explicit short-common-forms category and familiar plurals such as дети or носки.
Proper names, acronyms, artificially joined phrases and obscure forms were not
added to meet a numeric target. A one-time editorial drafting aid and its audit
remain in staging/.qa and are not required to rebuild or integrate the deck.

No native Russian speaker has approved this selection. Source spelling validation
and the agent's meaning-led selection are not native review. The next editorial
gate should include Russian-speaking players reviewing unusual or ambiguous
short forms, familiarity, collocations and the chosen Ё displays.

INDEPENDENT VERIFICATION AND ITS LIMITS

verify-expansion.py uses existing optional QA installs of Spylls 0.1.7 and wordfreq
3.1.1. Every one of the 157,144 source spellings passes the independent Hunspell
lookup. Among 130,449 eligible original corpus spellings outside expansion, none
were accepted by the pinned source engine. Positive common-inflection probes and
invalid-spelling negative controls establish that the checker is actually active.
This establishes faithful expansion within the measured scope, not completeness
of modern Russian. The corpus is an independent omission probe, not a gold label.

verify-editorial.py independently checks all selected answers and supplemental
paradigms. It also audits the frozen selection against large_ru, which contains
713,447 entries. All 1,653 answers have independent corpus evidence after applying
the same canonical normalization. For multiple е/ё corpus variants use the maximum
frequency, not a sum that artificially boosts collision words. Per-length median
Zipf values are 4.40 / 3.97 / 3.90 / 3.80 / 3.84. The lowest values remain review
cues, not automatic rejection of familiar concepts such as вянуть or ресница.

Only 92,316 of 221,912 eligible canonical corpus strings appear in the accepted
dictionary. The outside pool contains many proper names, abbreviations, typos and
colloquial/foreign forms. That raw percentage is NOT a prediction of native-player
rejection. Current common probes were checked separately and all now pass. The
source remains historical; it can omit other valid modern terms or retain older
spellings. Further corrections should be explicit, attested, reproducible and
recorded in the supplement, not silently inferred from corpus frequency.

Three-letter answers average 15.51 one-cell neighbours in the broad guess list,
with a maximum of 31. This is a dictionary ambiguity metric only. It does not
predict human skill, solve rates, daily-run fairness or combat balance. The parent
task owns language integration, UI/input checks and gameplay simulations; those
are not claimed by this asset handoff.

REPRODUCTION

Normal offline build from either staging or its later integrated project:
  python scripts/build-russian-words.py

Optional QA with the ancestor workspace's pinned dependency folders:
  python assets/russian-source/verify-expansion.py
  python assets/russian-source/verify-editorial.py
  python assets/russian-source/verify-reproduction.py

The reproduction check invokes Python with -I -S in a relocated minimal project,
from a different working directory, with network sockets blocked. Its generated
outputs must be byte-identical. It also imports the JS module with Node, checks
all answer memberships and uses a deliberately removed answer as a negative
control. No optional QA runtime or staging/.qa scratch copy is needed in the game.

INTEGRATION

Copy only the relative paths in INTEGRATION-FILES.txt. It excludes .qa research
scratch space, __pycache__, and any adapter/UI files owned by another agent. Do not
glob-copy this staging tree into the live project.
