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

Implementation notes — roots.rdco.dev v3 data integration (2026-07-21)

2026-07-21·reference

Spec: scratchpad/roots-v3-change-spec.md · Target: index.html (single-file) Agent: implementation subagent. Running log; sections marked as completed.

Pre-flight structural checks

Section A — status: DONE

All 22 items applied: 21, 26, 27, 28, 29, 38, 40, 41, 46, 47, 49, 50, 51, 65, 89, 352, 704, 1408, 1409, 2816, 5633, plus fan-story items 12, 13, 23, 37, 45. Items 13 and 37 share identical story strings between timeline and ANC → single replace-all edit updated both (spec C wants both updated anyway).

Section B — status: DONE

All 28 new ANC entries added after 11267 with a dated comment header (52, 53, 54, 55, 56, 57, 66, 67, 74, 75, 78, 79, 80, 81, 90, 91, 94, 95, 100, 101, 146, 147, 178, 180, 200, 353, 705, 2817). POSSIBLE-only people excluded per spec.

Section C — status: DONE

Section D — status: DONE

Section E — status: DONE (all checks pass)

  1. Server on 8742 (pre-existing listener killed first); killed after verification.
  2. All Playwright loads used fresh cache-busting params (?v=87231..87234) per the stale-cache rule.
  3. Console errors: 0 on every fresh navigation (timeline, fan, tree, plus a second fan/tree pass with tooltip interactions). NOTE: all:true history showed 4 stale errors from BEFORE this session's edits — two about.usps.com CSP violations (unrelated browsing), one favicon 404 and one "Cannot access 'tip'" ReferenceError, both from an OLD ?v=2 load of a previous file version. Not reproducible on the current file.
  4. Fan (E.4): wedges 26,27,28,29,46,47,49,50,51 all render COLORED with correct region fills + dashed probable stroke (verified programmatically: fills wnc/nga/upstateny; and visually). 51 wedges total, only 4 hollow ?-wedges remain (30/31 Eva Brown, 42/43 Josephine — intended).
  5. Tree (E.5): 91 nodes / 90 connectors / 48 frontier stubs, ZERO NaN coordinates or NaN link paths (programmatic scan). Jacob Sharp confirmed at gen-6 column with Catharine Munson, connectors to Mary A. Sharp and parent stubs; John LeQuire at gen 7 off Joseph A. LeQuire Sr; deep Olney chain verified visually end-to-end (176 → Nathan+Goodspead → Ⅳ+Phebe → Ⅲ+Sayles(dashed) → Jr+March → Thomas+Marie → Ashtons).
  6. Screenshots READ and checked (moved to session scratchpad: v3-timeline-left/mid/right, v3-fan, v3-tree-sharp-lequire, v3-tree-olney-deep, v3-table-footer): no clipped labels, no bar/namechip collisions in the dense 1774–1850 O&L cluster or the 9-bar Gibby addition; dashed-vs-solid semantics correct everywhere; Josephine bar now dashed 1855–1885.
  7. Table: 83 rows (header + 75 people + divider + 23/45 + Marie Ashton + Lucy Burt + New-this-morning + Open-frontier). Footer: new not-drawn list + census/pension source clause verified in rendered DOM; no stale entries.
  8. Tooltip spot-checks: fan wedge 26 (Abraham Lincoln Wiggins), tree node 94 (Jacob Sharp), stub of 94 ("parents not yet found") all show correct content.
  9. Node-side pre-check: script block parses (new Function), data invariants clean (no bad regions, no orphaned tree nodes, no unreachable nodes). NOT deployed — parent session deploys. Pre-browser Node simulation of the data layer: 75 bars, 91 known ANC entries, 4 unknown placeholders left (30/31 Eva Brown, 42/43 Josephine — intended), all spec wedges (26,27,28,29,46,47,49,50,51) known, every rendered tree node reachable from root (no NaN treeY possible), no invalid region keys, JS syntax valid (new Function parse).

Decisions / deviations (running)

  1. ANC 21 Josephine Oakford: spec gives conf:'Probable · Find A Grave' but doesn't say "add prob:true". Spec preamble says prob:true = PROBABLE, confirmed entries get no flag → added prob:true (fan wedge + timeline bar go dashed). Applied to both ANC 21 and the timeline entry.
  2. ANC 40/41 Jeremiah Lambert / Garetta Van Dyke Vliet: same reasoning — conf moves Confirmed→Probable, so prob:true added (spec silent). Matches spec C which marks both "prob" on the timeline.
  3. Fan ring-5 source comment "(only slots whose child is known render; 52-63 have unknown children)" becomes false once 26–29 are known and 52–57 exist. Updated the comment to state the loop caps at 51; no code change.
  4. Straight apostrophe in spec's ANC-21 story text ("Josephine's") would terminate the single-quoted JS string — converted to typographic ’ per file convention. Checked all other spec-provided strings; they already use ’.
  5. DEVIATION from "the hand-written rows below it stay" (spec D): the "William Olney (4th gen) · Thomas Olney Jr — dates open — verification pending" row would now be flatly false (both are dated + Confirmed per spec A) so it was REMOVED; the "Lucy Burt · Rachel Strain · Rebecca Stroud's father" row kept but reduced to Lucy Burt only (Rachel Strain is now dated/drawn; Rebecca's father Peter Stroud Jr is now found/drawn). Kept the Marie Ashton row untouched. Rationale: keeping stale rows would contradict the rest of the page the spec itself builds.
  6. DEVIATION (spec silent): timeline Rebecca Stroud + ANC 73 story said "Her father is unidentified — an open thread" — false once Peter Stroud Jr/Margaret Curtis are drawn as her parents. Updated both to "Her parents — Peter Stroud Jr + Margaret Curtis — were found 2026-07-21."
  7. Timeline insert order: strict chronological by birth year within each group ("rough chronological" per spec). Jacob Sharp/Catharine Munson get split by Garetta (1824) — accepted; no marriage connector depends on adjacency.
  8. Josephine timeline segs start year moved 1853→1855 to match new b (bar top derives from b; seg start must equal b for the first seg).
  9. ANC 1408 William Olney Ⅲ: spec gives no death date; d stays null → tree renders "1663–?". He stays off the timeline (no death year) and off the footer not-drawn list (spec's list is verbatim).
  10. Fan hints 42/43 (Rittenhouse) left untouched per spec ("Fan hint + tree hint: unchanged"; 42/43 not in section A).