01-projects/life/family-history/roots-timeline

Implementation notes — 2026-07-22 frontier round 5 (Goodspeed/Wooding extension)

2026-07-22·reference

Scope: apply ONLY the approved change-set from the dispatch (Goodspeed/Wooding line extension). Source: 2026-07-22-frontier-round5-partG.md + partH.md, tree doc 2026-07-20-wilson-tree-v0.md.

What changed

index.html (ANC object)

build-people.mjs

people-bios.json

Tree doc (2026-07-20-wilson-tree-v0.md)

Judgment calls (things a fresh reader should know)

  1. Elizabeth Goodspead's death estimate (ed:1795) was kept as-is, not recomputed from the new real birth. Strict E3 arithmetic off the new real birth (1731+62) would give 1793, not 1795. The dispatch explicitly said "keep the estimated death (ed:1795)," and the methodology's E4 rule ("a real documented date always overrides its estimated half") doesn't mandate recomputing the other half just because one side went real — so this isn't a methodology violation, just an instruction I followed literally rather than silently "improving." Flagging in case the founder wants ed recomputed to 1793 for arithmetic consistency; leaving it at 1795 per the explicit instruction.
  2. LINE_BY_AHN map extension in build-people.mjs (see above) — a plumbing change, not a content/genealogy judgment call, needed so the six new pages surface correctly in the grouped people index rather than silently orphaning.
  3. Node numbering required no judgment at all — 706/707/1412/1413/1414/1415 are the exact ahnentafel positions relative to Elizabeth Goodspead (353): father=2n, mother=2n+1, recursively. Verified programmatically (floor(706/2)==353, floor(1412/2)==706, etc. — all true) before writing.
  4. Held to the HOLD list exactly: did not add Oakford, Pemberton-upstream, or any Gibby-node changes to index.html or people-bios.json. Those are recorded doc-only in the tree doc's new section, per instruction.
  5. Did not add SOURCES or FRONTIER_HINTS entries in build-people.mjs for the 6 new slugs — out of the approved scope; the generator's existing fallback behavior (a muted "no direct web links captured yet" note under Sources, and a generic "not yet found — research frontier" stub for their own unlisted parents) handles their absence gracefully and correctly.

Verification results

2026-07-22 ~07:10 ET — Timeline width consolidation (founder ask, separate from round 5)

Founder (iMessage + screenshot): the timeline gave every person their own vertical lane → very wide with dead whitespace. Ask: pack non-overlapping lifespans into shared columns; child-between-parents rule can be relaxed; hard constraint = never stack two people alive at the same time. Example he gave: Danny Wilson + Jeremiah Lambert (non-overlapping) can share a column.

Implementation (index.html renderTimeline):

Verified via Playwright (localhost:8743, cache-busted): 118 bars → 56 columns (was 118); canvas 3010px → 1538px (49% narrower); 0 same-column time-overlaps (bug check passed); 0 console errors. 56 is the true floor = peak simultaneously-alive count, which the founder's constraint forbids collapsing further. Full-page screenshot eyeballed: clean staircase, chips readable, region colors intact.