v1.54.10
[1.54.10] — 2026-05-18
fix(auto-pipeline): SSE client-disconnect hygiene — kill the flaky Playwright e2e job.
🐛 Fixes
- The Playwright e2e job intermittently went red (32/32 individual tests pass, but
not ok 2 - tests/playwright-smoke.mjs): closing a page while the#/autoSSE stream was mid-flight made the server's nextres.write()reject withEPIPE/"aborted", and — with no'error'listener on the response — Node escalated it to an uncaughtException that node:test reported as "asynchronous activity after the test ended".openSse()inauto-pipeline.mjsnow registers a no-opres.on('error')and guardssend()onres.writableEnded || res.destroyed(wrapped in try/catch) — a vanished client is expected, not exceptional. This is correct production SSE hygiene, not just a test fix. tests/playwright-smoke.mjs: the Cmd+K test used a real outbound URL (https://example.com/jobs/123) but only waited for the modal to appear, soclosePage()aborted the server's in-flightsafeGet()after the test ended. It now waits for the pipeline to reach a terminal state (so the fetch resolves normally before close). A sharedclosePage()helper (window.stop()then close) and theafter-hookserver.closeAllConnections()remain as defence-in-depth. Verified: 8/8 consecutive green runs (6×node --test+ 2× browser-smoke), previously ~1-in-2 red.
🧪 Tests
test: tests/auto-pipeline.test.mjs+1 static case locking theopenSsedisconnect-hygiene contract (res.on('error')listener +writableEnded||destroyedguard + try-wrapped writes). 747 → 748.