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* () {