Say which population the studio's count describes
The Plugin Studio header read "18 bundles · 27 elements" while the manifest holds 19 and 28. The arithmetic was always right: rowsFromManifest skips the studio itself, because it cannot be one of its own tabs, and 19-1 / 28-1 is exactly what the header showed. The problem was that nothing said so. The golden-path self-test — linked from the golden-path doc as of this flight — reports 19 bundles and 28 profiles from the same manifest. Two authoritative surfaces disagreeing by one, neither explaining why, is how a reader stops trusting both; and the studio is the first thing an admin agent opens, so a number that looks wrong there discredits everything beside it. "listed here" is the whole change. It names the population, so the difference from the catalog total reads as a deliberate exclusion rather than an off-by-one. The count stays derived from this.rows, which is the honest source — it is a statement about what the studio shows, and now it says that. Verified the exclusion accounts for the gap exactly before touching anything: manifest 19/28, minus the single plugin-studio bundle and its one profile, is 18/27. Then read the rendered header at 1600px — 220px wide, sitting beside the language selector without crowding it — and confirmed it in the regenerated screenshot. Nine gates pass, including check:synced-css: there are two .ps-count rules in this file, the synced copies that must stay byte-identical, and this change is JS rather than CSS so both are untouched. Same shape as the self-test scoping documented earlier today: a number that is correct for the question it answers, with nothing saying which question that is.
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 904 KiB After Width: | Height: | Size: 904 KiB |
|
Before Width: | Height: | Size: 974 KiB After Width: | Height: | Size: 976 KiB |
|
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 1 MiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 925 KiB After Width: | Height: | Size: 925 KiB |
|
|
@ -399,9 +399,16 @@ export default defineComponent({
|
|||
}))
|
||||
},
|
||||
active() { return this.rows.find(r => r.key === this.activeKey) || null },
|
||||
// ★ SAY WHAT IS BEING COUNTED (2026-09-23). This read "18 bundles · 27 elements" while the
|
||||
// manifest holds 19 and 28, because rowsFromManifest skips the studio itself — it cannot be one
|
||||
// of its own tabs. The arithmetic was always right; the LABEL was ambiguous, and it sat beside a
|
||||
// golden-path self-test that reports 19/28 from the same manifest. Two authoritative surfaces
|
||||
// disagreeing by one, with nothing on either saying why, is how a reader stops trusting both.
|
||||
// "listed here" is the whole fix: it names the population, so the difference from the catalog
|
||||
// total reads as a deliberate exclusion rather than an off-by-one.
|
||||
countLabel() {
|
||||
const nb = new Set(this.rows.map(r => r.bundle)).size
|
||||
return nb + ' bundles · ' + this.rows.length + ' elements'
|
||||
return nb + ' bundles · ' + this.rows.length + ' elements listed here'
|
||||
},
|
||||
activeLang() { return getLanguage(this.locale) || { code: this.locale, flag: '🌐', nativeName: this.locale } }
|
||||
},
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
4
public/doxa-maps/manifest.json
generated
|
|
@ -721,7 +721,7 @@
|
|||
"bundle": "plugin-studio",
|
||||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"output": "doxa-maps/plugin-studio/plugin-studio.js",
|
||||
"integrity": "sha384-+4N51SbBq5OSUi/EFebDNcqv4vwrmWJh8Ynj5Hs6XOqXI2vATZBkKSRI3zwGV4Kc",
|
||||
"integrity": "sha384-UGZ2jNTQ+LJhDH8mbUOBsPxIsCys7Dt0n6u6MA2rSm+vJxLGnR018XfygKq7dDdh",
|
||||
"elements": [
|
||||
"plugin-studio"
|
||||
],
|
||||
|
|
@ -737,7 +737,7 @@
|
|||
"scriptUrl": "./plugin-studio/plugin-studio.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./plugin-studio/plugin-studio/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-+4N51SbBq5OSUi/EFebDNcqv4vwrmWJh8Ynj5Hs6XOqXI2vATZBkKSRI3zwGV4Kc\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./plugin-studio/plugin-studio.js\" integrity=\"sha384-UGZ2jNTQ+LJhDH8mbUOBsPxIsCys7Dt0n6u6MA2rSm+vJxLGnR018XfygKq7dDdh\" crossorigin=\"anonymous\"></script>\n<plugin-studio profile-config='{\"profile\":\"plugin-studio\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></plugin-studio>"
|
||||
},
|
||||
"instances": [
|
||||
{
|
||||
|
|
|
|||
2
public/doxa-maps/plugin-studio/plugin-studio.js
generated
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <plugin-studio> custom element. -->
|
||||
<script src="../plugin-studio.js" integrity="sha384-+4N51SbBq5OSUi/EFebDNcqv4vwrmWJh8Ynj5Hs6XOqXI2vATZBkKSRI3zwGV4Kc" crossorigin="anonymous"></script>
|
||||
<script src="../plugin-studio.js" integrity="sha384-UGZ2jNTQ+LJhDH8mbUOBsPxIsCys7Dt0n6u6MA2rSm+vJxLGnR018XfygKq7dDdh" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <plugin-studio> custom element. -->
|
||||
<script src="../../plugin-studio.js" integrity="sha384-+4N51SbBq5OSUi/EFebDNcqv4vwrmWJh8Ynj5Hs6XOqXI2vATZBkKSRI3zwGV4Kc" crossorigin="anonymous"></script>
|
||||
<script src="../../plugin-studio.js" integrity="sha384-UGZ2jNTQ+LJhDH8mbUOBsPxIsCys7Dt0n6u6MA2rSm+vJxLGnR018XfygKq7dDdh" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||