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

Implementation notes — roots v5 (frontier round 4, partE/partF integration)

2026-07-21·reference

2026-07-21 evening. Spec: scratchpad/roots-v5-change-spec.md. Sources: ../2026-07-21-frontier-round4-partE.md + partF.md.

Applied

Decisions / deviations

  1. James Williams + Alice Pemberton are tree-only, no eb (spec's "est via E1?" resolved NO): the E-rules require a real-record anchor; his marriage year and first child's birth are unrecorded, and Roger's c.1603 is itself convention, not a record.
  2. Birth-less render fallback added: tree nodes and person pages show "?–1621" instead of "dates open" when only death is real (small code change, index.html tree yrs + build-people personPage/personLink). Without it the two new Williamses would have displayed "dates open" while holding real death years.
  3. "c.1610" label rendered on Dexter's tree node via the same hardcoded pattern as Thomas Olney's c.1600 (n===2822); table/tooltip carry plain 1610 with the traditional/POSSIBLE story note — precedent-consistent, no new data field invented.
  4. Re-derivations forced by retirements: Abigail Fullerton eb 1634→1624 (E2 off first recorded child Stephen 1647 — old basis referenced the retired ~1657 estimate); Abigail Dexter ed 1719→1717 (E3 off real b.1655, floored ≥ last-seen 1711).
  5. No ahn 364/365 duplicate: John Burt's father is Richard Burt Sr, already drawn at 178 as Lucy's father; the pedigree fold is carried in stories + frontier hint instead of duplicating him.
  6. Out of spec scope, deliberately NOT applied (flag for parent): Harriett Osborn maiden-name POSSIBLE→PROBABLE upgrade (partE, Osborn Calliway cert); William Olney⁴ b. Oct 6 1694 day pin; wider Eva-Brown reroute (one open-frontier line only). Also added a "New tonight (frontier round 4)" table row + Arnold/Waters/Swan/Sylvester to the intro source list.

Verification (static only, per spec — no browser, no deploy)

node --check on the extracted index.html script: PASS. build-people.mjs ×3 clean, 116 pages, no unassigned-line warnings. people-bios.json valid; indent=1 round-trip formatting preserved. Zero null/NaN/undefined artifacts across all generated pages. Simulated timeline invariants: 114 bars, all ranges ≥ Y0/ordered, all regions valid, every eb/ed paired with ebasis (and vice versa), parent links 182/183→91 and 11276/11277→5638 correct. Sample pages grepped: roger-williams (parents linked), sarah-burt-salisbury (parents linked, reverify cleared), catharine-sayles (Dec 20 ×2), james-williams/alice-pemberton (?–year headers), sarah-olney (~est header + estimated aside), gregory-dexter/thomas-angell (no estimate aside).