Warn the caller that groupings.label is a definition, not a name

Measured on the published file: those labels run 7 to 206 characters and the
long ones are the zone's member list, not its name. Tibet's is a ten-part list
of provinces. Only two of the fourteen carry no member list at all.

Used as a heading on a printed sheet that sets a 206-character title, and paper
has no truncation-with-tooltip to rescue it. The name a reader wants is the
humanised slug, uniform by construction and about 34 characters at worst, with
the label carried separately as the definition it actually is.

This component asserts nothing about the words in labels.rings, so the whole
hazard lives at the call site — which is why the warning belongs in the file the
caller reads rather than in a message they will not see. gospel found it.
This commit is contained in:
Doxa Maps 2026-09-28 16:13:18 +00:00
parent 288bbf278a
commit 663b73781d

View file

@ -28,6 +28,16 @@
*
* ★ AND NO SEED: position is hashed from the group's own id, so two printings of one packet are
* identical and a reader comparing sheets sees real movement rather than reshuffling.
*
* ★ A NOTE FOR WHOEVER BUILDS `labels.rings` — DO NOT PASS groupings.label AS A NAME. Measured on
* the published file: those labels run 7 to 206 characters, and the long ones are the zone's MEMBER
* LIST, not its name. Tibet's reads "Tibet Autonomous Region + Sichuan Province + Xinjiang Uyghur
* Autonomous Region + Gansu Province + ..." — only 2 of the 14 carry no "+" list at all (Gujarāt,
* and "Scattered / Diaspora"). Used as a heading on a printed sheet that sets a 206-character title.
* The field is a DEFINITION and is genuinely useful where there is room to say what a zone contains;
* for a name, humanise the slug, which is uniform by construction and tops out around 34 characters.
* gospel found this and carries the two separately; this component asserts nothing about the words,
* so the whole hazard lives at the call site, which is exactly why it is written down here.
*/
import { computed } from 'vue'
import { layoutCenteredSet, ringTally, inwardArrow, ringRadii, RING_MIN, RING_MAX } from './centeredSet.js'