From 0bcb33decb3ba7a762b8690d279970af3a707a64 Mon Sep 17 00:00:00 2001 From: Doxa Maps Date: Mon, 28 Sep 2026 16:15:24 +0000 Subject: [PATCH] Record the agreed ring vocabulary, without making it a default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ten ring names settled between gospel and exp, derived from exp's ringFor() rather than hand-numbered so the numbering cannot drift from the code that produces it. The screen legend already renders these words, so a printed sheet using them cannot disagree with the screen. Written as vocabulary in the header a caller reads, and deliberately NOT as a prop default. One cell is still open on the Driver's row 89 — "people" versus the brief's "culture" in column 1 — and if he keeps his, exactly three cells change, 1, 4 and 7, and nothing else: not the numbering, not the columns, not the colours. A default would bake a provisional word into every consumer that forgot to pass one, and would make this component the thing that decided a Driver question. Same reason ShareCalendar refuses to name its own metric. --- .../components/charts/CenteredSetTarget.vue | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/library/components/charts/CenteredSetTarget.vue b/library/components/charts/CenteredSetTarget.vue index 83490c6f5..18052ca56 100644 --- a/library/components/charts/CenteredSetTarget.vue +++ b/library/components/charts/CenteredSetTarget.vue @@ -38,6 +38,24 @@ * 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. + * + * ★ THE AGREED RING VOCABULARY, for a caller building `labels.rings`. Settled between gospel and + * exp and derived from exp's ringFor() rather than hand-numbered, so the numbering cannot drift + * from the code that produces it. The screen legend already renders these words, so a printed sheet + * using them cannot disagree with the screen: + * + * 1 Same dialect, same people 6 Same language, different culture + * 2 Same dialect, near culture 7 Same family, same people + * 3 Same dialect, different culture 8 Same family, near culture + * 4 Same language, same people 9 Same family, different culture + * 5 Same language, near culture 10 Nearby only + * + * ⚠ ONE CELL IS PROVISIONAL: "people" vs the brief's "culture" in column 1 is open on the Driver's + * row 89. If he keeps "culture", exactly THREE cells change — 1, 4 and 7 — and nothing else: not + * the numbering, not the columns, not the colours. That is why this map is written here as + * VOCABULARY and is NOT a default: a default would bake a provisional word into every consumer that + * forgot to pass one, and the component would become the thing that decided a Driver question. The + * same reason ShareCalendar refuses to name its own metric. */ import { computed } from 'vue' import { layoutCenteredSet, ringTally, inwardArrow, ringRadii, RING_MIN, RING_MAX } from './centeredSet.js'