Commit graph

4547 commits

Author SHA1 Message Date
Doxa Maps
2992f5b941 The whole-India poster ships on an India tab (66x66 by default); its list, packet and cards stay withheld
countrySheet.js WITHHELD now says WHAT of a whole country is withheld: { IND: { poster: false, rows: true } }, with
posterWithheld() and rowsWithheld() (sheetWithheld() keeps meaning the poster, the name Poster Design reads).
- India's whole-country POSTER prints again, 66x66 by default (60x96 and 36x60 on request); largeSheet() names it.
- Its ROWS (the prayer list, packet and cards: about a thousand pages) stay withheld with the same sentence, in the
  wall, the Regions list and the 'country' poster type. India's state posters are unchanged.
- Country Posters gains an INDIA tab: the same wall filtered to India, labelled with India's own name in the
  reader's language (Intl), between the posters and the map.
check:country-sheet-one-path arm G checks the split (poster live at 66x66, rows withheld, state cards never
withheld, both callers read the right half), with poisons for un-withheld rows and a wall that prints them;
check:poster-section arm C follows. The by-state, leaderless India layout follows as its own PR.
2026-10-02 07:51:10 +00:00
Doxa Maps
3056db68a6 Gates that read the poster wall's markup read the lifted PosterSection too: check:packet-variants (its card-deck and packet tapes) and check:poster-fetch-guard (no direct poster fetch) 2026-10-02 07:23:19 +00:00
Doxa Maps
2cab21c5a9 Poster section page: its @description; the library index and capability exemplars regenerated; the tree rebuilt 2026-10-02 07:07:18 +00:00
Doxa Maps
ce88df2074 Rebuild country-posters, my-upg-100-list, poster-design and regions-dashboard for the lifted PosterSection and <dxm-poster-section> 2026-10-02 07:00:27 +00:00
Doxa Maps
a0819ebed4 Rebuild for the poster section (provisional; Phase A rebuilds every PosterWall importer) 2026-10-02 06:58:22 +00:00
Doxa Maps
a95b88ed65 <dxm-poster-section>: one poster section, any poster type, as a reusable element
The section the Country Posters tab draws (a collapsible region head + its poster cards) is now usable on its
own, for any poster set, by parameters:
- library/components/poster/posterTypes.js: a TYPE REGISTRY. A type is an adapter (items for a scope, the
  section's title, the print actions). The library registers 'country' (library data + the shared sheet path,
  so a withheld whole-country poster stays withheld); plugins register their own types from their own code
  (UPG 100 lists, regions, continents later). No plugin code in the library.
- 'country' scopes: a region key in any spelling. DX Life's /regions slug ('latin-america-and-caribbean'),
  the API's value, the wall's slug and the English name all reduce to one canonical key.
- PosterSectionView.vue: one section, drawn by a PosterWall in a new SECTION-ONLY mode (no wall head; off by
  default, so every existing wall renders as before), embedded so the page scrolls it.
- <dxm-poster-section type scope collapsible collapsed locale assets-base api-base-url is-dark>: the
  attributes map onto the standard element's profile-config (posterSectionConfig.js, pure), so it keeps the
  per-instance i18n and store. registerPosterSectionElement() from any bundle; Country Posters ships it first.
- country-posters/poster-section: a page showing two sections (Africa open, Oceania collapsed).
- poster.sectionNone (11 locales): an unknown type or an empty scope says so, never a blank.
check:poster-section (gates:pre) + self-test: the registry, DX Life's 8 scopes covering every country once,
withheld India, the attribute mapping, and PosterSection.vue injecting every name its template uses; 3 poisons.
The known collapse-while-scrolled landing is left exactly as it is.
2026-10-02 06:56:48 +00:00
Doxa Maps
194006412f Merge the pilot (development a3225e072: the PosterWall gate loader) into the poster-section branch
# Conflicts:
#	public/dx-maps/country-posters/countries-map/index.html
#	public/dx-maps/country-posters/country-poster-wall/index.html
#	public/dx-maps/country-posters/country-posters-mfe/index.html
#	public/dx-maps/country-posters/country-posters.js
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/my-upg-100-list/my-upg-100-list.js
#	public/dx-maps/my-upg-100-list/poster-wall/index.html
#	public/dx-maps/my-upg-100-list/upg-100-list/index.html
#	public/dx-maps/my-upg-100-list/upg-100-mfe/index.html
#	public/dx-maps/poster-design/poster-design-mfe/index.html
#	public/dx-maps/poster-design/poster-design.js
#	public/dx-maps/poster-design/poster-sizes/index.html
#	public/dx-maps/poster-design/poster-styles/index.html
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-dashboard.js
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-10-02 06:49:01 +00:00
Doxa Maps
6a97b45be4 Rebuild country-posters, my-upg-100-list, poster-design, regions-dashboard for the lifted PosterSection (provisional; Phase A rebuilds on the merged tree) 2026-10-02 06:48:51 +00:00
Doxa Maps
a107faadaa PosterWall: each section is a PosterSection (lifted, not copied), drawn from the wall's own state
A section of a poster wall (its head: the name, the count, the collapse toggle; and its cards: the preview,
"show on map", the print options) is now its own component, library/components/poster/PosterSection.vue. The
markup moved VERBATIM; PosterWall renders every group through it and PROVIDES what a section uses (its props,
its collapse state, the print actions and their progress overlay) under POSTER_WALL_CTX. The section's CSS stays
in PosterWall's one shadow-style string, which applies to this markup in the same root.
Every wall renders the same DOM: measured in the shared browser, before (the pilot's built tree) vs after, at
1440 and 390, en and ar: Country Posters, UPG 100's poster wall, Poster Design's styles and the Regions list
(with every region's posters open) are identical once the server port and the root's scope hash are normalised;
the same cards, sections, intro text and scroll widths. The first step towards a reusable poster section.
2026-10-02 06:48:41 +00:00
Doxa Maps
a3225e072f check:poster-wall-host-seams: load any .vue PosterWall imports, and prove it with arm L
The gate compiled PosterWall.vue alone, as a client component, and runs
Vite without the Vue plugin. A child component imported by PosterWall
(a section component, which a refactor is about to add) would fail to
load, turning the gate red on correct code.

One resolveId/load hook (enforce 'pre', so Vite's resolver does not load
the raw SFC first) now client-compiles PosterWall and every .vue it
imports, each at its real path, so their own relative imports resolve as
in the build; the earlier '../../' path rewrite is gone. Arm L loads a
parent fixture that renders a child .vue by relative import
(internal/fixtures/poster-wall-host-seams/) and asserts the child's text.
It fails without the hook and without 'pre'.
2026-10-02 06:39:49 +00:00
Doxa Maps
230be4f119 Rebuild the MapInfo importers for its shadow-root listener, and regenerate the tree and SRI 2026-10-02 06:22:36 +00:00
Doxa Maps
7a5d93437f MapInfo hears panel-open on its shadow root when it has no parent element
A MapInfo mounted at the top of a map's own shadow tree has no parentElement, so it attached no listener and a
standalone leaf would have kept the pointer over Share. It now falls back to its root node (the shadow root),
which the panel's event reaches.
2026-10-02 06:14:49 +00:00
Doxa Maps
4649304e2a Rebuild every bundle for the panel-opens-pointer-away fix (MapControlMenu and MapInfo), and regenerate the tree and SRI 2026-10-02 06:12:49 +00:00
Doxa Maps
a143992d0e An opening map panel puts the "What can this map do?" pointer away
On a phone, at first load, the onboarding pointer could sit over the open Share panel and cover its ✕
(cities-with-internet). The pointer can be drawn by the host page, outside the map's shadow root, so no
z-index inside the map can lift a panel above it. Instead, MapControlMenu (Share, and every menu built on it)
announces that it opened with a composed 'dxmaps:panel-open' event, and MapInfo, hearing it on its own
container (so only that map's panels count), hides its pointer; a page-load pointer is then done for this
load, as if its popup had been opened.
2026-10-02 06:08:51 +00:00
Doxa Maps
bb56908600 Merge branch 'dx-maps/readme-pilot' into HEAD 2026-10-02 05:49:53 +00:00
Doxa Maps
cb74b60009 README + diagram: the pilot lock and one merge at a time, so "landing" means only the landing branch
The lock guards the pilot, so it is the pilot lock, and the act is a merge onto the pilot: the
README's summary row, the harness paragraph, the kitchen list, the glossary and the alt text, and the
diagram's title, the lock ring, the coordinator line and the legend. "Publish to landing" and
"landing (main)" keep the word for the landing branch. Also: about 15 seconds to see a landed change;
a "merge" glossary row instead of "rebase", with pilot and landing beside development and main; the
cloud paragraph names BRANCH=development and PRODUCTION_BRANCH=main. The PNG is re-rendered at 2x.
2026-10-02 05:38:20 +00:00
Doxa Maps
bf140e38c9 README: land on the pilot through a throwaway merge, so the PR branch stays one feature on the landing branch
Step 5 merged the pilot INTO the PR branch, which made the PR branch carry everyone's unpublished
work. It now merges the PR branch into a detached copy of the pilot inside the lock, checks, pushes
that merge, and switches back; a conflict is aborted and fixed on the PR branch. Step 4 says the
per-agent preview servers run on your own machine, and the cloud paragraph says to set the container's
BRANCH to development for the pilot server (its default is main).
2026-10-02 05:36:24 +00:00
Doxa Maps
8683107b46 Rebuild every bundle for the phone top bar and the host-sized map floor (ProfileLoader is in each), and regenerate the tree and SRI 2026-10-02 05:31:28 +00:00
Doxa Maps
dceb824e3f README: the cloud paragraph says why one pilot server per app, and names the landing rebuild from accepted pull requests as planned too 2026-10-02 05:31:23 +00:00
Doxa Maps
919f5fa46e README: the agent-swarm section in pilot and landing words, with the diagram redrawn to match
The pilot branch (development) is the shared working version a hot-reload server follows; the
landing branch (main) is production, which its server rebuilds from; PR branches hold one feature
each, start from the landing branch and land on the pilot after the checks. The worktree, lock,
gates and build-owner steps stay. A short paragraph on cloud development with a swarm: a self-hosted
forge, a pilot and a landing server per app, and the pilot server's PR switching named as planned
only. The diagram's labels follow (pilot at the centre behind the lock, landing below); the PNG is
re-rendered at 2x from the SVG.
2026-10-02 05:28:21 +00:00
Doxa Maps
d533431997 Phones: one top bar on a website too; maps fill a sized host, so the legend is never cut off
- WEB MODE GETS THE TOP BAR BACK. The corner ☰ with no header was rejected on a real phone. Both shell modes
  now show the one top bar on a phone, the ☰ at its start and the language at its end; web mode's bar takes no
  camera inset (the shell is not at the top of the screen in a website). The corner circle and the drawer-foot
  language are gone. check:shell-header renders both modes (13 planted defects).
- THE FLOOR NEVER EXCEEDS A SIZED HOST. ProfileLoader's 100svh floor is for a host sized by its content (the
  scroll-page leaf). Inside a host with a definite height (DX Life's map slot, overflow hidden) it made the map
  taller than the host, which clipped the map's bottom and its legend footer, and tied the map's height to the
  window's. ProfileLoader now MEASURES the host (the floor at 0 and at a huge value: a sized host keeps its
  height) and drops the floor inside a sized one, re-measuring when the host resizes (a ResizeObserver on the
  host, not a window resize).
- LegendDesktop caps itself at the map's height (100% - 80px), not the window's (100vh - 80px).
2026-10-02 05:27:37 +00:00
Doxa Maps
443d2efdaa Rebuild doxa-maps-spa, plugin-studio and posterverse for the phone drawer fix, and regenerate the tree and SRI 2026-10-02 05:05:13 +00:00
Doxa Maps
326eccb465 Phone drawer: starts closed from the first paint; the language sits at its foot
- On a phone the drawer started OPEN (navOpen = initialNavOpen) and mounted() closed it, so every load drew it
  on screen and slid it away (measured: up to ~1.6 s, both shells, app and web mode). data() now reads the
  same (max-width: 760px) query, so the first render is already the phone's closed state; mounted() still
  tracks breakpoint crossings.
- In web mode the language at the drawer's foot sat right under the last row: margin-top:auto needs the nav's
  flex column (.has-rail-end), which only the desktop rail-end set. The phone drawer's foot sets it too.
- check:shell-header asserts the flex column in web mode (14 planted defects).
2026-10-02 05:04:36 +00:00
Doxa Maps
f4066c36fc Rebuild every bundle for the phone shell modes and the svh map floor (ProfileLoader is in each), and regenerate the tree and SRI 2026-10-02 04:49:01 +00:00
Doxa Maps
6032512edf Phones: one header on a website, and maps that hold their size while you scroll
ONE HEADER ON A WEBSITE. Inside a host site that has its own header, the shell's 44px phone bar stacked a
second white bar under it. VerticalTabsLayout gains shellMode (prop, or the host element's shell-mode
attribute): web | app | auto.
- app (a Capacitor or standalone app, or a DX Maps leaf page): the phone bar, unchanged.
- web: no bar. The rail opens from a 40px corner ☰ at the pane's bottom-start, which publishes its footprint
  (--map-fab-clearance / --map-fab-beside) so the legend sheet, the pin hint and back-to-top step aside; the
  language menu moves to the drawer's foot.
- auto: the host's shell-mode attribute, else app for Capacitor, display-mode standalone or a leaf
  (window.MAP_OWNS_PAGE), else web.
Desktop is unchanged. check:shell-header renders both modes (13 planted defects); check:nav-reachable-mobile
accepts the corner ☰.

MAPS HOLD THEIR SIZE. ProfileLoader floored every map at min-height 100dvh, and the leaf pages' slot did the
same. dvh follows the mobile URL bar, so scrolling grew every map mid-scroll and moved its legend sheet. Both
now use 100svh (the viewport with the bar showing, which never changes on scroll), with 100vh where svh is
unsupported.
2026-10-02 04:44:33 +00:00
Doxa Maps
d1536d94e3 Rebuild doxa-simple-map for <dxm-simple-map>, and regenerate the tree and SRI 2026-10-02 03:22:55 +00:00
Doxa Maps
31d594b83f Prayer Progress registers as <dxm-simple-map>; the older names only on request
A host page can define a tag name before our bundle loads, and the first definition wins. DX Life's own
/js/doxa-simple-map.js defines <doxa-map> and <doxa-simple-map>, so on those pages our guarded define was
skipped and the page drew the host's element under our name.
- The doxa-simple-map bundle now defines <dxm-simple-map>, DX Maps' own name, first. The manifest, the leaf
  pages and the gallery mount it (generate-tree reads the first define).
- <doxa-map> and <doxa-simple-map> are defined only when the host asks: data-legacy-tags on the bundle's
  <script>, or window.DXM_LEGACY_TAGS = true before it loads.
2026-10-02 03:22:36 +00:00
Doxa Maps
0413c49176 Rebuild doxa-maps-spa and posterverse for the default home link, and regenerate the tree 2026-10-02 02:15:56 +00:00
Doxa Maps
68bcb28624 Posterverse: "Back to homepage" leads to the DOXA site by default, in the shell's language; a host's own home link still wins 2026-10-02 02:15:28 +00:00
Doxa Maps
b3de39a39e Research Gallery: "Back to homepage" leads to the DOXA site by default, in the gallery's language; a host's own home link still wins 2026-10-02 02:13:47 +00:00
Doxa Maps
56337e3861 Rebuild poster-design for its withheld-country card message 2026-10-01 22:25:21 +00:00
Doxa Maps
c11d179d3d Poster Design: a withheld country's large-format cards say why, and are never drawn or printed
countrySheet.js now withholds the whole-India poster (WITHHELD,
sheetWithheld), and makeCountrySheet returns nothing for India. The three
large-format Styles cards use India as their sample, so they showed
"preview unavailable" and their print fell through to a stored poster
that does not exist. They now answer PosterWall's unsupported with
messages.countryPosterTooMany, in the reader's language: the card shows
that sentence instead of a preview, and a print opens only that notice.
The designs stay in the catalogue, so they return when India is no longer
withheld.
2026-10-01 22:24:53 +00:00
Doxa Maps
5226c8f4bc Rebuild country-posters, regions-dashboard and poster-design for the withheld whole-India poster 2026-10-01 22:21:13 +00:00
Doxa Maps
fe743ff48d The whole-India poster is withheld for now: "Too many people groups to fit on one poster legibly"
India's whole-country poster does not ship yet; a solution is in progress. countrySheet.js gains WITHHELD (India)
and sheetWithheld(item):
- makeCountrySheet draws nothing for a withheld country, in any format, before fetching a single record.
- largeSheet() is null for it, so the Country Posters wall and the Regions list show their existing
  messages.countryPosterTooMany ("Too many people groups to fit on one poster legibly — a solution is in
  progress.", all eleven locales) on the card instead of a poster.
- Both callers also withhold its list, packet and cards with the same sentence (about a thousand pages, offered
  when the poster is).
- India's STATE and union-territory posters are separate cards (indiaState) and are untouched; so are the India
  section and its first place.
- sheetFormatFor keeps the large-sheet size rule itself (it returns with the poster).
check:country-sheet-one-path arm G: India stays withheld (no sheet in any of 7 formats, 0 records fetched, its
state cards never withheld, both callers show the sentence and reject its rows), with a poison for un-withholding
it and one for a wall that prints its list.
2026-10-01 22:18:31 +00:00
Doxa Maps
96de705202 Rebuild country-posters, my-upg-100-list, poster-design and regions-dashboard (and the served poster-render copy) for the whole-India sheet 2026-10-01 19:53:07 +00:00
Doxa Maps
26dc5949d9 Country names for 13 territories with their own posters; Kosovo's label
The facts row's COUNTRIES cell is ISO3_NAME[iso3] || iso3, and 13 territories that have country posters were
missing from the table, so their shipped sheets printed the raw code there (CCK, CXR, ESH, GIB, HKG, JEY, KOS,
MAC, MCO, NFK, SJM, SXM, TKL). Kosovo's own label in country-posters.json was the code too, so its title and
its wall card read "KOS".
- ISO3_NAME gains the 13 (the short names the posters already print as each label; SXM "Sint Maarten").
- KOS's label is "Kosovo".
Every country in country-posters.json now has a name, and no label is a raw code.
2026-10-01 19:28:27 +00:00
Doxa Maps
c5e6e12952 Rebuild country-posters, my-upg-100-list, poster-design and regions-dashboard (and the served poster-render copy) for the whole-India sheet 2026-10-01 19:09:50 +00:00
Doxa Maps
6dfc7dd7a8 check:side-lane-photo-pixels: every name clear of every OTHER photo too (a long inner-column name must not run into the outer column's photo above or below) 2026-10-01 18:46:44 +00:00
Doxa Maps
1b496b3b31 Large side-lane sheets: a photo sits in a fixed slot beside its name, never on its letters
Measured on the shipped India sheets in the browser (getBBox, Lato loaded): 74 of 151 photos on the 60x96 and
32 on the 66x66 overlapped their own name, by up to 7 px (half a letter at 20.7 pt). The photo was placed from
an ESTIMATED text width, and the real width runs wider.
Now the photo sits in a fixed slot on the LEADER side of its name, and the name moves out by the slot. A
side-lane name is anchored at its leader-side end (left column: text-anchor end; right: start), so its glyphs
lie wholly on the far side of that anchor and the photo wholly on the near side: they cannot overlap whatever
width the font draws. Only a name with a photo takes the slot, so the columns and the type keep their size
(India 60x96 stays 20.7 pt).
Measured after: India 60x96 and 66x66 have 0 photos on, and 0 touching, their name. 0 proper crossings on all
three India formats. 36x60 (no photos) is byte-identical. Re-pinned.
- check:side-lanes: every photo on its name's anchor side, at the 4 px gap (a source twin, always measured).
  A self-test poison restores the estimated-width placement: 167 photos off their side, caught.
- check:side-lane-photo-pixels (browser): every photo box clear of its name's real drawn box (getBBox), with
  the same poison in its self-test.
2026-10-01 18:42:18 +00:00
Doxa Maps
66488dea64 Merge remote-tracking branch 'origin/development' into repo/b21-contribute 2026-10-01 16:45:21 +00:00
Doxa Maps
aa5f2c4c73 Merge origin/development into studio/release-hygiene-2 2026-10-01 16:40:09 +00:00
Doxa Maps
771e68cbcb B21 (2/2): documentation/contribute/, a tutorial for taking contributions from a contributor's own forge
Copied unchanged from the bridge kit (727fb55): TUTORIAL.md (for the repository's GitHub admin,
about 10 minutes), pull-contributor.yml (the workflow it sets up; it refuses a contributor's
changes to .github/) and test-pull-contributor.sh (the TUTORIAL's "check the guard yourself",
which sits next to it). None of them is under .github/, so nothing runs by itself here.
README: one line in the agent section links the tutorial; nothing else in README changes.
2026-10-01 16:35:38 +00:00
Doxa Maps
52802bd471 The exclusion list and the hygiene detector no longer match the export's own content rule (bracket forms, a pattern built from parts) 2026-10-01 16:32:23 +00:00
Doxa Maps
63aad26e92 The private entry-policy table is built by its own script outside the public export; the public research script carries no trace of it 2026-10-01 16:32:22 +00:00
Doxa Maps
6598d95893 Mark 5 scripture sources: the provenance note gives the date, not who asked 2026-10-01 16:32:22 +00:00
Doxa Maps
07745f7fc5 B21 (1/2): the GitHub Pages workflow moves into the docs, so it never runs by itself
.github/workflows/pages.yml is now documentation/deploy/github-pages.workflow.yml, with a
one-line README beside it: copy it into .github/workflows/ in your own repository to deploy to
GitHub Pages. Nothing referenced the old path. The repo carries no .github/ folder any more, so
a host never runs it automatically.
2026-10-01 16:27:05 +00:00
Doxa Maps
8ff611b841 Rebuild the four PosterWall bundles (country-posters, my-upg-100-list, poster-design, regions-dashboard) for the collapsible-head width, and regenerate the tree and SRI 2026-10-01 13:40:20 +00:00
Doxa Maps
5a62ed0827 Merge remote-tracking branch 'origin/development' into upg100/wall-toggle-width 2026-10-01 13:39:25 +00:00
Doxa Maps
86230f93b9 Merge remote-tracking branch 'origin/development' into upg100/phone-bigjob 2026-10-01 13:36:15 +00:00
Doxa Maps
eec0c2f280 Merge origin/development into gospel/gi-render-exit 2026-10-01 13:32:00 +00:00