|
Some checks are pending
build-gate / build (push) Waiting to run
Continues paying the debt the parity gate measured, cheapest first. German and Hindi carried an IDENTICAL 22-key gap — the same legend and search keys, added to English after those two catalogs were last touched. One batch of work closed German entirely and took Hindi to 18, which was its whole missing tabs.json. Both are now complete: 344 -> 282 keys. Terminology follows each catalog's OWN existing vocabulary rather than inventing a second one for the same concepts — de keeps Volk/Sprachfamilien, hi keeps जनसमूह/भाषा परिवार. Tab labels stay SHORT because they sit in a narrow rail: Spanish already uses "Pueblos" rather than a literal rendering, so Hindi does the same. UUPG, WAGF and DOXA remain acronyms, as in every locale. Seven locales (ar es fr pt ru de hi) are now DELETED from the gate's DEBT map rather than set to zero — an absent entry means "must be complete", so deletion is what converts finished work into a permanent guarantee. Verified: removing one Hindi tab key reports "hi is missing 1/176 key(s) and has no DEBT entry". Verified at the RENDERED layer: "View country posters" comes back as "Länderposter ansehen" (de) and "देश के पोस्टर देखें" (hi), zero page errors — which also confirms Devanagari shapes correctly in the APP, not only in the prayer packet where the font was first vendored. The three remaining (it, ro, zh at 94 each) are missing WHOLE FILES — regions.json and tabs.json — so they are real translation work rather than the propagation gaps closed here. |
||
|---|---|---|
| .. | ||
| api | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| data | ||
| i18n | ||
| layouts | ||
| maps | ||
| packet | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| 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.