The previous attempt at this publish (b7fea73, reverted as bb160bc) broke the
live map: resolveAssetsBase computed <treeRoot>/../assets, one segment too high,
so boundary geojson 404'd and the map painted a basemap with none of our data.
Fixed at source in 852310d0 -- the asset pool lives INSIDE the tree, which is
what a leaf's own '../../assets' has always meant and what generate-tree stages.
Now covered by check:embed-base, pure path arithmetic, mutation-tested against
the exact off-by-one.
Verified before push: 24 bundles, 22 manifest bundles all resolving, 57 leaves
with zero unresolved script srcs, boundaries present at the path the fix
targets, tree settled, diff scoped to app/doxa-maps only.
The catalog was serving a tree many merges behind the source. Measured before
this publish: 19 of 19 comparable leaves STALE by SRI hash, 0 current, and three
bundles absent from the catalog entirely (prayer-walk-planner, regions-dashboard,
upg-neighbor) while present in the build.
After: 24 bundles, 57 leaves, every leaf's baked integrity matching the bundle it
loads, every leaf script src resolving, and all 22 manifest bundles present on
disk.
Built tree verified settled before merge (builders=0, waiters=0, churn=0, quiet
465s) and scoped to app/doxa-maps only — no other team's subtree touched.
KNOWN PRE-EXISTING, NOT INTRODUCED HERE: app/index.json references 12
<bundle>.iife.js paths that no build produces. Zero .iife.js files existed in the
previous catalog commit and zero exist in the source tree, and the live site
already 404s them today while the .js files beside them serve 200. That file is
outside app/doxa-maps and is untouched by this publish.