Sounds, Not Spellings
A roadmap task that reads as nine words, "generate plausible-sounding names for cultures and places", turned into a genuine language engine: phoneme inventories, sonority rules, language families. The cheap version was rejected on purpose, and the reason is that a name generator built as a name generator gets thrown away the moment the game needs to do the one thing names are actually for here.
The alternative that was rejected: a syllable table
The cheapest reading of the task is a per-culture table of syllable fragments, joined together at random into something that sounds vaguely consistent. It works, immediately, and it was rejected anyway, because a later, already-intended phase puts untranslated tablets in front of the player, written in these cultures' own languages. A name generator that only ever outputs finished strings has nothing underneath those strings for a translation puzzle to work with. Building the cheap version now means throwing it away later; building the real version now means the translation phase inherits it for free.
A name is a sequence of sounds, not a fixed spelling
The decision that follows from that: a name is stored as a sequence of phonemes, not as a spelled string, and gets rendered into readable text only at the point it's actually shown to the player. That single choice is what makes toponymic drift possible at all. A site named early in a culture's history can turn up later, in a document written generations afterward, under a form that's audibly drifted from the original without ever having been redefined by anyone. Every -chester and -thorpe scattered across England is this exact phenomenon, playing out over real centuries. Storing spellings instead of sounds would have made that entire effect structurally impossible to produce.
Families instead of one shared ancestor
Languages are generated in families, deliberately not descending from one universal root. A single shared ancestor for every culture's language would make all of them quietly related, which is both linguistically implausible and dramatically flat, and it would remove the most interesting case the later tablet phase depends on: an untranslated tablet written in a language that's a known relative of one the player already understands reads completely differently, and is worth completely different things to translate, than one written in a total isolate.
Grounded in real phonology, not invented from nothing
The sound inventories themselves aren't arbitrary. Sounds like p t k m n s l appear in almost every attested human language and form the safe, common core; pharyngeal and uvular consonants are comparatively rare and get used more sparingly. Sonority sequencing constrains which sounds can plausibly sit next to each other within a syllable, and every generated language keeps a basic three-vowel floor, because that's close to a genuine typological minimum. None of this makes the generated languages real. It makes them draw from the same statistical shape real languages actually have, rather than from a uniform random distribution across every sound a human mouth can make, which is what makes invented languages read as flat and interchangeable in the first place.
docs/spikes/2GN.66-naming-grammars.md