import { expect, test } from "@playwright/test"; test("M9-04 freezes Curve topology operators and budgets before Main or UI exposure", async ({ page }) => { await page.goto("/"); const result = await page.evaluate(() => new Promise((resolve, reject) => { const worker = new Worker("/src/workers/curve-topology-contract-test.worker.ts", { type: "module" }); worker.onmessage = (event) => { worker.terminate(); resolve(event.data); }; worker.onerror = (event) => { worker.terminate(); reject(new Error(event.message)); }; worker.postMessage(null); })); expect(result).toMatchObject({ operatorCount: 14, blockedCount: 13, readyOperators: ["TOGGLE_CYCLIC"], sourceAuthority: "blender-5.2.0/source/blender/editors/curve/curve_ops.cc", atomicMainTransaction: true, unknownCode: "NON_MESH_TOPOLOGY_EDIT_UNSUPPORTED", staleCode: "REVISION_CONFLICT", budgetCode: "NON_MESH_DATA_BUDGET_EXCEEDED", stage: "ONE_VERIFIED_OPERATOR", }); expect(result.accepted).toMatchObject({ operator: "ADD_SPLINE", outputSplineCount: 2, outputPointCount: 4 }); });