Diffing the full packet against its card found every PAGE present after tonight's supplier work -- and two of them in the wrong ORDER. The card puts the inverted triangle at page 2, in front of the life calendar, so the packet opens with the argument (twelve thousand narrowing to THIS list) before the meditations; and it closes wheel-then-points, so the last thing in a reader's hands is what to pray rather than how long. The plan card flagged this reorder and would not apply it silently, because the file says the order is the product spec: both changes are the spec's own, confirmed through the shepherd, and the two stale order comments update in this same commit as that card required. The file header now also says which copy of the comment is authoritative, since this is the second time it has gone stale. The variant filter is keyed, never indexed -- the reorder moved lines and could not move meanings, which is exactly the case that comment was written for. Verified in-process on both variants (full: map, funnel, life, christian, profiles, sets, wheel, points; lightweight: map, funnel, profiles, wheel, points) and on the regenerated 28-zone output; the headless packets-all reports 28 of 28 with maps, groups and sets, and every packet gate stays green. Sheet 0 is still the map page, which is the one positional assertion any gate makes. |
||
|---|---|---|
| .. | ||
| api | ||
| charts | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| data | ||
| elements | ||
| i18n | ||
| layouts | ||
| lists | ||
| maps | ||
| packet | ||
| packets | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| vendor/cldr | ||
| index.js | ||
| ProfileLoader.vue | ||
| README.md | ||
library/ (@map) — the shared map template
The other half of the architecture (see ../plugin-designs/README.md):
every map in plugin-designs/<your-map>/ composes the reusable, parameterized pieces that live here.
Fix something here and every map benefits on the next build; break something here and every map
breaks — read components/WARNING.md before touching shared pieces.
| Folder | What lives there |
|---|---|
ProfileLoader.vue |
The root of every bundle: parses profile-config, loads the profile, provides the stores + config |
components/ |
Shared UI — map, legends, controls, popup (PeopleGroupDetail), tables, charts, hints (README) |
composables/ |
Shared logic — map engine (useMapInstance), provider switch, shadow-DOM styles, theming |
stores/ |
Per-instance Pinia stores (ui / map / data) — provided by ProfileLoader, injected by children |
api/ |
Data-source registry (sources.json) + fetch layer — the JAMstack runtime wiring |
colors/ |
Color sets maps opt into via profile-config.colorSet |
i18n/ |
The shared string catalogs (all maps speak the same languages) |
data/ |
Small shared datasets baked at build time (big served data lives in ../data/) |
constants/ |
Shared constants |
scripts/ |
Maintainer pipelines (posters, research) — not part of any bundle |
The rule of thumb (same as WARNING.md): custom code in your app-profile, reusable code here — and things only move from the first to the second once they've earned it.