diff --git a/tests/e2e/maximize.spec.ts b/tests/e2e/maximize.spec.ts index 91c0cb2..2ecbbe1 100644 --- a/tests/e2e/maximize.spec.ts +++ b/tests/e2e/maximize.spec.ts @@ -56,6 +56,8 @@ test.describe('wxFrame::Maximize() Tests', () => { // Note: wxDisplay::GetFromWindow() has a bug returning invalid display index // This is a separate issue from the Maximize() functionality being tested + // Re-verified broken 2026-08-13: wxDisplay reports 0x0 in this harness app + // (JSPI build) — the port's display-geometry query, not Maximize(). test.skip('Display geometry is reported correctly', async ({ page, testLogger }) => { await page.goto('/standalone/maximize/maximize_test.html'); const loaded = await tryLoadApp(page); diff --git a/tests/kicad/3d-viewer-deadlock.spec.ts b/tests/kicad/3d-viewer-deadlock.spec.ts index ed99b06..f776cb6 100644 --- a/tests/kicad/3d-viewer-deadlock.spec.ts +++ b/tests/kicad/3d-viewer-deadlock.spec.ts @@ -58,7 +58,8 @@ test.describe('3D viewer camera-move deadlock', () => { // m_boardAdapter.m_Cfg while RenderEngineChanged() reads GetAppSettings<…>() — possibly // different instances in the merged kicad_editor bundle. Unskip once the toggle works: // the engagement guard below then validates the engine flip loudly. - test.skip(true, 'KNOWN ISSUE: the raytracer engine toggle is inert on the webgl-era wasm ' + test.skip(true, // re-verified still inert 2026-08-13 (both engines, JSPI build) + 'KNOWN ISSUE: the raytracer engine toggle is inert on the webgl-era wasm ' + 'build — the deadlock mechanism cannot be driven until it works (see comment)'); // One 187 MB wasm runtime is already heavy; keep this serial and generous. test.describe.configure({ mode: 'serial' }); diff --git a/tests/kicad/drift-trio-fuzz.spec.ts b/tests/kicad/drift-trio-fuzz.spec.ts index 99bb876..aaa88c2 100644 --- a/tests/kicad/drift-trio-fuzz.spec.ts +++ b/tests/kicad/drift-trio-fuzz.spec.ts @@ -56,10 +56,10 @@ test.beforeAll(() => { }); function skipFirefox(): void { - test.skip( - test.info().project.name.includes("firefox"), - "three heavy wasm tabs exceed Firefox's per-process wasm budget", - ); + // 2026-08-13: guard retired — the JSPI build (~half the asyncify size) fits + // three editor tabs inside Firefox 153's per-process wasm budget; the + // whole file passes on kicad-firefox. Kept as a hook in case the wall + // returns with future growth. } /** mulberry32 — tiny deterministic PRNG. */ diff --git a/tests/kicad/drift-trio-scenarios.spec.ts b/tests/kicad/drift-trio-scenarios.spec.ts index a754e23..52aea2a 100644 --- a/tests/kicad/drift-trio-scenarios.spec.ts +++ b/tests/kicad/drift-trio-scenarios.spec.ts @@ -46,10 +46,10 @@ test.beforeAll(() => { }); function skipFirefox(): void { - test.skip( - test.info().project.name.includes("firefox"), - "three heavy wasm tabs exceed Firefox's per-process wasm budget", - ); + // 2026-08-13: guard retired — the JSPI build (~half the asyncify size) fits + // three editor tabs inside Firefox 153's per-process wasm budget; the + // whole file passes on kicad-firefox. Kept as a hook in case the wall + // returns with future growth. } /** Poll until every tab's silent save contains `marker`. */ @@ -197,7 +197,8 @@ for (const ops of [SCH_OPS, PCB_OPS]) { // runs). A real same-item conflict-resolution race that needs its own // hunt — tracking: memory s4-value-race-divergence. The sequenced-edit // scenarios (S1–S3, S5–S8) have never diverged and stay active. - test.fixme(`${label} S4: move-vs-delete, value-vs-value, move-vs-move`, async ({ + // re-enabled 2026-08-13: converges on the JSPI build + test(`${label} S4: move-vs-delete, value-vs-value, move-vs-move`, async ({ context, testLogger, }) => { @@ -241,7 +242,8 @@ for (const ops of [SCH_OPS, PCB_OPS]) { // locally at single-worker). A real CRDT/apply race that needs its own // hunt: capture both tabs' modelText diff at timeout, then bisect the // value-apply path. Tracking: memory s4-value-race-divergence. - test.fixme(`${label} S4b: value-vs-value converges (KNOWN ~5-8% divergence)`, async ({ + // re-enabled 2026-08-13: converges on the JSPI build + test(`${label} S4b: value-vs-value converges (KNOWN ~5-8% divergence)`, async ({ context, testLogger, }) => { diff --git a/tests/kicad/drift-trio.spec.ts b/tests/kicad/drift-trio.spec.ts index 69a5cce..59a17cb 100644 --- a/tests/kicad/drift-trio.spec.ts +++ b/tests/kicad/drift-trio.spec.ts @@ -51,10 +51,10 @@ test.beforeAll(() => { /** Heavy editors exceed Firefox's per-content-process wasm budget at 2+ * instances (see ysync-two-tab.spec.ts) — at 3 it is strictly worse. */ function skipFirefox(): void { - test.skip( - test.info().project.name.includes("firefox"), - "three heavy wasm tabs exceed Firefox's per-process wasm budget", - ); + // 2026-08-13: guard retired — the JSPI build (~half the asyncify size) fits + // three editor tabs inside Firefox 153's per-process wasm budget; the + // whole file passes on kicad-firefox. Kept as a hook in case the wall + // returns with future growth. } // ── pl_editor: green baseline validating the trio plumbing itself ──────────── diff --git a/tests/kicad/eeschema-collab.spec.ts b/tests/kicad/eeschema-collab.spec.ts index 74215c5..9fcf41c 100644 --- a/tests/kicad/eeschema-collab.spec.ts +++ b/tests/kicad/eeschema-collab.spec.ts @@ -224,7 +224,8 @@ test.describe("eeschema collab bridge — single page", () => { test.describe("eeschema collab bridge — two tabs (BroadcastChannel)", () => { // SKIP headless for the same reason as the single-page apply test (harness open=false → // SCH_COMMIT no-ops). Verified working in the real web app. - test.skip("a local move propagates A→B", async ({ context, testLogger }) => { + // re-enabled 2026-08-13: passes on the JSPI build (flaked once under 2-worker trio load; green solo) + test("a local move propagates A→B", async ({ context, testLogger }) => { const channel = `ee-collab-e2e-${test.info().workerIndex}`; const bundle = path.resolve(__dirname, "../apps/kicad/collab-bundle.js"); diff --git a/tests/kicad/pcbnew-collab.spec.ts b/tests/kicad/pcbnew-collab.spec.ts index ad23ec8..3588440 100644 --- a/tests/kicad/pcbnew-collab.spec.ts +++ b/tests/kicad/pcbnew-collab.spec.ts @@ -437,7 +437,8 @@ test.describe("pcbnew collab bridge — single page", () => { test.describe("pcbnew collab bridge — two tabs (BroadcastChannel)", () => { // SKIP headless for the same reason as the single-page apply test (harness can't PAINT). // Verified working in the real web app. - test.skip("a local move propagates A→B", async ({ context, testLogger }) => { + // re-enabled 2026-08-13: passes on the JSPI build (both engines) + test("a local move propagates A→B", async ({ context, testLogger }) => { const channel = `pcb-collab-e2e-${test.info().workerIndex}`; const bundle = path.resolve(__dirname, "../apps/kicad/collab-bundle.js"); diff --git a/tests/kicad/roundtrip.spec.ts b/tests/kicad/roundtrip.spec.ts index c7f1bcb..0b20ad4 100644 --- a/tests/kicad/roundtrip.spec.ts +++ b/tests/kicad/roundtrip.spec.ts @@ -510,7 +510,7 @@ test.describe("round trip: file → yjs → file", () => { // fixture (via + gr_text + segments) therefore still loses those items on the // rebuild side. Un-fixme when the envelope parse is solved. Run with // --grep-invert skipped to see the live diff. - test.fixme( + test( // re-enabled 2026-08-13: the asyncify-fragile envelope parse is gone with JSPI — passes both engines "pcbnew preserves items through a yjs round trip", async ({ context, testLogger }) => { const { orig, regen } = await roundTrip(context, PCB); diff --git a/tests/kicad/ysync-libsymbols.spec.ts b/tests/kicad/ysync-libsymbols.spec.ts index 5db382a..c748984 100644 --- a/tests/kicad/ysync-libsymbols.spec.ts +++ b/tests/kicad/ysync-libsymbols.spec.ts @@ -157,10 +157,8 @@ test.describe("v2 items wire — lib_symbols travel (miss 08A)", () => { context, testLogger, }) => { - test.skip( - test.info().project.name.includes("firefox"), - "two kicad_editor tabs exceed Firefox's per-process wasm budget", - ); + // 2026-08-13: FF wasm-budget skip retired — the JSPI build fits two + // editor tabs on Firefox 153; passes on kicad-firefox. const room = `ysync-libsym-${test.info().workerIndex}`; const tabA = await context.newPage(); diff --git a/tests/kicad/ysync-two-tab.spec.ts b/tests/kicad/ysync-two-tab.spec.ts index b3ee845..de2e4de 100644 --- a/tests/kicad/ysync-two-tab.spec.ts +++ b/tests/kicad/ysync-two-tab.spec.ts @@ -353,10 +353,8 @@ for (const [cfg, label] of [ // same SpiderMonkey wall playwright-kicad.config.ts documents for x86 // CI, hit at 2× on ARM). V8 handles it: runs on chromium-ci in CI and // --project=chromium locally. - test.skip( - test.info().project.name.includes("firefox"), - "two kicad_editor tabs exceed Firefox's per-process wasm budget", - ); + // 2026-08-13: FF wasm-budget skip retired — the JSPI build fits two + // editor tabs on Firefox 153; passes on kicad-firefox. const room = `ysync-v2-${label}-bug01-${test.info().workerIndex}`; const tabA = await context.newPage(); diff --git a/tests/web/eeschema-fp-selector.spec.ts b/tests/web/eeschema-fp-selector.spec.ts index 4960804..1799ffe 100644 --- a/tests/web/eeschema-fp-selector.spec.ts +++ b/tests/web/eeschema-fp-selector.spec.ts @@ -35,7 +35,8 @@ async function canvasCenter(page: Page): Promise<{ x: number; y: number }> { // legacy startModal pump was deleted at doc 20 D-1; modals are scheduler // waits now — re-evaluate against the scheduler runtime; see also // docs/features/ngspice-split/README.md "The editor side"). -test.skip('symbol chooser footprint selector populates and preview renders (eeschema)', async ({ page }) => { +test( // re-enabled 2026-08-13: the chooser fp-selector flow revived on the JSPI build (both engines) + 'symbol chooser footprint selector populates and preview renders (eeschema)', async ({ page }) => { test.setTimeout(420000); const logs: string[] = []; page.on('console', (m) => logs.push(`[${m.type()}] ${m.text()}`)); diff --git a/tests/web/footprint-browse-remote.spec.ts b/tests/web/footprint-browse-remote.spec.ts index 03daf67..4676df9 100644 --- a/tests/web/footprint-browse-remote.spec.ts +++ b/tests/web/footprint-browse-remote.spec.ts @@ -84,7 +84,14 @@ async function dblclickRow(page: Page, re: RegExp): Promise { // KNOWN-BROKEN: the fp/sym editor kicadLibs enumerate/save flows are dead // (docs/features/web-e2e-rot/01-editor-lib-bridge-flows.md). fixme, not fail: // on CI this dies in a 180s boot timeout per engine — running it buys no signal. -test.fixme('footprint editor browses + loads a real ingested footprint (read path / version cap)', async ({ page }) => { +// Re-enabled 2026-08-13: the read path revived on the JSPI build (chromium). +test( + 'footprint editor browses + loads a real ingested footprint (read path / version cap)', async ({ page }) => { + test.skip( + test.info().project.name.includes('firefox'), + 'FootprintEnumerate child rows never appear on Firefox within 60s — slow ' + + 'wasm tier suspected (probed 2026-08-13); passes on chromium', + ); const logs: string[] = []; page.on('console', (m) => logs.push(`[${m.type()}] ${m.text()}`)); page.on('pageerror', (e) => logs.push(`[pageerror] ${e.message}`)); diff --git a/tests/web/footprint-write-remote.spec.ts b/tests/web/footprint-write-remote.spec.ts index 8cd7ec7..e512e59 100644 --- a/tests/web/footprint-write-remote.spec.ts +++ b/tests/web/footprint-write-remote.spec.ts @@ -43,7 +43,10 @@ async function clickTreeRow(page: Page, label: string): Promise { // KNOWN-BROKEN: the fp/sym editor kicadLibs enumerate/save flows are dead // (docs/features/web-e2e-rot/01-editor-lib-bridge-flows.md). fixme, not fail: // on CI this dies in a 180s boot timeout per engine — running it buys no signal. -test.fixme('footprint editor save persists to the backend (remote write round-trip)', async ({ page }) => { +// Probed 2026-08-13 on the JSPI build: still dead — wedges at the New Symbol/ +// Footprint dialog step on BOTH engines (web-e2e-rot 01 stands for writes). +test.fixme( + 'footprint editor save persists to the backend (remote write round-trip)', async ({ page }) => { const owner = `e2e-fp-${Date.now()}`; const logs: string[] = []; page.on('console', (m) => logs.push(`[${m.type()}] ${m.text()}`)); diff --git a/tests/web/footprint-write-spike.spec.ts b/tests/web/footprint-write-spike.spec.ts index 7c90b74..c547860 100644 --- a/tests/web/footprint-write-spike.spec.ts +++ b/tests/web/footprint-write-spike.spec.ts @@ -34,7 +34,10 @@ async function bootFootprintEditor(page: Page): Promise { // KNOWN-BROKEN: the fp/sym editor kicadLibs enumerate/save flows are dead // (docs/features/web-e2e-rot/01-editor-lib-bridge-flows.md). fixme, not fail: // on CI this dies in a 180s boot timeout per engine — running it buys no signal. -test.fixme('footprint editor save routes through the pcbjam_fp write bridge (main thread)', async ({ page }) => { +// Probed 2026-08-13 on the JSPI build: still dead — wedges at the New Symbol/ +// Footprint dialog step on BOTH engines (web-e2e-rot 01 stands for writes). +test.fixme( + 'footprint editor save routes through the pcbjam_fp write bridge (main thread)', async ({ page }) => { const logs: string[] = []; page.on('console', (m) => logs.push(`[${m.type()}] ${m.text()}`)); page.on('pageerror', (e) => logs.push(`[pageerror] ${e.message}`)); diff --git a/tests/web/read-only-editor.spec.ts b/tests/web/read-only-editor.spec.ts index 0b07a73..b245deb 100644 --- a/tests/web/read-only-editor.spec.ts +++ b/tests/web/read-only-editor.spec.ts @@ -231,7 +231,7 @@ test("a writer's edits stream into the viewer live (and never the reverse)", asy // for two fully WRITABLE tabs on a fresh kicad_editor build (the previous // CI artifacts were built at an older kicad rev). Un-fixme once the // envelope/parser mismatch is fixed on main. - test.fixme(); + // fixme removed 2026-08-13: passes on the JSPI build (both engines): const itemId = await writer.evaluate(() => (window as unknown as W).Module.kicadCollabTestSelectFirst(), diff --git a/tests/web/symbol-write-remote.spec.ts b/tests/web/symbol-write-remote.spec.ts index 6380512..4b64563 100644 --- a/tests/web/symbol-write-remote.spec.ts +++ b/tests/web/symbol-write-remote.spec.ts @@ -21,7 +21,10 @@ const BACKEND = process.env.BACKEND_URL ?? 'http://localhost:3060'; // KNOWN-BROKEN: the fp/sym editor kicadLibs enumerate/save flows are dead // (docs/features/web-e2e-rot/01-editor-lib-bridge-flows.md). fixme, not fail: // on CI this dies in a 180s boot timeout per engine — running it buys no signal. -test.fixme('symbol editor save persists to the backend (remote write round-trip)', async ({ page }) => { +// Probed 2026-08-13 on the JSPI build: still dead — wedges at the New Symbol/ +// Footprint dialog step on BOTH engines (web-e2e-rot 01 stands for writes). +test.fixme( + 'symbol editor save persists to the backend (remote write round-trip)', async ({ page }) => { // Unique owner per run so the test is isolated from prior runs. const owner = `e2e-${Date.now()}`; const logs: string[] = []; diff --git a/tests/web/symbol-write-spike.spec.ts b/tests/web/symbol-write-spike.spec.ts index 4308be1..ba74824 100644 --- a/tests/web/symbol-write-spike.spec.ts +++ b/tests/web/symbol-write-spike.spec.ts @@ -31,7 +31,10 @@ async function bootSymbolEditor(page: Page): Promise { // KNOWN-BROKEN: the fp/sym editor kicadLibs enumerate/save flows are dead // (docs/features/web-e2e-rot/01-editor-lib-bridge-flows.md). fixme, not fail: // on CI this dies in a 180s boot timeout per engine — running it buys no signal. -test.fixme('symbol editor save routes through the pcbjam write bridge (main thread)', async ({ page }) => { +// Probed 2026-08-13 on the JSPI build: still dead — wedges at the New Symbol/ +// Footprint dialog step on BOTH engines (web-e2e-rot 01 stands for writes). +test.fixme( + 'symbol editor save routes through the pcbjam write bridge (main thread)', async ({ page }) => { const logs: string[] = []; page.on('console', (m) => logs.push(`[${m.type()}] ${m.text()}`)); page.on('pageerror', (e) => logs.push(`[pageerror] ${e.message}`));