Say what the embed-smoke node count does and does not mean

smoke:embeds reports a node count per profile, and the counts vary enormously:
dashboard-plus-grid mounts 1,499 nodes with a canvas, big-picture 262,
research-map-plus-grid twelve. Read side by side that last one looks like a
capability-4 composite whose two children never rendered.

It is not. Measured with a recursive shadow-root walk at mobile viewport: 518
nodes, 1 canvas, both children present as real custom elements
(doxa-research-map and people-groups-grid), 13,867px of content, zero console
errors and zero responses >= 400.

The gate counts ONE shadow level. research-map-plus-grid nests its children by
TAG and bundle URL rather than importing their .vue files — deliberately, and
its meta.json explains why: importing the research map's component directly
would bypass doxa-research-map/index.js and silently drop that bundle's private
colour strategies, its profileModules registry, its Pinia/i18n pair and the RTL
plugin. Children mounted that way live in their own shadow roots, which a
single-level querySelectorAll cannot see.

So the count is a MOUNT signal, not a quality signal, and the `< 5` bar it feeds
is still exactly right — that bar catches a mount which produced nothing, which
is what this gate exists to assert. Only the reading was wrong, so only a
comment changes here.

Worth recording because this repo already carries the lesson that shadow DOM
does not pierce, and it cost three wrong diagnoses of a non-bug once before. It
reappeared inside a gate rather than in an ad-hoc probe, where it is harder to
notice: the gate is green, the number is simply not measuring what a reader
assumes. A near-miss, caught by checking the outlier in a browser instead of
filing it.

Whole run for the record: 43/43 pages mount cleanly, enumerated generically from
manifest.json — every bundle x every profile, not a hardcoded list. That is the
"Playwright coverage over every plugin" item on the standing work list, and it
is real coverage.
This commit is contained in:
doxa-maps-88655c70 2026-09-23 07:53:31 +00:00
parent 8550e58fbe
commit c4c5e366ad

View file

@ -104,6 +104,15 @@ for (const t of list) {
return el && el.shadowRoot && el.shadowRoot.childElementCount > 0
}, t.element, { timeout: 25000 })
await page.waitForTimeout(4000)
// ★ THE NODE COUNT IS A MOUNT SIGNAL, NOT A QUALITY SIGNAL — do not read it as "how much
// rendered". This counts ONE shadow level, so a composite that nests its children BY TAG (the
// stack-demo element/src contract, used by research-map-plus-grid to avoid bypassing the child
// bundle's own index.js) reports only its wrapper: 12 nodes, no canvas, while a recursive walk
// of the same page finds 518 nodes, 1 canvas, both children present and 13,867px of content.
// That reads as a broken composite beside dashboard-plus-grid's 1,499, and it is not one —
// measured 2026-09-23 after chasing it as a defect. Shadow DOM does not pierce; a single-level
// querySelectorAll cannot see a tag-composed child. The `< 5` bar below is still the right
// assertion, because it catches a mount that produced NOTHING, which is what this gate is for.
const verdict = await page.evaluate((tag) => {
const el = document.querySelector(tag)
const sr = el.shadowRoot