doxa-maps/library/components/legends
Doxa Maps fe9fe34530 Set an alarm on the zone/region id collision, which data currently hides
gospel found a latent ambiguity in the emit contract while wiring, and checked
it instead of building past it. selectedId emits one bare string with no kind,
and region ids and zone ids share a namespace. Re-measured here rather than
taken on report: 33 zone ids, 7 region ids, and the intersection is exactly
europe, whose region is itself. So the string "europe" cannot tell a consumer
whether the Europe region row was clicked, meaning every European zone, or the
Europe zone leaf, meaning that one.

It is not live today, and only for a reason that is a coincidence rather than a
design: region europe contains exactly one zone, so both readings give the same
set. It goes live the day a second European zone is filed, and then it fails the
quiet way this whole file exists to catch — a smaller result, no error, no empty
state.

So this is an alarm, not a fix. The consumer builds the tree, so only the
consumer knows which rows are regions, and gospel is namespacing theirs. Two
arms: the colliding set is pinned and says re-derive if it changes, and each
colliding id's region must still contain exactly one zone. The second fails with
the instruction rather than the symptom, naming the zones and telling whoever
hits it to namespace their region rows.

Both falsified before trusting them: filing a second European zone fires the
ambiguity arm with both zones named, and adding a second colliding id fires the
drift arm with both ids listed. Data restored, clean diff.

The same note is on selectedId, because the next consumer to build a tree from
this zone data inherits the collision, and the doc as written invited it.
2026-09-28 15:01:19 +00:00
..
ApproxPinNote.vue C4 wave 2: five library components share the guard, and keep their own English 2026-09-26 22:06:57 +00:00
LegendDesktop.vue legends: physical left/right -> logical, where the rule should mirror 2026-09-28 09:07:29 +00:00
LegendMobile.vue The prayer map's legends see the pins it draws 2026-09-27 02:17:35 +00:00
LegendProgressBar.vue Legend progress bar draws no empty segments, so its left end is rounded again 2026-09-27 23:14:15 +00:00
LegendRows.vue The legend mirrors in Arabic: logical insets instead of left/right 2026-09-26 22:06:57 +00:00
LegendTools.vue The legend mirrors in Arabic: logical insets instead of left/right 2026-09-26 22:06:57 +00:00
listSelection.js Set an alarm on the zone/region id collision, which data currently hides 2026-09-28 15:01:19 +00:00
ListSelectorLegend.vue Vertical legend emits a zone id, and cannot drop a zone 2026-09-28 13:55:52 +00:00
SemanticTreeLegend.vue legends: physical left/right -> logical, where the rule should mirror 2026-09-28 09:07:29 +00:00