diff --git a/internal/check-packet-a1-structure.mjs b/internal/check-packet-a1-structure.mjs index ac10aba84..7eff7eb28 100644 --- a/internal/check-packet-a1-structure.mjs +++ b/internal/check-packet-a1-structure.mjs @@ -101,7 +101,7 @@ const box = (html) => { if (b) ok(Math.abs(b.x + 34 * b.s - M) < 1 && b.y + 34 * b.s >= M - 1, `the map-only sheet's names start ${(b.x + 34 * b.s).toFixed(1)}px from the edge; every packet page keeps ${M}px`, `its names land on the same ${M}px margin as every other page (scale ${b.s})`) - // ★ A POSTER FILLS THE PAGE inside the white margin M (Driver 2026-09-29: page 1 is the map alone). + // ★ A POSTER FILLS THE PAGE inside the white margin M (2026-09-29: page 1 is the map alone). const p = box(R.liftMap(POSTER_SHEET)) ok(p && p.kind === 'poster' && p.x >= M - 0.5 && p.y >= M - 0.5 && p.x + p.w <= W - M + 0.5 && p.y + p.h <= H - M + 0.5 && (Math.abs(p.w - (W - 2 * M)) < 1 || Math.abs(p.h - (H - 2 * M)) < 1), diff --git a/internal/check-packet-variants.mjs b/internal/check-packet-variants.mjs index b29cfa0c6..8b9aed630 100644 --- a/internal/check-packet-variants.mjs +++ b/internal/check-packet-variants.mjs @@ -85,7 +85,7 @@ ok(count(light, /sheet-christian/g) === 0, 'lightweight still carries the %-evan ok(count(light, /funnel-title/g) === count(full, /funnel-title/g), 'lightweight lost the funnel (the narrowing triangle)') // …and the SETS page, which is back matter a reader sits with rather than carries — the same // reason the life calendar and the %-evangelical grid are dropped. -// ★ ONE SETS PAGE CARRYING BOTH CHARTS (Driver 2026-09-29: two square panels side by side), asserted +// ★ ONE SETS PAGE CARRYING BOTH CHARTS (2026-09-29: two square panels side by side), asserted // by each chart's own class, so losing EITHER chart fails by name rather than inside a total. ok(count(full, /
ok(((all[i] || {}).name || '') === w, `ring ${i + 1} should read ${JSON.stringify(w)}, got ${JSON.stringify(all[i])}`)) - // ★ EVERY RING IS EXPLAINED (Driver 2026-09-29: "a legend to explain each ring"), and each row + // ★ EVERY RING IS EXPLAINED (2026-09-29: a legend explains each ring), and each row // states its own count. Two-sided: a populated ring shows its number, an empty ring shows a dash. const sparse = only([1, 1, 3, 7, 7, 7]) ok(sparse.length === 10, `every ring should be explained even when empty, got ${sparse.length} rows`) diff --git a/internal/desktop-build.mjs b/internal/desktop-build.mjs index 06062b573..8bec40be5 100644 --- a/internal/desktop-build.mjs +++ b/internal/desktop-build.mjs @@ -26,7 +26,7 @@ const TAURI_DIR = join(ROOT, 'deployment', 'src-tauri') const plugin = process.argv[2] const die = (m) => { console.error('desktop:build: ' + m); process.exit(1) } // ★ THE BUILD YIELDS THE CPU TO LIVE TRANSCRIPTION. Rudder's speech model runs on the CPU -// (backend/rudder-engine starts it with --device cpu), and the Driver measured dictation falling +// (backend/rudder-engine starts it with --device cpu), and dictation was measured falling // behind WHILE THIS BUILD RAN. A Rust build saturates every core, so at equal priority it starves // the one process whose latency a person can feel. // diff --git a/library/packet/packet-render.js b/library/packet/packet-render.js index d7fd89841..48105ec81 100644 --- a/library/packet/packet-render.js +++ b/library/packet/packet-render.js @@ -229,7 +229,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de column through the viewBox, which is what keeps gospel's boundary gap intact: the gap lives in the LAYOUT's coordinates and scaling the viewBox cannot compress it, whereas nudging r or spread would. */ - /* ★ ONE PAGE, TWO SQUARE PANELS SIDE BY SIDE (Driver 2026-09-29, after the Module 1 "list of 100" + /* ★ ONE PAGE, TWO SQUARE PANELS SIDE BY SIDE (2026-09-29, after the Module 1 "list of 100" sheet, which closes on BOUNDED SET | CENTERED SET as two squares). Each panel is a framed square with its heading on top; the ring legend runs under both at full width. */ .set-row{display:flex;gap:40px;justify-content:center;align-items:stretch;margin-top:30px} @@ -515,7 +515,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de } function mapPage(zone, groups, mapSvg, funnel = null) { - // ★ A POSTER IS PAGE 1 BY ITSELF (Driver 2026-09-29): the map fills the page inside a white margin, + // ★ A POSTER IS PAGE 1 BY ITSELF (2026-09-29): the map fills the page inside a white margin, // under its own title only. Drawing the packet's title over it as well printed TWO headers and // shrank the map to fit beneath them. The set it belongs to is the triangle page's job. if (mapSvg && /data-map-kind="poster"/.test(mapSvg)) { @@ -856,15 +856,15 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de // ★ 5,200 IS NOT ROUNDED OR CHOSEN FOR LAYOUT: 100 years x 52 weeks, a 100-year life in weeks. // Everything else here is derived from it, so the two pages cannot // drift apart into two grids that merely look alike. - // ★ LAID OUT LIKE THE PRINTED LIFE CALENDAR (the Module 1 "Life Calendar in Weeks" sheet, which the - // Driver asked this page to imitate): square boxes, week numbers across the top, the year down the + // ★ LAID OUT LIKE THE PRINTED LIFE CALENDAR (the Module 1 "Life Calendar in Weeks" sheet, which this + // page is asked to imitate): square boxes, week numbers across the top, the year down the // side, a thin rule between decades, the whole grid framed and centred on the page. The earlier grid // stretched 52 columns across the full width, so its boxes were flattened rectangles with no axes. // - // ★ SHADED FROM THE TOP, IN READING ORDER (Driver 2026-09-29: "show the highlighted dots started from - // the top"). This grid used to SCATTER the shaded boxes, a choice made from a contact sheet in which a - // contiguous run looked like a bar; the Driver has now asked for the opposite, and the grid is the - // Driver's picture. Filling from the top also makes the two pages read the same way: Jesus' 33 years + // ★ SHADED FROM THE TOP, IN READING ORDER (2026-09-29: the highlighted boxes start from + // the top). This grid used to SCATTER the shaded boxes, a choice made from a contact sheet in which a + // contiguous run looked like a bar; the opposite has now been asked for, and the grid is the + // product's picture. Filling from the top also makes the two pages read the same way: Jesus' 33 years // are the first rows of a life, and the evangelical share is the first boxes of the same life. function lifeGrid({ shaded = 0, shadeClass = 'lc-on' } = {}) { const YEARS = 100, WEEKS = 52, TOTAL = YEARS * WEEKS; @@ -891,8 +891,8 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de // No age is supplied today: the packet is printed for a reader we do not know, so shading their life // would be a guess presented as a fact. The empty grid is the honest version and still lands the // point — 5,200 boxes is a whole life on one page. - // ★ THE FIRST 33 YEARS ARE JESUS' LIFE (Driver 2026-09-29: "the boxes highlighted need to show 33 - // years representing Jesus' life"). Still no reader's age: shading the reader's own weeks would be a + // ★ THE FIRST 33 YEARS ARE JESUS' LIFE (2026-09-29: the highlighted boxes show the 33 + // years of Jesus' life). Still no reader's age: shading the reader's own weeks would be a // guess presented as a fact, while 33 x 52 is the same for every reader. const JESUS_YEARS = 33; function lifePage(zone) { @@ -1049,7 +1049,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de } // ── THE LIGHTWEIGHT LIST: a worksheet, not a profile book ─────────────────── - // Driver 2026-09-29: the lightweight packet is less about fitting information in and more a + // 2026-09-29: the lightweight packet is less about fitting information in and more a // printable, instructive sheet — every people group, less text, a kind rather than commanding // voice, and type and spacing sized for paper. Modelled on the Module 1 list-of-100 worksheet: a // short note on the first page, one column header per page, numbered rows with room to tick. No @@ -1281,7 +1281,7 @@ export function createPacketRenderer({ strings, lang = 'en', fontData = null, de if (rows) legend = `
${esc(t('sets_rings_head'))}
${rows}
`; } - // ★ ONE PAGE (Driver 2026-09-29), superseding the one-chart-per-page split: the two figures are a + // ★ ONE PAGE (2026-09-29), superseding the one-chart-per-page split: the two figures are a // PAIR and read as one, square panels side by side in the middle of the page, the legend under both. // The page key stays 'sets', so the lightweight variant still drops it whole. return sheet(`