doxa-maps/plugin-designs/doxa-research-map
Doxa Maps fa14fedfdd The poster asked for legend rows from a key the composable never had
useLegendData returns { items, columns, title, activeFilter, setFilter,
totalCount, totalPopulation, progress, fmtPop, fmtCount }. There is no `rows`.
research-map read legend.rows in three places, and because JavaScript answers
undefined rather than complaining, each one failed in a different costume:

  - provide('legendRows', legend.rows) provided undefined, and nothing in the repo
    injects that key -- the comment above it described a contract no component
    implements
  - openPoster's fallback, legend?.rows?.value || [], could only ever be [], so on
    any tab where the flat legend is empty the poster had no legend rows
  - the packet's page-1 slot was rows: legend?.rows?.value || [] with NO second
    source, so that poster's legend was empty unconditionally

and useMapPoster skips the legend slot entirely when the row list is empty. So the
missing legend on the exported poster had two independent causes: the renderer
painting it over the map, fixed separately, and this -- an empty array arriving
through a fallback that could never be anything else.

Both poster paths now share one builder, so they cannot drift apart again, and it
flattens children because a prayer legend is a parent plus two child tiers and
printing only the parents describes bands the map does not draw.

Two further calls went the same way: legend.refresh?.() and
legend.build?.(normalizedPeopleGroups), against methods the composable has never
defined. The optional call swallowed both, so two lines that read like steps did
nothing. `items` is a computed and re-derives on its own, so they are gone rather
than repointed.

exp-shepherd found the same misspelling in countries-map, where it threw instead
(NE-17). The check therefore guards the class rather than these lines: it reads
the returned key set from the composable and reports any consumer reading outside
it. It is NOT in gates:pre yet, because it still reports countries-map, which
belongs to another owner.

Writing it turned up two traps worth keeping. Stripping block comments with one
global regex DELETED REAL CODE -- a slash-star inside an ordinary string opens a
comment nobody wrote and the replace runs to the next real terminator -- and the
check confidently reported "no consumers at all" while both sat in the files. And
matching property reads by name flagged every t('legend.colLabel.religion'): an
i18n key spelled like a property access is not a read.
2026-09-29 00:06:52 +00:00
..
scripts A browser gate refuses to launch outside the browser slot; check:browser-gates-guarded keeps it that way 2026-09-28 08:20:21 +00:00
src C1b: the resource palette moves to library/colors/, and the local colour globs go with it 2026-09-26 08:51:39 +00:00
index.html Complete app-profiles->plugin-designs sweep across comments/docs; build green; layouts kept at root (load-bearing) 2026-09-17 18:18:19 +00:00
index.js Eleven plugin entries import the element helper they call 2026-09-28 17:40:35 +00:00
research-map.instances.json Map engine is one prop: MapLibre drops the search bar, legend rises 2026-09-24 00:43:44 +00:00
research-map.meta.json consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
research-map.vue The poster asked for legend rows from a key the composable never had 2026-09-29 00:06:52 +00:00