Say it out loud and there is no difference: in Welsh, ei "his" and ei "her" are the same spoken word. What tells a listener which one you mean is not the little word at all — it is what happens to the first consonant of the next word. ei gath is his cat. ei chath is her cat. The gender of the owner has been moved out of the pronoun and into a consonant. Pick a noun and watch all three possessives fall out of one root.
Welsh has nine consonants that change their opening sound depending on the word in front of them. The same noun therefore appears with different first letters in different company. Here is one root in three hands. Every form below is generated by the mutation rules in your browser — the page cannot show you a form the rules do not produce.
A mutation is just a lookup: a trigger word forces one of three changes on the consonant that follows it. Choose any noun and any trigger and read the result, the rule that fired, and why that trigger fires it. The "why" is the deep part, held until §V, but the surface is mechanical, and that is exactly the point: a sound law is a function you can run.
The whole system is three small tables. Soft mutation (treiglad meddal) is ordinary lenition and touches all nine consonants — it is by far the commonest. Nasal mutation (treiglad trwynol) turns the six stops into nasals. Aspirate mutation (treiglad llaes) turns voiceless stops into fricatives, and touches only three letters. A dash means the consonant is left alone; ∅ means it is deleted outright.
Here is the result, stated exactly. His softens; her spirantises. Whenever a noun begins with one of the nine mutable consonants — or with a vowel (where "her" prefixes an h-: ei henw "her name" vs ei enw "his name") — the two diverge, and the listener knows. This is provable, and the verifier proves it over the whole inventory.
But the trick has a hole, and the honest thing is to show it. When a noun already begins with a sound that neither mutation touches — f, ff, th, dd, ch, s, h, l, n, r, ng… — then his and her come out identical. ei nos is his night and her night; nothing in the sound decides. Welsh resolves this residue the blunt way: an echo pronoun after the noun — ei nos ef "his", ei nos hi "her". The mutation does the elegant work where it can, and grammar mops up where it can't.
Why should "her" spirantise and "his" soften? Because these mutations are fossils of ordinary junction-sandhi — the way sounds at the seam between two words used to rub off on each other — frozen after the conditioning sound itself wore away. (Wikipedia, "Consonant mutation"; the broad picture is consensus.)
The clearest case is the very one this page turns on. The feminine "her" descends from a form that ended in -s: *esjās. Before a following word, that -s spirantised the next consonant, and the documented Proto-Brythonic chain runs *esyās tegos > *esyāh tegoh > *esyāh θegoh — "her house", the t- already become θ-. Then the trigger word eroded to a bare ei, the -s gone — but the mutation it had caused stayed behind, reanalysed as the marker of "her". The masculine "his" descends instead from a vowel-final form *esjo; a word that ended in a vowel lenited the next consonant instead. Same little surviving syllable today; opposite lost endings.
The pattern generalises. Nasal-mutating triggers are the ones that once ended in a nasal: fy "my" (*men), yn "in" (*en), whose -n nasalised the following stop. Aspirate-mutating triggers are the ones that ended in a consonant — a "and" (*ak), the numerals tri "three" and chwe "six" (*trīs, *swexs). The grammar of modern Welsh is, in part, a museum of consonants that no longer exist — a thing that happened to the sound long ago, kept working as a thing that now happens to the meaning.
The living system has a runnable check. It compares the three tables with the
reference mappings, checks 36 possessive stems and selected extra forms, and compares his/her
onsets. It also runs this page's engine for the article, numeral, yn and ac
regression cases. The drift guard compares three embedded data blocks with data.mjs;
it does not check the prose or the historical reconstruction.
240 checks pass offline.
The history in §V is a different kind of claim — cited, not re-derived. Forms carrying the linguist's asterisk are reconstructions; the general account (mutations from lost word-final sounds) is consensus, but the precise protoforms of individual triggers and the relative chronology of the spirant mutation are genuinely debated in the literature, and some scholars derive the aspirate mutation from earlier geminate consonants rather than a simple -s. The verifier checks the system; it does not and cannot adjudicate the reconstruction. And one living-language honesty note: usage varies by trigger. In the cited study of spontaneous speech (Tables 8 and 14), nasal mutation occurred in all 31 eligible fy cases; after yn, the sample had 34 nasal and 109 soft mutations, alongside 395 unmutated cases. Those are observations from that sample; the tables describe the standard, not a tape recording of any one street.
Written 2026-06-21. Claims re-read against their sources on 2026-10-01: 275 checked, 193 confirmed, 79 wrong, 0 unverifiable, 3 true when written and overtaken since (dated, not corrected). By the assay line (research/assay-line/trial-1001/), Codex fixer directed by claude-assaying-codex-0929; source record by Codex, checked by Codex and a Claude agent.
This was the directed repair pass for this layer at 3fa55eb20c, using the 82 triage items, the Codex source record, and the Codex and Claude checker records. The fixer re-read the grammar and speech-study evidence, traced authorship, repaired supported claims and browser rules, and reran the layer verifier. Each triage item has its own row even where the checkers overlap; MINOR rows count in wrong. Remaining CONFIRMED rows retain the checkers' recorded evidence, with current wording reconciled where this pass changed it. Triage supersedes conflicting earlier verdicts. The dated note records the current verification, while the generated placard awaits its permitted refresh. The authored page and data are fixed; the older generated copy at public/checks/research/welsh-mutations/data.mjs still awaits the shared publisher, whose manifest is outside this pass's permitted edits.
This record is long (275 claim lines and 82 findings), so it is not part of the page until you open it. It loads here now if your browser runs scripts; otherwise, or to keep it, read the whole record as plain text.
The assay office: what a record is, and every layer re-read so far.