Commit graph

3603 commits

Author SHA1 Message Date
Doxa Maps
de6d60378e Merge origin/development into studio/integration 2026-09-29 16:38:05 +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
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
f8504182c8 Merge origin/development into studio/integration 2026-09-29 15:45:28 +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
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
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
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
Doxa Maps
62afbdcdf3 check:ported-globals-identical compares only the ported rules, not the whole stylesheet
The gate hashed each component's entire emitted CSS, so any unrelated style change
in these four files (Regions giving three :host rules position:relative) failed it,
and could pass only by re-baselining a guard that exists to prove something else.
It now hashes what library/styles/portedGlobals.js emits, found in the executed CSS:
each cyrillicHeading and strongMedium rule with the selectors in front of it, and
each scrollbar-gutter declaration with its rule's selector.

Re-baselined on the tree the old gate passed on. Proven both ways: re-scoping
GoalCard's strong rule, changing the module's Cyrillic letter-spacing and dropping
a file's ported rules each fail it; --write refuses to baseline an empty block.
2026-09-29 15:03:05 +00:00
Doxa Maps
2efde93a31 Rebuild the five composites the handoff merges touched
BUNDLE=<name> bun x vite build for cities-internet, gospel-internet,
gospel-resources, plugin-studio and rudder-voice, then bun run tree and fix:sri.
Regenerated on this tip, never merged: the scan refused the previous sha with
gospel-internet stale (committed 7361a689e3a6 against a rebuild of ce15dd0ba73f).
2026-09-29 15:02:05 +00:00
Doxa Maps
5539710503 Merge remote-tracking branch 'origin/development' into bundler-2/handoff 2026-09-29 15:01:31 +00:00
Doxa Maps
60b7023c3a Merge development into exp-shepherd/handoff-merge 2026-09-29 15:00:58 +00:00
Doxa Maps
3b41321d18 Merge remote-tracking branch 'origin/development' into dx-base/handoff-integration 2026-09-29 15:00:47 +00:00
Doxa Maps
bd1c2374cc Merge development into exp-shepherd/handoff-merge 2026-09-29 15:00:33 +00:00
Doxa Maps
56f049d11c Merge origin/development into repo/integration at the landing turn 2026-09-29 14:59:51 +00:00
Doxa Maps
6df5fe07ff Record as merged, content NOT taken (already on development / superseded / abandoned)
The tree is unchanged: each branch below carries nothing development lacks, verified
branch by branch against origin/development before this commit.

- bundler-1/work: superseded; its check-hardcoded-english work is on development in a later form (8 of 10 subjects landed; per-locale catalogues, resolveKey, static dir="ltr" islands).
- bundler-1/hce-canary: already on development; all 7 subjects landed (76fe9ddf2, 4b0751998, 87c562d55, 982375e08, f3f57f6a0, 50a6539e1, 8a6e5543c).
- bundler-1/vertical-legend: superseded; its ListSelectorLegend was deleted from development as unreachable (c5c01dead), RegionCountryMap moved into library (c99fe68c3), the rest is on development.
- bundler-1/c2-projection-helper: already on development; the helper and its call sites landed, and its remaining hunks touch files development has since removed.
- plugin-studio/organize: superseded; parked WIP replayed as separate landings (87ebbace9, fb7ed4566, verify-map-paint GATE_VIEWPORT); its map-leaf-paints draft was superseded by verify-map-paint and check-gospel-map-paints.
- studio/mobile-flag: already on development as 9a8307706.
- studio/sweep-lib: already on development as bfc99ff82 and d314c4404.
- studio/dx-maps, studio/dx-maps-3: already on development as 09014f8a0.
- _library-for-studio: already on development as 57bf76422.
- studio/onerepo, studio/onerepo2: abandoned; auto-WIP backups of the census and rename-codemod work, whose finished parts landed separately (ab17c9b6a, 87ebbace9, cc3651919, 899118109).
- studio/round31, studio/vendor-maplibre: content taken in this branch as 7c99d1a06, 9d00aa3db, f8d0a7d9c, 8eb4e498f and fc7259e06; the originals are recorded here.
2026-09-29 14:59:07 +00:00
Doxa Maps
d7ec917023 Record as merged, content NOT taken (already on development / superseded / abandoned):
- repo/auto-signin: carried by repo/handoff's 6df2da9c9 (merged above), replayed with its entry.sh conflict against V2 and DEV_SERVER resolved; UNVERIFIED, default off.
- repo/plugin-designer-skill: on development with edits: cde106a55 landed as f66650462, and the other four are in skills/plugin-designer/SKILL.md sections 2, 5, 8 and 9-10 in newer wording.
- repo/gospel-number-revert: abandoned. The numerals hold became the LOC-ENUS warn in check:universal-props, pending the numerals decision, and gospel has since rewritten the files it touches.
- repo/land-shots, repo/land-shots4: superseded by later README screenshot retakes on development (6e5c0874d, 09-27 09:58Z, and after).
2026-09-29 14:58:20 +00:00
Doxa Maps
69875bbfe8 Rebuild my-upg-100-list, country-posters and regions-dashboard, and regenerate the tree 2026-09-29 14:57:57 +00:00
Doxa Maps
7c2d4d21b2 Record exp-shepherd's 21 unmerged branches as merged, content NOT taken (already on development / superseded / abandoned / parked)
Already on development by content (it landed under other shas, often with edits):
- composite-interop-gate: check-composite-interop is registered.
- cp-i18n: the legend keys; the country wall is translated in upg100's pass 03839179b.
- drvref: source c2473d0e4 (L13); the rebuild was regenerated as c8f9b3882.
- i18n-pplr: pplr.tabs.* and pplr.status.*.
- internet-adm1-full, internet-adm1-india: build-adm1-internet.mjs, India by state.
- list-prop-tier-a: library/lists/peopleGroupList.js.
- pplr-d3-no-merge: loadPinnedUmd in pplrData.js.
- pplr-globals: connectivity-map deletes window.__ciMap on unmount.
- print-floor: R23, printInPlace FRAME_KEEP_MS and check:print-frame-reclaim.
- pwp-hamburger: the Zones drawer.
- template-map: template-map-a is the real map.
- upgn-howto-keys: neighbor.about.greenTitle.
- uprops-allow: the upg-neighbor ALLOW in check-universal-props.
- wall-keys: wall.drawLibError and the share keys.

Superseded:
- mobile-gating: by the phone-flag implementation 51ef6f7ec.
- wall-sizes: by the Wall A6 sizes and footer, 35df7410d.
- research-core: by the shared legend-map bridge refactor of the same twins, 155c774b2.
- apg-lite: by apg-perf2, 1bbc5ff87 (the APG2 ruling); it keyed a thinning to software rendering, which is what test rigs have, not readers.

Deliberately not taken, pending a product decision, and reachable in history:
- wall-4x6: a 4 x 6 ft preset outside the brief's size set (sheet row 117).
- wall-d3-measure: MEASUREMENT ONLY, the A9 bundling trade-off; no npm deps added.

The tree is unchanged: an octopus merge with the 'ours' strategy.
2026-09-29 14:57:28 +00:00
Doxa Maps
fc7259e06d The map engine loads from the tree it was served from, with the CDN as fallback (unverified)
UNVERIFIED: carried into the handoff without a browser run on this base.

MapLibre GL came from cdn.jsdelivr.net: a second origin to connect to before a
map could start. generate-tree now copies the pinned maplibre-gl JS and CSS from
node_modules into <tree>/vendor/maplibre-gl@5.24.0/ and stops the build if their
bytes do not match the integrity pin. A built bundle loads the engine from its
own tree with that same pin, one cached copy for every bundle, and falls back to
jsdelivr if the copy is missing. Mapbox GL stays on api.mapbox.com.
2026-09-29 14:56:52 +00:00
Doxa Maps
8eb4e498fc check:composite refuses a verdict built from files no commit has (unverified)
UNVERIFIED: written, not yet run end to end; the handoff stopped it here.

The rebuild runs in the working tree, so it can read what no commit carries: an
untracked locale a glob picks up, a VITE_* key from an untracked root .env that
the code reads (apiBaseUrl.js reads VITE_API_BASE_URL), a build env var such as
DOXA_QA. Bytes built from those prove nothing about freshness, and the landing
precondition caches a PASS per tree id. Build env vars are now scrubbed from each
rebuild; vite.config.js writes down every file a build read when DOXA_BUILD_INPUTS
is set (only this gate sets it); a bundle whose rebuild read an untracked file or
such a key is NOT MEASURED (exit 75), naming the files.

Measured before the stop: an untracked .env.local with an unreferenced VITE_ key
leaves all-people-groups byte-identical (cf536c63), so only keys the code reads
are held against a bundle.
2026-09-29 14:56:52 +00:00
Doxa Maps
f8d0a7d9c0 check:ported-globals-identical compares only the ported rules, not the whole stylesheet
The gate hashed each component's entire emitted CSS, so any unrelated style change
in these four files (Regions giving three :host rules position:relative) failed it,
and could pass only by re-baselining a guard that exists to prove something else.
It now hashes what library/styles/portedGlobals.js emits, found in the executed CSS:
each cyrillicHeading and strongMedium rule with the selectors in front of it, and
each scrollbar-gutter declaration with its rule's selector.

Re-baselined on the tree the old gate passed on. Proven both ways: re-scoping
GoalCard's strong rule, changing the module's Cyrillic letter-spacing and dropping
a file's ported rules each fail it; --write refuses to baseline an empty block.
2026-09-29 14:56:52 +00:00
Doxa Maps
9d00aa3db4 check:snippets-draw: every published snippet, pasted verbatim on another origin, must draw (awaiting its first run)
Ported from rega's snipgate and mbxcheck probes (card GATE-EVERY-PUBLISHED-SNIPPET-DRAWS-A-MAP). Two scripts so the keyless arm never waits on a token: check:snippets-draw pastes each production embed.script and requires a MapLibre map to draw (a hooked instance with its style loaded via a setter trap on the engine global, a sized canvas, tiles 2xx, no failure note, 0 page errors); check:snippets-draw:mapbox does the same over embed.scriptMapbox with only the token filled from MAP_TOKEN, NOT MEASURED without one and never printing it. Composites that open on a list (regions-mfe, upg-100-mfe) are pressed to their map view under the settle rule first, since a hidden pane still draws a canvas. The browser slot is checked before any server starts, and the tree server is spawned --exit-with-parent. Registered and declared on demand until rega's first run; it joins verify-browser-all after.
2026-09-29 14:56:52 +00:00
Doxa Maps
7c99d1a06c A gate's tree server dies with its gate: serve-strict --exit-with-parent, passed by every spawning gate
On 2026-09-29, 41 serve-strict processes had outlived the gates that started them: 279 MB resident,
the oldest 5.3 days, spread across eight worktrees. A gate that crashes, is killed, or is refused by the
browser-slot guard's process.exit cannot run its own srv.kill(), and _serve-reaped's handlers cover
signals and normal exit but not a SIGKILLed parent.

serve-strict takes --exit-with-parent: it records the pid that started it and exits within 2 s once
that process is gone. Opt-in, so a server someone deliberately left running is never taken down.
Every internal/ gate and tool that spawns it now passes the flag (14 files, plus _serve-reaped, the
shared helper). Proven: a parent that spawns the server with the flag and exits abruptly (as the
guard does) leaves it alive for a moment and gone within 3 s.

The orphans already running belong to other worktrees' runs and are left to their owners; plugin-local
scripts that spawn serve-strict should pass the flag too.
2026-09-29 14:56:38 +00:00
Doxa Maps
d3cdc2c3bc Two gates the branch backlog turned red
Seven Driver citations came back with the merged branches. Each keeps its
engineering reason and its date, and loses the speaker: the overlap report, the
poster's legend rule, the network-change defect, the chart's provenance.

check:plural-forms crashed rather than failed. It built its locale list by
listing the catalogue directory, so a README.md moved in beside the locale
folders became a 'locale', passed the exists check because a file does exist,
and crashed readdirSync on a non-directory. It now filters to directories. The
gate on development has the same line and only survives because that README is
not there yet -- so this is a fix for development, not a merge artefact.

Both found by running the full 103-gate chain; the shortened chain the merge
produced ran neither.
2026-09-29 14:55:35 +00:00
Doxa Maps
53aac9a5dd Record as merged, content NOT taken (already on development / superseded / abandoned)
Every ref below was checked by CONTENT against this branch before being recorded (added lines
present, or the files identical); none carries anything development lacks.
- drvref: the Driver-reference sweep, landed as 538e2fb78.
- i18n-classes, i18n-classes-r22, cp-i18n-audit: the UPG-100 i18n batch, landed in R23 (03839179b...).
- live-switch: landed as 206723355 (+ 77889d3df Country Posters names).
- packet-a1, packet-a1-dev, -dev2, -dev3, packet-map-missing-loud: the packet structure, titles,
  evangelical page, page-1 country names and missing-map sentence, landed as 2367c2ef6, b2ad4607e,
  bc422bb67, 87c59e3a1, 88991641c, ef6000c5d, 646c23cc0 (later edited; patch-ids differ).
- review-fixes-backup: the print-standard backup, landed as f8744925e, 88f747cf5, b95c40e0f, 7067c0ae9.
- formatlist, formatlist-land: landed as a6482b9f5 + 2dd05a58b.
- pair1: landed in R29 (d0da78123). poster-progress: landed in R25 (14f4cb2d9).
- packet-data-posters, packet-sets, packet-vertical, select-zone-gate, js3: 0 unmerged patches; landed earlier.
- handoff: my earlier integration attempt; its one commit is byte-identical here via the
  group-set-standard merge.
- zone-title-tier-a: its commits are the list-pattern ones merged above + already-landed ones.
- origin/window-globals: fe22dcb49, all 31 added lines present; development has it as 988092d36.
2026-09-29 14:55:34 +00:00
Doxa Maps
cfd03d0250 PATTERN-A-LIST-OF-ZONES keeps the rule and drops the speaker
Three lines brought in with the list-pattern doc cited the Driver; the
reference gate refuses them. The rule, the scope and the open exception
stay as stated, without the attribution.
2026-09-29 14:54:47 +00:00
Doxa Maps
65729d608d Register and chain check:list-pattern-doc
The list-pattern gate (internal/check-list-pattern-doc.mjs) came in with
its doc but was never registered, which check:no-orphan-gates refuses.
Registered, and chained into gates:pre: it is headless and re-derives the
7 numeric claims in PATTERN-A-LIST-OF-ZONES.md from the data files.
2026-09-29 14:54:47 +00:00
Doxa Maps
33864ffac7 Record as merged, content NOT taken (already on development)
- rega/gi-heavy (05b5a3e62): already on development as f9ce2aeb4 (same
  change: the gospel-internet board counted as a heavy Gallery tab);
  all 6 files it touches were changed later on development.
- rega/readme-shots-7a7ca67b (12070ba36): already on development as
  17763cdcc (20 of its 23 shots) and 6e5c0874d (the other 3); all 22
  files it touches were retaken later on development.

Merge strategy "ours": the tree is unchanged.
2026-09-29 14:54:32 +00:00
Doxa Maps
4dd858fb9a Merge upg100/list-pattern into development (handoff)
# Conflicts:
#	internal/check-ported-globals-identical.mjs
#	internal/fixtures/ported-globals-baseline.json
2026-09-29 14:54:21 +00:00
Doxa Maps
cbdf5546c4 Keep the reason, drop the speaker, in two comments the merge restored
Merging gospel/a5-cpu and gospel/panel-followup brought back two comments that
quote the Driver directly, and check:no-new-driver-references failed on them —
correctly. Development had already swept these; the merge reintroduced them from
an older base.

Both keep their reasoning and lose the attribution: a recording pill that
changes width on every word reads as instability, and on a phone the header can
take most of the panel, leaving the draft unscrollable and its last lines
unreachable. Those are the facts the rules encode; who said them is not.
2026-09-29 14:54:15 +00:00
Doxa Maps
30fbc659ed Merge upg100/pane-clip into development (handoff)
# 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/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/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 14:53:54 +00:00
Doxa Maps
844fc60d0e Merge upg100/group-set-standard into development (handoff)
# Conflicts:
#	library/scripts/posters/packet.mjs
2026-09-29 14:53:36 +00:00