From f03b900ccc74d123e4b751272e8a0c88fde98c22 Mon Sep 17 00:00:00 2001 From: doxa-maps-88655c70 <88627970+doxa-maps-88655c70@users.noreply.github.com> Date: Thu, 24 Sep 2026 06:34:29 +0000 Subject: [PATCH] filter-width: an absent server is not a width regression MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- internal/check-filter-width-stable.mjs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/internal/check-filter-width-stable.mjs b/internal/check-filter-width-stable.mjs index c997a9fe2..4748f300c 100644 --- a/internal/check-filter-width-stable.mjs +++ b/internal/check-filter-width-stable.mjs @@ -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')