filter-width: an absent server is not a width regression

The gate printed "FAIL — 2 host(s)" when it had measured NOTHING —
ERR_CONNECTION_REFUSED on :4173, "UNMEASURED" twice, then a failure. That
accuses the product of a regression on the strength of a missing process,
and it already cost one wrong report in this flight: the gate was reported
as failing when it had simply never run.

★ THIS DOES NOT REVERSE THE AUTHOR'S RULE. "An unmeasured host is a failure.
A gate that quietly drops a host reports success about something it never
looked at" is correct for a STRUCTURAL miss — the page loads and the trigger
or tab cannot be found, meaning the gate has been defeated — and that path
is kept, comment and all. Only connection-level errors are separated out.

It is also not a judgement call, because the house already decided: four
sibling browser gates skip on an unreachable host and say so in the same
words — check-fits-the-screen, interop-harness, check-catalog-identity and
check-legend-matches-source all print "SKIP — ... unreachable right now.
Not a product finding." This gate was the outlier.

THREE CONTROLS, ALL FIRED:
  no server                      -> SKIP, exit 0
  server + healthy code          -> PASS, exit 0
  real regression, the original
  flex RANGE put back on
  .filter-dropdown               -> FAIL, exit 1 ("the row grew 369px")
The third is the one that matters: it proves the gate can still catch the
bug it exists for, rather than having been quietened.

Before believing any of those browser measurements I ran `bun run tree` and
confirmed check:sri 0 — a single-bundle build leaves stale SRI, the browser
refuses the script, and the page then measures clean for the wrong reason.
That trap made a negative control vacuous earlier in this flight.
This commit is contained in:
doxa-maps-88655c70 2026-09-24 06:34:29 +00:00
parent e8e2be1498
commit f03b900ccc

View file

@ -111,10 +111,27 @@ for (const [label, path, tab] of [
await browser.close()
let failed = 0
let unreachable = 0
// ★ AN ABSENT SERVER IS NOT A PRODUCT FINDING, A MISSING CONTROL IS.
// The rule below ("an unmeasured host is a failure") is right and is kept: if the page loads and
// the trigger or tab cannot be found, the gate has been structurally defeated and must say so.
// But it was also firing when nothing had been measured AT ALL because no server was running —
// ERR_CONNECTION_REFUSED on :4173 printed "UNMEASURED" twice and then "FAIL — 2 host(s)". That
// accuses the product of a width regression on the strength of a missing process, and it cost a
// real misreading during this flight: the gate was reported as failing when it had simply never run.
// Every other browser gate in this repo already separates the two and says so in the same words —
// check-fits-the-screen, interop-harness, check-catalog-identity and check-legend-matches-source all
// print "SKIP — ... unreachable right now. Not a product finding." This one was the outlier.
const isUnreachable = (e) => /ERR_CONNECTION_REFUSED|ERR_CONNECTION_RESET|ECONNREFUSED|net::ERR_|ERR_EMPTY_RESPONSE/i.test(String(e))
console.log('FILTER-WIDTH: a trigger must not resize when an option is selected\n')
for (const h of hosts) {
console.log(`--- ${h.label} ---`)
if (h.error) {
if (isUnreachable(h.error)) {
console.log(' UNREACHABLE: ' + h.error)
unreachable++
continue
}
// An unmeasured host is a failure. A gate that quietly drops a host reports success about
// something it never looked at.
console.log(' UNMEASURED: ' + h.error)
@ -133,6 +150,11 @@ for (const h of hosts) {
}
}
if (!failed && unreachable === hosts.length) {
console.log(`FILTER-WIDTH: SKIP — all ${hosts.length} host(s) unreachable. Not a product finding.`)
console.log(' Start a server first: `bun run serve` (or set BASE_URL).')
process.exit(0)
}
if (failed) {
console.error(`FILTER-WIDTH: FAIL — ${failed} host(s).`)
console.error(' A trigger that grows on selection re-flows the selections row beneath it, so the')