Commit graph

4861 commits

Author SHA1 Message Date
Doxa Maps
05ae488eac The view-address census: data-tables.vue no longer writes history directly (Show all goes through commitUrl) 2026-10-03 07:58:01 +00:00
Doxa Maps
d94e5351a3 Merge remote-tracking branch 'origin/development' into gospel/gr-clearfilter
# Conflicts:
#	internal/check-view-address.mjs
2026-10-03 07:58:00 +00:00
Doxa Maps
bcbaa816ae Merge remote-tracking branch 'origin/development' into regions-plugin/view-address-p2 2026-10-03 07:48:30 +00:00
Doxa Maps
04057b9177 Merge remote-tracking branch 'origin/development' into regions-plugin/view-address-p2 2026-10-03 07:38:38 +00:00
Doxa Maps
32c6eb4fd4 Rebuild gospel-resources from the merged pilot, and regenerate the tree 2026-10-03 07:34:30 +00:00
Doxa Maps
3be82cb23f Shareable pages P2: rebuild the reached bundles from the merged source, then the tree and SRI 2026-10-03 07:34:06 +00:00
Doxa Maps
f85e880b2c Gospel Resources: its two checks run in gates:pre again after the pilot merge 2026-10-03 07:31:02 +00:00
Doxa Maps
055b17b5b1 Merge remote-tracking branch 'origin/development' into gospel/gr-clearfilter
# Conflicts:
#	package.json
#	public/dx-maps/doxa-maps-spa/manifest.json
#	public/dx-maps/gospel-resources/charts/index.html
#	public/dx-maps/gospel-resources/data-tables/index.html
#	public/dx-maps/gospel-resources/gospel-dashboard/index.html
#	public/dx-maps/gospel-resources/gospel-resources.js
#	public/dx-maps/gospel-resources/resources-list/index.html
#	public/dx-maps/gospel-resources/resources-map/index.html
#	public/dx-maps/manifest.json
2026-10-03 07:31:01 +00:00
Doxa Maps
8fcb784556 Merge development into repo/readme-desktop 2026-10-03 07:30:42 +00:00
Doxa Maps
98e8cace71 Merge origin/development into studio/leaf-escape 2026-10-03 07:25:28 +00:00
Doxa Maps
ef49411405 Merge remote-tracking branch 'origin/development' into regions-plugin/view-address-p2 2026-10-03 07:23:34 +00:00
Doxa Maps
0b066ba1ae Merge the Research Gallery's dev manifest fallback (shareable pages P2 assembly) 2026-10-03 07:19:40 +00:00
Doxa Maps
edbd280d4d Research Gallery dev fallback: the manifest at the public root first, so the dev server serves children as the raw build
Reached as /public/<tree>/, the dev server treats a built bundle as source and
injects an import into its IIFE, so a child loaded as a classic script threw
"Cannot use import statement outside a module" on the staging page. The root
path is tried first; /public/<tree>/ stays last, for a plain static server.
Built trees resolve the manifest before these fallbacks and are unaffected.
2026-10-03 07:19:22 +00:00
Doxa Maps
49b0fff62b Merge Posterverse's dev manifest fallback (shareable pages P2 assembly) 2026-10-03 07:18:40 +00:00
Doxa Maps
09d884ce3a Posterverse: on the dev server, read the built tree from its root, not /public/
On a staging page the manifest fallback was /public/<tree>/manifest.json, which
made /public/<tree>/ the base for every child script. The dev server treats a
/public/… request as source and injects an import into the built IIFE, so the
child failed as a classic script ("Cannot use import statement outside a
module"). The fallback is now /<tree>/manifest.json, where the dev server serves
the built tree unchanged. Built trees are unaffected (they resolve the manifest
before this fallback).
2026-10-03 07:18:00 +00:00
Doxa Maps
3e041ba646 Rebuild gospel-resources for the loading line's table name 2026-10-03 07:05:25 +00:00
Doxa Maps
a6c5ca5a86 Gospel Resources tables: the loading line names the table it is loading 2026-10-03 07:05:01 +00:00
Doxa Maps
492229c5ba Rebuild gospel-resources for the tables fixes, and regenerate the tree 2026-10-03 07:04:04 +00:00
Doxa Maps
723cd53b43 Gospel Resources tables: the loading line calls the page's own translator, so it no longer throws on every load; a gate keeps template translators bound 2026-10-03 07:01:47 +00:00
Doxa Maps
1fee1009bb Dev server: the leaf check runs before every landing; the framed reason corrected
check:dev-leaf-escape and its self-test join gates:pre. The comment on the
dev pages' owner rule named the wrong reason for leaving a framed page
unowned: the frame is a partner page that iframes a leaf (the iframe
embed). Plugin Studio mounts its rows directly.
2026-10-03 06:55:10 +00:00
Doxa Maps
15d0ef3558 Gospel Resources: Show all writes through the one history writer, only on a page it owns, and its check runs in gates:pre 2026-10-03 06:54:24 +00:00
Doxa Maps
5d3218acfd Merge remote-tracking branch 'origin/development' into studio/leaf-escape 2026-10-03 06:53:17 +00:00
Doxa Maps
05d82ca558 README: agents join the pilot; only the landing branch is landed on
Four lines outside the swarm section still used 'land' for a change joining development: the agents' first bullet, the Plugin Studio line, the cloud dev server and the laptop-follows paragraph. They now say join / add to the pilot, so 'land' only ever means the landing branch.
2026-10-03 06:52:48 +00:00
Doxa Maps
dcb005a734 Merge origin/development into gospel/gr-clearfilter 2026-10-03 06:51:57 +00:00
Doxa Maps
f6594b77c7 Rebuild the Share button's importers for the Share menu (shareable pages P3); tree and SRI regenerated
The precondition's scope against the pilot (its own step-4 rule): every bundle
that imports ShareButton/MapControlMenu or reads the share catalogue area, plus
the P1 shells. Built one bundle at a time, then bun run tree + fix:sri.
gates:pre 141/0/1, gates:post 99/0/16.
2026-10-03 06:48:36 +00:00
Doxa Maps
dacb9a0762 useViewAddress: unchanged means the same view-key VALUES, not the same string
Measured in a browser on a fresh load: ?owner=x&pane=map came back as ?pane=map&owner=x through one replaceState.
viewSearch puts the view keys first, and writeViewKeys compared strings. The link meant the same thing and no Back
step was added, but it was a needless write, and on a host it would be a needless router.replace. writeViewKeys now
compares the parsed tab/pane/place. check:view-address B covers it, with a poison (44); the real-file revert fails.
2026-10-03 06:45:39 +00:00
Doxa Maps
6f94ff0e30 pane-wrapper: a pending link is also retried by a bounded rAF with an observer present, and by every settled scroll
From the 5B: an observer fires only when the COLUMN resizes. A pane whose height arrives later (styles adopted late
in a shadow root) would have left the link pending, and a pending link blocks the settle's write. check:view-address
covers it: a fresh load whose observer never fires again still opens the link (43 poisons).
2026-10-03 06:42:17 +00:00
Doxa Maps
2b62cc0120 Merge Country Posters' pane address (shareable pages P2) 2026-10-03 06:39:09 +00:00
Doxa Maps
7ad84e5610 pane-wrapper: a fresh load with ?pane= opens that pane once the column has its layout
Measured in a browser on Country Posters and on Regions: a fresh load with ?pane=<second pane> stayed on the first
pane, with the column's scrollTop 0 at 6 s. The column is built in the composite's onMounted, before it has a
layout, so the pane's offsetTop was 0 when the link was shown. And a ResizeObserver's first callback, which comes
after layout, only recorded the height.

Now the link waits until the column has a height and the pane a top, then shows it once. The wait is the observer's
callback, or a bounded rAF without one. A scroll that settles while the link waits does not overwrite it. The
composite's view readout follows from the scroll event it already listens to.

check:view-address F models a column with no layout at build, whose observer first fires after layout. There are 2
new poisons (42 in all), and restoring the old immediate show in the real file fails the gate.
2026-10-03 06:39:09 +00:00
Doxa Maps
4428156bfe Country Posters' panes are in the page address: on its own leaf the open pane is ?pane= (Map; the first pane is the default), and nested it announces to the shell, the same opt-in as Regions and UPG100 2026-10-03 06:36:09 +00:00
Doxa Maps
6884c2a052 README: the production count follows the manifest; the rollback point is the outgoing release's version tag
manifest.json marks 8 maps production (the gallery's 7 plus the country map); Country Posters and Poster Design are in the gallery but still marked experimental, and the README now says so. Publishing tags the outgoing release with its own version (v0.2.0 in the example), which is the rollback point; going back means deploying the previous release's tag.
2026-10-03 06:33:28 +00:00
Doxa Maps
54fdead5e1 check:view-address: every composite that opts into the address also owns its leaf (a census from the tree, 40 poisons) 2026-10-03 06:32:22 +00:00
Doxa Maps
8a90eb5000 README: describe how the work actually lands, and today's map counts
PR branches start from the pilot and take in the latest pilot by merging, never rebasing; a second
agent, usually the repository's agent, reads the change (and looks at it where it shows). In the lock
the pilot is merged once more, gates:pre and gates:post run with the landing checks
(internal/landing-preconditions.mjs), and the branch is pushed only if nothing fails. There is no
single build owner: each change rebuilds the bundles it reaches, then the tree and SRI. Publishing
tags the outgoing release as a rollback point, runs both gate sets on the exact commit, and builds the
landing demo from the release tag. The counts follow the code: the Research Gallery composes nine maps
(plus Country Posters and Poster Design, both in Prayer Mobilization, so they leave the Experimental
list), ten maps are in production with the country map, and Posterverse brings six poster plugins
together. The glossary's "merge" row matches.
2026-10-03 06:32:00 +00:00
Doxa Maps
19bf214650 Merge UPG100's pane address (shareable pages P2) 2026-10-03 06:31:53 +00:00
Doxa Maps
08d236e0df check:view-address: each shell's ownAddress wiring (G), with a poison per shell (38 poisons) 2026-10-03 06:31:40 +00:00
Doxa Maps
ce15aba511 UPG100: the composite's pane in view is part of the page address (?pane=) 2026-10-03 06:31:14 +00:00
Doxa Maps
68842185ea Merge Plugin Studio's ownAddress (shareable pages P2) 2026-10-03 06:30:42 +00:00
Doxa Maps
00577668d6 Merge the Research Gallery shell's ownAddress (shareable pages P2) 2026-10-03 06:30:32 +00:00
Doxa Maps
86a601b3b2 Merge the Posterverse shell's ownAddress (shareable pages P2) 2026-10-03 06:30:18 +00:00
Doxa Maps
e4c31b6583 Research Gallery: a nested composite's pane and place reach the page address (shareable pages P2)
ownAddress on the shell's element, while the page owns its address: a nested
composite's open pane or selected place is written by this shell, the page's
one writer, and a nested element can never switch the shell's tab. Released
in beforeUnmount.
2026-10-03 06:30:10 +00:00
Doxa Maps
5a3194bd08 Plugin Studio: a nested composite's pane and place reach the address
Studio owns the page address and writes ?tab=. A composite nested in a
tab announces its own choice (its open pane, its selected place); Studio
now records that beside ?tab=, while it owns the address, so a reload
or a sent link opens the same pane and place. Only pane and place: the
tab stays Studio's own. The listener is released on unmount, before the
hot-update return.
2026-10-03 06:30:07 +00:00
Doxa Maps
8c05f6207a Posterverse: a nested plugin's view inside a tab reaches the address
The shell owns the address for the views inside its tabs too: a nested
composite's ?pane= / ?place= choice is recorded through the shared helper, only
while this page owns its address, never as a tab switch, and the event stops at
the shell.
2026-10-03 06:29:51 +00:00
Doxa Maps
c963a2a9fa P2: studio's 5B notes. A nested element cannot switch the owner's tab, a kept-alive pane or place is claimed back when its tab is shown again, and scrollTo takes null
- ownAddress records only pane and place. tab is the owner's own key, so a nested announcement cannot switch it.
- A shell keeps Regions (and UPG100) alive when another tab is open. Switching back dropped ?pane= and ?place=
  (the tab change), while the screen still showed them. pane-wrapper and region-dashboards now watch for being
  shown again (a ResizeObserver: no height, then height) and claim their pane / place back with a replace. An
  address that names one wins, because Back to an entry of this tab is applied while the column has no layout.
- scrollTo(id, null) behaves as scrollTo(id).

check:view-address covers each of these (34 poisons, each caught). The slow pane-wrapper arm runs only for
pane-wrapper poisons, so the self-test takes 16 s.
2026-10-03 06:26:53 +00:00
Doxa Maps
9c170fd143 README + diagram: three roles, one shepherd agent that all the other agents talk to
The agent model names exactly three roles: one agent per repository (handles its branches, watches the work in it), one agent per plugin, and one shepherd agent that all the other agents talk to, which keeps order and puts the merges onto the pilot in order. The harness paragraph, the kitchen list, the alt text and the diagram's circle, caption and legend say shepherd. The PNG is re-rendered at 2x.
2026-10-03 06:26:51 +00:00
Doxa Maps
e7879fb8c6 README + diagram: the repo agent reads every change
With the roles as they are (one coordinator, one repo agent per repository, one agent per plugin), the step that read every change before it joins the pilot is the repo agent's, not an unnamed second reader: the summary row, the PR-branch bullet, the diagram's banner and its step 2 card say so. The PNG is re-rendered at 2x.
2026-10-03 06:25:13 +00:00
Doxa Maps
31ebb77a07 README + diagram: the roles as they are, one coordinator, one repo agent per repo, one agent per plugin
The swarm section and the delegation diagram named a gate-keeper that checks each merge; that role
does not exist. The roles are one coordinator agent that puts the merges onto the pilot in order, one
repo agent per repository that handles its branches and watches the work being done in it, and one
agent per plugin. The harness paragraph, the kitchen list, the alt text, the diagram's second circle,
its caption and its legend say so, and the Experimental shelf's "roaming agent" becomes an agent per
plugin. The PNG is re-rendered at 2x.
2026-10-03 06:23:47 +00:00
Doxa Maps
a97312142f README: drop the old desktop card that said the app was not yet live
The deploy5-desktop card read "Proven, not yet live", which the desktop section now contradicts: the desktop app works and Rudder is its proof. The README's only use of it goes, and so do the card and its SVG source, which nothing else uses. The sentence that the map app runs as a desktop app the same way stays.
2026-10-03 06:20:13 +00:00
Doxa Maps
c21bcd2e13 Share this page never copies a token; neutral wording in the P3 comments
pageLink() drops ?tk= from the page's address: a leaf page reads a token from
there and leaves it in place, so pressing Share would have sent it. The URL is
rewritten only when tk is present; every other link is the address as it stands.
The comments name the page, not who measured it, and no longer cite a request.
check:map-menu-anchor strips a same-line comment before testing each return, so
a fallback named only in a comment no longer passes.
2026-10-03 06:18:57 +00:00
Doxa Maps
003af1caa8 Shareable pages P2: a composite's open pane and Regions' subject are in the page address
The address gets its second and third keys:
- ?pane= is the open view of a composite;
- ?place= is Regions' subject.
Both keep the ONE-writer rule:
- On its own leaf the composite owns the address and writes.
- Nested in a shell it announces, and the shell writes.
- On a partner's page nothing is written; a link is still read.

useViewAddress:
- claimView() is the one call for a reader's choice: the owner writes it, any other element announces it.
- ownAddress() lets an owner record its nested elements' announcements, and stops them there.
- An announcement carries only the view keys, one event per action.
- pane and place are siblings: a tab change drops both, but a pane change keeps the place, because Regions keeps
  its region while the reader is on the list.

pane-wrapper (buildPaneColumn) takes an opt-in `address`:
- a link opens its pane without writing;
- a click is a push, and a selection made by the same click rides in the same push (one Back step);
- where the reader's scroll settles is a replace;
- Back/Forward scroll and never write;
- the first pane is the default and is never written.

Regions:
- regions-mfe opts its column in and records its panes' announcements on its own leaf. A list click opens the
  dashboard with its place in one write.
- region-dashboards claims ?place= instead of writing its #slug with its own pushState (replace at first paint,
  push on a choice, re-applied on Back). An old #slug link still opens, and on its own leaf it is rewritten to
  ?place=.
- urlSync:false now guards only the tab title.

check:view-address adds:
- E: nested claims and the owner;
- F: pane-wrapper on a simulated column;
- G: the Regions wiring.
The census drops region-dashboards (5 writers now). Self-test: 29 poisons, each caught. Real-source mutations are
caught too.
2026-10-03 06:09:51 +00:00
Doxa Maps
484f07382e Dev server: a leaf URL cannot write markup into the page it opens
The dev leaf route wrote the URL's parts into the page's <title> and the
element's profile-config attribute, refusing only .. and /. A quote or a
tag in a crafted link broke out of the attribute on a publicly reachable
dev server. Each part must now have the shape every bundle, profile and
instance id has, before it reaches either; the title is escaped too.
check:dev-leaf-escape drives the plugin's own middleware: every leaf the
dev manifest advertises is still served in both URL forms, hostile parts
are refused in every position, and the title escapes on its own.
2026-10-03 06:09:09 +00:00