The invariant: a Spec is partial by design. Anything you omit is sampled. The same Spec plus seed produces the same model bytes. See the Spec reference.
The three levels
| Level | What the Spec pins | What is sampled | Why choose it |
|---|---|---|---|
1 · Minimallevel1-minimal |
name, seed |
Inventory, templates, constraints, word count, lexicon, morphology, syntax, discourse, semantics | Fast exploration. Useful when you want a surprise or a starting point, not a designed language. |
2 · Partiallevel2-partial |
Inventory, syllable templates, word count | Lexicon, morphology, syntax, alignment, discourse, semantics | Control the sound and size while leaving the vocabulary and grammar to the generator. |
3 · Richlevel3-rich |
IPA inventory, templates, forbidden cluster, concepts, lexicon roots, syntax, discourse, semantic model | Most affix forms, inflection classes, and the remaining word forms | Designed output: a specific sound, grammar, and interpretation with little sampling left. |
What the three runs produced
| Signal | Minimal | Partial | Rich |
|---|---|---|---|
| Seed | 101 | 202 | 303 |
| Lexemes | 249 | 139 | 101 |
| Word forms | 1,466 | 584 | 184 |
| Inventory | Large sampled IPA-like set | Ten Latin consonants, five vowels | Nine IPA consonants, five vowels |
| Orthography | Identity | Identity | IPA → spelling map for ʔ and ʃ |
| Word order | SOV | SOV | SOV |
| Alignment | Accusative | Ergative | Ergative |
| Modifier order | Prenominal (derived) | Prenominal (derived) | Postnominal (explicit) |
| Affixes | 18 | 18 | 20 |
| Discourse features | Off | Off | Particles, switch-reference, reflexives, evidentiality |
| Semantic model | None | None | Two individuals; sun, moon, see |
| Lint | Valid | Valid | Valid |
Lexicon size is not the richness axis. Level 1 is the largest because it uses the default word count and full concept list. Level 3 is smaller because its concept list was pinned to twelve items. The axis is how much is specified, not how many words result.
The steps, once per language
# 1. Write a Spec at the level you want.
# Only spec_version is structurally required.
# 2. Generate. --strict makes lint errors exit non-zero.
.\.venv\Scripts\python.exe -m conlang.cli generate \
--spec out\language-levels\spec\level-3-rich.yaml \
--out out\language-levels\level-3-rich.json \
--workspace out\language-levels --strict
# 3. Render the grammar sketch.
.\.venv\Scripts\python.exe -m conlang.cli render \
--model out\language-levels\level-3-rich.json \
--out out\language-levels\level-3-rich.md \
--workspace out\language-levels
# 4. Freeze it later if the sampled values are the ones you want.
.\.venv\Scripts\python.exe -m conlang.cli accept \
--model out\language-levels\level-3-rich.json
What each kind of pinning buys you
| Pinned field | Effect on the model |
|---|---|
phonology | Controls the segment inventory and whether spellings are derived from IPA. |
syllables | Controls legal word shapes and the templates used for roots and affixes. |
word_count | Trims or extends the built-in concept list when no explicit lexicon is given. |
concepts | Replaces the built-in concept list and fixes the lexical field. |
lexicon | Pins roots, parts of speech, and lock status for chosen words. |
syntax | Sets word order, alignment, modifier side, and subordinator edge. |
discourse | Turns on particles, switch-reference, reflexives, and evidentiality. |
semantics | Declares a domain and predicate extensions for evaluation and entailment. |
Provenance: did the pin stick?
| Model evidence | Meaning |
|---|---|
origin: specified | The value came from the Spec. |
origin: sampled | The generator chose the value. |
locked: true | The entry should survive regeneration. |
concepts | Selects which words exist; roots are still sampled. |
lexicon | Pins a gloss, root, and part of speech. |
In level-3-rich.json, lex:sun is
specified and locked; lex:water exists because it is a concept, but
its root is sampled and unlocked.
Decision guide
- Use minimal when you want to explore the generator's range.
- Use partial when you care about sound and size but want fresh vocabulary.
- Use rich when the language must match a design brief, a story, or a translation.
- Freeze with
acceptonce sampled values should stop moving.
Primary source: the project's
Spec reference and
feature guide. The generated models under
out/language-levels/ are the evidence behind the table.
Related lessons: Three generation levels · Where your pins land · Read the grammar sketch · Meaning is not the model · Entailment is not validity.