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:
parent
e8e2be1498
commit
f03b900ccc
1 changed files with 22 additions and 0 deletions
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Reference in a new issue