Commit graph

2311 commits

Author SHA1 Message Date
Doxa Maps
1bbfeae07c documentation/DEPLOY.md: the 4 ways dx-maps ships, linked from the README
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Laptop (bun run dev, zero config); a shared cloud dev server (Docker or Coolify, with a persistent /data);
public embeds from /cdn or any static host; the built folder inside a site's public/, as DX-life does.
Each with the command, what you get, and the detailed doc.
2026-09-28 02:27:12 +00:00
Doxa Maps
3725930af9 Merge main into go-int/work
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-28 02:20:11 +00:00
Doxa Maps
dfb3dabe55 Merge remote-tracking branch 'origin/main' into bundler-1/work
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-28 02:16:49 +00:00
Doxa Maps
16218f0043 Rebuild gospel-internet on current main: checkbox hit area, coach-mark off on the presets 2026-09-28 02:16:39 +00:00
Doxa Maps
879bb3a8fe Merge main into go-int/work
# Conflicts:
#	public/dx-maps/doxa-maps-spa/manifest.json
#	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
2026-09-28 02:15:00 +00:00
Doxa Maps
6f20917eb6 Rebuild the consumers main left stale (build owner, README rule 5)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
check:composite-freshness found stale on main: big-picture
country-posters
dashboard-plus-grid
doxa-research-map
gospel-internet
regions-dashboard
research-dashboard. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-28 02:08:50 +00:00
Doxa Maps
d26d4795e5 Rebuild gospel-internet: checkbox hit area, coach-mark off on the presets 2026-09-28 02:03:35 +00:00
Doxa Maps
60b479d8e7 The register said "unestablished" after it was established
upg100-plugin caught it: my THIRD-PARTY.md row 17 stated their licences table
was EMPTY on the very commit where it held all 162. Our landings crossed and
neither of us could see the other's tree. Worse than they framed it -- my own
two files disagreed, since data/boundaries/ATTRIBUTION already carried the 162
and the three duty classes.

Row 17 now records what is true: 162 licences established, 32 duty-free, 65
attribution-only, 65 share-alike class (58 ODbL + 7 explicit ShareAlike), with
the ODbL "Derivative Database" question marked OPEN and legal rather than
measurable. The "unverified, someone should look" paragraph drops from four
rows to three, because world-adm0's provenance is answered.

★ AND THE STRUCTURAL FIX, WHICH MATTERS MORE THAN THE ROW. The counts are
asserted in two files, so that is the one place these records can silently
disagree. The register now names their PROVENANCE.json as the AUTHORITY and
says plainly that if the two disagree, it wins -- drift becomes resolvable
instead of invisible. Their phrase for the failure is the right one: a register
that still reads "unestablished" after the work is done is settled-by-omission
in reverse, the absence of an update reading as the absence of the work.
2026-09-28 02:03:22 +00:00
Doxa Maps
fb8a898d2e Gospel x Internet: 24 px hit area on the row checkboxes; the presets keep the coach-mark off 2026-09-28 02:03:11 +00:00
Doxa Maps
e69e6c79f4 Merge remote-tracking branch 'origin/main' into bundler-1/work 2026-09-28 02:02:37 +00:00
Doxa Maps
1b70728d6f useMapClustering: no console.log in shipped bundles
Two informational logs ran on every clustering pass and shipped in every bundle
that clusters (check:public-hygiene).
2026-09-28 02:01:47 +00:00
Doxa Maps
2ea9b22daa Export poster opens the print dialog on the poster, and downloads nothing
The Driver, 2026-09-28: an export-poster button must open the PRINT DIALOG with a poster preview,
never a direct download. Simple Research was doing exactly the forbidden thing — render a PNG, hand it
to a download helper — so a reader got doxa-prayer-poster.png in their downloads folder with no
preview, no paper size, and no way to print it without opening it somewhere else first.

The dialog IS the preview. printImageBlob() puts the rendered poster on a sheet of exactly the spec's
size (@page 8.5in x 11in, margin 0 — the renderer already composed the margins in) and raises the
dialog over the map. It goes in library/composables/printInPlace.js, which is THE print mechanism here
and already carries the Driver's earlier ruling that killed the pop-up path: an iframe cannot be
blocked and needs no user gesture, so the same call works for a human click and for an agent.

The ellipsis comes back on the label. It was stripped while the button handed over a file directly,
and an ellipsis promises a dialog — which is now what happens.

★ AND THE GATE ASSERTED THE OLD RULING, which is the part worth naming. check-export-one-click passed
while the button did the thing the Driver has now ruled against: it waited for a download and checked
the PNG's dimensions. A gate that encodes a superseded ruling does not just miss the defect, it defends
it — the next person to "fix" this button would have had to break a green gate to do it. It is replaced
by check-export-poster-prints, same four cases (leaf and gallery, en and ar), asserting the new
contract: one click, some frame calls window.print() within 120s, the printing document is the
1700x2200 poster on an 8.5in x 11in sheet, and NO download arrives. window.print is stubbed in every
frame — the native dialog is modal and would hang the run — so this measures everything up to the
dialog and not the browser's own chrome, which is the right boundary for a headless gate.

Why the download half is asserted separately: a button that opens the dialog AND saves a file still
breaks the rule, and a download that lands late is still a download, so it is judged over the whole run
rather than at a moment.

Verified: gates:pre 12/12, check:doc-scripts and check:no-credentials-omit PASS with the rename.
NOT verified here: the new gate needs a browser, and this agent does not start one — rega runs it.
2026-09-28 02:01:46 +00:00
Doxa Maps
ed87323592 Big Picture speaks Arabic where it was still speaking English: chrome and data labels
rega's ?lang=ar pass (KA3, 3d64bcad) found English on a localized map in four places, and the census
behind it explains why no gate saw them. Catalogue coverage is COMPLETE: of the 760 keys my bundles
name across the 21 areas they reach, ZERO are missing from any of the ten non-English locales, and the
per-locale English-identical values are numerals, acronyms and cognates rather than debt. Everything
rega actually read was a string no catalogue ever held.

  · THE PROJECTION PILL said "🌐 Globe" / "▭ Flat" in all eleven locales. The icon is now the label.
    Neither word has a catalogue entry and authoring ten new strings for a two-state toggle to say what
    a glyph already says is the wrong trade — but mapui.enableGlobe / mapui.disableGlobe DO ship in all
    eleven, as the ACTION, which is what a button should announce. They become the accessible name and
    the tooltip. min-width joins min-height on the pill: the 24px used to come free from the text.

  · THE TABLE FOOTER said "Σ 2,107 groups". dashboard.groups has shipped in eleven locales all along
    (ar "مجموعة") and this one call site never read it. Written with the same singular/plural test as
    the header count so the two cannot disagree at one row.

  · THE REGION CHART labelled its bars with the prayer API's English region names. Seven regions is a
    closed set, so they are now CATALOGUED — five generated from vendored CLDR by
    internal/generate-wagf-region-names.mjs, which is the same data countryName.js already trusts.
    Generating is what keeps seventy translations out of my hands. middle_east and
    north_america_&_non-spanish_caribbean stay English: M49 145 is "Western Asia" and 021 is "Northern
    America", and neither means the region we draw. An English label a reader can match to the map beats
    a localized one that names the wrong territory. --check verifies the catalogue against CLDR.

  · TOP COUNTRIES labelled its bars with the API's English country names. By aggregation time the
    alpha-3 is gone, so countryName.js gains iso3ForEnglishName() — reversing its OWN table, exact where
    it matches and silent where it does not — which is precisely the ✓ case its header describes.

One thing found while wiring those: the BAR label was the only chart surface still printing the raw
facet key. The donut, its legend and both tooltips already went through legendLabel(); the bar list did
not, which is why these labels stayed English after the donut was fixed for rega's earlier survey. Both
new facets are projected there, so the two charts cannot disagree about a name again.

English is left EXACTLY as authored. Both projections return the key untouched at locale 'en', which
also keeps the 42 countries whose CLDR name differs from ours reading as they do today. Nothing
localizes a VALUE: data-key, isActive() and every click and filter path still carry the canonical
English, the rule the religion donut already followed.

Verified: gates:pre 12/12, check:i18n-keys-exist / parity / never-translated PASS, and the generator's
own --check PASS. Rendering on ?lang=ar goes to rega.
2026-09-28 02:01:46 +00:00
Doxa Maps
a43415dcae The manifest descriptions were mine
check:public-hygiene reports role nouns in doxa-maps-spa/manifest.json.
studio guessed a meta.json description; it is neither that nor the SPA's.
The manifest generator extracts each element's @description from its SFC
header, and both leaking entries are my files: region-dashboards.vue and
regions-mfe.vue.

Rewritten to describe the element rather than who asked for it. Verified by
regenerating the tree: doxa-maps-spa/manifest.json goes 2 occurrences to 0.

Found the same way as the last two: match the shipped text back to source
rather than reason forward from the bundle name.
2026-09-28 02:01:46 +00:00
Doxa Maps
4244c9097a merge main before the licence landing
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-28 01:57:25 +00:00
Doxa Maps
9cd99cba23 merge main before the licence landing 2026-09-28 01:57:11 +00:00
Doxa Maps
7165c0640d world-adm0's 162 licences are established, and 65 are share-alike
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
upg100-plugin ran the per-country fetch (304a4c120): 162 queries against the
geoBoundaries endpoint, values recorded verbatim, 0 failures, one spot-check
re-verified live. 130 of 162 countries carry a duty; only 32 are duty-free.

ATTRIBUTION now says the world-adm0 duties are DISCHARGEABLE and points at the
single authority for them -- their PROVENANCE.json -- rather than copying the
table, because one table in two places drifts. Their words.

★ THE DUTIES ARE RECORDED AS CLASSES, NOT AS ONE THING. They separated the 7
explicit ShareAlike countries because share-alike is a stronger duty than
attribution, which is right; by the same reasoning the class holds 65, because
Open Data Commons ODbL 1.0 also requires a derivative database to be offered
under ODbL. 58 ODbL + 7 CC-SA. This repository already acted on that reading:
Natural Earth's 1:10m roads were deliberately not shipped over an ODbL
obligation. Whether "licensed alike" binds a giveaway is a legal question, not
a measurement, and it is recorded as open rather than resolved here.

The CCK line is gone. It read as an outstanding gap; CCK is absent from
world-adm0 entirely, so that 404 was a fetch for a country that never shipped.
2026-09-28 01:55:03 +00:00
Doxa Maps
2a692021c0 Boundary attribution travels with the boundaries
The India ADM1 boundary is Creative Commons Attribution (CC BY 2.5 IN,
sourced from DataMeet and the Election Commission of India), so the credit
has to reach whoever receives the data. It did not: 6.1 MB of boundary
GeoJSON shipped with no human-readable attribution, and a sidecar for one
file of eight.

data/boundaries/ATTRIBUTION now ships beside the data. Every licence value in
it is verbatim from the geoBoundaries API, queried per boundary -- CC BY 2.5
IN for India, Public Domain for China. No licence wording is ours.

★ IT TOOK TWO ALLOWLIST EDITS, and the first one silently did nothing. The
boundary staging is TWO-STAGE: a pair list gathers into the build pool, and a
separate path list decides what reaches the tree. I added the file to the pair
list, rebuilt, and it still did not ship. An entry in one stage of a two-stage
pipeline is not an entry.

WORLD-ADM0 IS CORRECTED, not closed. This register first guessed Natural
Earth, public domain. It is geoBoundaries gbOpen assembled per country: its
features carry geoBoundaries' own iso3/shapeGroup/shapeName, and the plugin's
data/adm0/PROVENANCE.json names the source and endpoint. That file also states
the real problem -- gbOpen passes each country's UPSTREAM licence through, so
one file carries up to 162 licences and up to 162 attribution duties -- and
its licences table is EMPTY. Which of the 162 are CC BY is unestablished.
Stated in ATTRIBUTION as an undischarged duty rather than papered over.

pplr's row is exp-shepherd's evidence: the PPLR ArcGIS org aggregating IMB,
Joshua Project, ROP and WCD identifiers, publishing no licence at all, and
WCD is a proprietary Brill database.
2026-09-28 01:55:03 +00:00
Doxa Maps
66d4ebd72e The share-alike field should have held 65, not 7
regions-plugin challenged the record I had just written, and they were right. I gave the 7 explicitly-named
ShareAlike countries their own field because share-alike is a stronger duty than attribution — and by that
same reasoning the field should hold 65. Open Data Commons ODbL 1.0 is itself a SHARE-ALIKE licence for
databases: alongside attribution it requires a Derivative Database be offered under ODbL, and it carries a
keep-open provision. So my 58 ODbL countries are the same class as my 7, and separating them buried exactly
what the field existed to surface.

★ WHAT CONVINCED ME WAS THIS REPO, NOT THE LICENCE TEXT. regions pointed at
library/scripts/posters/data/README.md:36-50, and I read it: Natural Earth's 1:10m ROADS were requested and
DELIBERATELY NOT SHIPPED because of an ODbL attribution obligation. Someone here already dropped a whole
dataset over this class of duty. An argument from the licence would have been my reading of a clause; an
argument from a decision already taken in this tree is evidence.

THE RECORD NOW SPLITS THREE WAYS, with the iso3 lists so each is checkable:
    32  duty-free              (28 Public Domain + 4 CC0)
    65  attribution-only
    65  SHARE-ALIKE CLASS      (58 ODbL 1.0 + 7 explicit ShareAlike)
That is a materially different picture from "130 need attribution, 7 are stronger": it says HALF the
duty-bearing countries may constrain how a derivative is licensed, not merely how it is credited.

⚠ AND IT IS EXPLICITLY NOT A LEGAL CONCLUSION. Whether a redistributed boundary file is a "Derivative
Database" under ODbL is precisely the clause a giveaway needs a real answer on, and neither regions-plugin
nor I is qualified to give it. The record says so in _duty_classes._open and the question goes up with the
other licensing items — visible rather than settled by omission, which is the same failure the empty
`licences: {}` was.

The table stays here as the single source of truth; regions' data/boundaries/ATTRIBUTION references it by
path rather than copying it, because one table in two places drifts.
2026-09-28 01:51:24 +00:00
Doxa Maps
64f392bd03 world-adm0's 162 licences are established, and 65 are share-alike
upg100-plugin ran the per-country fetch (304a4c120): 162 queries against the
geoBoundaries endpoint, values recorded verbatim, 0 failures, one spot-check
re-verified live. 130 of 162 countries carry a duty; only 32 are duty-free.

ATTRIBUTION now says the world-adm0 duties are DISCHARGEABLE and points at the
single authority for them -- their PROVENANCE.json -- rather than copying the
table, because one table in two places drifts. Their words.

★ THE DUTIES ARE RECORDED AS CLASSES, NOT AS ONE THING. They separated the 7
explicit ShareAlike countries because share-alike is a stronger duty than
attribution, which is right; by the same reasoning the class holds 65, because
Open Data Commons ODbL 1.0 also requires a derivative database to be offered
under ODbL. 58 ODbL + 7 CC-SA. This repository already acted on that reading:
Natural Earth's 1:10m roads were deliberately not shipped over an ODbL
obligation. Whether "licensed alike" binds a giveaway is a legal question, not
a measurement, and it is recorded as open rather than resolved here.

The CCK line is gone. It read as an outstanding gap; CCK is absent from
world-adm0 entirely, so that 404 was a fetch for a country that never shipped.
2026-09-28 01:51:14 +00:00
Doxa Maps
3f384aef50 Merge remote-tracking branch 'origin/main' into bundler-1/work 2026-09-28 01:51:14 +00:00
Doxa Maps
2961b3ad22 Rebuild gospel-internet: the always-on tree credit and the map-state link rule
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-28 01:50:36 +00:00
Doxa Maps
e1221a503d Gospel x Internet: an always-on Glottolog credit; old links with map state still open the map 2026-09-28 01:49:44 +00:00
Doxa Maps
304a4c1206 The 162 boundary licences, fetched rather than assumed
regions-plugin's third-party register (their ATTRIBUTION landing) flagged this row as mine, and they were
right: my own PROVENANCE.json already said "gbOpen passes through each country UPSTREAM licence — this
collection is MIXED-LICENCE with per-country attribution duties" and then left `licences: {}` empty. The
duty was NAMED and not DISCHARGED, which is the worst of both — it reads as handled.

★ THE NUMBERS ARE WHY THIS MATTERED, and I did not expect them to be this lopsided:
    130 of 162 countries carry an ATTRIBUTION or SHARE-ALIKE duty
     32 are duty-free (Public Domain 28 + CC0 4)
     58 Open Data Commons ODbL · 44 CC BY 4.0 · 13 CC BY 3.0 IGO · 7 ShareAlike · 2 OGL v3 · …
The repo is meant to be given away, so those duties travel with boundaries/world-adm0*.geojson. Shipping
the file does not discharge them; naming the source does.
⚠ THE 7 SHARE-ALIKE COUNTRIES GET THEIR OWN FIELD (AGO GAB GEO GIN MMR NER TUR) because ShareAlike is a
STRONGER duty than attribution — a derivative may have to be licensed alike — and a blanket "mostly CC BY"
summary would hide exactly the ones that constrain a giveaway.

METHOD: one query per country against the endpoint the file already documents,
https://www.geoboundaries.org/api/current/gbOpen/<ISO3>/ADM0/, throttled at ~3/s, recording
boundaryLicense / licenseSource / boundaryID / boundarySource verbatim. 162 fetched, 0 failures.
Spot-checked SDN against the live API after writing: byte-identical. No licence is inferred — regions'
point that "guessing a licence is worse than recording none" is exactly right, and every value here came
off the wire.

⚠ THE OLD "CCK: meta HTTP 404" GAP IS RESOLVED AS OBSOLETE, NOT FIXED, and the distinction is recorded in
the file. CCK is not in world-adm0.geojson at all — 0 features, absent from the ISO list — so that 404 was
a fetch for a country that never shipped. It took three checks to establish: `.get('CCK',{})` returned None
and I read it as "null licence", then as "failed fetch", before asking whether the key was there at all.
The gaps list is now genuinely empty rather than empty-because-unmeasured.
2026-09-28 01:49:11 +00:00
Doxa Maps
308e1e82ab The joining page opens with the promise the setup actually keeps
repo's zero-config .env.example is on main (8c529c031), verified before writing about it: every DX_* and
VITE_* line is present and empty, empty meaning the local default. That is the follow-up patch I held back
rather than documenting a file whose contents had not landed.

"Every line in it is optional" is a better opening than the list I had, because it IS the zero-config
promise in five words — a reader who copies the file and fills in nothing has a working setup, which is
exactly what the Driver asked the default to be.

Also states what happens if the Mapbox token is left empty: the Mapbox-backed maps do not draw, and the
keyless MapLibre provider is the alternative. My previous wording implied the token was required to get
anywhere, which is not true and is discouraging at exactly the wrong moment.
2026-09-28 01:46:52 +00:00
Doxa Maps
ee868aaa92 Boundary attribution travels with the boundaries
The India ADM1 boundary is Creative Commons Attribution (CC BY 2.5 IN,
sourced from DataMeet and the Election Commission of India), so the credit
has to reach whoever receives the data. It did not: 6.1 MB of boundary
GeoJSON shipped with no human-readable attribution, and a sidecar for one
file of eight.

data/boundaries/ATTRIBUTION now ships beside the data. Every licence value in
it is verbatim from the geoBoundaries API, queried per boundary -- CC BY 2.5
IN for India, Public Domain for China. No licence wording is ours.

★ IT TOOK TWO ALLOWLIST EDITS, and the first one silently did nothing. The
boundary staging is TWO-STAGE: a pair list gathers into the build pool, and a
separate path list decides what reaches the tree. I added the file to the pair
list, rebuilt, and it still did not ship. An entry in one stage of a two-stage
pipeline is not an entry.

WORLD-ADM0 IS CORRECTED, not closed. This register first guessed Natural
Earth, public domain. It is geoBoundaries gbOpen assembled per country: its
features carry geoBoundaries' own iso3/shapeGroup/shapeName, and the plugin's
data/adm0/PROVENANCE.json names the source and endpoint. That file also states
the real problem -- gbOpen passes each country's UPSTREAM licence through, so
one file carries up to 162 licences and up to 162 attribution duties -- and
its licences table is EMPTY. Which of the 162 are CC BY is unestablished.
Stated in ATTRIBUTION as an undischarged duty rather than papered over.

pplr's row is exp-shepherd's evidence: the PPLR ArcGIS org aggregating IMB,
Joshua Project, ROP and WCD identifiers, publishing no licence at all, and
WCD is a proprietary Brill database.
2026-09-28 01:42:41 +00:00
Doxa Maps
0734b24ba0 Merge main into go-int/work
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-28 01:42:30 +00:00
Doxa Maps
6853b822bb Merge remote-tracking branch 'origin/main' into bundler-1/work 2026-09-28 01:38:54 +00:00
Doxa Maps
7138385774 README: link the cloud development guide next to the join-the-table guide
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-28 01:38:28 +00:00
Doxa Maps
8c529c0313 Zero-config local setup: .env.example spells out every local default; README love line
A fresh clone needs no .env. .env.example lists each local setting with its default, and an empty value
means the default: DX_SYNC_REMOTE empty = hot reload of local edits only; DX_PB_URL empty = a local
PocketBase. Rudder's settings are marked as shell-environment only, since the dev server reads them there.
2026-09-28 01:38:28 +00:00
Doxa Maps
86471947fc README quick start: a shallow clone, and Go for Rudder's voice engine (everything else works without it) 2026-09-28 01:38:28 +00:00
Doxa Maps
c1fbb8f50f Rebuild gospel-internet: the tree-first default, collapsed legends and the unclipped selection label 2026-09-28 01:37:11 +00:00
Doxa Maps
f0a3141133 Gospel x Internet opens on the language tree and its legends start collapsed 2026-09-28 01:36:32 +00:00
Doxa Maps
e8ddfc34a6 Vue and Tabulator ship their MIT notices, and a third-party register
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Both are MIT, which asks for the permission notice to be included with the
software. Tabulator's minified .js carried only "(c) Oliver Folkerd 2025" and
its .css carried nothing; Vue's banner names @license MIT but omits the
permission text. Each now has its upstream LICENSE vendored verbatim beside
it -- fetched, not authored, with the URL and sha256 recorded.

★ AND THE ALLOWLIST IS WHY IT WOULD NOT HAVE WORKED. generate-tree stages
vendor/ by an explicit PATH LIST, so the licences sat in data/vendor and never
reached the tree: staged count 0. Vendoring a notice the staging step drops is
not compliance, it is paperwork. Both LICENSE paths are now listed.

documentation/THIRD-PARTY.md is the register the sweep produced: every
non-original thing dx-maps ships, its source, its licence, whether the licence
or attribution actually travels, and the gap. Compiled by inspecting the
SHIPPED tree rather than the source lists, because the question is what a
recipient receives.

Four rows are left OPEN and marked as such. Two are unverified and need a look
(world-adm0's provenance, the pplr upstream). Two need a decision, not a fetch:
people-groups and the 304 derived tables carry data whose redistribution terms
are not established, 36 MB of it. Attaching a licence I have not confirmed
would be worse than the gap, so those go to the Driver. geoBoundaries is
closable by work rather than judgment -- CC BY needs attribution, and the
.meta.json sidecar pattern already exists here for one file of eight.
2026-09-28 01:30:47 +00:00
Doxa Maps
2a328fe68f Every vendored font ships its own licence
Two of the five shipped without one. bebas-neue/LICENSE was 24 lines and
poppins/LICENSE 29 -- our own notes files named LICENSE, pointing at
openfontlicense.org instead of carrying the text. The OFL requires the licence
to travel WITH the font, and these fonts go out in the repo we intend to give
away.

Both now carry their FAMILY'S OWN upstream OFL, fetched verbatim from
google/fonts, which is what brings the real copyright line with it -- Dharma
Type for Bebas Neue, the Poppins Project Authors for Poppins. No licence text
was authored here. Source URL and sha256 are recorded. figtree keeps its OFL
and loses only the six lines of ours that sat above it.

Our prose moved to documentation/vendored-fonts.md, OUTSIDE the served tree,
and that placement is the whole lesson. My first attempt put a NOTES.md beside
each LICENSE, which check:public-hygiene rejected as "documentation in a served
folder" -- three new hard findings, plus a fourth for an internal folder name I
had relocated with the text. The old bebas-neue LICENSE had said exactly this
in its own words, "prose does not belong in a public served folder"; I quoted
that line and then did it anyway. The licence travels with the font; the
explanation travels with the repo.

Whole shipped tree, measured before and after rather than sampled:
role nouns 6 -> 0, hygiene warnings 18 -> 14, findings 1 -> 1 (the pre-existing
assets/ contract one, not mine).
2026-09-28 01:30:47 +00:00
Doxa Maps
48d516265f Merge main into go-int/work 2026-09-28 01:30:08 +00:00
Doxa Maps
5629981dde Every vendored font ships its own licence
Two of the five shipped without one. bebas-neue/LICENSE was 24 lines and
poppins/LICENSE 29 -- our own notes files named LICENSE, pointing at
openfontlicense.org instead of carrying the text. The OFL requires the licence
to travel WITH the font, and these fonts go out in the repo we intend to give
away.

Both now carry their FAMILY'S OWN upstream OFL, fetched verbatim from
google/fonts, which is what brings the real copyright line with it -- Dharma
Type for Bebas Neue, the Poppins Project Authors for Poppins. No licence text
was authored here. Source URL and sha256 are recorded. figtree keeps its OFL
and loses only the six lines of ours that sat above it.

Our prose moved to documentation/vendored-fonts.md, OUTSIDE the served tree,
and that placement is the whole lesson. My first attempt put a NOTES.md beside
each LICENSE, which check:public-hygiene rejected as "documentation in a served
folder" -- three new hard findings, plus a fourth for an internal folder name I
had relocated with the text. The old bebas-neue LICENSE had said exactly this
in its own words, "prose does not belong in a public served folder"; I quoted
that line and then did it anyway. The licence travels with the font; the
explanation travels with the repo.

Whole shipped tree, measured before and after rather than sampled:
role nouns 6 -> 0, hygiene warnings 18 -> 14, findings 1 -> 1 (the pre-existing
assets/ contract one, not mine).
2026-09-28 01:23:01 +00:00
Doxa Maps
cce2a5c904 merge main before landing the docs
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-28 01:21:49 +00:00
Doxa Maps
488ac03bef Merge remote-tracking branch 'origin/main' into bundler-1/work 2026-09-28 01:14:00 +00:00
Doxa Maps
ae899010cf The advanced page: working when your agent lives on a server
Driver via dx-shepherd (ENDTOKEN-UPG-DRV1 item 2). Written entirely from repo's exact text
(END-REPO-CLOUDNAMES) rather than from the architecture doc, because the last page needed two rounds of
corrections and every one was something I would have guessed wrong.

It opens by sending most readers away: "Most people do not need this page." The default is a fresh clone
and `bun run dev`, and a doc that implies otherwise costs a newcomer their first afternoon.

TWO OPTIONS, with option 1 recommended as the Driver asked:
  1. Keep working locally and follow the remote — one line, DX_SYNC_REMOTE. You keep dictation, your own
     database, and a broken push only breaks your own screen.
  2. Run the shared container — everyone opens one URL, and the trade-offs are listed honestly rather than
     buried: no dictation (the engine falls ~4 s behind speech on 2 CPUs, so it ships off), nobody can edit
     on it, one broken push breaks it for everyone, it needs ~2.5 GB and 2 vCPUs, and its database is the
     shared team one.

★ THE CONDITION I GAVE ITS OWN CALLOUT is the one that bites silently: the sync only fast-forwards when you
are on the branch with no unsaved edits AND no local commits. Otherwise it stops pulling and says "main is
N commits ahead". That is protective, and the consequence is not obvious — leave local commits sitting
while an agent lands twenty changes and the eventual pull carries a day of divergence. So the page says
"push your own work, or you will drift" in as many words.

EVERY CLAIM VERIFIED IN THE SOURCE, not taken from the message: deployment/cloud/ exists with its
Dockerfile and README, that README really does carry the OIDC_* settings (12 mentions), entry.sh defaults
PULL_INTERVAL to 15 and RUDDER_ENGINE to 0 — which is exactly the "it falls behind so we switched it off"
repo described.
No internal names: the only hit was `dx-maps-dev`, which is the Docker IMAGE TAG in repo's own command, not
a hostname. Same substring trap as 'aggregates' matching 'rega'.
Cross-linked both ways with HOWTO-join-the-table.md.
2026-09-28 01:12:43 +00:00
Doxa Maps
cd6148681e Rebuild the consumers main left stale (build owner, README rule 5)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
check:composite-freshness found stale on main: none; also rebuilt: all-people-groups big-picture cities-internet country-posters dashboard-plus-grid demo-map doxa-maps-spa doxa-research-map doxa-simple-map doxa-vision-card golden-path-check gospel-internet gospel-resources my-upg-100-list people-groups-grid plugin-studio pplr-data-maps prayer-walk-planner regions-dashboard research-dashboard research-map-plus-grid rudder-voice stack-demo upg-neighbor wall-of-people-groups. Rebuilt, tree + SRI
regenerated; the landing precondition (fresh, one folder, SRI) passed in main-capture scan.
2026-09-28 01:10:09 +00:00
Doxa Maps
7ee1f83aca merge main into packet/vertical 2026-09-28 01:02:10 +00:00
Doxa Maps
9889416b8c Local is the default and needs no configuration — reverting the team-database wording
Driver 01:10Z via dx-shepherd: the DEFAULT is everything LOCAL, zero config. A fresh clone plus
`bun run dev` gives the Studio, dictation, hot reload and a local database, and never reaches a remote
database or Docker. The team database is OPT-IN.

My 674d5655 said the opposite — that most teams point every laptop at the shared one and the local one is
"the fallback". That wording came from repo (END-REPO-PBDOC) and was correct when they gave it; the
decision moved the same day. Inverted here: local is the default and the opt-in line is what needs
explaining, not the other way round.

⚠ AND THE TABLE ABOVE IT WOULD HAVE KEPT SAYING THE OLD THING. Its middle row read "the team — this is
usually the default", six lines from a section now saying the opposite. Fixed in the same pass: the laptop
row is marked as the default, the shared row as opt-in. Third time in this file that a line has survived an
edit around it and quietly stopped agreeing with the prose — the only way to catch it is to re-read what
you did NOT change.

Also states the zero-config claim explicitly where a newcomer meets it first ("That is the whole setup.
Nothing to configure, no server to reach, no Docker"), because "everything is local" and "you have nothing
to set up" are different promises and the Driver is making the second.

Cross-links CLOUD-DEVELOPMENT-ENVIRONMENT.md for people whose agent runs on a server, with "most people do
not need it" — that doc is next and its exact env names are with repo.
2026-09-28 00:59:32 +00:00
Doxa Maps
db2479a310 Gospel x Internet: the selection strip label is never clipped; only its chips clip 2026-09-28 00:57:55 +00:00
Doxa Maps
170febe2de Strip CSS comments from every shadow-style literal shape, not only useShadowStyles(…)
The build-time stripper matched only a literal passed directly to
useShadowStyles. Literals appended to shared styles (useShadowStyles(X + `…`))
and named literals (const NAME_CSS = `…`, export const NAME_STYLES = `…`)
shipped their comments verbatim; three plugins' comments reached public bundles
that way (check:public-hygiene). All three shapes are stripped now.
2026-09-28 00:56:58 +00:00
Doxa Maps
9ce04ffea0 Merge main into go-int/work
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-28 00:49:57 +00:00
Doxa Maps
a44d88730f check:gospel-internet renders every panel in zh, ru and hi too
The production bar's cell E names en, ar, zh, ru and hi; the render check
measured two. It now server-renders the board in all five and requires
each panel to render with no error and the board's text to be the
locale's, not English.
2026-09-28 00:47:58 +00:00
Doxa Maps
d8ae55e381 Merge branch 'main' of https://git.nuxtbase.app/doxa-life/doxa-maps into bundler-3/work
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-28 00:46:31 +00:00
Doxa Maps
b3ade5c384 Neutral wording in a table strangers read
check:public-hygiene is the white-label gate for the giveaway, and translator-org-links.json
shipped an internal role noun: the held-Bible-Society reason read "...is the Driver's ruling, not
this script's". A recipient reading our data files should not meet our process vocabulary. It now
reads "a product ruling", which keeps the meaning exactly — the point was always that this build
will not decide a doctrine question on its own.

Fixed in the script that writes the table, not the artifact, or the next build would put it back;
the same phrase in that file's header comment went too, rather than waiting to be flagged
separately now studio has closed the comment half of this class.

Regenerated by re-running the verifier: 16 of 16 organisations answered again, so the table is
current rather than hand-edited. My published tables now carry no internal vocabulary — checked
with word boundaries across all of them, which is also how I learned the six "rega" hits reported
in my sweep were the word "aggregates".
2026-09-28 00:45:42 +00:00
Doxa Maps
75ab636b93 Merge main into go-int/work
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-28 00:41:09 +00:00