# Inkhaven 1.3.15 — The ConLang Suite (Part 2: morphology & diachronics)

_1.3.14 shipped the ConLang substrate — phonology, lexicon, and the start of
morphology. 1.3.15 builds two whole pillars on top of it: the rest of
**morphology** (paradigms ↔ glossing ↔ derivation ↔ grammar ↔ expressions) and
all of **diachronics** (how a language changes over time and spawns daughter
languages). RFC LANG-1; reference [CONLANG.md](../CONLANG.md). Zero new
dependencies._

A through-line of this release: **everything reuses the engines already built.**
The auto-glosser generates paradigms forward to dodge reverse-parsing; the
sound-change engine *is* the allophony rewrite engine; derivation and cognates
share the affix-application path. One deterministic core, many surfaces.

## Morphology, completed (P3)

- **Auto-gloss** — `inkhaven language gloss <lang> --text "kata katai katat"`
  prints an aligned Leipzig interlinear. It recognises inflected *and*
  allophony-altered forms (`katat` → `stone-DAT`) by generating each entry's
  paradigm forward and matching — so the allophony is handled, not fought.
  Entries opt in with a `paradigm:` field.
- **Derived-form proposals** — `inkhaven language derive --root kata --pos verb`
  coins *new lexemes* (agent nouns, diminutives, …) via derivational rules,
  with allophony; advisory (`--yes` commits, recording the etymology).
- **Grammar questionnaire** — `inkhaven language grammar <lang>` walks a
  WALS-aligned catalog of 16 typological features (word order, alignment, case,
  tense/aspect/mood, negation, …); `--set word_order=sov` validates the answer
  against the catalog.
- **Idioms & metaphors** — `inkhaven language idiom-add` / `metaphor-add` /
  `idioms` store phrase-level expressions the AI translation consults to stay
  idiomatic.

## Diachronics (P4)

- **Sound-change engine** — a sound change *is* an ordered context rewrite, so
  the engine reuses the allophony rewrite engine. `inkhaven language
  sound-change <lang> --form tap` → `taf`; a `{ diachronics: { proto, rules } }`
  block in the Phonology chapter declares the chain.
- **Daughter-language derivation** — `inkhaven language derive-lexicon
  <daughter> [--yes]` evolves a proto's *whole dictionary* through the
  daughter's chain, carrying glosses forward and recording each etymology.
- **Cognate sets + family tree** — `inkhaven language family-tree` draws the
  genealogical tree; `inkhaven language cognates ProtoEldarin --form takap`
  traces a proto-form's reflex in every daughter (`Eldar takaf` vs `Sindarin
  tahaf`).
- **AI comparative reconstruction + realism check** — `inkhaven language
  reconstruct --forms "tava taba"` proposes a proto-form from cognates;
  `inkhaven language realism-check <lang>` assesses whether the sound-change
  chain is typologically plausible. Advisory.

## Design notes

- **Deterministic where it can be.** Every engine here — paradigm generation,
  auto-gloss, derivation, the sound-change chain, cognate reflexes, the family
  tree, the grammar catalog — is a pure, unit/property-tested function. Only the
  reconstruction + realism checks (and translation) call the LLM, as thin
  layers.
- **Extend in place.** No new chapters: morphology + grammar + idioms blocks
  live in the existing **Grammar** chapter, diachronics in **Phonology**, the
  lexicon stays the existing dictionary paragraphs. A shared
  `upsert_grammar_paragraph` writes the structured blocks.
- **AI stays advisory** — proposals (`--yes`-committed), glosses + reasoning in
  the project working language.

## What's next

The remaining LANG-1 pillars: **writing systems + pure-Rust font compilation**
(the one dependency-heavy phase — fontc / norad / etc.), an **analysis suite**,
and a package-rich **Typst grammar book / dictionary** export. Then polish.

Tests 1428 (1.3.14) → 1439. Zero new dependencies. Full surface:
[CONLANG.md](../CONLANG.md).
