doxa-maps-spa.js carried "internal role noun (Driver)" twice. It was not the SPA's own file: the text is a CSS comment inside VerticalTabsLayout's style literal, so it is string content and ships to every bundle using that layout. Rewritten in BOTH synced copies (lines 355 and 844) to state the decision rather than who made it. check:synced-css passes, so the copies stayed identical. Verified against output: doxa-maps-spa.js goes 2 occurrences to 0. Located by matching the SHIPPED text back to source, after two wrong guesses worth recording. A backtick-parity test over a whole .vue file said all 25 of that file's "Driver" mentions were outside a template literal, while 2 demonstrably shipped -- the crude lexer again. And the leak was not in doxa-maps-spa.vue at all, which is where the bundle name pointed. |
||
|---|---|---|
| .. | ||
| app-wrapper-material | ||
| pane-wrapper | ||
| README.md | ||
| StackLayout.vue | ||
| VerticalTabsLayout.vue | ||
layouts/ — app wrappers
Each folder here is an app wrapper: a host shell that composes doxa-maps plugin-designs (the independently-built custom elements) into one application.
layouts/<wrapper>/ ← the HOST page (not a bundle)
┌──────────┬──────────────────────────────┐
│ sidebar │ mounts an app-profile here │
│ (nav.js) │ ┌──────────────┐ │
│ ├ item │ │ <doxa-map> │ ← a │
│ ├ section│ │ (a bundle) │ micro- │
│ └ folder │ └──────────────┘ frontend │
└──────────┴──────────────────────────────┘
- app-profile = a self-contained custom element (the micro-frontend). app wrapper = the host that mounts them and provides nav/chrome. A wrapper is a host page, not a bundle-in-a-bundle.
- Wrappers today:
app-wrapper-material/,pane-wrapper/. - Icons are inline SVG only (no CDN) — an F-Droid/offline hard requirement.
Sidebar contract, target filtering, sidebar modes, staging: ../documentation/architecture/app-wrappers.md.