fix(e2e): Playwright fundamental — vite alias + ums sub-build (closes #113)#114
Conversation
… idaptik#113) Lands the two-layer fundamental fix described in idaptik#113. With PR #112 having unblocked the outer layers (typo SHA on denoland/setup-deno@v2, missing @playwright/test dep), the dev-server boot inside Playwright's `webServer` then exposed two deeper, pre-existing problems. This PR closes both. ## Layer 1 — vite.config.js `@src/` optimizeDeps.include `optimizeDeps.include` carried two entries with a bare `@src/...` specifier: include: ['@src/app/tea/AffineTEA.js', '@src/app/tea/AffineTEARouter.js'] …but the configured aliases are only `affinescript` and `@tea` — there is no `@src` alias. Vite reported on every dev-server boot: [WebServer] Failed to resolve dependency: @src/app/tea/AffineTEA.js, present in client 'optimizeDeps.include' [WebServer] Failed to resolve dependency: @src/app/tea/AffineTEARouter.js, present in client 'optimizeDeps.include' …and that warning blocked the dev server from settling within Playwright's 60s webServer timeout (the warning isn't fatal but slows the boot enough that Playwright times out). Fix: empty the `include` array. Vite pre-bundles relative-path .js imports automatically as it walks the module graph from the entry HTML; the explicit include was redundant from day one and the wrong specifier shape made it actively harmful. Comment in the config explains the history so future contributors don't re-add a bare-specifier entry. ## Layer 2 — Build idaptik-ums sub-project in CI `idaptik-ums/index.html` imports `src/App.res.mjs` (relative to the HTML) i.e. `idaptik-ums/src/App.res.mjs`. The source file `idaptik-ums/src/App.res` exists but its `.res.mjs` sibling is only created by compiling against `idaptik-ums/rescript.json`, which the existing workflow's `deno task res:build` step never touched (that task compiles the root `rescript.json` only). When the vite dev-server scanned `idaptik-ums/index.html` it reported: [WebServer] src/App.res.mjs (imported by .../idaptik-ums/index.html) [WebServer] Are they installed? Error: Timed out waiting 60000ms from config.webServer. Fix: add a second build step after the root res:build that runs `npx rescript build` inside `idaptik-ums/`. Mirrors the soft-fail pattern of the existing step (`|| echo "ums attempt"`) — the workflow keeps running even if the ums build itself fails, so the existing Playwright-vs-megaport separation is preserved. ## Verification Local: `timeout 15 deno task dev:vite` boots cleanly with the new vite config, no unresolved-dep warnings (PR #112's deno.json @playwright/test import also confirmed downloaded on first run). ## Closes closes #113 Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
2 similar comments
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
Layer 3 of the Playwright fundamental fix. The previous Layer 2 (building idaptik-ums/src/App.res.mjs via a sub-rescript step) ran into a deeper pre-existing bug: idaptik-ums/src/editor/EditorEngine.res contains JS/TS-shaped syntax (typeof checks, ES-style `import * as`) rather than ReScript syntax, so `rescript build` on the sub-project hard-fails at compile. The previous step soft-failed with `|| echo`, which silently swallowed the error and left App.res.mjs unbuilt — which then surfaced as a vite unresolved-import inside Playwright's 60s webServer boot wait. Pivot: idaptik-ums/index.html is a Tauri webview entry, NOT the Playwright SPA entry (Playwright hits '/' which serves the ROOT index.html). Vite's default optimizeDeps scan crawls every .html in the project, which is why it pulled idaptik-ums/index.html in even though the SPA never references it. Scoping `optimizeDeps.entries` to `['index.html']` aligns the scan with the actual SPA boundary. This also drops the broken sub-rescript step (the build wasn't useful for Playwright in the first place — the broken EditorEngine.res bug remains as a separate concern for the idaptik-ums Tauri shell, which should be filed as its own issue). Also adds vite.config.js + idaptik-ums/** to both push and pull_request path filters so the workflow can self-validate when either is modified in a PR. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
0ecdb17 to
1428e5c
Compare
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
After the optimizeDeps.entries pivot let vite boot cleanly, the 'webServer timed out at 60000ms' kept firing on all three matrices even though no error message appeared. Root cause: vite is configured in vite.config.js with port 1984 + strictPort, but tools/compat-testing/ playwright.config.js polled baseURL http://localhost:8080 / webServer.port 8080. Vite started fine, just on the wrong port — Playwright kept polling 8080 until the deadline. Aligning both Playwright endpoints to 1984. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
The workflow's 'Run Playwright tests' step sets working-directory to
tools/compat-testing/, then runs 'npx playwright test'. Playwright
loads playwright.config.js from that CWD, then resolves testDir
relative to the config file location.
testDir was './tools/compat-testing/tests', which resolved to
'tools/compat-testing/tools/compat-testing/tests' — a path that
doesn't exist. Result: "Error: No tests found" on every matrix.
Fixing to './tests' so Playwright discovers
tools/compat-testing/tests/{game-loads,accessibility,performance}.spec.js.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
🔍 Hypatia Security ScanFindings: 72 issues detected
View findings[
{
"reason": "Issue in boj-build.yml",
"type": "missing_timeout_minutes",
"file": "boj-build.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in build-validation.yml",
"type": "missing_timeout_minutes",
"file": "build-validation.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in cflite-pr.yml",
"type": "missing_timeout_minutes",
"file": "cflite-pr.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in codeql.yml",
"type": "missing_timeout_minutes",
"file": "codeql.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in containers.yml",
"type": "missing_timeout_minutes",
"file": "containers.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dco.yml",
"type": "missing_timeout_minutes",
"file": "dco.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
},
{
"reason": "Issue in dogfood-gate.yml",
"type": "missing_timeout_minutes",
"file": "dogfood-gate.yml",
"action": "flag",
"rule_module": "workflow_audit",
"severity": "medium"
}
]Powered by Hypatia Neurosymbolic CI/CD Intelligence |
…tion, changelog (#117) ## Summary A multi-subagent audit of idaptik's human-readable and machine-readable documentation against the actual repo state on 2026-06-01 surfaced several stale counts, broken paths, and missing classifications. This PR brings the canonical docs back in sync. ## Human-readable corrections | File | What was wrong | Now | |---|---|---| | `README.adoc` | "Idris2 (15 modules)" + "Zig (12 exports)" | "17 in `idaptik-ums/src/abi/` + 1 in `src/abi/Types.idr`" + "11 source files, 12 C-ABI exports" | | `EXPLAINME.adoc` | Same counts; root `src/abi/Types.idr` undocumented in the file map | Same corrections + file-map entry for the root main-game ABI module | | `PROOF-NEEDS.md` | Path `src/abi/*.idr` was right for one file, missed the 17 UMS modules entirely; no layer classification | Full L1/L2/L3/L4 classification + echo-types verdict recorded | | `PANIC-ATTACK-ANALYSIS-SUMMARY.md` | Looked authoritative but dated 2026-03-20, well before the 2026-05-26 panic-attack re-scan + the PR #115 cleanup | Marked as historical baseline pending re-run after PR #115 lands | ## Machine-readable corrections `0-AI-MANIFEST.a2ml`: | Key | Was | Now | Reason | |---|---|---|---| | `dev-port` | `8080` | `1984` | Matches `vite.config.js` `server.port: 1984, strictPort: true`. Playwright config also corrected in PR #114 to align with this. | | `escape-hatch` (canonical-location) | `escape-hatch/` | `idaptik-developers/src/escape-hatch/` | The top-level path was a phantom — escape-hatch only lives under `idaptik-developers/src/`. Confirmed via repo tree walk. | | `modding-studio` | `Tauri 2 (idaptik-ums)` | `Gossamer (idaptik-ums) — Ephapax-based webview shell; replaced Tauri` | Matches `.machine_readable/6a2/STATE.a2ml` line 13 which already recorded the Tauri → Gossamer pivot. | | Tier-0 ref to `.claude/CLAUDE.md` | Listed in `[context-tiers]` | Removed | File does not exist in the repo (404 from gh api). | ## Provenance `CHANGELOG.md` had no entry for any 2026-04, 2026-05, or 2026-06 work — last entry was 2026-03-14. Backfilled the 2026-06-01 block covering PR #112 (baseline sweep), PR #114 (Playwright fundamental fix), PR #115 (Track C security cleanup), issue #116 (idaptik-ums .res corruption), and the echo-types audit. Future sessions inherit this as the seam. ## Echo-types audit Per the 2026-06-01 owner directive "every proof in ephapax (and any sibling repo with an echo-types link) must first audit `hyperpolymath/echo-types`, reuse if applicable… L1/L4-only obligations audit-and-record-as-not-relevant": - 17 Idris2 modules in `idaptik-ums/src/abi/` + 1 root `src/abi/Types.idr` + ProvenBridge.idr's dependency on `proven` — all classified - 17 modules L1 (region-local validation, entity placement, IP-reference integrity, level-data invariants); 1 module L4 (`Multiplayer.idr` — asymmetric co-op via enums + records, no temporal echo claims); zero L3 - Zero hits for "echo"/"Echo" in idaptik codebase; zero echo-types links in the `proven` dependency surface idaptik uses - **Verdict: RECORD-AS-NOT-RELEVANT** — recorded in PROOF-NEEDS.md so future sessions don't re-derive the audit ## Subagent reports backing this PR - `a22e2f5` — docs truthfulness audit (14 files surveyed) - `aa58c61` — idaptik-ums `.res` corruption sweep (10/11 corrupt; filed as #116) - `af5fac9` — cross-estate idaptik reference audit (3 stale refs identified) - `a0b4a4e` — echo-types layer classification (per-module verdict above) ## No risk to LIVE This PR only touches documentation files. No code, no CI workflow, no `rescript.json`/`deno.json`/`vite.config.js`. Builds and tests are not affected. ## Test plan - [x] All 6 files committed are GPG-signed + DCO-signed-off - [x] `git diff` confirms only doc files modified - [ ] No required-check regression (all 16 required-on-main checks should pass — only doc changes) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Closes the fundamental Playwright infrastructure fix recipe filed in idaptik#113. The CI workflow has been red on
mainsince 2026-05-02; this PR moves it from "never runs" to "runs end-to-end". The remaining test failures are a separate game-rendering issue tracked at #118.Scope: Infrastructure-only
This PR's commits resolve four distinct infrastructure layers that compounded into "Playwright never runs":
vite.config.jsoptimizeDeps.include@src/...bare specifiers (no matching alias was configured)vite.config.jsoptimizeDeps.entriesindex.htmlso vite doesn't crawlidaptik-ums/index.html(Tauri webview entry, broken per #116)tools/compat-testing/playwright.config.jsbaseURL+webServer.port1984(was8080, vite isstrictPortso it never bound)tools/compat-testing/playwright.config.jstestDir./tests(was./tools/compat-testing/tests— doubled whenworking-directory: tools/compat-testing)Plus three secondary fixes:
e2e-playwright.ymlpush+pull_requestpath filters made symmetric and extended to covervite.config.js+idaptik-ums/**so the workflow can self-validate when those files are modified in a PRdeno task res:buildstep in the workflow no longer soft-fails (|| echo "..."removed — masked real ReScript build breaks)Signed-off-byVerification
Before this PR (on
main): every Playwright run since 2026-05-02 failed withError: Timed out waiting 60000ms from config.webServer— vite couldn't boot due to the@src/unresolved-import error, then the port mismatch hid behind the same timeout.After this PR: vite boots cleanly, Playwright connects to
http://localhost:1984, tests execute and either pass, skip, or fail with actionable errors (no more 60s opaque timeout).Known: tests still fail (filed as #118)
17 of 19 tests fail with
TimeoutError: waiting for locator('#pixi-container canvas')— PixiJS doesn't mount its canvas in the CI environment. This is a separate game-rendering issue, not infrastructure. Filed as #118 with full investigation recipe.Playwright is NOT in idaptik's required-on-main checks list (verified via
gh api repos/hyperpolymath/idaptik/branches/main/protection), so its red doesn't block PR merges. The workflow's job is now to produce signal — which it finally does, via the actionable canvas-mount failures pointing at #118.Why surface this as a follow-up rather than chase it here
Per the issue #113 acceptance criteria, the PR's goal is "make Playwright run". The game-rendering layer (PixiJS bootstrap, AffineScript-TEA migration interaction, wasm router init) is orthogonal to Playwright infrastructure — debugging it could be days of work touching code outside this PR's scope. Landing the infrastructure fix unblocks the next session's investigation of #118 against a working harness.
Closes
closes #113
Follow-ups filed
idaptik-ums/src/editor/*.rescorruption (10/11 files are misnamed compiled.res.mjsoutputs); surfaced during this PR's investigationTest plan
deno task dev:vite)🤖 Generated with Claude Code