Extended-family toggle — feature spec (roots.rdco.dev)
Founder-directed 2026-07-22. The tree today is a pure ahnentafel (direct ancestors only: 2 parents per person, no siblings). This adds aunts/uncles/great-aunts/cousins behind a toggle, with relation-to-Ben labels. Founder rulings captured verbatim below; open decisions flagged for his call.
Founder rulings (verbatim intent)
- Behind a toggle, default OFF (clean ancestor view stays the default).
- Timeline view + Tree view only — NOT the fan chart (fan is strict ahnentafel, no room for siblings).
- Each person gets a relation-to-Ben label ("5th generation grandma", "Great Great Uncle") on the profile page / a small modal popup card.
- Value: broadens tree to cousins/aunts/uncles · enriches profiles · becomes reference material that helps confirm the direct line.
- Sequence: nail down behavior + research process first, then extend the same machinery to other people (wife's line → daughter's complete tree).
Data model
Direct ancestors stay in ANC (ahnentafel, untouched). Extended family goes in a new parallel KIN array — extended people don't fit ahnentafel numbering (siblings share parents but aren't ancestors).
KIN = [
{ n:'Name', b:1850, d:1910, eb:, ed:, // same date fields + estimate rules as ANC
gender:'m'|'f', // explicit (can't derive from ahn parity here)
region:'...', segs:[...], // same color/region system
rel:{ kind:'sibling', of:<ahn#> }, // sibling of direct ancestor <ahn#> → shares parents 2*ahn / 2*ahn+1
// OR rel:{ kind:'child', of:'<kin-key>' } // cousin = child of another KIN person
story:'...', conf:'CONFIRMED|PROBABLE|POSSIBLE',
living:false } // living-person flag (see Open Decision 1)
]
- A sibling of ancestor N attaches to N's parents (2N, 2N+1) — so it renders under the same parent-couple on the tree and in the same generation band on the timeline.
- Cousins chain via
kind:'child'to a KIN person. - Confidence discipline unchanged: CONFIRMED/PROBABLE/POSSIBLE; POSSIBLE-tier stays off the viz (doc-only) exactly like ancestors.
Relation-label computation (the headline feature)
Computed, not hand-typed, from position:
Direct ancestors (ahn n, generation g = floor(log₂ n), gender from parity even=m/odd=f):
- g1 = Father/Mother · g2 = Grandfather/mother · g3 = Great-grandparent · g≥3 = (g−2)×-great-grandparent.
- Founder's "5th generation grandma" phrasing = plain-language gloss; I'll show BOTH the standard genealogical term ("3rd-great-grandmother") AND a generation-depth gloss so it reads naturally. (Open Decision 2: which is the primary label.)
Siblings of ancestors (aunts/uncles — the bulk of phase 1):
- sibling of a parent (g1) = Aunt/Uncle · of a grandparent (g2) = Great-aunt/uncle · of ancestor at g = (g−1) prefix → g3 = 2×-great-aunt, etc. (Using "great" not "grand"; consistent convention.)
Cousins (children of aunts/uncles): "Nth cousin M× removed" via the nearest-common-ancestor algorithm. Clean but the fiddly part — phase 2 (arrives when we add children-of-siblings). Phase 1 ships ancestors + their siblings (labels are all clean there); cousins fall back to "cousin (extended family)" until phase 2.
View behavior
- Toggle: a control by the Timeline/Fan/Tree tabs (or a checkbox in-view). OFF = today's ancestor-only view. ON = KIN people appear.
- Timeline (ON): KIN bars pack into the same lane system, visually de-emphasized so the direct spine still pops — proposed: lighter fill or a thinner/outlined bar. They add columns; the packing math already handles it.
- Tree (ON): siblings render as extra child-nodes beside their ancestor-sibling under the shared parent-couple.
- Fan: unchanged, ancestors only (per founder).
- Relation label shows on every person's profile page + the tap modal, ancestors included (nice even in the default view).
People index treatment (founder's direct question)
Recommendation: a separate collapsed "Extended family" section below the direct-ancestor list (or a filter toggle on the index mirroring the view toggle). Rationale: the index is already ~120 long; folding 100+ extended people inline would bury the direct spine, which is the thing you scan for. Separate section keeps the ancestor line clean AND matches the toggle mental model everywhere. (This is my rec; easy to do inline-with-tag instead if you prefer.)
Research process
The sibling strategy is already proven (2026-07-21 round — a sibling's death cert naming shared parents is how we CONFIRMED direct-line parents). Formalize it:
- For each direct ancestor, research their siblings: census households enumerate all children; wills name children; a sibling's death/marriage cert names the shared parents (this is the two-for-one — it enriches AND corroborates the direct line).
- Add found siblings to
KIN, confidence-tagged, same POSSIBLE-off-viz discipline. /family-research-roundgets sibling targets on its frontier (re-aim from the tapped-out deep frontier toward the sibling-rich 1800s middle band).- Enrichment falls out for free: siblings' occupations/migrations color the family story.
Open decisions for founder
- Living relatives — RESOLVED 2026-07-22 (founder): option (a), include everyone fully. "I'm not sure why we need to obscure living people. This site is just for me behind a login wall." So living relatives display on the gated site with full dates. NUANCE that still holds: living people are added by HAND from founder knowledge (they're not in historical records); research agents still don't send living-person data to external services. Living branch (his aunts/uncles/cousins, Anne + kids) = founder supplies; deceased siblings = research.
- Primary relation-label phrasing: standard genealogical ("3rd-great-grandmother") vs founder's "Nth-generation grandma" gloss as the headline. (Compute both regardless; default to showing both, founder can pick the headline later.)
Phasing
- Phase 1 (this sprint):
KINdata model + relation-label engine (ancestors + aunts/uncles/great-aunts, clean labels) + toggle on timeline & tree + index section + one research round seeding siblings for the nearest 2-3 generations. - Phase 2: cousins (removed-cousin math) as we go wider.
- Phase 3: point the same machinery at Michelle's line → daughter's complete both-families tree.