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. |
||
|---|---|---|
| app | ||
| README.md | ||
ABC Audit — app-shell MFE Plugin drop
This folder makes the ABC Audit service appear in the app-shell Plugin
Library (/library) and open in-shell, authed by the user's app-shell
session — the Class-2 MFE-plugin path (the app-shell has no Class-3 "Services"
registry; it embeds MFE bundles).
What the app-shell expects (contract)
The app-shell /library page reads a multi-MFE index.json manifest
(schema doxa-1040-maps-mfe-index@1) via GET /api/_library, which scans the
source configured by the server env var:
NUXT_MFE_INDEX_SOURCE=<path-or-url> # a local path to this folder / its index.json, OR an http(s) URL
NUXT_PUBLIC_MFE_LIBRARY_ENABLED=true # already set on the DT app-shell (turns /library on)
Each bundle in the manifest is an IIFE that registers a custom
element; the shell embeds it as <abc-audit-tree profile-config='{…}'>. The
/library "View" action opens the profile's embed staging page.
Layout
mfe-index/
index.json manifest (static, checked in)
build.sh assembles the drop (builds the IIFE, copies it in)
abc-audit/
abc-audit.iife.js BUILT — self-mounting <abc-audit-tree> (see build.sh)
audit-tree/index.html staging "View" page — loader-injects-token
abc-audit.iife.js is built, not committed (the builder sandbox has no npm).
Run ./build.sh on any host with npm (the deploy host / BUILD-GATE) to produce it.
The auth wire (C1 — no second login)
The token is never baked into the bundle. The staging page injects it at
runtime (priority: ?tk= → window.__MFE_TOKEN__ → baked profile-config.tk)
and the API base the same way (?api= → window.__ABC_API_URL__ → apiUrl).
The custom element writes the token to localStorage['abc_dev_token'] and sets
the API host before the Vue app's first getTree() — so the tree loads live
under the user's tenant with no re-login. The token is the app-shell-signed
HS256 JWT; the running ABC API verifies it with the same
APP_SHELL_JWT_SECRET (C1 wire, already live).
The app-shell's library "View" href must therefore be given ?tk=<session JWT>
and ?api=<abc api base> for a specific deployment — or a host wrapper sets
window.__MFE_TOKEN__ / window.__ABC_API_URL__ before loading the bundle.
Deploy steps (coordinator / deploy-side)
cd abc-audit-service/mfe-index && ./build.sh→ producesabc-audit/abc-audit.iife.js- Serve this
mfe-index/folder (static) OR push it to the forge raw. - Set on the app-shell container:
NUXT_MFE_INDEX_SOURCE=<served-url-or-path>/index.jsonand recreate the app-shell. - Log into
:3000→/libraryshows ABC Audit → View → the audit tree opens in-shell (44 audits render), no second login.
No app-shell code change is needed — NUXT_MFE_INDEX_SOURCE is deploy
config. (If in-shell mounting ever needs shell code, STOP and coordinate the
authoritative app-shell tree with qa-coord/pm-1040-maps.)