Commit graph

3738 commits

Author SHA1 Message Date
Doxa Maps
83fa4da4f4 Drop the region-paint gate's on-demand entry now that it is chained
The entry was marked temporary, to be deleted when the gate joined
gates:post. 6a1860539 chained it; the entry stayed behind.
2026-09-29 17:42:45 +00:00
Doxa Maps
99816626af Every shadow stylesheet gets its own label, and a gate keeps it that way
useShadowStyles keys its <style> by the label and overwrites an existing
tag with the same key, so two components sharing a label keep only the
last one's CSS in a shared shadow root. The regions list lost its sheet
this way to the region card, which had kept the list's label when it was
extracted.

check:shadow-style-labels-unique (gates:pre) fails any label two calls
share, globally rather than per shadow root, so a copied or forked
component is caught when it is copied. It reads the real parsers,
classifies every reference to the function (a rebinding, .call, a
re-export or a namespace import fails instead of hiding a call),
cross-checks the AST against the token stream, and covers the other
ways two calls share a key: unlabelled calls under the dev server's
per-component key, and a fixed label over CSS that varies per caller.

countries-map.vue, a fork of research-map.vue, carried the same label;
it is now 'countries-map', with the country-posters bundle rebuilt and
the tree regenerated. The composable's JSDoc called the label a
debugging name; it now says it is the key.
2026-09-29 17:42:44 +00:00
Doxa Maps
b5e4be4355 Merge main (b7e71a9cb): the Driver's README edit, "The people doing the mission" becomes "The people doing the work" 2026-09-29 17:07:42 +00:00
Doxa Maps
37e2de90ad Merge origin/development into studio/integration 2026-09-29 17:06:40 +00:00
b7e71a9cb5 Update README.md
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-29 17:05:56 +00:00
Doxa Maps
b46f207b56 Record as merged, content NOT taken (nine pushed tips already landed)
Each of these pushed branches reads unmerged on the Forgejo list because no
merge commit names it, while its patches are already on development under other
shas: git cherry reports 0 unlanded patches for every one of the nine.

  origin/regions/land-rg5 7e99159cb
  origin/regions/leaf-print fc93c97e4
  origin/regions/legend-aria b35559495
  origin/regions/legend-caret 28789b2c9
  origin/regions/manifest-visibility 674121df5
  origin/regions/print-busy 09adc903f
  origin/regions/print-chrome a86b3d7be
  origin/regions/vtl-context-lost cbb6f0040
  origin/regions/zone-region-namespace f3c050aed

Checked by SUBSTANCE rather than by diffing the files, because the files differ
from these tips wherever they were edited again afterwards -- a byte comparison
reads that as missing work and is the wrong instrument. Spot-checked
legend-aria: LegendMobile.vue differs from the branch, and development carries
six aria-state attributes, so the toggles do announce their state.

The tree is unchanged by this commit: -s ours takes nothing.
2026-09-29 17:03:04 +00:00
Doxa Maps
c6d434d26e Record the pane-mount scroller as not needed
The regions list's scroll failure was a style-label collision: the region
card and the list shared one stylesheet key, and the card overwrote the
list's rules. fe054b2c7 gives the card its own key, landed with the rebuild
in 3302f424c. The pane-mount scroller on this branch was never applied;
this merge records it and keeps the tree unchanged.
2026-09-29 16:57:48 +00:00
Doxa Maps
358f3ae7ec Record as merged, content NOT taken (both pushed tips superseded)
origin/regions/country-packet (f33b5b73c): superseded. Its one unlanded patch
removes four Driver citations from region-dashboards.vue,
check-regions-uses-library.mjs and src/UupgsList.vue. That work reached
development through the later version of the same commit, and the proof is the
gate rather than a file comparison: check:no-new-driver-references PASSES on
development with 0 references. The files differ from this tip only because they
were edited again afterwards.

origin/regions/perrow-boot (b97c3512e): superseded, and its target no longer
exists. Its one unlanded patch edits
plugin-designs/regions-dashboard/src/RegionCountryMap.vue, a path DELETED from
development when the component moved to library/components/maps/. Taking it
would resurrect a dead file.

These are PUSHED tips, which differ from the local branches of the same name
(88312a24b and f1a198522). The Forgejo branch list reads the pushed refs, so
they showed unmerged while the local ones were already ancestors -- a population
difference, not lost work. The tree is unchanged by this commit.
2026-09-29 16:52:56 +00:00
Doxa Maps
494a529e09 Merge origin/development into studio/integration 2026-09-29 16:50:13 +00:00
Doxa Maps
cd3014761c Rebuild template-bundle, stale on development
check:composite over EVERY bundle (this landing changes vite.config.js) found it: its committed
bytes are not what its source builds (committed ef13ff5d4adf, rebuilt e9b269ca6ffa). Every
other bundle on development rebuilt to its committed bytes. Tree and SRI regenerated.
2026-09-29 16:45:21 +00:00
Doxa Maps
3302f424c8 Rebuild the fifteen consumers this branch's library changes reach
This branch changes five library files -- ProfileLoader.vue, LifeCalendar.vue,
packetCharts.js, RegionSectionCard.vue and packet/countrySheet.js -- and
ProfileLoader alone is carried by sixteen bundles. Built every one of those
sixteen, one at a time (memory is the limit on this box), then regenerated the
tree and refreshed SRI.

FIFTEEN CHANGED, which is the measurement that matters: all-people-groups,
cities-internet, country-map, country-posters, demo-map, doxa-research-map,
doxa-simple-map, gospel-internet, gospel-resources, my-upg-100-list,
pplr-data-maps, research-dashboard, template-bundle, upg-neighbor and
wall-of-people-groups. Only regions-dashboard was already current, because it was
rebuilt for the label fix.

A previous claim of mine that this tree was fresh rested on `bun run tree` and
`fix:sri` producing no diff. That proves neither: tree does not rebuild bundles,
and SRI only proves a leaf loads the bundle its integrity names. The test that
distinguishes the two is building the consumers and seeing whether their bytes
move -- and fifteen of them did.

The shadow-style label fix survives the rebuild: ,"regions-list") appears once
and ,"region-section-card") once in regions-dashboard.js.
2026-09-29 16:42:04 +00:00
Doxa Maps
de6d60378e Merge origin/development into studio/integration 2026-09-29 16:38:05 +00:00
Doxa Maps
29317c66fb Rebuild regions-dashboard on sr's base
The merge took development's side on the generated files, as the rule requires,
so the bundle is rebuilt here from the merged source. Verified in the artifact:
the two shadow-style keys are distinct again -- ,"regions-list") once and
,"region-section-card") once -- so the card no longer overwrites the list's
stylesheet.
2026-09-29 16:34:30 +00:00
Doxa Maps
57671ca465 Merge remote-tracking branch 'origin/development' into regions/handoff-integration
# Conflicts:
#	public/dx-maps/cities-internet/cities-internet.js
#	public/dx-maps/cities-internet/connectivity-list/index.html
#	public/dx-maps/cities-internet/connectivity-map/index.html
#	public/dx-maps/cities-internet/data-tables/index.html
#	public/dx-maps/country-map/country-map.js
#	public/dx-maps/country-map/country-map/index.html
#	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/demo-map/demo-map.js
#	public/dx-maps/demo-map/demo-map/index.html
#	public/dx-maps/demo-map/demo-map/maplibre/index.html
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/doxa-research-map/doxa-research-map.js
#	public/dx-maps/doxa-research-map/research-map/index.html
#	public/dx-maps/doxa-research-map/research-map/maplibre/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map.js
#	public/dx-maps/doxa-simple-map/doxa-simple-map/adoption/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/engagement/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/index.html
#	public/dx-maps/doxa-simple-map/doxa-simple-map/prayer/index.html
#	public/dx-maps/gospel-internet/board/board/index.html
#	public/dx-maps/gospel-internet/board/index.html
#	public/dx-maps/gospel-internet/board/india-china/index.html
#	public/dx-maps/gospel-internet/board/language-tree/index.html
#	public/dx-maps/gospel-internet/board/platforms/index.html
#	public/dx-maps/gospel-internet/board/project-700/index.html
#	public/dx-maps/gospel-internet/board/zero/index.html
#	public/dx-maps/gospel-internet/gospel-internet.js
#	public/dx-maps/manifest.json
#	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-09-29 16:33:55 +00:00
Doxa Maps
fe054b2c7f The region card stops overwriting the regions list's stylesheet
RegionSectionCard passed THREE arguments to useShadowStyles(css, label): the CSS,
then 'regions-list', then 'region-section-card'. The signature takes two, so
'regions-list' was the key and its own name was silently ignored.

useShadowStyles keys its <style> tag by label and, on a collision, OVERWRITES
the existing tag's text instead of adding one (useShadowStyles.js:60-61). This
card is a CHILD of regions-list, so the two share one shadow root: the cards
render after the fetch, mount second, find the list's tag under the shared key
and replace every .rl-* rule with the card's CSS.

Measured in the running page: .rl-root became position:static and .rl-scroll
overflow-y:visible, the shadow root held 3 style tags where a working tree holds
4, and 'rl-root{' appeared nowhere in it. The list therefore had no scroller of
its own, a wheel moved the pane column instead, and every region below the fold
was unreachable -- at 1440 Middle East, North America and Oceania; at 390
everything except Africa.

It was latent until the label became real: before the cyrillicHeading fix, a
dangling comma concatenated 'regions-list' INTO regions-list's own CSS, so the
list keyed by a content hash and the two never met. Fixing that rule turned a
silent collision into a visible break, which is why the live site is unaffected
and every sha after it is not.

Verified in the artifact, not the source: ,"regions-list") appears once in the
rebuilt bundle where it appeared twice, ,"region-section-card") now appears once,
and the .rl-* rules are still present.
2026-09-29 16:32:15 +00:00
Doxa Maps
769d863f99 Rebuild the twenty consumers the merged library changes reach
The branch merges thirteen shared library files, including two new modules, so
every bundle that imports them was carrying older bytes than its source.

Found by building each of the twenty-two bundles the freshness step names, one
at a time: all twenty-two build cleanly in 8-24 seconds, none fails and none
hangs -- and twenty of them produce different bytes. Big Picture alone moves
510 bytes.

That also corrects a check I trusted earlier in this branch. `bun run tree`
reported zero changed files and I read it as "the consumers are fresh". It is
not: tree stages assets and regenerates leaf pages, and does NOT rebuild the
bundles, so it can report a clean tree over twenty stale ones. Only a build
answers that question.

Hashes rebaked and check:sri passes across every leaf.
2026-09-29 16:26:23 +00:00
Doxa Maps
f14542f5f6 Rebuild regions-dashboard after merging development
The merge took development's side on eight generated files, which is the rule for
generated output -- it is regenerated, never hand-merged. Rebuilt here so the
artifact matches the merged source: the three corrected :host rules are present
in the built bundle.
2026-09-29 16:13:28 +00:00
Doxa Maps
e21c4a5d57 Merge remote-tracking branch 'origin/development' into regions/handoff-integration
# 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/doxa-maps-spa/manifest.json
#	public/dx-maps/manifest.json
#	public/dx-maps/regions-dashboard/region-dashboards/index.html
#	public/dx-maps/regions-dashboard/regions-list/index.html
#	public/dx-maps/regions-dashboard/regions-mfe/index.html
2026-09-29 16:12:45 +00:00
Doxa Maps
5fc235a31e Rebuild regions-dashboard, my-upg-100-list and country-posters, and regenerate the tree 2026-09-29 16:10:10 +00:00
Doxa Maps
a6279064c4 Drop the country-map poster wall: +292 KB on every country page
country-map.vue's poster-wall wiring put the poster table, peopleGroupRecords
and the sheet code into the bundle of EVERY DX Life country page, for a wall
that is hidden by default. Measured: country-map.js 391,475 bytes on
development against 683,401 here -- +291,926, a 74% increase -- and with it
removed the bundle is 391,625, back within 150 bytes of development.

Making the three imports lazy does not help, and I measured that rather than
assuming it: with all three behind await import() and the table fetched at
mount, the bundle grew to 684,700. vite.config.js:282 sets
inlineDynamicImports, so a dynamic import is flattened straight back in and only
the wrapper is added. Removing the weight needs the pinned-served-asset pattern
that poster-render.js already uses -- card
PERF-LOAD-THE-PRINTING-SUBSYSTEM-ON-DEMAND.

library/packet/countrySheet.js stays: it is unreached at runtime (0 hits in the
built bundle) so it adds nothing, and it is the library half this element will
use once the printing code loads on demand.

ProfileLoader's comment now names both populations -- 20 of the 25 bundles are
single-profile, 10 of the 17 that actually mount this loader, which are the only
ones the default affects.
2026-09-29 16:10:00 +00:00
Doxa Maps
f86bfa16ec A pane scrolls content taller than itself instead of clipping it away
The .pane clip (14096e19c) keeps a pane from painting outside its box,
but a profile with no scroller of its own then lost everything below the
pane's bottom: regions-mfe's regions list (rega RD3: last row at y1426 in
an 843 px pane; at 390 only Africa visible). Before the clip that content
spilled over the next pane instead. The pane mount now scrolls it at pane
height (overflow-y:auto), since a scroll container's scrollable area
includes its descendants' visible overflow; wheel and Tab reach it, and a
wheel at its end chains on to the column. Panes whose content fits (a
wall with its own scroller, a map) never scroll here.
2026-09-29 16:08:33 +00:00
Doxa Maps
6f08763bad Drop three resurrected library components, and re-home a doc comment
BoundedSet.vue, CenteredSetTarget.vue and VisionFunnel.vue came back through the
handoff merges, byte-identical to what c5c01dead deleted on purpose on 09-28
("Delete 7 unreachable library components"). That commit also added
check:no-dead-library precisely so they could not return. Verified before
removing: 0 files import charts/BoundedSet.vue, charts/CenteredSetTarget.vue or
charts/VisionFunnel.vue, and packetCharts.js references none of them, so nothing
is left dangling. check:no-dead-library passes with them gone.

A first count said BoundedSet had 6 importers. It has none: those files import
layoutBoundedSet from charts/bounded-set.js, a different module, and the grep
matched the substring.

packetCharts.js: the doc block describing scatterCells sat above topCells' own
block, two functions away from what it documents. Moved to sit directly above
scatterCells. No code change.
2026-09-29 16:06:28 +00:00
Doxa Maps
45d931fa40 Repair what the union resolution duplicated
Resolving package.json conflicts by unioning unique lines is right for a file
that holds one entry per line. Applied to ordinary source it duplicates
declarations, because both sides of a hunk keep their copy and nothing
de-duplicates across the join.

Eleven plugin entry points ended with the same import twice, and the poster
renderer with two identical `const sheet`. Each is a SyntaxError: every one of
those bundles would have failed to build, and the poster export would not run.

Found by parse-checking every changed .js against the merge base, not by the
gates -- gates:pre passed 101 of 102 with all twelve files broken, because its
parse gates do not cover plugin entry points.

One measurement trap worth recording. `node --check` on a .js file parses it as
CommonJS, so a bare `import` is a syntax error and ALL 28 entry points appear
broken, on development too. That reading says the tree is on fire and is simply
wrong. Copying each file to a .mjs and checking that parses it as a module,
which separates the eleven that are genuinely broken here from the rest that
are fine.
2026-09-29 16:01:45 +00:00
Doxa Maps
2ff7d2f17b Merge origin/development into studio/integration 2026-09-29 16:01:38 +00:00
Doxa Maps
0417e46fbd Merge remote-tracking branch 'origin/development' into bundler-2/handoff
# Conflicts:
#	internal/check-poster-layout.mjs
#	library/composables/poster/useMapPoster.js
#	package.json
2026-09-29 16:00:18 +00:00
Doxa Maps
212ec20816 Merge remote-tracking branch 'origin/development' into bundler-2/handoff
# Conflicts:
#	package.json
2026-09-29 15:54:16 +00:00
Doxa Maps
14096e19c2 Merge remote-tracking branch 'origin/development' into upg100/merge
# Conflicts:
#	package.json
2026-09-29 15:54:05 +00:00
Doxa Maps
1db5e25bec Rebuild the six consumers this branch's library changes reach
main-capture scan refused this branch with six bundles whose committed output is
not what their sources build on it: cities-internet, country-posters, demo-map,
doxa-research-map, doxa-simple-map and gospel-internet.

THE CAUSE IS THIS BRANCH, not development. It changes seven shared library
sources development does not have -- ProfileLoader.vue, the BoundedSet,
CenteredSetTarget, LifeCalendar and VisionFunnel chart components, packetCharts.js
and packet/countrySheet.js -- and ProfileLoader alone reaches every element that
wraps one, six references deep in demo-map's bundle. So consumers this branch
never edited still build differently on it, and their committed bytes went stale
the moment the library changed. The composite-freshness rule, one level up: a
shared source has more consumers than the lander is looking at.

Proved by rebuilding the same six ON DEVELOPMENT, where all six reproduce their
committed bytes exactly and nothing changes. An earlier reading of mine compared
these bundles to development's and found them identical, and took that as
evidence development was stale. Identical committed bytes say nothing about
whether those bytes match what the SOURCE builds; on this branch the source had
moved underneath them. Rebuilding on development is the test that distinguishes
the two, and it clears development.

Each rebuilt one at a time (memory is the limit on this box), then the tree
regenerated and SRI refreshed once. Every one of the six changed, and each new
hash is the one the failing scan predicted for it, so this is the output those
sources produce rather than a rebuild that happens to differ.

No source file is touched by this commit.
2026-09-29 15:53:43 +00:00
Doxa Maps
f8504182c8 Merge origin/development into studio/integration 2026-09-29 15:45:28 +00:00
Doxa Maps
dac0f75942 Merge remote-tracking branch 'origin/development' into regions/handoff-integration 2026-09-29 15:41:47 +00:00
Doxa Maps
00edf89a45 Merge development into exp-shepherd/handoff-merge 2026-09-29 15:40:46 +00:00
Doxa Maps
b027fd8c93 public/ is development's again: the reverted engine change leaves no bundle of this integration to rebuild 2026-09-29 15:38:35 +00:00
Doxa Maps
7f08a74784 Revert "The map engine loads from the tree it was served from" for the handoff (unverified, now conflicting)
The same-origin engine copy collided with the CDN preloads that landed meanwhile: map
leaves now preload https://cdn.jsdelivr.net/.../maplibre-gl.js (leaf hints), and composite
snippets preload the same URL. With the engine loaded from <tree>/vendor/ instead, those
preloads would never be reused and every map page would download the engine twice.
Re-pointing the preloads is design work, which the handoff does not start. The change
stays in history (fc7259e06, studio/vendor-maplibre 275cdc807), and it belongs to the
HANDOFF-BRANCHES-RECORDED-AS-MERGED-WITHOUT-THEIR-CONTENT card.
2026-09-29 15:38:28 +00:00
Doxa Maps
8eccda7752 Merge origin/development into studio/integration 2026-09-29 15:37:45 +00:00
Doxa Maps
0757b38f88 Merge remote-tracking branch 'origin/development' into regions/handoff-integration 2026-09-29 15:35:44 +00:00
Doxa Maps
05fdaa5303 Merge origin/development into studio/integration (generated public/ files take development's side; regenerated at the landing) 2026-09-29 15:32:36 +00:00
Doxa Maps
d3ec784c1e Merge remote-tracking branch 'origin/development' into regions/handoff-integration 2026-09-29 15:31:29 +00:00
Doxa Maps
b005629f75 Merge remote-tracking branch 'origin/development' into dx-base/handoff-integration 2026-09-29 15:31:23 +00:00
Doxa Maps
b1173d48ab Merge remote-tracking branch 'origin/development' into upg100/merge 2026-09-29 15:27:41 +00:00
Doxa Maps
0450da266c Merge remote-tracking branch 'origin/development' into regions/handoff-integration 2026-09-29 15:24:53 +00:00
Doxa Maps
2d73ddd12f Merge origin/development into studio/integration 2026-09-29 15:24:41 +00:00
Doxa Maps
decdf31ed5 Merge remote-tracking branch 'origin/development' into dx-base/handoff-integration 2026-09-29 15:24:30 +00:00
Doxa Maps
35faf8cbf0 Merge development into the gospel handoff branch 2026-09-29 15:24:12 +00:00
Doxa Maps
01706a4e39 generate-tree's engine comment keeps the reason and drops the speaker 2026-09-29 15:22:27 +00:00
Doxa Maps
e5b3334ea6 Merge remote-tracking branch 'origin/development' into upg100/merge 2026-09-29 15:21:38 +00:00
Doxa Maps
ed49ce5159 Do not ship rudder-voice in the web export
My handoff rebuild ran BUNDLE=rudder-voice, which wrote
public/dx-maps/rudder-voice/rudder-voice.js and committed it. check:targets
failed on exactly that: rudder-voice is a DESKTOP-only voice-to-text tool, not a
web plugin, so a bundle under public/dx-maps would ship it in the /cdn export.

Development has no such file; this was mine, created minutes ago by rebuilding
every composite the scan named without checking which of them are web targets.
Removed from the index and from disk. check:targets passes.
2026-09-29 15:21:29 +00:00
Doxa Maps
d5549cf58f Merge development into the gospel handoff branch 2026-09-29 15:19:40 +00:00
Doxa Maps
abbd443bd4 Rebuild this integration's consumers, and ship the pinned MapLibre engine in the tree
Every bundle that compiles useMapInstance.js or constants/cdn.js, plus template-bundle, which
check:composite --all found stale. generate-tree now copies the pinned maplibre-gl 5.24.0 JS
and CSS into dx-maps/vendor/ and refuses a copy whose bytes do not match the pin. The tree
and SRI are regenerated.
2026-09-29 15:19:19 +00:00
Doxa Maps
76d54e06a2 Merge remote-tracking branch 'origin/development' into dx-base/handoff-integration 2026-09-29 15:04:25 +00:00
Doxa Maps
3a04a6d982 Record as merged, content NOT taken: unique work that needs its own work item
Recorded without their content, so their commits stay reachable for DX. The tree is
unchanged. Each of these carries content development lacks, and its conflicts are design
work, which the handoff does not start. The open work item is the backlog card
HANDOFF-BRANCHES-RECORDED-AS-MERGED-WITHOUT-THEIR-CONTENT.

- rudder/desktop-sidecar: a Rudder desktop shell proven on Linux (fixed loopback ports, a rudder.conf.json overlay, RUDDER_WEB). Development's later generic desktop:build main.rs replaced that shell, and taking either side breaks the other.
- studio/rudder-pool: a pool of speech servers so several readers dictate at once. It conflicts with 16 later session commits (stream reconnect, sentence-detection restarts of the single server); the pool must be rebuilt on that design.
- wip/dashboard-defects: three research-dashboard fixes (A018/A019 in the affinity palette, language-family buckets, colour strategies), 13 days old on the pre-rename app-profiles/ paths. They need porting by the research-dashboard owner.
- wip/handoff-test: the 2026-09-16 handoff rehearsal, a prayer-focus-map preset element on app-profiles/, never registered as a plugin.
- studio/plugin-studio-wt-parked: an uncommitted plugin-studio worktree parked from five days back. About 75% of it landed since; an unverified tree rail for VerticalTabsLayout and element nesting in plugin-studio exist only here.
2026-09-29 15:03:27 +00:00