From f10d9e1d95f996ba8fe95fa257036a16b2206b51 Mon Sep 17 00:00:00 2001 From: Lann Martin Date: Sat, 22 Aug 2026 19:21:30 -0400 Subject: [PATCH] polyengine 0.4.0; @polymorph/websocket 0.4.0 Bump both import maps to the polyengine v0.4.0 release and the runner core to @polymorph/test 0.2.1 (JSR pin, @jsr/polymorph__test npm tree, cargo revs and CI action refs all naming the one polymorph-test v0.2.1 release, 9f9e4d5). A19 fallout: upstream renamed the err-result brand key polyengine.witError/1 -> polyengine.componentException/1; the hand-rolled foreign-copy brand test updates its literal key exactly as its own comment demands (a brand bump upstream must fail here and force the recognition sites to be revisited). Package version 0.4.0: the published deno.json's @polyengine/runtime range moves to ^0.4.0, which is a resolution-level break for consumers holding 0.3.0 pins. Gates: exam-polyengine, runner-js-pin-check, polyengine-module-check (14/14), just check (rust legs), all four conformance rows (220 results, 0 failing), matrix-check clean. check-js and wpt::parity fail identically on unmodified origin/main (Node 24 ESM/CJS resolution, pre-existing). --- .github/workflows/ci.yml | 4 +- Cargo.lock | 14 ++--- Cargo.toml | 4 +- conformance/driver-ct/polyengine/deno.json | 12 ++-- conformance/driver-ct/polyengine/deno.lock | 56 +++++++++---------- conformance/driver-ct/polyengine/package.json | 2 +- .../driver-ct/polyengine/pnpm-lock.yaml | 10 ++-- js/polyengine/deno.json | 4 +- js/polyengine/deno.lock | 14 ++--- js/polyengine/tests/websocket_test.ts | 4 +- 10 files changed, 62 insertions(+), 62 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ae2aa5..a348269 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -51,7 +51,7 @@ jobs: # Owns the rev derivation, the rev-keyed tools cache, the # install, and the pins gate; the justfile's _ct-tools # recognizes the stamped install and does not repeat it. - uses: polymorph-components/polymorph-test/actions/setup@38bfedf2b989522b82ddce5320fc1557a2f61461 + uses: polymorph-components/polymorph-test/actions/setup@9f9e4d544b90e3321ac0572be92c57339b963d34 with: tools: component-test-cli - uses: pnpm/action-setup@v4 @@ -131,7 +131,7 @@ jobs: # against the pin. - name: Publish the conformance matrix if: always() && hashFiles('conformance/driver-ct/results/*.jsonl') != '' - uses: polymorph-components/polymorph-test/actions/aggregate@38bfedf2b989522b82ddce5320fc1557a2f61461 + uses: polymorph-components/polymorph-test/actions/aggregate@9f9e4d544b90e3321ac0572be92c57339b963d34 with: lock: conformance/guest-ct/tests.lock manifest: conformance/driver-ct/targets.toml diff --git a/Cargo.lock b/Cargo.lock index 46a07e2..1c00d18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -180,7 +180,7 @@ dependencies = [ [[package]] name = "component-test-core" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "arcstr", "serde", @@ -189,7 +189,7 @@ dependencies = [ [[package]] name = "component-test-formats" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "anyhow", "component-test-core", @@ -204,7 +204,7 @@ dependencies = [ [[package]] name = "component-test-results" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "anyhow", "component-test-core", @@ -215,7 +215,7 @@ dependencies = [ [[package]] name = "component-test-runner" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "anyhow", "component-test-core", @@ -231,7 +231,7 @@ dependencies = [ [[package]] name = "component-test-sdk" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "component-test-core", "component-test-sdk-macro", @@ -243,7 +243,7 @@ dependencies = [ [[package]] name = "component-test-sdk-macro" version = "0.1.1" -source = "git+https://github.com/polymorph-components/polymorph-test?rev=38bfedf2b989522b82ddce5320fc1557a2f61461#38bfedf2b989522b82ddce5320fc1557a2f61461" +source = "git+https://github.com/polymorph-components/polymorph-test?rev=9f9e4d544b90e3321ac0572be92c57339b963d34#9f9e4d544b90e3321ac0572be92c57339b963d34" dependencies = [ "component-test-core", "proc-macro2", @@ -1814,7 +1814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", diff --git a/Cargo.toml b/Cargo.toml index eac62a3..16a4ac5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,8 @@ default-members = [ # conformance/driver-ct/polyengine/package.json and `pnpm --dir # conformance/driver-ct/polyengine install` — the cargo pins gate, the # runner-js pin gate, and the CI ref guard fail on skew. -component-test-sdk = { git = "https://github.com/polymorph-components/polymorph-test", rev = "38bfedf2b989522b82ddce5320fc1557a2f61461" } -component-test-runner = { git = "https://github.com/polymorph-components/polymorph-test", rev = "38bfedf2b989522b82ddce5320fc1557a2f61461" } +component-test-sdk = { git = "https://github.com/polymorph-components/polymorph-test", rev = "9f9e4d544b90e3321ac0572be92c57339b963d34" } +component-test-runner = { git = "https://github.com/polymorph-components/polymorph-test", rev = "9f9e4d544b90e3321ac0572be92c57339b963d34" } anyhow = "1" bytes = "1" futures = "0.3" diff --git a/conformance/driver-ct/polyengine/deno.json b/conformance/driver-ct/polyengine/deno.json index 17b8abf..6428050 100644 --- a/conformance/driver-ct/polyengine/deno.json +++ b/conformance/driver-ct/polyengine/deno.json @@ -1,12 +1,12 @@ { "//": "MODULE-IDENTITY CONSTRAINT: polyengine's wasi module imports @polyengine/runtime/embedder by bare specifier internally. The @polyengine/runtime/embedder entry here must resolve to the IDENTICAL @polyengine/runtime version as ../../../js/polyengine/deno.json's caret range (in both deno.locks), or the embedder module loads twice: value recognition survives that (websocket.ts recognizes polyengine values by @polyengine/protocol brand predicates, not instanceof), but a second copy splits the runtime/translator plan-format pairing, and stateful handles (streams/futures) minted by one copy are refused by the other. Pin story: exact-pinned JSR releases (caret-honest upstream: within a minor line releases stay compatible, breaking bumps the minor; per-commit `-pre.g` prereleases exist between releases — pin exactly); @polyengine/translator ships the translator wasm for that SAME commit; deno.lock carries integrity, --frozen enforced everywhere; one version repo-wide is asserted by the pin gate (justfile: exam-polyengine).", "imports": { - "@polyengine/ct-runner": "jsr:@polyengine/ct-runner@0.3.0", - "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@0.3.0/embedder", - "@polyengine/runtime/shim": "jsr:@polyengine/runtime@0.3.0/shim", - "@polyengine/wasi": "jsr:@polyengine/wasi@0.3.0", - "@polyengine/translator": "jsr:@polyengine/translator@0.3.0", - "@polymorph/test/polyengine-worker-main": "jsr:@polymorph/test@0.2.0/polyengine-worker-main" + "@polyengine/ct-runner": "jsr:@polyengine/ct-runner@0.4.0", + "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@0.4.0/embedder", + "@polyengine/runtime/shim": "jsr:@polyengine/runtime@0.4.0/shim", + "@polyengine/wasi": "jsr:@polyengine/wasi@0.4.0", + "@polyengine/translator": "jsr:@polyengine/translator@0.4.0", + "@polymorph/test/polyengine-worker-main": "jsr:@polymorph/test@0.2.1/polyengine-worker-main" }, "minimumDependencyAge": { "age": "P1D", "exclude": ["jsr:@polyengine/*", "jsr:@polymorph/*"] }, "tasks": { diff --git a/conformance/driver-ct/polyengine/deno.lock b/conformance/driver-ct/polyengine/deno.lock index 8a304c2..8c87cab 100644 --- a/conformance/driver-ct/polyengine/deno.lock +++ b/conformance/driver-ct/polyengine/deno.lock @@ -1,58 +1,58 @@ { "version": "5", "specifiers": { - "jsr:@polyengine/ct-runner@0.3.0": "0.3.0", - "jsr:@polyengine/protocol@0.1": "0.1.0", - "jsr:@polyengine/runtime@0.3": "0.3.0", - "jsr:@polyengine/runtime@0.3.0": "0.3.0", - "jsr:@polyengine/translator@0.3.0": "0.3.0", - "jsr:@polyengine/wasi@0.3.0": "0.3.0", - "jsr:@polymorph/test@0.2.0": "0.2.0" + "jsr:@polyengine/ct-runner@0.4.0": "0.4.0", + "jsr:@polyengine/protocol@~0.2.1": "0.2.1", + "jsr:@polyengine/runtime@0.4": "0.4.0", + "jsr:@polyengine/runtime@0.4.0": "0.4.0", + "jsr:@polyengine/translator@0.4.0": "0.4.0", + "jsr:@polyengine/wasi@0.4.0": "0.4.0", + "jsr:@polymorph/test@0.2.1": "0.2.1" }, "jsr": { - "@polyengine/ct-runner@0.3.0": { - "integrity": "d58720da80bf29cb6a975e4750a53bbe9b75ab6e3bde1340299ed69726702174", + "@polyengine/ct-runner@0.4.0": { + "integrity": "a309b2cfc20549068718cea6813ec1553a5c2b2700eb46855582a21116fbc63a", "dependencies": [ - "jsr:@polyengine/runtime@0.3" + "jsr:@polyengine/runtime@0.4" ] }, - "@polyengine/protocol@0.1.0": { - "integrity": "0c97f34166f22ba55e7b084148df96e47aebe47cd9dd13930057759c9161bb1c" + "@polyengine/protocol@0.2.1": { + "integrity": "857bef84afedc414d47daedf203448f72e8803cf96301afb783b1ac975f3dcec" }, - "@polyengine/runtime@0.3.0": { - "integrity": "97d7648c104dd0f08b4d10e1ed0117ab0cb5243db68c139f1f3df25755ed4e60", + "@polyengine/runtime@0.4.0": { + "integrity": "d34a59d9df58bd48541483619d1987319d8aad4d2e0f3775890177ffb0878a5a", "dependencies": [ "jsr:@polyengine/protocol" ] }, - "@polyengine/translator@0.3.0": { - "integrity": "1d9fcd09d360850bc08927ed1cf8124d50a0fed09ed8c80f354a6d3aedfcad25", + "@polyengine/translator@0.4.0": { + "integrity": "227cf2f92a5b11bce6155742b2a42cf14a642a89d3867ffd1789d6e6e8d49fdc", "dependencies": [ - "jsr:@polyengine/runtime@0.3" + "jsr:@polyengine/runtime@0.4" ] }, - "@polyengine/wasi@0.3.0": { - "integrity": "991adfdd39f795f94bba91a523322b88d45ff42800669b5b472356676e3c97e7", + "@polyengine/wasi@0.4.0": { + "integrity": "b946443255e98cb6156237de90f051af7e483d2afdc0d721bdba64392cdbd896", "dependencies": [ "jsr:@polyengine/protocol", - "jsr:@polyengine/runtime@0.3" + "jsr:@polyengine/runtime@0.4" ] }, - "@polymorph/test@0.2.0": { - "integrity": "a0d716133b0221cd0efd4f28c5c3d85d6e3ac330207d15889a6a981c8d0c5e37" + "@polymorph/test@0.2.1": { + "integrity": "1934b15f69d2c5f733cb42176aee8899f6da507a30ba1e25fad942fb82c0546e" } }, "workspace": { "dependencies": [ - "jsr:@polyengine/ct-runner@0.3.0", - "jsr:@polyengine/runtime@0.3.0", - "jsr:@polyengine/translator@0.3.0", - "jsr:@polyengine/wasi@0.3.0", - "jsr:@polymorph/test@0.2.0" + "jsr:@polyengine/ct-runner@0.4.0", + "jsr:@polyengine/runtime@0.4.0", + "jsr:@polyengine/translator@0.4.0", + "jsr:@polyengine/wasi@0.4.0", + "jsr:@polymorph/test@0.2.1" ], "packageJson": { "dependencies": [ - "npm:@jsr/polymorph__test@0.2.0", + "npm:@jsr/polymorph__test@0.2.1", "npm:playwright-core@^1.61.1" ] } diff --git a/conformance/driver-ct/polyengine/package.json b/conformance/driver-ct/polyengine/package.json index 57c3247..edf2892 100644 --- a/conformance/driver-ct/polyengine/package.json +++ b/conformance/driver-ct/polyengine/package.json @@ -4,7 +4,7 @@ "type": "module", "description": "Node driver + bundled worker inputs for the polyengine-browser conformance row: the suite runtime-linked inside headless Chromium with this repo's polyengine host module, through the upstream page driver and polyengine worker-main.", "dependencies": { - "@jsr/polymorph__test": "0.2.0", + "@jsr/polymorph__test": "0.2.1", "playwright-core": "^1.61.1" } } diff --git a/conformance/driver-ct/polyengine/pnpm-lock.yaml b/conformance/driver-ct/polyengine/pnpm-lock.yaml index 76c9a85..091e1b0 100644 --- a/conformance/driver-ct/polyengine/pnpm-lock.yaml +++ b/conformance/driver-ct/polyengine/pnpm-lock.yaml @@ -9,16 +9,16 @@ importers: .: dependencies: '@jsr/polymorph__test': - specifier: 0.2.0 - version: 0.2.0 + specifier: 0.2.1 + version: 0.2.1 playwright-core: specifier: ^1.61.1 version: 1.62.1 packages: - '@jsr/polymorph__test@0.2.0': - resolution: {integrity: sha512-fM1IYIy4HnBJm2IlZn/3Gk0d9AmQZz9Kg6JkY0E+fPAhFb2hrAW+4G7TCRQsJ4PStl0rzuBqF9VI6w30f7xCMA==, tarball: https://npm.jsr.io/~/11/@jsr/polymorph__test/0.2.0.tgz} + '@jsr/polymorph__test@0.2.1': + resolution: {integrity: sha512-5bkpwmjHp8Hjk69ADkQp1oo4CHyiPT2BAtQWbi7QrbTkrrwIDOn73JzsmZhzWT4mvzkWEL3Q4u1BSOra3sVBLQ==, tarball: https://npm.jsr.io/~/11/@jsr/polymorph__test/0.2.1.tgz} playwright-core@1.62.1: resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} @@ -27,6 +27,6 @@ packages: snapshots: - '@jsr/polymorph__test@0.2.0': {} + '@jsr/polymorph__test@0.2.1': {} playwright-core@1.62.1: {} diff --git a/js/polyengine/deno.json b/js/polyengine/deno.json index 00809f7..df8684b 100644 --- a/js/polyengine/deno.json +++ b/js/polyengine/deno.json @@ -1,11 +1,11 @@ { "name": "@polymorph/websocket", - "version": "0.3.0", + "version": "0.4.0", "license": "Apache-2.0", "exports": "./websocket.ts", "//": "MODULE-IDENTITY CONSTRAINT: polyengine's wasi module imports @polyengine/runtime/embedder by bare specifier internally. This file's @polyengine/runtime range and conformance/driver-ct/polyengine/deno.json's exact pin must resolve to the IDENTICAL @polyengine/runtime version in both deno.locks, or the embedder module loads twice: value recognition survives that (websocket.ts recognizes polyengine values by @polyengine/protocol brand predicates, not instanceof), but a second copy splits the runtime/translator plan-format pairing, and stateful handles (streams/futures) minted by one copy are refused by the other. Pin story: this published package takes a caret range (caret-honest upstream: within a minor line releases stay compatible, breaking bumps the minor); the repo-internal conformance harness exact-pins instead so its lock is the single source of truth for the resolved version; deno.lock carries integrity, --frozen enforced everywhere; one RESOLVED version repo-wide (across both locks) is asserted by the pin gate (justfile: exam-polyengine).", "imports": { - "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@^0.3.0/embedder" + "@polyengine/runtime/embedder": "jsr:@polyengine/runtime@^0.4.0/embedder" }, "minimumDependencyAge": { "age": "P1D", "exclude": ["jsr:@polyengine/*"] }, "compilerOptions": { diff --git a/js/polyengine/deno.lock b/js/polyengine/deno.lock index eb303c8..bfb9aef 100644 --- a/js/polyengine/deno.lock +++ b/js/polyengine/deno.lock @@ -1,17 +1,17 @@ { "version": "5", "specifiers": { - "jsr:@polyengine/protocol@0.1": "0.1.0", - "jsr:@polyengine/runtime@0.3": "0.3.0", + "jsr:@polyengine/protocol@~0.2.1": "0.2.1", + "jsr:@polyengine/runtime@0.4": "0.4.0", "jsr:@std/assert@1": "1.0.19", "jsr:@std/internal@^1.0.12": "1.0.14" }, "jsr": { - "@polyengine/protocol@0.1.0": { - "integrity": "0c97f34166f22ba55e7b084148df96e47aebe47cd9dd13930057759c9161bb1c" + "@polyengine/protocol@0.2.1": { + "integrity": "857bef84afedc414d47daedf203448f72e8803cf96301afb783b1ac975f3dcec" }, - "@polyengine/runtime@0.3.0": { - "integrity": "97d7648c104dd0f08b4d10e1ed0117ab0cb5243db68c139f1f3df25755ed4e60", + "@polyengine/runtime@0.4.0": { + "integrity": "d34a59d9df58bd48541483619d1987319d8aad4d2e0f3775890177ffb0878a5a", "dependencies": [ "jsr:@polyengine/protocol" ] @@ -28,7 +28,7 @@ }, "workspace": { "dependencies": [ - "jsr:@polyengine/runtime@0.3" + "jsr:@polyengine/runtime@0.4" ] } } diff --git a/js/polyengine/tests/websocket_test.ts b/js/polyengine/tests/websocket_test.ts index 96dbc9b..0f7b171 100644 --- a/js/polyengine/tests/websocket_test.ts +++ b/js/polyengine/tests/websocket_test.ts @@ -223,13 +223,13 @@ Deno.test("receive-via-stream: single-use; pending receive is rejected", async ( // recognition sites to be revisited. (The `deltic.*` spellings were // retired by upstream's own A18 project rename — pre-A18 copies and // hand-rolled `deltic.*` brands do NOT interoperate with these by design; -// the `ComponentException` brand is now `polyengine.witError/1`.) +// the `ComponentException` brand is now `polyengine.componentException/1` (A19).) Deno.test("send-via-stream: a foreign-copy ComponentException's payload passes through the error wrap", async () => { await withServer(async (s) => { const ws = await Websocket.connect(`${s.base}/echo`, []); const foreign = Object.assign(new Error("minted elsewhere"), { - [Symbol.for("polyengine.witError/1")]: true, + [Symbol.for("polyengine.componentException/1")]: true, payload: { kind: "invalid-argument", value: "minted by another copy" }, }); const producer = (async function* () {