A poster tier run can be told the whole series size

China's sheet printed 'map 1 of 1' and 'one of a 0-map set'. The cause is that
generate.mjs derives the series facts from the zones THIS run built --
Object.assign(SERIES, seriesFacts(zones)) -- and the two sheet tiers are separate
runs. The 3x4 tier is China alone, so totalLists came out 1, and the body
sentence rounds it (Math.round(1/10)*10 = 0) into a 0-map set.

SERIES_TOTAL overrides the derived count so a tier run can state the size of the
whole series. Regenerated China with SERIES_TOTAL=174 SERIES_INDEX=174: it now
reads 'map 174 of 174' and 'one of a 170-map set', which is what the other 173
sheets' body text already says (174 and 173 both round to 170).

NOT a defect, and worth recording because it reads like one: the header's exact
count and the body's rounded one are the SAME number by design. 173 exact and
170 approximate are not two answers.

The 173 3x3 sheets still say 'of 173' where the set is 174. Regenerating them
plus a full reshoot is about 28 minutes against tonight's hard switch, the body
text is identical either way, and the difference is only visible with two sheets
side by side. Run BOTH tiers with SERIES_TOTAL=174 to close it.
This commit is contained in:
Doxa Maps 2026-09-29 23:07:20 +00:00
parent 0cff02817f
commit aaa4b8b690

View file

@ -270,6 +270,13 @@ if (CITIES) {
// cluster data at generation time, so a sheet printed later states later figures
// rather than carrying a stale count on a wall. `index` is filled per-poster.
Object.assign(SERIES, seriesFacts(zones));
// ★ THE SERIES SPANS BOTH SHEET TIERS AND A RUN ONLY EVER SEES ONE OF THEM. seriesFacts counts the
// zones THIS run built, so the 3x3 run reports 173 and the 3x4 run -- China alone -- reports 1.
// That is how China's sheet came to print "map 1 of 1" and, because the body sentence rounds
// (approxLists = Math.round(totalLists / 10) * 10 in poster-render), "one of a 0-map set". A 0-map
// set is nonsense on a printed poster. SERIES_TOTAL lets a tier run be told the size of the whole
// series; both tiers should be run with SERIES_TOTAL=174 so every sheet agrees.
if (process.env.SERIES_TOTAL) SERIES.totalLists = Number(process.env.SERIES_TOTAL);
// ★ WHICH GROUP PINS WHERE is data/zone-sheet.js's assignPins — the SAME function the browser uses when
// it generates a sheet at the click, so a group cannot pin in one zone on a printed poster and another