doxa-maps/plugin-designs/doxa-research-map/src
Doxa Maps 370446390f C1b: the resource palette moves to library/colors/, and the local colour globs go with it
Completes C1. Source only; studio rebuilds (rule 5B). Cut on top of C1a because it
depends on that move. Rebuild scope: country-posters, doxa-research-map,
research-dashboard, dashboard-plus-grid, gospel-resources.

resource.js existed as TWO identical plugin-local copies with no library original,
while library composables resolved it through the registry — so the library depended
on a plugin registering a module the library itself documented. Now it lives in
library/colors/ like the other eight, both copies are gone, and src/colors/ holds no
.js in either plugin. The local `registerStrategies(import.meta.glob('./src/colors/*.js'))`
in both index.js files is therefore DELETED: it matched nothing after the move, and a
glob that matches nothing reads as a deliberate override. Their now-unused
registerStrategies imports went with them. That also completes the shepherd's original
C1 instruction, which C1a had to defer for exactly this reason.

★ MY OWN PREDICTION HERE WAS WRONG, and the measurement is the only reason this is
clean. I predicted check:one-palette would FAIL after the move, reasoning that the
dashboards carry 6 of resource's 8 hexes (because 6 are SHARED with affinity-block and
language-family, which they legitimately ship) while the 2 unique ones — #20c997
jesusFilm and #2c3e50 noResources — are absent, and the gate fails a PARTIAL palette.
The gate PASSES: 9 strategies, 18 pairs. Once the module is in library/colors/,
_registry.js bundles it into every consumer, so all 8 hexes are present BY CONSTRUCTION.
I had reasoned about the pre-move bundle and assumed the rebuild would not change it.

That also corrects the diagnosis I gave earlier. simpleresearch was right that there
was no disagreement, but not that the 6 were coincidental substrings in minified
output: they are real hexes, genuinely present, shared across three strategies. The
gate cannot attribute a hex to a strategy — which is a real limitation worth knowing,
just not one that bites here.

Stale comments corrected rather than left to rot: five references across
useLegendData, researchLegendOptions, useWagfRegionsLegendData and my own
wagf-region.js header all claimed these palettes live in a plugin folder. One
parenthetical keeps the old path deliberately, as history.

GATES: check:one-palette PASS 9/18 (baselined 6/12 before C1a). check:library-index
PASS after regenerating the derived menu. check:no-free-identifiers PASS. All six
affected bundles build; their artifacts reverted.
2026-09-26 08:51:39 +00:00
..
api consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
colors C1b: the resource palette moves to library/colors/, and the local colour globs go with it 2026-09-26 08:51:39 +00:00
components consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
composables consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
utils consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00
README.md consolidate docs into documentation/ and deployment shells into deployment/ 2026-09-21 23:23:23 +00:00

src/ — doxa-research-map's sandbox

Everything the research map needs that isn't already in the shared library/ gets built here. Nothing here leaks to another map — build freely.

src/
├── api/          which API/CSV/endpoint this map reads
├── colors/       this map's colors: values (colors.json) + strategy .js files
├── components/   this map's own .vue pieces (not reusable)
├── composables/  this map's own logic hooks (useThing.js)
└── utils/        this map's own pure helpers

What's here today: colors/ holds the three research-only strategies — affinity-block.js, doxa-region.js, resource.js — registered by this bundle's index.js. Shared strategies (adoption, engagement, language-family, religion) stay in library/colors/ because other maps use them. api/, components/, composables/, utils/ are empty scaffolds — fill them as the map grows.

Two import styles, two meanings:

import { useMapInstance } from '@map/composables/useMapInstance.js'  // reuse the shared library
import { fmt }            from './src/utils/format.js'               // your own sandbox (relative)

Reusable + parameterized → library/ (an expert move); specific to this map → stays here. Local by default. See also: ../../template-bundle/README.md · ../../../documentation/reference.md.