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
- Fan loop renders ANC keys 1–51 only → new B entries (keys 52+) never hit the fan, as the spec intends. NOTE: spec says "ring>5 so fan unaffected" — keys 52–57 are actually ring-5 slots (32–63), but the loop cap at 51 excludes them anyway. Same net effect.
- Tree guard
if(n>1 && !isKnown(floor(n/2)))continue+ layout() recursion from 1: verified every new B key has a known child chaining to 1 (52/53→26, 54/55→27, 56/57→28, 66/67→33, 74/75→37, 78/79→39, 80/81→40, 90/91→45, 94/95→47, 100/101→50, 146/147→73, 178→89, 180→90, 200→100, 353→176, 705→352, 2817→1408). No NaN risk. - maxGen stays 13 (11266/11267 deepest) → tree width unchanged; height grows with leaf count automatically.
- Bar count after C: 25 O&L + 12 Wilson + 16 MCH + 4 today + 15 Gibby + 3 Foster = 75 bars ≈ spec's ~74. Width needed ≈ 2086px < 2200 min-width. OK.
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
- O&L: +14 bars (Thomas Olney Jr, William Olney Ⅳ, Richard Burt, Sophia Melick, Preserved Salisbury, William Lambert, Hiram Salisbury, Sarah Burt Salisbury, Jeremiah Lambert, Jacob Sharp, Garetta Van Dyke Vliet, Catharine Munson, Edgar Rogers, Mary A. Sharp), strict chronological insert. Josephine b→1855 + story/conf, John James Lambert + Nathan Olney story swaps applied.
- Wilson: +3 (Rachel Strain, William Alexander Kent, Catherine Dudley Taylor); Richard Wilson story precision ("died of pneumonia April 11, 1850" + wife drawn).
- MCH: +7 (Peter Stroud Jr, Margaret Curtis, Stephen Hunt, Nicey Johnson, Wm Hunsucker Thomas, Nancy Willis, John M. Hayes); Mattie Hayes + Narcissa Hunt stories updated.
- Gibby: +9 (John LeQuire, Joseph A. LeQuire Sr, Rowena Rowland, Jason Holland Wiggins, Betsy Kirkland, Wm N. LeQuire, Susannah Thomasson, Abraham Lincoln Wiggins, Clara Whiteside); John Martin Gibby + Martha Wiggins Gibby stories updated.
- New-bar 1-line stories authored from the corresponding ANC/spec text where the spec didn't supply one (spec instruction: "every new probable person gets prob:true and a 1-line story").
- Total bars now 75 (spec estimated ~74).
Section D — status: DONE
- #canvas min-width 1340→2200 (content width computes to ~2086px, fits).
- .scrollwrap untouched (stays 1352 per spec).
- Footer: not-drawn list replaced verbatim; sources sentence appended with GA/NC census/pension clause.
- Table: dates-open loop [23,38,40,41,45]→[23,45]; "New this morning" row added before Open frontier; Open frontier row replaced verbatim.
Section E — status: DONE (all checks pass)
- Server on 8742 (pre-existing listener killed first); killed after verification.
- All Playwright loads used fresh cache-busting params (?v=87231..87234) per the stale-cache rule.
- Console errors: 0 on every fresh navigation (timeline, fan, tree, plus a second fan/tree pass with tooltip interactions). NOTE:
all:truehistory 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. - 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).
- 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).
- 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.
- 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.
- 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.
- 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)
- 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.
- 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.
- 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.
- 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 ’.
- 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.
- 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."
- 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.
- 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).
- 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).
- Fan hints 42/43 (Rittenhouse) left untouched per spec ("Fan hint + tree hint: unchanged"; 42/43 not in section A).