Commit graph

166 commits

Author SHA1 Message Date
Doxa Maps
626b1df0f3 A print's progress moves as the work does: the poster reports each real step (people groups, map outlines, engine, then every drawing stage), yields a frame between them so the page repaints, and shows step n of N with the elapsed seconds instead of fixed percentages. The sheet's loads start together, and the leader-crossing count skips disjoint segment pairs and is no longer counted twice. Every sheet stays byte-identical (286/286). 2026-10-03 14:22:10 +00:00
Doxa Maps
c9a7ef9368 Country posters print fast on a phone: the sea-name scan and the label placement skip any land ring whose bbox cannot hold the point, and the scan tests the frame first. Exact: all 286 sheets are byte-identical; generation is 3.4-4.4x faster (China's 3x4 sheet 10.3 s -> 3.1 s). 2026-10-03 13:48:34 +00:00
Doxa Maps
e209096fd7 Merge remote-tracking branch 'origin/development' into studio/print-warn 2026-10-03 11:22:36 +00:00
Doxa Maps
96a0cd6ca8 Rebuild the sheet generator's carriers for the UPG100 page-1 names and header sizes: poster-render re-pinned, the tree and SRI regenerated 2026-10-03 11:16:41 +00:00
Doxa Maps
3e226bd807 Merge the UPG100 page-1 names change (larger people-group names, smaller header-column text) 2026-10-03 11:09:38 +00:00
Doxa Maps
1855c8cad4 UPG100 poster page 1: larger people-group names and smaller header-column text (header columns 22 to 18px; names capped at 19px instead of 15, with tighter rows on dense zones) 2026-10-03 11:03:34 +00:00
Doxa Maps
149e8d144b Merge the pilot (development 1c5711e33) into the UPG100 header's even columns 2026-10-03 11:00:11 +00:00
Doxa Maps
1fca636297 Rebuild the sheet generator's carriers for the UPG100 header's even columns (the three end at about the same height; scripture references stay whole): poster-render re-pinned, the tree and SRI regenerated 2026-10-03 10:51:32 +00:00
Doxa Maps
926815240d UPG100 packet, 12 Prayer Points: the page's smallest size tier is a little tighter so the new wording fits one sheet
At the floor tier the gap between points is 3px (was 5px) and the point text 18px (was 18.5px). All 11
languages fit one sheet; several now take a larger tier. The packet-strings pin is renewed for the new wording.
2026-10-03 10:44:36 +00:00
Doxa Maps
4c3a118d2e UPG100 poster header: scripture references stay whole; the classic header drops bold markers
- A scripture reference never breaks between its book and its
  chapter:verse in the header's text columns ("Mark 6:40"); before, two
  zones printed "(Mark" at a line's end and "6:40)." on the next.
- (With the parent commit: the three header columns end at about the same
  height. The facts column widens when it runs long, the side columns stay
  equal and mirrored; across the 28 zones the height spread drops from
  99 to 72 px, mean 54 to 34.)
2026-10-03 08:59:50 +00:00
Doxa Maps
5d3b2cf95d Pinned files: a page that is not secure is told so in words
A browser gives crypto.subtle only to a secure page (https, or http://localhost). Opened any other way, for example a dev server reached over plain http by its LAN address from a phone, every pinned file was refused with a bare "reading 'digest'": the packet printed in English and page 1 fell back to its stored sheet. sha384() now refuses with a sentence that names the cause. check:pinned-fetch-fresh arm D2 removes crypto.subtle and requires that sentence; its self-test plants the unguarded call.
2026-10-03 08:58:09 +00:00
Doxa Maps
4ec5905492 UPG100 poster header: the three columns end at about the same height (WIP: verifying) 2026-10-03 08:46:36 +00:00
Doxa Maps
cee32f2732 Rebuild the sheet generator and packet renderer carriers for the set-caption count, the list's page-1 flow, the poster's header words and mirrored columns, the UPG100 label and the header Share menu: poster-render and packet-strings re-pinned, the tree and SRI regenerated 2026-10-03 08:20:42 +00:00
Doxa Maps
f69a10c8e0 UPG100 poster: new header words, mirrored columns, UPG100 spelled as one term
- The Jesus column and the "What is a UPG100 List?" column take their new
  wording (series.json); "informed intercession." prints bold, a **...**
  run in the head-columns band.
- The two prose columns take the full measure, so each sits the same
  distance from its rule and they mirror each other round the centred
  facts column.
- The Poster Design label of the UPG100 zone posters spells UPG100 and
  matches Poster Design's own card title, in all 11 languages.
2026-10-03 05:42:42 +00:00
Doxa Maps
8bd66a3131 Merge the pilot (development 789d90eb2) into the set-caption count 2026-10-03 05:40:18 +00:00
Doxa Maps
446b0bfc8f UPG100 packet: Full detail page 1 rows follow the explanation
Page 1 of the Full detail list reserved a fixed block for its
explanation and placed the rows below the reserve, so every language
shorter than the tallest left a white gap above the head row (0.36 to
1.30 in). The explanation (at most the old reserve) and the rows now
share one column: the head row sits right under the explanation and
the spare room falls to the page's foot. The page still holds the same
number of rows; the rows stay absolutely placed, only their origin
moves.
2026-10-03 05:15:12 +00:00
Doxa Maps
8b30be2481 Merge commit '1d8f5f1cc' into poster-design-plugin/experimental 2026-10-03 05:10:30 +00:00
Doxa Maps
0a4c9cc600 Merge the pilot (development 1d8f5f1cc) into the set-caption count 2026-10-03 05:09:07 +00:00
Doxa Maps
1e53b531b0 Poster Design draws UPG100's zone posters, from a library copy of UPG100's zone code
UPG100's zone-poster code lived only inside its plugin, so Poster Design
(which draws from the library) could list UPG100's posters but never show
them. It is now COPIED, unchanged, into library/packet/upg100Zones/
(zone-sheet-print, zone-sheet, legend-tree, selector-evaluator,
zone-geometry, zones-for-list, clusters.json; only the library import paths
are shorter). UPG100's own files are untouched.

Poster Design adds a UPG100 zone posters family drawn from that copy with a
real zone (middle-east-core) and all the records, as UPG100's own wall
does: the letter, 3 x 3 and 3 x 4 zone posters under UPG100's own design
names (so the drawn card replaces the no-preview plugin card), and the
prayer packet's page 1 (the full letter zone poster). Keys in 11 locales.

check:upg100-zone-copy (in gates:pre) keeps the copy equal to UPG100's
originals beyond the import paths; once UPG100 switches to the library copy
and deletes its originals it becomes a one-path gate. Its self-test proves
a one-character edit, a changed clusters.json, a missing file, a half
switch and a re-definition each fail. check:poster-design-catalogue allows
a template to carry a plugin's design name only when it declares that
plugin (poisoned). Source only: poster-design is rebuilt when the heavy
slot reopens.
2026-10-03 04:26:50 +00:00
Doxa Maps
042d2ec10f UPG100 packet: the set captions count every group of the list
A group with no record in a set figure's data (no near-neighbour data,
for example) was in none of that figure's numbers, so the captions
added up to less than the list: Laos printed 94 of its 95 groups. Each
caption now names the groups without data ("1 without data", in all 11
languages), so its parts add up to the list. check:packet-variants
asserts the sum both ways.
2026-10-03 00:55:43 +00:00
Doxa Maps
81dc4a9a5d Merge the pilot (development 1fa35309a) into the no-India-tab fix 2026-10-03 00:54:30 +00:00
Doxa Maps
1fa35309af Rebuild the sheet generator and packet renderer carriers for the full-width life charts, the shorter page-1 strategy and the self-fitting points page: poster-render re-pinned, the tree and SRI regenerated 2026-10-03 00:25:39 +00:00
Doxa Maps
e3d56d2f15 UPG100 packet: full-width life charts, a shorter page-1 strategy, self-fitting points
- The life calendar and the reached chart share one grid at the page's
  full printable width: each week a 22x11 box, bold year numbers every
  5 years (larger every 10), week numbers 1/13/26/39/52, a clear rule
  every 10 years and light rules at the quarters. The reached chart has
  no week or year numbers; each 10-row block is labelled with its share
  of the list's people, 10% to 100%.
- Page 1: the UPG100 series sets its own one-paragraph Jesus column
  (series.json strategyBody) and prints the explainer's first paragraph
  only (sideBoxMore), so the three columns balance and the map grows.
  The long text is one constant shared by both header layouts; the
  Country and India-state posters print it unchanged.
- The points page takes, per language, the largest size tier that fits
  one sheet, up to the earlier two-sheet sizes. The tier comes from a
  character-count estimate; the render gate fails if the real page is
  ever taller than that estimate.
2026-10-03 00:20:58 +00:00
Doxa Maps
daa757d972 No India tab on the pilot by dev mode alone: the India preview (its tab and its whole-country poster) needs an explicit opt-in too, ?preview=india or localStorage 'dxm-preview', and every built bundle still compiles the whole read away. The gates hold the opt-in and that dev mode alone stays withheld. 2026-10-03 00:20:35 +00:00
Doxa Maps
649038a917 Rebuild the sheet generator and packet renderer carriers for the packet points on one sheet and the reordered page-1 columns: poster-render re-pinned, the tree and SRI regenerated 2026-10-02 23:41:25 +00:00
Doxa Maps
f22dc7db00 UPG100 packet: points on one sheet, page-1 columns reordered
- The twelve prayer points and the themes fit one sheet again, as large
  as the page allows (points 18.5px, themes 19px); measured in all 11
  languages, the tightest keeps 75px under the last point.
- Page 1 header columns read: Jesus' Strategy to Feed the 5000 | the
  facts | What is a UPG100 List? The facts' labels are bold.
- The header columns are measured for a fallback font too, so the right
  column no longer runs to the border when Lato is absent.
- check:packet-render expects one points sheet.
2026-10-02 23:38:26 +00:00
Doxa Maps
98764ecae4 Rebuild the sheet generator and packet renderer carriers for the packet v2 final pages: poster-render re-pinned, the tree and SRI regenerated 2026-10-02 22:53:24 +00:00
Doxa Maps
4d4fa4f6d0 Packet print at reading size: the prayer points flow over two sheets at ~9pt, and Full detail's tally heads take two lines over the worksheet's 160px columns
Points: text 22.5px (~9.2pt on letter), headings 25px, the Mark 5 passage 20px, the themes 21px; the themes and
points 1–6 on the first sheet, 7–12 and the credit on the second, each titled with its range. Measured in all 11
languages: the fullest first sheet keeps ~330px. Full detail: tally columns 160px (the worksheet's), heads 15px
in two lines in every language, the first-page block 720px (the tallest, ru, uses 692), 11 rows on the first page.
Gates: the render gate measures BOTH points sheets (pointsOver), counts the points by .pt-h across the document,
expects 2 points sheets; the structure gate reads consecutive points sheets as one entry; profile-table probes the
15px tier between the two budgets wherever they fall.
2026-10-02 22:50:16 +00:00
Doxa Maps
2e0422f6fa Packet page 1 reads on paper: the full UPG-100 sheet's header band and footer at ~8pt with darker ink, the verse on two lines
Only the full layout (HEAD_COLUMNS, the packet's page 1, printed on letter at 92%): the column text 14 → 22px
(~8.3pt), the fact keys and the verse reference 19px (~7pt), the column headings 23px, the footer's three blocks
13.5 → 22px with their lines re-measured; the Matthew 9:36 verse is set on two balanced lines at 19.5px. The band's
measure fills its column (0.96), a country list longer than twelve prints ten and '+N' (the Deaf bloc names 66),
and the full footer band is 400px. All 28 zones render; each map is 858px (it was 1,206). The series-wide rules
are unchanged, so the SPARSE posters are byte-identical.
2026-10-02 22:49:49 +00:00
Doxa Maps
360e361614 Rebuild the packet renderer and text carriers for the packet v2 Full detail pages: packet-strings re-pinned, the tree and SRI regenerated 2026-10-02 22:29:27 +00:00
Doxa Maps
63cef78455 Packet print: the prayer themes at 21px (~8.6pt on letter), the credit and privacy lines 0.28in above the sheet's edge, and a Hindi font stack beyond the vendored face
The fine print (the Metacamp credit on the wheel and points pages, the privacy line) sat 22px (0.14in) from the
edge on letter, inside the band printers cannot ink; it now sits at 50px. The points page gives back the room:
point text 18.5 → 18px, 6 → 5px between points, the Mark 5 passage 17 → 16px, the body 14px higher. Measured in
all 11 languages: the tightest (fr, hi) keep 46px under the last point (check:packet-render's pointsOver gates it).
Hindi (and Marathi, Nepali) name Noto Sans Devanagari, Mangal, Nirmala UI and Kohinoor Devanagari after the
vendored Noto Serif Devanagari, so a print without the inlined face still lands on a Devanagari font.
2026-10-02 22:24:43 +00:00
Doxa Maps
26f9177083 Merge the pilot (development 1ca13f60a, packet v2 landing 1) into the Full detail branch 2026-10-02 22:21:57 +00:00
Doxa Maps
bd85830f1c check:packet-render measures the prayer-points page against its sheet, and counts the points by their headings
The points page fits ONE sheet only because its sizes are tuned to the longest language (studio's ask): pointsOver
fails a page whose content outgrows its box (two-sided: 26px text fails; all 11 languages PASS at 18.5px).
Each point's heading carries class pt-h, and the gate counts those: counting every line that starts 'N. ' read
German's '1. Petrus 5:6–11' (its name for 1 Peter, point 11's reference) as a thirteenth point.
2026-10-02 22:13:32 +00:00
Doxa Maps
56278cabfe Packet print readability (rega's read of landing 1): Full detail's tally heads at 15px over wider cells, the prayer themes at 19px
Full detail: tally columns 96 → 116px, the once-per-page question heads 12 → 15px in a 62px head row (three short
lines), so they read on paper; the first page holds 11 rows. Points page: the themes and scenes 15 → 19px (~7.7pt
on letter), the twelve points 19 → 18.5px to make room. Measured in all 11 languages: every first list page,
Full detail's reserved block (612 of 640px) and the points page (the tightest, fr, keeps 43px) still fit.
2026-10-02 22:08:08 +00:00
Doxa Maps
0a407907d5 Full detail pages: the centered set reads upward to the cross with a legend that says what a ring is; the life in weeks and the reached grid are one light SVG each, the same shape, x11
Centered set: the ring numbers ride the axis BELOW the cross, 9 at the bottom, so the eye climbs 9 → 1 to it;
the dots turn half a circle to keep the number lane clear. The ring legend opens with what a ring means in
plain words (sets_rings_lede x11) before listing the rings that hold someone.
Life in weeks + the reached grid: each grid is ONE inline SVG, two paths of square subpaths (empty, shaded),
hairlines between decades, small week and year numbers; measured on the two pages together: 10,553 page nodes
→ 86, load 474 → 214 ms, print 641 → 320 ms. The reached grid now has the life grid's exact shape (same
geometry, no week or year numbers, centred), shaded from the top by this list's share.
Gates: variants and render decode each grid's subpaths back to box indexes in reading order (5,200 distinct,
Jesus' 33 years = the first 1,716, the share from the top, the same viewBox for both); two-sided: shading
the LAST 33 years fails both. Gospel's three optional nits folded in (it un’altra, example_note x5, ru чёрточка).
2026-10-02 22:01:16 +00:00
Doxa Maps
1ca13f60ae Rebuild every bundle for the packet v2 (the renamed catalogues are shared areas): poster-render and packet-strings re-pinned, the tree and SRI regenerated 2026-10-02 21:56:58 +00:00
Doxa Maps
7e18948698 Prayer points page: the seven prayer themes and three prayer scenes head the twelve points, x11; point 12 is the John 17 blessing ladder
Themes (bless the nations, perfect unity, protection from evil, hearing God's voice, true identity in Christ,
deep relational health, the priesthood of believers) to weave into the wheel's five-minute blocks, then the
scenes treasure, mountain and sea, each with its two references from the Wall of People Groups' poster
(Haggai 2:7 · Matthew 13:44, Isaiah 2:2 · Matthew 21:21, Habakkuk 2:14 · Matthew 8:26). Point 12: the blessing,
the great, the greater and one of the greatest blessings of John 17, unity and protection, beyond all we ask
or think (John 17:3 · John 17:11–23 · Ephesians 3:20). Words drafted by the gospel lane x11; books Haggai,
Isaiah, Habakkuk, Ephesians x11. The page still fits one sheet in every language (19px text, 6px between points).
Gates: parity fails a point whose references are not English's (ten languages kept point 12's old ones) and
needs 7 themes + 3 scenes per language; variants checks the themes block and point 12 in both packets.
2026-10-02 21:51:18 +00:00
Doxa Maps
7de63201bf The UI names the series UPG100, one term, x11: the tab and wall titles ('UPG100 List Posters'), 'My UPG100 List', 'UPG100 Lists', the search hint, the export label and the help text
Values only: keys, ids, paths and file names stay (my-upg-100-list, tab.upg-100). Catalogues legend, mapStrategy,
messages, search, tabs and upgMap in all 11 languages (13 keys); the shells' tab label in doxa-maps-spa and
posterverse x11 (German 'Poster der UPG100-Liste'); the three meta labels, the dev page title and the nav
label. poster-render's last-resort literals (used only by a series with no name of its own) follow:
'UPG100 List', 'What is a UPG100 List?'.
2026-10-02 21:44:57 +00:00
Doxa Maps
3c1d38bdc8 Packet lists: the three questions head each page ONCE over one grid of tally cells, and both packets open their list with the explanation band, x11
Full detail: the question no longer repeats under every tally cell; the heads stand once per page over the
cells' own columns, and each cell is all tally room (96px columns, taller boxes). The worksheet's boxes
get a little more room too.
Both lists' first page: the intro and the blessing (Numbers 6:24-26, its credit, one line of references, the
wheel pointer) at full width, then ONE band like the poster's (ruled above and below, three columns between
short rules): the pace table (strongest to slower, weekly marked, each load computed from the list), what the
three columns ask, and an EXAMPLE row of tally cells under the table's own heads, exactly as wide as the
tally block and directly over it. One code path (explainTop, explainBand) for both packets.
Measured with a 100-group list in all 11 languages: the worksheet's first page holds 10 rows (the tallest,
ru, keeps 67px), Full detail's 12 under a 640px block (the tallest uses 612); the example sits over the real
cells to the pixel. Gates: packet-variants checks the band in BOTH packets (once, before the first row,
computed paces, one example row, heads once per page); packet-render reads the page sizes from the
renderer, fails a clipped first-page block, and measures text direction against the content box (a padded
cell is still pinned left). New strings x11: howto_bless_col, example_title, example_note.
2026-10-02 21:43:24 +00:00
Doxa Maps
af6c013bed Rebuild the sheet generator's pin carriers and series.json's importers on the merged pilot: poster-render re-pinned, the tree and SRI regenerated 2026-10-02 20:09:47 +00:00
Doxa Maps
4386b4e5bf Arabic scripture in the packet uses plain alef: U+0671 alef wasla becomes U+0627 in the stored ar strings (the blessing and Mark 5, 13 letters), display only, words and vowels unchanged
A device whose fonts lack U+0671 printed it as a box. Only those 13 code points change (0671: 13 -> 0, 0627:
+13); the bold verse is still a substring of the passage. check:packet-strings-parity fails on any U+0671 in
an ar value (it fails on the previous file). The Arabic scripture blocks also name Arabic faces before serif.
2026-10-02 20:04:41 +00:00
Doxa Maps
2d01e80002 Merge the pilot (development 3184b58c8, the packet's tally columns, description and pace table) into the poster header branch 2026-10-02 20:03:09 +00:00
Doxa Maps
3184b58c8c Rebuild the packet text's pin carriers on the merged pilot: packet-strings re-pinned, its importers rebuilt, the tree and SRI regenerated 2026-10-02 19:47:03 +00:00
Doxa Maps
75e581019e UPG-100 packet page 1 is the full UPG-100 poster: the letter sheet with its title, scripture banner, three-column header and footer, generated at the click
generateSheet gains `sparse` (default: every format but 'packet', so every existing caller is unchanged);
the UPG-100 zone sheet answers the packet's 'packet' request with the full letter poster, the same
1500x1941 page. check:poster-browser-equiv compares that sheet with Node's letter format without SPARSE.
2026-10-02 19:44:34 +00:00
Doxa Maps
381abd0623 Merge the pilot (development 9222c7f36) into the poster header branch 2026-10-02 19:42:57 +00:00
Doxa Maps
36eb0cc66a Merge the pilot (development 9222c7f36, the pinned-file cache fix) into the packet pace branch 2026-10-02 19:41:57 +00:00
Doxa Maps
9222c7f36b Merge origin/development into studio/pinned-fresh 2026-10-02 19:35:39 +00:00
Doxa Maps
550a69b8b9 check-circular-layout: use globalThis.gc, not the free identifier global
check:no-free-identifiers (gates:post) flagged `global` at the budget
arm's optional gc() call. globalThis is the portable form. Script only.
2026-10-02 19:30:09 +00:00
Doxa Maps
536989a3d5 UPG-100 posters: the scripture banner sits under the title, then one three-column band like the footer's (the facts | Jesus' strategy | What is a UPG-100 List?), the text a size larger; the series is named UPG-100 List
Opt-in per series (series.json poster.headColumns, on for upg100 only), so every other series' sheet is
unchanged. The band is laid out by ONE function that both measureHeader() and the renderer call, so the
predicted header height is the drawn one. Each block is centred in an equal column between short rules,
with the inset the first column lacked. The footer's three blocks are drawn at the 13.5px they are wrapped
and spaced for (they were drawn at 12px), so the text grows with no change to the lines or the band's
height, and they are centred for that size.
SOURCE ONLY: the served copies, the integrity pin and its bundles are regenerated at landing.
2026-10-02 19:14:35 +00:00
Doxa Maps
b391988a0f Print files: a transient failure to load the places table is retried on the next print
loadPlaces memoised an empty table on ANY failure, so one network error meant no
city dots for the rest of the session, while the other pinned loaders retry. A
table that is not served (or a reader offline) is now forgotten, so a later print
tries again; wrong bytes, refused after the fresh refetch, stay refused for the
session.
2026-10-02 19:07:51 +00:00