Genetics engine
OmniBurrow works out each rabbit's genotype from the records you already keep — its variety, its parents, its ancestors, and the kits it has produced — then uses those genotypes to predict what a pairing is likely to throw and how closely related the pair is. It models 13 colour loci, and it is deliberately honest about uncertainty: where the evidence only supports a probability, you get a probability rather than a confident-looking guess.
Everything here runs identically on both apps. On mobile it runs on-device, so predictions work at the cages with no signal.
The loci it models
| Locus | Alleles, most to least dominant | Inheritance |
|---|---|---|
| A — agouti | A › at › a | Standard dominance |
| B — black/brown | B › b | Standard dominance |
| C — colour series | C › c^chd › c^chl › c^h › c | Standard dominance |
| D — dilution | D › d | Standard dominance |
| E — extension | E^s › E › e^j › e | Standard dominance |
| En — English spotting | En › en | Standard dominance |
| Du — Dutch | Du › du | Standard dominance |
| Si — silvering | Si › si | Standard dominance |
| W — wideband | W › w | Standard dominance |
| P — lutino | P › p | Standard dominance |
| V — Vienna | V › v | Incomplete dominance |
| Dw — dwarf | Dw › dw | Lethal when homozygous dominant |
| Mf — max factor | Mf › mf | Lethal when homozygous dominant |
The two lethal loci matter in practice: Dw/Dw is the peanut, which is not viable, and the engine
marks that combination lethal rather than predicting a live kit. V/v is modelled as incomplete
dominance, which is what keeps Vienna-marked animals distinguishable from true blue-eyed whites.
What it infers, and from what
The engine never assumes a genotype from breed alone. It builds each locus up from evidence:
- Your recorded variety tells it a lot. A REW is
c/c; a self black isa/a. Those are certainties, not guesses. - Parents constrain what a rabbit can carry — each contributes one allele.
- Ancestors contribute recessive reveals, weighted by distance (below).
- Offspring work backwards: a kit showing a recessive proves both parents carried it. This is why genotypes sharpen as you record more litters.
- Manual overrides win outright. If you have test-bred an animal and know what it is, set it and the engine stops second-guessing you.
Distance is weighted, and it matters
A recessive appearing in a distant ancestor does not make a rabbit a carrier. The engine scores by generation, halving at each step:
| Where the recessive appeared | What the engine concludes |
|---|---|
| Parent is homozygous recessive | Certain carrier — a b/b parent must pass b |
| Grandparent | 50% chance of carrying |
| Great-grandparent | 25% chance of carrying |
It stops at three generations. That halving is the entire point: treating a great-grandparent's reveal as a guaranteed carrier produces predictions that look confident and are wrong. Here the probability rides alongside the locus instead of overwriting it, and feeds prediction as a probability.
Predicting a pairing
Pick a doe and a buck, and you get two things.
Per-locus odds. For each locus the engine builds the gamete distribution each parent can
contribute and combines them. Where both parents are fully resolved this is exactly the Punnett
square you would draw by hand — A/a × a/a gives 50% agouti, 50% self, and the engine returns
precisely that.
Ranked variety predictions. It scores the varieties in your breed's catalog, ranks them, and returns the top 12 with likelihoods on a 0–100 scale. Anything below 2% is dropped so the list stays readable instead of trailing into near-impossible combinations.
Where a parent's locus is unresolved, a known allele contributes at 50%, a carrier hint contributes at its own weight, and a locus with no evidence contributes nothing. The consequence is deliberate: recessive predictions come out below 100% when the evidence is genuinely incomplete. A pairing that could throw REW shows honest odds rather than a certainty you cannot bank on.
Masked genotypes still count. If a rabbit's visible colour hides what it carries underneath — and a litter later reveals it — prediction reads the underlying genotype, not just the coat you can see.
Coefficient of inbreeding
COI is calculated by Wright's path method, including the standard correction for an inbred common ancestor:
FX = Σ (½)n₁+n₂+1 × (1 + FA)
It walks up to 10 generations, and reports both the depth it actually reached and how many ancestors were missing — so you can tell whether a low number means "genuinely unrelated" or "not enough pedigree yet".
The canonical pairings land where they should, and each is pinned by a test:
| Pairing | COI |
|---|---|
| Unrelated | 0% |
| Parent × offspring | 25% |
| Full siblings | 25% |
| Half siblings | 12.5% |
| First cousins | 6.25% |
A 0% COI on a rabbit with two recorded generations means "no shared ancestor in what OmniBurrow knows". It is not proof the pair is unrelated. Add or import more ancestry and the number becomes more meaningful — the reported depth and missing-ancestor count tell you how far to trust it.
What it cannot know
Worth being clear about, because it changes how you read a prediction:
- Anything you have not recorded. No variety, no parents, no litters means no evidence — the engine says it does not know rather than inventing a genotype.
- Traits outside those 13 loci. Body type, fur density, ear carriage, temperament: none of it is modelled. Genetics here means colour genetics plus the dwarf and max-factor lethals.
- Whether your recorded variety is correct. Enter a rabbit as the wrong variety and every inference downstream inherits the error.
When the numbers are recomputed
Inferred genotypes are stored so screens load quickly, and recomputed when their inputs change — when you edit a rabbit, record a litter that reveals something, or refresh herd genetics from Tools. Correct an old record and the affected genotypes update on their own.