# Third-party data notices ## Current resource provenance The authoritative current resource hashes are in `data/lexicons/sources.json`: `outputs` and `license_texts` describe the Core resources; `source_role_projection.family_package_path` selects the current App-only family package manifest; `app_dictionary_definitions` selects the current definition resource, source pin, transformation, and manifest. Follow these current links rather than assuming a historical recipe below still describes current bytes. Data promotion, an application release, and device verification are separate; their actual status is recorded in `docs/STATUS.md`. `python3 scripts/package-dictionaries.py OUTPUT.zip` freezes and checks those current resources, both App-only SQLite gzip assets, their declared public provenance, complete bundled notices, original definition article URLs and family-source identities. Its generated `SOURCE-APPENDIX.json` and `SHA256.json` identify the exact export. The command does not publish anything. A parallel unencrypted copy does not by itself establish that another distribution channel's DRM or EULA complies with the upstream licences. ## Historical source-ownership resource pins | File | Contents / counts | Bytes | SHA-256 | |---|---|---:|---| | `Sources/KeKeyCore/Resources/dictionaries.sqlite` | schema8 source ownership over accepted C5 | 74,715,136 | `6090dc68d6eba911f34b2d8e4fc20eb51d34c601a13f1576e0dbd5f4d86c97d3` | | `Sources/KeKeyCore/Resources/decoder.bin` | RU1,892,200 / EN166,506 paths; vocabulary and measured frequencies unchanged | 11,144,120 | `85802a8897c0828933523d2917d108187c092902679d988262151c8515eab792` | | `Sources/KeKeyCore/Resources/ru.tsv` | 38,803 existing hot words | 785,454 | `d8ad6892bedeb60fbffc888dfd2b17d0344a81713e4df916509972cf225a81b2` | | `Sources/KeKeyCore/Resources/en.tsv` | 20,000 existing hot words | 255,535 | `4505ffe8b2052fd49098e1f7c97f2892e60c10f171837c270ef58a7d6ca71920` | | `Sources/KeKeyCore/Resources/ru-supplemental.tsv` | 4,850 supplemental words | 90,284 | `d1445ea32531f68490c702ebddb90bdd61630083e09eab5b9625b47013eb1a95` | | `Sources/KeKeyCore/Resources/ru-proper.tsv` | 8,408 grammatical casing hints | 117,209 | `f53d683568ed4651a149ae18abdee13a1b98e93f95bd66af86a4992c053c27c3` | | `App-only dictionary-families.sqlite` | App-only source families; schema2 | 282,943,488 | `067798146623587296973f51364c6ea2422ed00e95b78f81ae7907ef001b9284` | | `App/Resources/dictionary-families.sqlite.gz` | App-only source families; schema2 | 55,206,622 | `fd66bfab2851b06b91806670739d1b6f70d51d3a8c21e25825de42aa01597931` | Historical visible spellings for this snapshot: RU general1,871,698; profanity834; slang2,602; EN166,506; proper327,010; abbreviations677. General owns duplicate optional readings. These pins/counts are retained as source history, not asserted as the current resource set. Russian Wiktionary contributors, [Russian Wiktionary](https://ru.wiktionary.org/), [CC BY-SA4.0](https://creativecommons.org/licenses/by-sa/4.0/), supply the bounded v56 literal role/case and own proper-table derivative in `data/lexicons/v56/primary-role-evidence.json` (SHA256 `65c8b4a02d7a4b3571da3833d2c11e8efba74e4ed220b0ab0ddea56d75934631`). Page/revision identities, literal categories/cells and response hashes retain source attribution. Eight typed proper heads provide79literal relations; no ordinary paradigm, generated aliases or frequency counts are borrowed. Three abbreviation case changes have positive literal primary proof;36historical compiled abbreviations remain exact-protected with pending literal case, without claiming new source proof. Raw API responses, definitions and personal typing data are not shipped. Existing OpenCorpora, Wikidata, FrequencyWords, SCOWL, Lebedev and Tatoeba attributions remain required. Frozen source plan and offline recipe: `data/lexicons/v56/ownership-plan.json`, `data/lexicons/v56/reproduction-recipe.json`. ## Word-frequency data in typing-v29 test fixtures (development only) The new `Tests/Fixtures/TypingEvaluation/v29/diversity-addendum/targets.jsonl` contains a selected, transformed subset of word spellings and frequency/rank metadata from **wordfreq 3.1.1** by **Robyn Speer**. It is used only by the fixture generator and evaluation tests; neither the package, its dependencies, nor its frequency data is bundled in KeKey or the keyboard extension. The generator uses the pinned `large` Russian and English lists and records wordfreq ranks and Zipf scores. This selected derivative is distributed under **CC BY-SA 4.0** as stated by upstream for wordfreq's data. Attribution: Robyn Speer, *wordfreq* (2022), plus the included data-resource credits to Marc Brysbaert et al. / SUBTLEX and OpenSubtitles; the upstream data also draws on Google Books Ngrams and Syntactic Ngrams, the Leeds Internet Corpus, Wikipedia and ParaCrawl. See the upstream [license/data notice](https://github.com/rspeer/wordfreq#license) and [project](https://github.com/rspeer/wordfreq). The wordfreq library code is Apache-2.0 licensed; this code license does not replace the data license. Pinned package: `wordfreq==3.1.1`, PyPI wheel `wordfreq-3.1.1-py3-none-any.whl`, SHA-256 `4b1c6ecffc6198be3396d5cf871c4423ca71c907c231348d352dd54d62b97473`. The wheel and temporary generation dependencies stay in ignored `.scratch`; they are not committed or shipped. The generated targets preserve upstream attribution and the CC BY-SA 4.0 notice in this document, the addendum manifest, and its research report. No raw corpus is included. The generated fixture is adapted by selecting 700 ordinary alphabetic targets across the first 15,000 frequency ranks in four recorded rank bands, balancing Russian and English, then adding deterministic spelling corruptions and manually authored phrase targets. Full-graph lookup only validates the selected gold spellings and filters corruptions that are already other graph words; it does not select or rank decoder outputs. The 200 phrase targets and 100 synthetic OOV controls are independently authored/generated, not derived from wordfreq. ## FrequencyWords lexicon data The bundled `Sources/KeKeyCore/Resources/ru.tsv` and `en.tsv` are adapted from the Russian and English OpenSubtitles 2018 frequency lists in [hermitdave/FrequencyWords](https://github.com/hermitdave/FrequencyWords), maintained by Hermit Dave. FrequencyWords identifies OpenSubtitles 2018 as its tokenized source and licenses its content under the [Creative Commons Attribution-ShareAlike 4.0 International License (CC BY-SA 4.0)](https://creativecommons.org/licenses/by-sa/4.0/). OpenSubtitles 2018 is distributed through [OPUS](https://opus.nlpl.eu/). Source revision: `525f9b560de45753a5ea01069454e72e9aa541c6`. Source file checksums: | File | SHA-256 | |---|---| | `content/2018/ru/ru_50k.txt` | `6095f507cc167488ec66ada5a85ac50433503a08ad24a07c6eabdf54352c4e7f` | | `content/2018/ru/ru_full.txt` (final RU quality selection) | `32dfd94138aea2667ec455dcc8512029e39bd4b8ea70b09410d569b69d511a30` | | `content/2018/en/en_50k.txt` | `5351ff405b1126ef555791dd4d9798a48e3e9a501a9fc481a9da957752cfb458` | Historical derivative checksums (current pins are selected by `sources.json`): | File | Rows | SHA-256 | |---|---:|---| | `Sources/KeKeyCore/Resources/ru.tsv` | 38,995 selected measured hot entries | `907e31534eb34146c94ac61fd2ddcb89d6884c8cedc71dcdda5f3761fcbdf29f` | | `Sources/KeKeyCore/Resources/en.tsv` | 20,000 | `4505ffe8b2052fd49098e1f7c97f2892e60c10f171837c270ef58a7d6ca71920` | The importers normalize to lowercase NFC, retain only tokens consisting of Russian Cyrillic or English ASCII letters, merge counts for normalization collisions, and rank by measured count. The final Russian stage selects from the pinned full RU source after the source-error policy below. The historical selection had40,000 hot words; the historical accepted v45 selection retained38,995; current v56 retains38,803 with unchanged retained counts. English remains the pinned 20,000-row selection. See [docs/DATA.md](docs/DATA.md), `scripts/import_lexicon.py` and `scripts/import_supplemental_lexicons.py` for the reproducible transformation. The English SQLite recognition catalogue uses the **entire accepted alphabetic selection** from that same pinned `en_50k.txt`: 622,749 bytes / 50,000 source rows yield **46,717 distinct lowercase NFC `a-z` words**, without rank, length or count truncation. Counts are required to be positive for source validation but are not added to the hot ranking index. The historical EN50k/Wikidata sub-union (4,438 shared, 2,470 additional components) had **49,187** spellings before the separately attributed SCOWL contribution; current names scope excludes English proper-only entries. The hot TSV remains 20,000 entries with the checksum above. No individual-word allowlist/exclusion list or invented frequency is used. The datasets are licensed under CC BY-SA 4.0. Redistributions of these adapted datasets must retain attribution, the license notice, and ShareAlike terms as required by that license. The upstream repository's MIT license applies to its code and does not replace the data license. The complete [official license text](https://creativecommons.org/licenses/by-sa/4.0/legalcode) is included as `Sources/KeKeyCore/Resources/CC-BY-SA-4.0.txt`. Attribution: **FrequencyWords by Hermit Dave**, derived from the OpenSubtitles 2018 corpus, distributed via OPUS; adapted for KeKey by normalization, script filtering, aggregation, and frequency truncation. ## OpenCorpora compiled surface-form dictionary data The `russianGeneral` entries in `Sources/KeKeyCore/Resources/dictionaries.sqlite` combine **OpenCorpora contributors' Russian morphological dictionary**, distributed by [OpenCorpora](https://opencorpora.org/?page=downloads), with the separately attributed FrequencyWords Russian tokens above. OpenCorpora identifies its data as [Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)](https://opencorpora.org/wiki/FAQ). The reproducible distributor input is [pymorphy3-dicts-ru 2.4.417150.4580142](https://pypi.org/project/pymorphy3-dicts-ru/2.4.417150.4580142/), published by **Danylo Halaiko**. Its package description expressly licenses Python code under MIT and the **data under CC BY-SA 3.0**. The data license is retained regardless of the package's generic MIT metadata badge. Pinned wheel: [pymorphy3_dicts_ru-2.4.417150.4580142-py2.py3-none-any.whl](https://files.pythonhosted.org/packages/b0/67/469e9e52d046863f5959928794d3067d455a77f580bf4a662630a43eb426/pymorphy3_dicts_ru-2.4.417150.4580142-py2.py3-none-any.whl), **8,442,043 bytes**, SHA-256 `718bac64c73c10c16073a199402657283d9b64c04188b694f6d3e9b0d85440f4`. Embedded source provenance: OpenCorpora version `0.92`, revision `417150`, 391,778 source lexemes, compiled on `2022-01-08T22:09:24.565962`. KeKey reads all **5,140,211 literal compiled DAWG records**, normalizes lowercase NFC, keeps Russian letters and nonempty internal-hyphen components, and deduplicates to **3,063,822 alphabet-valid source spellings**, including **41,483 hyphenated spellings**, before quality selection. Of 3,064,812 unique normalized source spellings, 990 fail these alphabet/compound rules. A compiled record is not evidence of an observed corpus occurrence: the upstream data already contains inflection paradigms. KeKey does not predict or synthesize further morphology. Before the 2026-10-31 provenance filtering described below, union with Russian frequency tokens yielded **3,067,221** general entries. These historical source counts are not current correction-target counts or a claim of all possible Russian inflections. The original index-zero-only import contained 178,432 canonical words (207,000 after union), recorded here as historical provenance. A read-only audit of the same pinned source grammatical tags finds 108,529 `Name`, 77,259 `Surn`, 153,908 `Patr`, 40,815 `Geox`, 45,293 `Orgn`, and 0 `Trad` distinct accepted surface spellings. These overlapping source labels include case forms, are not additive, and do not create separate semantic dictionaries or claim a catalogue of artworks. The audit uses the already attributed wheel's `gramtab-opencorpora-int.json` and `paradigms.array`; it introduces no additional data source. The combined SQLite data derivative is distributed under **CC BY-SA 4.0**. OpenCorpora's CC BY-SA 3.0 source attribution is retained; Section 4(b) of that license permits distribution of adaptations under a later version with the same license elements. The complete CC BY-SA 3.0 text is included as `Sources/KeKeyCore/Resources/CC-BY-SA-3.0.txt`, alongside the existing CC BY-SA 4.0 text. The [canonical legal code](https://creativecommons.org/licenses/by-sa/3.0/legalcode) was preserved using the [SPDX license text mirror at revision 3bf4c120dabbedbcae53ff7618889d7d9561464e](https://github.com/spdx/license-list-data/blob/3bf4c120dabbedbcae53ff7618889d7d9561464e/text/CC-BY-SA-3.0.txt); license-file SHA-256 is `3f941b3b89cf7b8370ceb83cc76d2120d471b58735d8ca60238a751a48d7f72f`. Attribution: **OpenCorpora contributors**, compiled morphological dictionary data distributed in **pymorphy3-dicts-ru by Danylo Halaiko**; adapted for KeKey by literal compiled-form export, normalization, alphabet/compound and source-tag quality filtering, deduplication, union with independently attributed lexical sources, separation of exact-only proper forms, and SQLite conversion. OpenCorpora's explicit `Slng` («жаргонное») grammatical tag additionally contributes **1,371 distinct compiled jargon forms** to the `russianSlang` catalogue (2,046 analysis records, including 113 index-zero and 20 hyphenated forms). This tag is lexical membership, not measured frequency. There are 56 spellings in common with the Wiktionary slang selection; the resulting catalogue has **5,797 entries** (+1,315). All are already in the general morphology dictionary. The unchanged 4,850-row supplemental TSV remains derived only from the older Wiktionary semantic selection, with unmeasured frequency zero. This tagged-form derivative retains OpenCorpora contributors' CC BY-SA 3.0 attribution within the combined CC BY-SA 4.0 database and introduces no further inflection or frequency. ## Russian Wiktionary slang and profanity data **Russian Wiktionary contributors**, [Russian Wiktionary](https://ru.wiktionary.org/), provide the semantic category membership used for `russianProfanity`, `russianSlang`, `ru-supplemental.tsv`, and the normalized provenance derivative `data/lexicons/wiktionary-ru-2026-10-28.json`. The source footer licenses text under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). These KeKey derivatives are distributed under the same license, with attribution and changes recorded here and in [docs/DATA.md](docs/DATA.md). Frozen selection date: **2026-10-28**. The snapshot records accepted source page titles/IDs, semantic categories, source-response hashes, and exact revision IDs where collected. It contains 5,523 source pages, representing 5,521 unique lowercase words. Exact article revisions were collected for 950 pages; all pages retain source IDs/history attribution. The captured category selection itself is frozen in this normalized derivative; a category page `oldid` is not claimed to reconstruct historical membership. For each snapshot entry, the attributed article is `https://ru.wiktionary.org/?curid=PAGE_ID`, contributor history is `https://ru.wiktionary.org/w/index.php?curid=PAGE_ID&action=history`, and a recorded exact revision is `https://ru.wiktionary.org/w/index.php?oldid=REVISION_ID`. Substitute `page_id` or `revision_id` from the committed snapshot. This preserves source/contributor links for every included word without copying definitions or quotations. Snapshot SHA-256: `12d69840b752b36bd40b9baaa7528b532c3e75da96f1b08ae8a3b09d570bab16` (**1,057,139 bytes**). The source selection consists of these language-specific editorial categories: - [Матерные выражения/ru](https://ru.wiktionary.org/wiki/Категория:Матерные_выражения/ru) and [Бранные выражения/ru](https://ru.wiktionary.org/wiki/Категория:Бранные_выражения/ru): **1,116 unique profanity/swearing words**. - [Молодёжные выражения/ru](https://ru.wiktionary.org/wiki/Категория:Молодёжные_выражения/ru), [Сленговые выражения/ru](https://ru.wiktionary.org/wiki/Категория:Сленговые_выражения/ru), [Компьютерный жаргон/ru](https://ru.wiktionary.org/wiki/Категория:Компьютерный_жаргон/ru), [Интернетовский жаргон/ru](https://ru.wiktionary.org/wiki/Категория:Интернетовский_жаргон/ru), [Жаргон игроков в компьютерные игры/ru](https://ru.wiktionary.org/wiki/Категория:Жаргон_игроков_в_компьютерные_игры/ru), and [Жаргонизмы/ru](https://ru.wiktionary.org/wiki/Категория:Жаргонизмы/ru): **4,482 unique slang/jargon words**. Transformation: follow category pagination; retain single-word page titles consisting of Russian letters; normalize lowercase NFC; union and deduplicate within each labelled dictionary; preserve semantic overlap between dictionaries; write SQLite membership rows. The profanity/slang union overlaps by 77 words. Remove words already in `ru.tsv` when generating **4,850** supplemental rows with the explicit sentinel frequency **0 (unmeasured)**. This sentinel is not an observed frequency and must not be described as one. Attribution: **Russian Wiktionary contributors**, semantic category membership snapshot captured on 2026-10-28; adapted for KeKey by title selection, normalization, alphabet filtering, category unions, deduplication, existing-frequency exclusion for the supplemental TSV, and SQLite/TSV conversion. The data includes older slang and professional jargon as well as current expressions; it is not an exhaustive contemporary slang dictionary or a regex-based profanity detector. ## Russian Wiktionary headwords and literal morphology tables (2026-10-31) **Russian Wiktionary contributors**, [Russian Wiktionary](https://ru.wiktionary.org/), [CC BY-SA4.0](https://creativecommons.org/licenses/by-sa/4.0/). The category derivative `data/lexicons/wiktionary-colloquial-2026-10-31.json` retains14,391 page/revision records, yielding13,440 lowercase NFC supported titles, including internal-hyphen titles. It covers colloquial, diminutive, abbreviation and graphic-abbreviation categories. It does not remove punctuation to invent aliases. Derivative3,326,649 bytes; SHA256 `273bdada1065a12392491c38baf19d122d7f5ebf2e47ab6bc1b0607a53df03fe`. The additional `data/lexicons/wiktionary-forms-2026-10-31.json` adapts literal Russian morphology-table cells from all491 pages in its recorded bounded selection: supported category titles absent from the pinned OpenCorpora DAWG, with source headword count>=15. It yields1,927 ordinary forms (1,097 with positive observed counts) and107 proper-only form attestations. Size1,474,705 bytes; SHA256 `520e697732979ca52c3f8d52208ee922e9f5a79aa73a7f88bc04336f8dbfa489`. These data derivatives retain CC BY-SA4.0 and contributors' attribution. Changes: extract supported literal table cells, remove only primary/secondary stress marks, normalize lowercase NFC without losing ё/й, retain explicit alternative cells, reject analytic phrases/hypothetical forms, exclude source error pages and keep proper-only evidence in exact recognition unless independent ordinary evidence applies. No definitions, example sentences, translations, guessed paradigms or invented frequencies. Actual positive corpus counts are joined independently of category. PageID/revid and each expanded-response SHA/timestamp are recorded; oldid alone cannot freeze transcluded templates/modules. Source/history is available through `https://ru.wiktionary.org/?curid=PAGE_ID` and recorded `oldid=REVISION_ID`. Raw responses remain local ignored acquisition evidence. This is bounded coverage, not the complete morphology of Russian. Current counts, reproducible commands and policy are in [DATA](docs/DATA.md), [sources.json](data/lexicons/sources.json) and the generated policy derivative. Each source retains its original license; combined derivative attribution and ShareAlike terms remain unchanged. ## Wikidata names, objects and titles The bounded `data/lexicons/wiktionary-short-names-2026-10-31.json` derivative is also adapted from **Russian Wiktionary contributors**, **CC BY-SA 4.0**. Its scope selects the titlecase counterparts of all 99 length1–2 uppercase abbreviation headwords lacking existing morphological, lowercase-headword or full-label evidence. Twelve pages exist; ten have explicit Russian personal-name, surname, deity or geographical-name categories. Only those ten supply canonical name labels. Capitalization alone does not admit a name. Page IDs, exact revision IDs, categories, request URLs and response SHA-256 values preserve attribution; no definitions, quotations, generated forms or frequencies are copied. Snapshot: **18,830 bytes**, SHA-256 `96300f1558900228f3e8d9bbb6e7afe963c7d9c23daa8ed5ee56d71ee5493004`. Reproduce with `scripts/import_short_russian_names.py`; raw API evidence stays in ignored `.scratch/short-russian-names-2026-10-31/`. Source and contributor history use the same pageID/oldid/history links documented above. Whole single-token Wikidata name labels additionally select existing OpenCorpora proper-tag paradigms. Every promoted spelling must already occur literally with the identical paradigm/form analysis in the pinned compiled dictionary. Display capitalization is derived from grammatical name tags, not claimed as an original source label or measured count. This joins the existing CC0 Wikidata and CC BY-SA3.0 OpenCorpora evidence under the combined CC BY-SA4.0 derivative; their respective attribution remains unchanged. The normalized `data/lexicons/named-entities-2026-10-29.json` snapshot is derived from **Wikidata contributors**, using the official [Wikidata Action API](https://www.wikidata.org/w/api.php) and entity labels/revision identifiers. [Wikidata structured data is CC0 1.0](https://www.wikidata.org/wiki/Wikidata:Licensing); the [CC0 dedication](https://creativecommons.org/publicdomain/zero/1.0/) remains available for this independent source derivative. OpenCorpora and FrequencyWords attribution and ShareAlike conditions remain in force for their separate contributions to the combined database. The full CC0 text is bundled as `Sources/KeKeyCore/Resources/CC0-1.0.txt`, preserved from the pinned SPDX mirror at revision `3bf4c120dabbedbcae53ff7618889d7d9561464e`, SHA-256 `a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499` (7,048 bytes). Snapshot pin: **3,529,356 bytes**, SHA-256 `999024a6c0af3a7912226ed77b785d48089f66eda2e589d9027c31ac6b68d23a`; canonical entries SHA-256 `11fae6fa6be0058dbb21e40eb12b0630cf78e47021c1ad22aa673b431bcd1a34`. It records 6,760 entities, 6,617 RU / 6,686 EN source labels, 7,388 RU / 6,908 EN unique component tokens and 158 successful API responses. Before category correction the Russian display catalogue retained 6,318 labels. The historical v36 literal proper-name/title label table retained **5,543**, excluding 775 common-object-only labels; their lexical components remain in general dictionaries. That historical combined literal label table additionally included10 independently classified short Wiktionary names. The historical v36 source-visible names browser had425,198 unique entries, including remaining exact-only proper forms;5,398 whole-name-linked existing forms additionally became correction targets. Current schema8 counts and output pins are in [DATA](docs/DATA.md); the v43 input pins below are historical. The historical token union added 2,306 RU words and 2,470 EN words beyond the complete alphabetic English source selection. Wikidata itself supplies no measured word frequencies. The source selection contains bounded direct statement matches with Russian labels for cities, personal names, people, films, novels, paintings, organizations, businesses and common-object subclasses. The snapshot records exact retrieved entity revision IDs, selection QIDs/queries, request URLs and response SHA-256 values. It is not an exhaustive entity catalogue or a list ranked by text frequency. Transformation: preserve original NFC labels and provenance; tokenize literal Russian/English label components, lowercase NFC, normalize curly apostrophe only in components, retain same-script tokens of 2–48 characters with allowed internal hyphens/apostrophes, and union those components into general dictionaries. Preserve full Russian labels separately in `name_labels` only for source categories `personal_names`, `humans`, `cities`, `organizations` or `works`; `common_objects` alone never qualifies. Retain original case, spaces and punctuation, a lowercase NFC key, 1–160-character/control/whitespace validation, and deterministic source-display deduplication. No corpus frequency, extra inflection, transliteration, alias, definition or artwork content is invented. Full labels support browsing/exact protection, not phrase completion or automatic title replacement. Supported general-dictionary component tokens also enter the decoder with zero frequency unless independently measured. ## SCOWL / English Speller Database recognition data The lexical-membership derivative `data/lexicons/scowl-en-2026.02.25.json` is from **SCOWL / English Speller Database**, official release `2026.02.25`, pinned [en-wl/wordlist commit `7e99edab8e32f9f9ea2b15f249ca8d4d67237410`](https://github.com/en-wl/wordlist/tree/7e99edab8e32f9f9ea2b15f249ca8d4d67237410). Source archive SHA-256: `770dd3e42d20b47bb2dd87d150db4ee5472841a7f062876592f67840f5a0b902`. The 2,609,563-byte normalized snapshot has SHA-256 `7fc59c1e58c06bc18eeaf5b7caf8dcc7ad63bce58f39e3220883fea746529bfb` and 152,095 exact source forms; newline word-list SHA-256 is `c7a501307bf814423d213149b2d964583d2d075f40bc2345973451e1c97ec418`. The snapshot's historical `recognition_only` field describes its source-membership scope, not a runtime prohibition: supported forms now also enter the decoder, with zero frequency unless another source measured them. The official source exporter selects size70, variants<=6, US/GB/CA/AU spellings, no special categories, no abbreviation/nonword POS and no marked proper-name classes, with hyphens enabled. Retain only original lowercase NFC ASCII surface forms with internal apostrophes/hyphens, length2–48, without manually adding spellings or inflections. Membership adds no measured frequency or correction-confidence claim. It contributes 119,383 new spellings to the prior English union, giving 168,570 entries. The complete upstream Copyright is bundled verbatim as `Sources/KeKeyCore/Resources/SCOWL-Copyright.txt` (4,863 bytes, SHA-256 `090575a131b4260926c7a6b30a90aca0f5db5fbb5c46778e0c5855227bf6ebc3`) and reproduced here; these permissions and underlying source notices are retained. ```text Copyright 2000-2026 by Kevin Atkinson Permission to use, copy, modify, distribute, and sell any part of SCOWLv2, or word lists created from it, is hereby granted without fee, provided that the above copyright notice appears in all copies and that both the above copyright notice and this notice appear in supporting documentation. Kevin Atkinson makes no representations about the suitability of this database for any purpose. It is provided "as is" without express or implied warranty. SCOWL is derived from many sources, most of which are in the Public Domain. Data from the Corpus of Contemporary American English (COCA) was also used. All data from COCA comes from 3-gram data that is not freely available; however, the usage is within the rights given by the NDA that was signed when purchasing the data. More information on COCA is available at https://www.english-corpora.org/coca/. The primary source of words for SCOWL comes from 12dicts and ENABLE2K. Both are in the Public Domain, but Alan Beale deserves special credit as he is the author of 12dicts and a major contributor to ENABLE2K. In addition, he gave me an incredible amount of feedback and created a number of special lists in order to help improve the overall quality of SCOWL. === If you are using an official speller dictionary created by SCOWL that is not Australian English, then no additional copyright applies and including the notice before the === is sufficient. If you are using the Australian English dictionary or a wordlist that uses the 'D' SPELLING code and/or the 'AU' REGION code, the copyright after '=== AU' applies. If you are using a generated word list larger than 80, the copyright after '=== UKACD' applies. If you are distributing the SCOWLv2 database or results from the SCOWL database that is not a speller dictionary or generated word list, then both copyrights may apply depending on the parts you use. In addition, the WordNet copyright MIGHT apply as WordNet was one of many sources used for the initial POS assignment. === AU The initial information for Australian English comes from Benjamin Titze: Copyright 2016 by Benjamin Titze Permission to use, copy, modify, distribute and sell this array, the associated software, and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Benjamin Titze makes no representations about the suitability of this array for any purpose. It is provided "as is" without express or implied warranty. === UKACD Some words used come from the UK Advanced Cryptics Dictionary: Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved. The following restriction is placed on the use of this publication: if The UK Advanced Cryptics Dictionary is used in a software package or redistributed in any form, the copyright notice must be prominently displayed and the text of this document must be included verbatim. There are no other restrictions: I would like to see the list distributed as widely as possible. === WordNet WordNet was used to help with the initial POS assignment: This software and database is being provided to you, the LICENSEE, by Princeton University under the following license. By obtaining, using and/or copying this software and database, you agree that you have read, understood, and will comply with these terms and conditions.: Permission to use, copy, modify and distribute this software and database and its documentation for any purpose and without fee or royalty is hereby granted, provided that you agree to comply with the following copyright notice and statements, including the disclaimer, and that the same appear on ALL copies of the software, database and documentation, including modifications that you make for internal use or for distribution. WordNet 1.6 Copyright 1997 by Princeton University. All rights reserved. THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANT- ABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE, DATABASE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. The name of Princeton University or Princeton may not be used in advertising or publicity pertaining to distribution of the software and/or database. Title to copyright in this software, database and any associated documentation shall at all times remain with Princeton University and LICENSEE agrees to preserve same. ``` ## Historical v45 generated resource pins | File | Contents / counts | Bytes | SHA-256 | |---|---|---:|---| | `Sources/KeKeyCore/Resources/dictionaries.sqlite` | schema8 authoritative reviewed category memberships | 75,137,024 | `b962e2541082ee0b8dd1f2a3594a701792a51c122b18bd80ec13b33fd97ab20f` | | `Sources/KeKeyCore/Resources/ru-supplemental.tsv` | 4,850 unique unmeasured supplemental words | 90,284 | `d1445ea32531f68490c702ebddb90bdd61630083e09eab5b9625b47013eb1a95` | | `Sources/KeKeyCore/Resources/ru-proper.tsv` | 8,663 grammatical casing hints; not independent name-frequency measurements | 120,832 | `8099f3bf44ed47dfc00b792ff76e0915fe035d0b3be308c0d1d4c113c1458f37` | | `Sources/KeKeyCore/Resources/decoder.bin` | RU1,894,212 / EN166,506 source-derived word paths | 11,229,712 | `b904ddfd4308ad897eaddfc0bbe2ccda688f3d92868f8d1b651d11594423ddaa` | | `App-only dictionary-families.sqlite` | schema2 reviewed source articles and literal forms | 297,041,920 | `b75d9471169e33cf5299379773c93dfb643d7594b68985b40f5f9fd9e18cbda3` | | `App/Resources/dictionary-families.sqlite.gz` | Deterministic build-time package; not shipped in keyboard | 57,983,060 | `dd44d1c238ff7800c2195f232dc3c8079b482f67b3f9c0e9a13e6fb948533044` | Historical v45/schema8 effective memberships: RU general 1,871,698; profanity 3,396; slang 5,797; EN general 166,506; Russian names 427,328; abbreviations 737. These sets overlap. Source projection preserves retained own-spelling frequency counts; casing hints do not measure proper-name sense frequency. Full per-source lineage, recipe and audits: `data/lexicons/v45/reproduction-recipe.json`, `data/qa/v45/candidate-data-audit.json`, inherited proper evidence `data/qa/v44/final-proper-source-provenance-audit.json` and [DATA](docs/DATA.md). This is source-resource promotion, not an app build or installation. ## Historical v43 D3 input resource pins | File | Contents / counts | Bytes | SHA-256 | |---|---|---:|---| | `Sources/KeKeyCore/Resources/dictionaries.sqlite` | schema8 authoritative memberships; effective counts below | 75,354,112 | `ae21c9c42c82ed19290b1782149d19c1d0e6746e59acddbc7094c9da0a26e316` | | `Sources/KeKeyCore/Resources/ru-supplemental.tsv` | 4,850 unique unmeasured supplemental words | 90,284 | `d1445ea32531f68490c702ebddb90bdd61630083e09eab5b9625b47013eb1a95` | | `Sources/KeKeyCore/Resources/ru-proper.tsv` | 7,597 source-role-filtered measured grammatical casing hints | 107,678 | `7b8f8b47ad02855d627c9ef0f37ef333fd3af8b0a173b0a6228770c821de8e35` | | `Sources/KeKeyCore/Resources/decoder.bin` | RU1,896,308 / EN166,506 source-derived word paths | 11,231,304 | `f8a30de16b09edda40231c19dcfa6bcd17980e1d226d05b5df5e83af6358cd27` | | App-only `dictionary-families.sqlite` | schema2 bounded everyday source articles and literal forms | 297,861,120 | `87065e93c19a08de28c7e2ea8d368110be7632786f1ead5e103dc1045ed130cc` | | `App/Resources/dictionary-families.sqlite.gz` | Deterministic build-time package; not shipped in keyboard | 58,216,411 | `6101e75716aae3296f377d2d55ccb6e8735951c207e37b032e20edabd6851272` | FrequencyWords, OpenCorpora and Wiktionary retain their CC BY-SA4.0 derivative terms and original attribution; Wikidata retains CC0 and SCOWL its full source-specific permissions. Historical v43 D3/schema8 effective counts were RU general1,875,066, profanity3,396, slang5,797, EN general166,506, Russian names426,154 and abbreviations3,321. Physical rows and effective memberships differ. The historical measured capitalization hot set had7,597 entries. Retained frequencies are unchanged; ten newly imported гондон forms retain their own positive pinned FrequencyWords counts, without inherited counts. Removed ordinary readings have no hidden exact-recognition fallback. Source families are admitted by finite spelling attestation, observed whole forms, independent lexical/table evidence or explicit editorial judgment; all literal forms of admitted families survive. Editorial judgments are selection decisions, not proofs that excluded valid technical or archaic words are misspellings. D3 adds21,220 source-backed spellings,6,088 with their own measured counts and15,132 unmeasured. Full family/membership/frequency and source-provenance audit: `data/qa/v43/dictionary-data-summary.json`. Historical D3 recipes/pins: `data/lexicons/v43/d3-reproduction-recipe.json` and `source-pins.json`. Current v45 selection and pins: [DATA](docs/DATA.md) and `data/lexicons/v45/reproduction-recipe.json`. Historical v42 receipts remain preserved. The historical v36/schema7 baseline is pinned at SHA `1ed469ea19b477ee27934a08537739cbf8f495026c7e0f1436e2e9110b63badd`; it is a reproducible input, not the current database. Five independent V4/V8 data checks passed, including all96 typed Wiktionary proper heads/forms and the complete sidecar provenance audit. Raw107 classification is87 proper,2 canonical abbreviations and18 intentionally excluded abbreviation inflections. Runtime replay is two-stage: raw-source import previously produced the pinned schema7 baseline; V4 projection/graph were rerun independently and all six runtime files matched byte-for-byte. The complete raw stage was not rerun now, nor was a second full sidecar byte build. Historical V4/V8 receipts are in `data/lexicons/v41/v4-v8/`; earlier V3/V7 receipts remain in `data/lexicons/v41/`. Source URLs, licenses and transformations remain in `data/lexicons/sources.json`. Recreate the historical V4/V8 input with `scripts/rebuild_source_role_resources.py`; project historical D3 with the explicit pinned inputs in `data/lexicons/v43/d3-reproduction-recipe.json`. The old family union builder cannot reproduce v42 parent selection. Missing or wrong pinned offline inputs fail. No raw corpora, API responses, downloaded wheels or personal typing data are committed or shipped. ## DAWG-Python import-time tooling The data importer uses **DAWG-Python 0.7.2 by Mikhail Korobov**, under the [MIT license](https://github.com/kmike/DAWG-Python/blob/master/LICENSE). Pinned [wheel](https://files.pythonhosted.org/packages/6a/84/ff1ce2071d4c650ec85745766c0047ccc3b5036f1d03559fd46bb38b5eeb/DAWG_Python-0.7.2-py2.py3-none-any.whl) SHA-256: `4941d5df081b8d6fcb4597e073a9f60d5c1ccc9d17cd733e8744d7ecfec94ef3`. It is downloaded into ignored build scratch space and zip-imported after hash verification, with no pip installation. Its code and wheel are not bundled in the app or keyboard extension. This MIT tooling license does not replace any dictionary-data license. ```text Copyright (c) Mikhail Korobov, 2012 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` ## Measured Russian orthography forms The `orthography` table and additional `russianGeneral` words retain actual counts from **FrequencyWords by Hermit Dave**, derived from **OpenSubtitles 2018 via OPUS**. Lexical support comes from **OpenCorpora contributors' compiled morphological forms** or the independently attributed **Russian Wiktionary contributors' headwords** described above. The resulting data is distributed under CC BY-SA 4.0 with original CC BY-SA 3.0 OpenCorpora attribution retained. Pinned full list: [ru_full.txt at revision 525f9b560de45753a5ea01069454e72e9aa541c6](https://raw.githubusercontent.com/hermitdave/FrequencyWords/525f9b560de45753a5ea01069454e72e9aa541c6/content/2018/ru/ru_full.txt), **28,999,417 bytes / 1,423,050 source rows**, SHA-256 `32dfd94138aea2667ec455dcc8512029e39bd4b8ea70b09410d569b69d511a30`. This data is CC BY-SA 4.0; it is not covered by the upstream code's MIT license. Historical schema 5 selection: normalize lowercase NFC; sum normalization collisions; retain measured frequency >=15; retain Russian-letter forms of length 3–24 or internal-hyphen compounds of length 3–48; require literal membership in the pinned compiled OpenCorpora DAWG; exclude hot RU and semantic supplemental words. That selection retained **115,555** entries (819 hyphenated; 38,012 plain forms of length 3–7). Historical schema7 retained the source-error policy and independently attested Wiktionary headwords/table forms introduced by schema6: **121,590** RU entries, including885 hyphenated and3,868 with measured counts1–14. No words, inflections or frequencies are manually invented. The raw full list and DAWG remain ignored import inputs and are not shipped. Schema 5 introduced the measured **English** EN50k tail under `language=en`, retained unchanged through schema8: lowercase NFC alphabetic words, real aggregated count>=15, excluding hot 20,000 English words. All 26,717 retained rows have actual counts 159–782. This uses the same attributed/pinned `en_50k.txt` above, not SCOWL or Wikidata membership as a substitute for frequency; no individual-word rules or invented counts are used. The RU tail changed under successive source policies; it is not claimed to remain equal to schema 5. All source/derivative pins and measured counts are recorded in `data/lexicons/sources.json`. The data-only export script follows the current registry for both Core and App-only resources and their declared public provenance; it includes full bundled licenses and article/source appendices, and excludes raw caches and private typing data. ## Candidate source-family expansion · 2026-11-01 Russian Wiktionary contributors, CC-BY-SA-4.0: complete direct category «Русские слова с суффиксом -чик», pinned page revisions and literal Russian noun-table forms. This category includes non-diminutives. No definitions are included; source URLs and raw-response/retained-table checksums are retained in the derivative. Existing source layer remains unchanged. Default importer reads the one complete source manifest below; no optional shipping layer. | Source derivative | Bytes | SHA256 | | --- | ---: | --- | | `data/lexicons/form-sources-2026-11-01.json` | 836 | `b4e0d177ce9429c044d1ddd66ae8cbc7a29c1af3f5ceeae4eb3e89705324bda1` | | `data/lexicons/wiktionary-suffix-chik-category-2026-11-01.json` | 176957 | `724c603060a06cc4f5f40bff34b8b2935ab15da0ed02ca47b40beee3e1ab70b0` | | `data/lexicons/wiktionary-suffix-chik-forms-2026-11-01.json` | 41312 | `621cc767bb2f50930973516aaf32e0bb6f205ca707ef265b7237a4add258b3f4` | ## App-only dictionary family catalogue `App/Resources/dictionary-families.sqlite.gz` is an additional browsing projection of the already attributed spelling sets. The build expands it as `dictionary-families.sqlite` in the companion app only. It preserves literal OpenCorpora parent/form relationships, the pinned Russian Wiktionary inflection tables, and whole Wikidata entity labels with their source identities. Records without attested family evidence remain standalone entries from the existing spelling catalogue. The corresponding source attributions and licenses above still apply; the grouping itself does not add keyboard prediction targets. The separate v41 source-role projection changes membership as documented below. Historical v41 source revisions, licenses, transformations and checksums are recorded in `data/lexicons/v41/v4-v8/family-sources.json`, with its output and packaging receipts alongside it. Current v45 provenance and reproducible output pins are in `data/lexicons/v45/reproduction-recipe.json` and the linked reviews. Earlier `dictionary-families-*-2026-11-01.json` files preserve historical schema1 evidence. The build-time DAWG reader remains separately attributed above and is not a runtime dependency. ## Source-role projection and parent articles · v41 · 2026-11-01 This selection supersedes historical v36/schema7 counts and preservation claims; it does not replace any upstream attribution or license. The same pinned OpenCorpora, Russian Wiktionary, Wikidata, FrequencyWords and SCOWL sources remain in use. No new corpus, model weights or runtime dependency is introduced. Historical v41 policy, complete per-spelling change receipt and family source/packaging manifests are in `data/lexicons/v41/`, registered by `data/lexicons/sources.json`. The fresh schema8 projection retains an ordinary spelling when any modern ordinary OpenCorpora analysis or independent ordinary Wiktionary evidence exists. Affirmative proper-only, abbreviation-only, error-only and Arch-only evidence removes general membership; rarity, technical specialization, Dist and Infr do not. Missing source coverage alone does not remove ordinary words. Retained frequencies remain original source measurements. Excluded rows and English name labels remain only in the pinned historical source, outside the shipping database and hot TSVs; no hidden recognition layer is retained. Names contain whole Russian labels, literal Russian proper paradigms and independently typed Wiktionary proper headwords/literal forms, without English names or label fragments. This removes some real surnames whose only available evidence was a component of a whole human label; the loss is disclosed in `docs/research/DICTIONARY-ROLES-V41.md`, not described as proof of garbage. Abbreviations use independent bit32 and only canonical literal source spellings, without inflection expansion or fuzzy targets. OpenCorpora Abbr tags do not imply uppercase: its literal compiled spelling is preserved unless a pinned source title independently provides case. The app-only sidecar schema2 groups equal normalized parents within language and ordinary/proper/abbreviation role. Parts of speech are unioned; every retained source identity, original source display, parent POS and full tags remain in `family_sources`. Ordinary/name homographs preserve independent case; abbreviations have no other forms. Full grammatical form evidence remains in the pinned original sources. The keyboard does not load this sidecar. Grouping changes article counts; source-role selection changes membership. Neither establishes language quality, which is evaluated separately. ## V42 Russian finite spelling source Alexander I. Lebedev's Russian spelling dictionary, pinned LibreOffice dictionaries revision `eff9495b70722d8e590e97b1710cfc7c00f6ce72`, is used offline as finite lemma/form attestation. KeKey does not execute Hunspell at runtime or copy its implementation. `.dic`, `.aff`, parser wheel and README hashes are recorded in `data/lexicons/v42/source-pins.json`. Reviewed literal Wiktionary гандон/гондон variant tables retain CC BY-SA4.0 page/revision/table attribution in `profanity-variant-families.json`. The following complete notice is also bundled as `Lebedev-Copyright.txt`: ```text * Copyright (c) 1997-2008, Alexander I. Lebedev Modifications: ------------------------------------------------------------------ 2012-08-24: Laszlo Nemeth (nemeth at numbertext org) * ru_RU.aff: add TRY line for better suggestions (fix fdo#35001, reported by sasha.libreoffice at gmail) Copyright: ------------------------------------------------------------------ * Copyright (c) 1997-2008, Alexander I. Lebedev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Modified versions must be clearly marked as such. * The name of Alexander I. Lebedev may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ``` ## Tatoeba CC0 Russian context associations (v43) Tatoeba contributors, [Tatoeba](https://tatoeba.org/): the explicitly designated [Russian CC0 export](https://downloads.tatoeba.org/exports/per_language/rus/rus_sentences_CC0.tsv.bz2), under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). [Official export documentation](https://tatoeba.org/en/downloads). This attribution applies only to the CC0 export, not to other Tatoeba content or licenses. KeKey derives bounded association scores offline; only the compiled score table is a runtime resource. The keyboard does not contact Tatoeba, send input, or store corpus sentences. Raw source corpora are neither committed nor shipped. Source SHA256 `3b6645bbc18e4e3444ebc9195c4a6c41ff521a8bc4306fec8fcc217ae734db76`, source/download/build pins: `experiments/v43-corpus-lm/source.json`; independent reproduction: `data/qa/v43/corpus-source-audit.json`. Corpus occurrences are ranking evidence, not dictionary attestation or representative conversational-language measurements. ## V44 reviewed abbreviation and proper-head sources Russian Wiktionary contributors and Russian Wikipedia contributors, under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), provide the v44 exact-title source evidence. Attribution is to the contributors of each original page; the derivative retains page/revision URLs, request and response hashes, literal source titles/redirects, and the source-subject evidence used for each admitted head. Review source IDs are `wiktionary-proper-v44` and `wikipedia-proper-v44`. The abbreviation review uses Russian Wiktionary category/title evidence in `data/lexicons/v44/abbreviations-review.json` and `abbreviations-source-pins.json`. The proper-head review uses the fixed, pre-query scope in `proper-source-scope.json`, the final per-head primary provenance in `proper-source-review.json`, and request/snapshot/script pins in `proper-source-pins.json`. These are modified selections, not complete copies of either project. Exact source redirects are accepted only when supported as correct named readings; an explicit source label of erroneous spelling/transcription vetoes the alias unless an independent correct named referent is proved. Generic words, navigation templates and incidental person/place keywords do not establish a proper subject. The v44 transformation transfers already-present literal whole heads and their independently supported role/case; it does not synthesize morphology, infer aliases or transfer frequency counts between spellings. No article bodies, definitions or raw API responses are bundled with the keyboard. Original raw responses remain ignored offline inputs. Existing OpenCorpora, Wikidata, Lebedev, FrequencyWords, SCOWL and Tatoeba attributions remain required. Current source promotion status is recorded in `docs/STATUS.md` and `docs/QA-2026-11-01-V45.md`; this notice does not assert a new app build or installation. ## V45 bounded semantic review (2026-11-01) Russian Wiktionary contributors, [Russian Wiktionary](https://ru.wiktionary.org/), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), supply review-only meaning evidence recorded in `data/lexicons/v45/semantic-source-pins.json`. Existing v44 source identities, contributor attribution and original licenses remain required. The bounded editorial review covers 1,202 existing ordinary parents (77 removed, 1,125 retained) and rechecks all 737 abbreviation heads (all retained; 12 semantic descriptions corrected). Genuine abbreviations remain exact-only. This review creates no lexical forms, aliases, morphology or frequency counts. Excluding valid narrow or marked vocabulary is an editorial coverage decision, not proof that the word is nonexistent. Page/revision URLs and response hashes preserve source identity; raw article bodies are not shipped. The review records source lookup limits explicitly, including HTTP429; it is not claimed that every scope entry was freshly fetched. ## App-only short definitions (v58) The separate `dictionary-definitions.sqlite` app resource and the reduced gloss evidence in `data/lexicons/v58/definitions/evidence.jsonl.gz` are modified selections from the **Russian Wiktionary contributors**, under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). Each retained article links to its [Russian Wiktionary](https://ru.wiktionary.org/) source page, whose history credits its contributors. The full CC BY-SA 4.0 license remains bundled. These data derivatives remain available under that license; this notice does not change the license of KeKey's independent application code. The source is the [Kaikki/Wiktextract Russian-edition raw extract](https://kaikki.org/ruwiktionary/) of the 2026-10-01 ruwiktionary dump, extracted on 2026-10-30. Attribution also acknowledges Tatu Ylonen and the Wiktextract contributors for extraction. The acquired gzip SHA-256 is `fdcb978c76b660e0e43977bbf7487c812e6d42e965b0a73e3f5b4ba6981174c4`; retrieval, byte count, extractor commits, license evidence and reproducible commands are recorded in `data/lexicons/v58/definitions/source-pin.json` and `manifest.json`. KeKey selects only exact existing app article heads with compatible language, part of speech and ordinary/proper/abbreviation role. Marked catalogues additionally require source register evidence. It normalizes whitespace/NFC, retains source style qualifiers, and displays at most two meaning excerpts within 400 characters, selecting distinct parts of speech first, without model-written paraphrases. Reduced source evidence retains excerpts of up to 200 characters. This is incomplete explanatory coverage, not a complete copy or a claim of human review of every definition. The experimental extractor can contain upstream errors or omissions; raw record hashes and sense indices preserve the selected evidence. Source article links are live; the input extract and reduced derivative are separately pinned. The raw dump, source examples, quotations, audio and full article bodies are neither committed nor bundled. Short glosses are bundled only in the companion app and QA host, never in the keyboard extension or its lexical resources. This addition does not alter dictionary membership, word forms, frequency counts, aliases, correction targets or personal data. The earlier notices about spelling-only imports and review-only evidence describe those historical datasets; they do not describe this separate definitions resource. ## Original owner-editorial slang admission (v64) KeKey's original owner-editorial selection, `data/lexicons/v64/owner-editorial-source.json`, adds the literal Russian acknowledgement «ок» to the optional slang catalogue. The compilation is offered under CC0 1.0; it is an explicit product selection, not a claim of fresh Wiktionary attestation or measured frequency. Its decoder count is zero (unmeasured). It supplies one singleton head and no invented forms, aliases, case rules or definition. Existing contributors, data and licenses above remain applicable. Source/plan hashes and the offline parent-plus-overlay replay are recorded in `data/lexicons/v64/reproduction-recipe.json`. This notice alone does not assert testing, promotion or installation. ## Build-time parser licensing supplement (2026-11-03) The historical finite-source import uses **Spylls 0.1.7 by Victor Shepelev**, [pinned public wheel](https://files.pythonhosted.org/packages/cd/19/ce6fcb4b86e188983bcfc1f84e4ac6f3038ca8d68b6d70a678cdc566f66c/spylls-0.1.7-py2.py3-none-any.whl), SHA-256 `0c7fa4b66615f390bd12fd37939b85934c012309fd3cce8584844c54270b7776`. The wheel contains the [Mozilla Public License 2.0](https://www.mozilla.org/MPL/2.0/) in `spylls-0.1.7.dist-info/LICENSE`, SHA-256 `1f256ecad192880510e84ad60474eab7589218784b9a50bc7ceee34c2b91f1d5`. The empty `license_metadata` field in the historical source pin records what that acquisition exposed; this supplement supplies the licence found in the pinned wheel without rewriting historical provenance. Spylls is an offline source parser/acceptor, not a bundled SDK. No Spylls code or wheel is distributed in the app, keyboard, or data-only export. Its code licence does not replace the independently licensed dictionary sources. If the tool or modified covered source is separately redistributed, its MPL obligations must be handled for that distribution.